기반 모델: 서포트 벡터 머신과 애드보스트의 통합적 시계열 예측
시계열 데이터는 비선형 패턴을 내포하고 있어 단일 모델로는 정확한 예측이 어려운 경우가 많습니다. 본 문서에서는 Adaboost 기반의 다중 서포트 벡터 머신 구조를 활용하여, 과적합을 억제하면서도 복잡한 시간 의존성 패턴을 잘 포착하는 예측 시스템을 제안합니다.
데이터 전처리: 슬라이딩 윈도우 변환 및 정규화
원시 시계열 데이터는 일정 길이의 윈도우로 분할되어야 합니다. 예를 들어, 이전 5개 시점의 값을 사용해 다음 시점의 값을 예측한다면, 입력 데이터는 다음과 같이 구성됩니다:
input = [1 2 3 4 5;
2 3 4 5 6];
target = [6; 7];
모델 학습에 앞서 입력값은 정규화 처리가 필수입니다. 이를 위해 mapminmax 함수를 사용하여 최소-최대 스케일링을 수행합니다:
[input_norm, ps] = mapminmax(input);
target_norm = mapminmax('apply', target, ps);
Adaboost 프레임워크 구현: 가중치 업데이트와 모델 적응
각 반복 단계에서 개별 서포트 벡터 머신 모델은 현재까지의 오차를 기반으로 가중치를 조정합니다. 주요 절차는 다음과 같습니다:
for t = 1:T
% RBF 커널을 사용한 SVM 모델 학습
model = svmtrain(weights, train_data, ['-s 3 -t 2 -c ' num2str(C)]);
% 검증 세트에서 예측 수행
[pred, ~, ~] = svmpredict(val_target, val_data, model);
% 오류율 계산 (예측 방향만 고려)
error_rate = sum(weights .* (pred ~= real_label)) / sum(weights);
% 가중치 조정 계수 계산
alpha = 0.5 * log((1 - error_rate) / max(error_rate, eps));
% 샘플 가중치 업데이트
weights = weights .* exp(-alpha * pred .* real_label);
weights = weights / sum(weights);
end
시간적 구조 유지: 슬라이딩 윈도우 교차검증
전통적인 K-겹 교차검증은 시계열의 순서성을 파괴하므로, 적절한 대안이 필요합니다. 여기서는 시간 순서를 유지하면서 하이퍼파라미터 탐색을 위한 슬라이딩 윈도우 기반 검증을 적용합니다:
- 학습: 1–100일
- 검증: 101–120일
- 테스트: 121–150일
이러한 구조에서 C와 gamma의 조합을 그리드 탐색하며, 효율성을 높이기 위해 먼저 넓은 범위의 탐색 후 세밀한 조정을 수행합니다:
[C_grid, gamma_grid] = meshgrid(2.^(-5:2:15), 2.^(-15:2:3));
cv_acc = zeros(size(C_grid));
parfor i = 1:numel(C_grid)
acc = svm_cross_validation(train_data, C_grid(i), gamma_grid(i));
cv_acc(i) = mean(acc);
end
[~, idx] = max(cv_acc(:));
모델 통합: 확률 출력 기반 동적 가중 평균
단순한 하드 결정보다는 각 기저 모델의 예측 확률을 활용하면 더 안정적인 결과를 얻을 수 있습니다. -b 1 옵션을 활성화하여 확률 출력을 얻고, 가중합으로 최종 예측값을 산출합니다:
final_pred = zeros(size(test_data, 1), 1);
for m = 1:length(models)
[~, ~, prob] = svmpredict(test_data, models{m}, '-b 1');
final_pred = final_pred + alpha(m) * prob(:, 1);
end
실제 성능 평가 및 제약사항
실제 플랫폼의 일간 주문량 데이터를 대상으로 실험한 결과, 기존의 단순 이동평균 모델 대비 MAE가 37% 감소했으며, 극단값 예측 오차 또한 15% 이내로 제어되었습니다. 다만, 시계열에 강한 주기성이 존재할 경우, 사전에 STL 분해를 수행한 후 각 구성 요소에 맞춤형 모델링을 하는 것이 효과적입니다.
주의사항 및 피해야 할 함정
- Libsvm의 Windows 버전은 특징 수가 10,000 이상인 경우 불안정할 수 있음
- Adaboost 반복 횟수는 50회를 넘기지 않는 것이 좋음 (경험적 한계)
- 모든 예측값이 동일한 방향으로 치우치는 현상 발생 시,
weights update formula의 부호 오류 확인 필요
본 논문의 전체 코드와 테스트 데이터는 공개된 리포지토리에서 확인 가능하며, Matlab 2018B 이상 및 Windows 64bit 환경에서 실행 가능합니다. 다음 편에서는 이 구조를 LSTM 기반 아키텍처로 확장해, 전통적 알고리즘에 딥러닝의 유연성을 접목하는 방법을 소개할 예정입니다.