← 7. 시계열

시계열 백테스팅과 롤링 오리진 검증

과거에 잘 맞았는지가 아니라, 그때 알 수 있던 것만으로 맞혔는지를 봅니다.

롤링 오리진MAE·RMSE·MASE예측구간 포함률데이터 누수

최종 홀드아웃폴드 1학습 1~120주121~124폴드 2학습 1~128주129~132폴드 3학습 1~136주137~140폴드 4학습 1~144주145~1481주53주105주156주학습평가 4주홀드아웃 153~156주
SECTION 1

실제 사례: 냉장물류센터의 주간 전력 사용량

한 냉장물류센터가 향후 4주간의 전력 수요를 예측해 전력 구매계획을 세우려고 합니다.

운영팀은 최근 156주간의 주간 전력 사용량을 확보했으며, 계절적 수요와 설비 가동 패턴이 예측에 영향을 미칠 수 있다고 판단했습니다.

항목내용
분석 대상냉장물류센터 1곳
관측 기간연속된 156주
종속변수주간 전력 사용량(kWh)
예측기간향후 4주
후보 모형계절적 나이브, ETS, SARIMA
개발 구간1~152주
최종 홀드아웃153~156주
7,5008,0008,500홀드아웃 153~156주개발 1~152주1주53주105주156주kWh
주간 전력 사용량

여기서 계절적 나이브(Seasonal Naive)는 이전 계절의 같은 위치에 해당하는 값을 그대로 예측하는 기준 모형입니다. 주간 자료에 연간 계절성이 있다고 가정한다면 52주 전 값을 사용하는 방식이 한 가지 예입니다. 다만 실제 계절 주기는 데이터의 생성 과정에 따라 선택해야 합니다.

연구 질문은 "실제 예측 시점에 확보할 수 있는 자료만 사용했을 때, 어떤 모형이 향후 4주간 전력 사용량을 가장 안정적으로 예측하는가?"입니다.

SECTION 2

학습·검증·최종 평가 구간은 어떻게 나누나요?

전체 156주를 처음부터 모두 사용해 모형을 고른다면 최종 성능을 독립적으로 확인하기 어렵습니다.

따라서 마지막 4주인 153~156주는 최종 홀드아웃으로 남겨두고, 1~152주만 사용해 후보 모형과 설정을 결정합니다.

개발 구간 1~152주홀드아웃 153~156주1주53주105주탐색 · 설정 · 백테스팅최종 평가 1회
구간 분할

개발 구간 안에서 여러 차례 백테스팅을 수행한 뒤, 가장 적절한 모형을 선택하고 1~152주 전체로 다시 학습합니다. 그 후 처음으로 153~156주를 예측해 최종 점수를 계산합니다. 이 최종 결과를 보고 다시 모델이나 설정을 바꾼다면 홀드아웃은 더 이상 독립적인 평가용 자료가 아닙니다.

구간용도
1~152주모형 탐색·설정·백테스팅
153~156주한 번만 사용하는 최종 평가

최종 홀드아웃은 단순히 마지막에 떼어놓은 데이터가 아니라 모형 선택에 사용하지 않기로 약속한 자료라는 점이 중요합니다.

SECTION 3

롤링 오리진 백테스팅은 어떻게 진행하나요?

롤링 오리진(Rolling-Origin) 백테스팅에서는 예측 시작점을 시간순으로 이동하며 매번 모형을 다시 학습하고 미래 구간을 예측합니다.

예를 들어 첫 번째 검증에서는 120주까지 학습한 뒤 121~124주를 예측하고, 두 번째 검증에서는 128주까지 학습한 뒤 129~132주를 예측할 수 있습니다.

폴드 1학습 1~120주121~124폴드 2학습 1~128주129~132폴드 3학습 1~136주137~140폴드 4학습 1~144주145~148149~1521주40주80주120주152주학습평가 4주최종 재학습에만 사용
롤링 오리진 4개 폴드
폴드학습 구간평가 구간예측기간
11~120주121~124주4주
21~128주129~132주4주
31~136주137~140주4주
41~144주145~148주4주

모든 폴드는 학습 데이터보다 이후의 4주를 예측합니다. 149~152주는 개발 구간에 남아 있으므로 최종 모형을 재학습할 때 사용할 수 있으며, 153~156주의 최종 홀드아웃은 백테스팅에 포함하지 않습니다.

폴드 사이에 사용하지 않은 주가 있다고 해서 반드시 잘못된 것은 아닙니다. 예측 시작점을 얼마나 자주 이동할지는 계산 비용, 예측 주기, 데이터의 길이를 고려해 결정합니다. 예측 성능을 더 세밀하게 평가하려면 시작점을 매주 이동하는 방식도 가능합니다.

SECTION 4

확장 학습창과 고정 학습창은 어떻게 다른가요?

학습 구간을 이동시키는 방식에는 확장 학습창(Expanding Window)과 고정 길이 학습창(Sliding 또는 Rolling Window)이 있습니다.

확장 학습창1주1주1~120주 → 1~128주고정 학습창17주25주17~120주 → 25~128주평가 4주
확장 학습창과 고정 학습창

확장 학습창은 1~120주, 1~128주처럼 새로운 자료가 생길 때마다 학습 구간을 늘립니다. 오래된 정보도 계속 유용하다면 많은 관측값을 활용할 수 있다는 장점이 있습니다.

반면 고정 학습창은 최근 104주처럼 일정한 길이만 유지하면서 창을 앞으로 이동시킵니다. 예를 들어 첫 번째 학습 구간이 17~120주라면 다음에는 25~128주를 사용할 수 있습니다. 운영 방식이 최근에 크게 변해 오래된 자료가 현재 상황을 잘 설명하지 못할 때 유용할 수 있습니다.

방식예시특징
확장 학습창1~120주 → 1~128주과거 자료가 누적됨
고정 학습창17~120주 → 25~128주최근 일정 기간에 집중

어느 방식이 항상 우수한 것은 아닙니다. 실제 예측 시스템이 매번 어떤 자료로 재학습되는지에 맞춰 검증 방식도 설정해야 합니다.

SECTION 5

MAE·RMSE·MAPE는 무엇이 다른가요?

예측 성능은 실제값과 예측값의 차이인 예측오차(Forecast Error)를 이용해 평가합니다.

가장 많이 사용하는 지표 중에는 평균절대오차(MAE), 평균제곱근오차(RMSE), 평균절대백분율오차(MAPE)가 있습니다. MAE는 오차의 절댓값을 평균한 값입니다.

MAE = (1/n) Σ |yt − ŷt|

RMSE = √( (1/n) Σ (yt − ŷt)2 )

0-601주+1402주-353주+2104주-955주+556주-1807주+708주오차 kWhMAE105.6 kWhRMSE121.4 kWhMAPE1.29%
MAE·RMSE·MAPE 비교

RMSE는 오차를 제곱한 뒤 평균하고 제곱근을 취합니다. 큰 오차에 상대적으로 더 큰 불이익을 주므로 전력 부족이 크게 발생하는 상황을 특히 중요하게 평가하고 싶을 때 참고할 수 있습니다.

MAPE는 실제값 대비 오차를 백분율로 나타냅니다. 하지만 실제값이 0이면 정의되지 않으며, 0에 가까울 때 지나치게 커질 수 있습니다. 이 때문에 모든 시계열에서 적절한 지표는 아닙니다.

냉장물류센터의 전력 사용량은 kWh 단위이므로 MAE와 RMSE를 해석하기 쉽습니다. 서로 규모가 다른 여러 센터를 비교한다면 MASE 같은 규모 조정 지표도 검토할 수 있습니다.

SECTION 6

MASE는 언제 사용하나요?

평균절대척도오차(Mean Absolute Scaled Error, MASE)는 모형의 MAE를 학습 자료에서 계산한 나이브 기준 예측오차로 나눈 지표입니다.

서로 규모가 다른 시계열의 예측 성능을 비교하는 데 유용합니다. 계절 주기가 m인 시계열의 계절적 MASE는 일반적으로 학습 자료의 m시차 차이를 기준으로 계산합니다.

MASE = [ (1/H) Σ |yh − ŷh| ] ÷ [ (1/(T−m)) Σ |yt − yt−m| ]

분자92 kWh평가 구간 MAE분모151 kWh학습 구간 52주 나이브÷=MASE0.61
MASE 구조

여기서 분모는 평가 구간이 아니라 해당 폴드의 학습 구간에서만 계산해야 합니다. 미래 평가값으로 분모를 계산하면 검증 단계에서 미래 정보를 사용하게 됩니다.

일반적으로 MASE가 1보다 작으면 분모에서 사용한 나이브 기준의 학습 구간 평균 오차보다 작은 예측오차를 기록했다는 뜻입니다. 다만 평가 구간에서 같은 기준 모형을 직접 실행해 얻은 점수와 언제나 동일한 비교는 아니므로 어떤 기준을 사용했는지 명시해야 합니다.

SECTION 7

실제 백테스팅 결과는 어떻게 비교하나요?

세 가지 모형을 네 개 폴드에서 평가했다고 가정해 보겠습니다.

아래 결과는 폴드별 4주 예측 MAE(kWh)입니다.

폴드계절적 나이브ETSSARIMA
111510088
212510895
3130115100
41109785
평균 MAE12010592
80100120140폴드 1폴드 2폴드 3폴드 4MAE kWh계절적 나이브120 kWh평균 MAEETS105 kWh평균 MAESARIMA92 kWh평균 MAE
폴드별 MAE

네 폴드의 평가 기간이 모두 4주로 동일하므로 폴드별 MAE의 산술평균은 전체 평가 관측값 16개에 대한 MAE와 같습니다. SARIMA의 평균 MAE는 92kWh로 가장 낮았고, ETS는 105kWh, 계절적 나이브는 120kWh였습니다.

이 예제에서는 SARIMA가 모든 폴드에서 가장 작은 오차를 기록했습니다. 다만 폴드가 네 개에 불과하므로 점수 차이가 미래에도 동일하게 유지된다고 보장할 수는 없습니다. 특히 특정 계절이나 설비 점검 기간에서 오차가 증가하는지 추가로 살펴볼 필요가 있습니다.

SECTION 8

예측기간별 성능도 확인해야 하나요?

4주를 한꺼번에 예측하는 모형이라면 첫 번째 주의 정확도와 네 번째 주의 정확도가 다를 수 있습니다.

일반적으로 예측기간이 길어질수록 불확실성이 증가할 가능성이 있지만, 실제 오차 패턴은 모형과 데이터에 따라 달라집니다. 따라서 전체 평균 MAE 외에 예측 시차별 오차도 확인하는 것이 좋습니다.

4080120781주 앞882주 앞963주 앞1064주 앞MAE kWh평균 92
예측기간별 오차

예를 들어 각 폴드의 첫 번째 예측 주만 모아 MAE를 계산하고, 두 번째·세 번째·네 번째 주에도 같은 작업을 할 수 있습니다. 이를 통해 운영팀은 '다음 주 수요 예측'에는 충분한 정확도가 있지만 '4주 후 수요 예측'에는 더 큰 여유분이 필요하다는 식으로 활용할 수 있습니다.

또한 실제 운영에서 매주 예측을 갱신한다면 백테스팅도 매주 예측이 갱신되는 상황을 모방해야 합니다. 검증 과정에서 한 번에 4주를 예측했는지, 매주 실제값을 추가해 다시 예측했는지를 혼동해서는 안 됩니다.

SECTION 9

예측구간은 어떻게 평가하나요?

예측값 하나만 제시하면 미래 수요의 불확실성을 충분히 전달하기 어렵습니다.

예측구간(Prediction Interval)은 특정 수준의 불확실성을 반영해 미래 관측값이 포함될 것으로 기대하는 범위를 제공합니다. 예를 들어 다음 주 전력 사용량 예측값이 8,200kWh이고 90% 예측구간이 7,800~8,650kWh라면, 해당 모형은 특정 가정하에서 그 정도 범위의 불확실성을 제시한 것입니다. 이는 실제 사용량이 반드시 해당 구간 안에 들어간다는 뜻은 아닙니다.

7,8008,2008,650점예측 8,200상한 8,650하한 7,80090% 예측구간 · 폭 850 kWh
예측구간 포함률과 폭

백테스팅에서는 예측구간 포함률(Coverage)과 구간 폭(Width)을 함께 살펴볼 수 있습니다. 90% 예측구간이라면 충분히 많은 미래 관측값에 대해 실제값이 약 90% 정도 포함되는지 확인합니다. 하지만 구간이 지나치게 넓으면 실제 의사결정에 도움이 적을 수 있으므로 폭도 중요합니다.

또한 16개 검증 관측값처럼 표본이 적으면 경험적 포함률의 변동이 크므로 작은 차이로 예측구간의 정확성을 단정하지 않아야 합니다. 필요하다면 구간 점수(Interval Score)나 분위수 손실(Pinball Loss) 등을 함께 평가할 수 있습니다.

SECTION 10

시계열 검증에서 데이터 누수는 어떻게 발생하나요?

시간순으로 데이터를 나눴더라도 전처리와 변수 생성 단계에서 데이터 누수가 발생할 수 있습니다.

예를 들어 전체 156주의 평균과 표준편차로 표준화한 뒤 백테스팅을 수행하면 미래 평가 기간의 정보가 학습 단계에 반영됩니다.

결측값 대체, 이상치 기준 계산, 특성 선택, 모형 설정도 각 폴드의 학습 자료 안에서만 결정해야 합니다. 전체 시계열을 사용해 계절성을 분해한 후 미래 시점의 추세값을 설명변수로 사용하는 것도 누수가 될 수 있습니다.

외생변수 역시 마찬가지입니다. 미래의 실제 외부 온도를 예측 당시 알 수 없었다면, 백테스팅에서 미래의 관측 온도를 그대로 입력해서는 안 됩니다. 대신 그 시점에 제공되었을 날씨 예보값을 사용하거나 외생변수 자체를 함께 예측하는 절차가 필요합니다.

반면 이미 확정된 공휴일이나 요일 같은 달력 정보는 미래 시점에도 알 수 있으므로 활용할 수 있습니다. 핵심 기준은 '값이 미래 시점에 해당하는가'가 아니라 예측을 생성한 당시 실제로 알 수 있었는가입니다.

SECTION 11

최종 홀드아웃 점수는 어떻게 해석하나요?

백테스팅에서 SARIMA를 선택했다면 1~152주 전체로 모형을 다시 학습한 뒤, 사용하지 않은 153~156주를 처음으로 예측합니다.

이때도 모형의 차수나 전처리 설정을 최종 홀드아웃 결과에 맞춰 변경해서는 안 됩니다.

모형최종 홀드아웃 MAE(kWh)
계절적 나이브126
ETS110
SARIMA98
90100110120130계절적 나이브120126ETS105110SARIMA9298백테스팅 평균최종 홀드아웃MAE (kWh)
최종 홀드아웃 결과

SARIMA는 최종 평가에서도 가장 작은 MAE를 보였지만 백테스팅 평균 92kWh보다 높은 98kWh를 기록했습니다. 이러한 차이는 평가 기간의 수요 패턴이나 우연한 변동 때문에 발생할 수 있습니다.

최종 홀드아웃은 4주에 불과하므로 이 값 하나로 장기적인 운영 성능을 확정할 수 없습니다. 실제 배포 이후에도 주기적으로 예측오차와 편향, 예측구간 포함률 등을 관찰하여 성능 저하가 발생하는지 확인하는 것이 좋습니다.

SECTION 12

백테스팅 결과는 어떻게 보고하나요?

시계열 검증 결과를 보고할 때는 전체 관측 기간과 빈도, 예측기간, 개발·최종 평가 구간, 검증 폴드 수, 학습창 방식, 후보 모형, 오차 지표, 최종 홀드아웃 점수를 명확히 제시해야 합니다.

외생변수를 사용했다면 해당 변수의 미래값을 예측 당시 어떻게 확보했는지도 함께 설명해야 합니다.

결과 보고 예시

냉장물류센터의 주간 전력 사용량을 예측하기 위해 156주의 시계열 자료를 분석하였다. 마지막 4주(153~156주)는 최종 평가 구간으로 보존하고, 나머지 자료에서 확장 학습창을 사용하는 롤링 오리진 백테스팅을 실시하였다. 백테스팅은 4개 폴드로 구성하였으며, 각 폴드에서 이후 4주의 전력 사용량을 예측하였다.

계절적 나이브, ETS, SARIMA를 비교한 결과 평균 MAE는 각각 120kWh, 105kWh, 92kWh로 나타나 SARIMA가 가장 작은 오차를 기록하였다. 이에 따라 SARIMA를 개발 구간 전체로 재학습하여 최종 홀드아웃을 예측한 결과 MAE는 98kWh였으며, 같은 구간에서 계절적 나이브와 ETS는 각각 126kWh, 110kWh를 기록하였다. 이 결과는 SARIMA가 본 사례의 검증 구간에서 상대적으로 우수한 예측 성능을 보였음을 시사한다. 다만 최종 평가 기간이 짧으므로 성능의 지속성을 확인하기 위해 추가적인 운영 모니터링이 필요하다.

✓마무리

예측 성능은 미래를 모방한 검증에서 확인해야 합니다

시계열 예측에서 중요한 것은 과거 자료에 얼마나 잘 맞는지가 아니라 예측 당시 이용할 수 있었던 정보만으로 미래를 얼마나 정확하게 예측하는가입니다.

이를 위해서는 시간순으로 학습과 평가를 분리하고, 여러 과거 시점에서 롤링 백테스팅을 수행하는 것이 유용합니다.

또한 MAE나 RMSE 같은 점수뿐 아니라 예측기간별 오차, 예측구간의 포함률, 모형의 안정성과 실제 운영 조건을 함께 검토해야 합니다. 모형 선택에 사용하지 않은 최종 홀드아웃은 독립적인 성능 확인에 도움이 되지만, 짧은 기간의 결과만으로 지속적인 성능을 보장할 수는 없습니다.

KEY TAKEAWAY

시계열 백테스팅의 핵심은 미래 데이터를 나중에 숨기는 데 그치지 않고, 과거의 각 예측 시점에서 실제로 이용 가능했던 정보와 의사결정 과정을 그대로 재현하는 데 있습니다.