시계열 예측
Time Series Forecasting
비즈니스 애널리틱스 · 11주차
시계열 예측의 활용
- 시계열 예측(time series forecasting): 시간 순서로 쌓인 과거 기록으로 미래 값을 숫자로 내는 일
- 활용 분야
- 수요 예측: 생산량, 재고, 발주량 결정
- 승객·방문객 예측: 열차 편성, 좌석 공급, 인력 배치
- 매출·비용 예측: 예산과 자금 계획
- 설비 사용량 예측: 전력·용량 계획
- 회귀와의 차이: 설명 변수 대신 시간 자체와 과거 값의 패턴을 씀
- 판단 기준: 학습에 쓰지 않은 기간을 얼마나 잘 맞히는지
이번 주의 결정 문제
월별 승객 수를 어떤 방법으로 예측할 것인가
- 자료: 미국 철도회사 Amtrak의 월별 승객 수, 1991-01 ~ 2004-03
- 후보 방법: 직전 값을 그대로 쓰는 단순 예측부터 추세와 계절성을 넣은 회귀까지
- 판단 기준: 마지막 3년(36개월)을 숨겨 두고, 그 기간을 얼마나 잘 맞히는지
강의 구성
- 시계열의 구성 요소
- 학습 기간과 검증 기간, 예측 오차 지표
- 기준 예측: naive와 seasonal naive
- 회귀로 추세와 계절성 표현
- 모형 비교와 해석 시 주의
- 모든 계산 예제: Amtrak 월별 승객 수, 교재(Shmueli 17·18장 노트북)와 같은 자료와 모형
예제 자료: Amtrak 월별 승객 수
- 1991-01 ~ 2004-03, 159개월, 단위 천 명, 미국 교통통계국(BTS) 공개 자료
- 최저 1,361 (1996-02), 최고 2,223 (2003-07), 평균 1,822
- 보이는 패턴: 1996년 무렵까지 줄다가 다시 늘어나는 흐름, 해마다 되풀이되는 오르내림
시계열의 정의와 구성 요소
정의일정한 시간 간격으로 기록한 값의 나열 \(y_1, y_2, \dots, y_n\), \(t\)는 시점 번호
| 구성 요소 | 뜻 | Amtrak의 예 |
|---|---|---|
| 수준(level) | 시계열의 평균적인 크기 | 월 평균 약 1,822천 명 |
| 추세(trend) | 긴 기간에 걸쳐 오르거나 내리는 흐름 | 1996년까지 감소, 이후 증가하는 U자 모양 |
| 계절성(seasonality) | 일정한 주기로 되풀이되는 패턴 | 12개월 주기, 여름에 많고 2월에 적음 |
| 잡음(noise) | 위 패턴으로 설명되지 않는 불규칙한 변동 | 달마다의 들쭉날쭉한 차이 |
- 예측 모형: 추세와 계절성을 표현하고, 잡음은 맞히려 하지 않음
Amtrak의 계절성
- 학습 기간(1991-01 ~ 2001-03)의 월별 평균 승객 수
- 가장 적은 달: 2월 1,531
- 가장 많은 달: 8월 1,971
- 9월에 1,650으로 크게 줄고, 3월에 1,835로 크게 늘어남
- 12개월마다 같은 모양이 되풀이되므로 예측에 반영할 수 있음
학습 기간과 검증 기간
정의시간 순서대로 앞부분을 학습 기간(training), 마지막 부분을 검증 기간(holdout)으로 나누고, 학습 기간 자료로만 만든 예측을 검증 기간의 실제 값과 비교함
- 학습 기간: 1991-01 ~ 2001-03, 123개월 · 검증 기간: 2001-04 ~ 2004-03, 36개월
- 무작위로 나누지 않는 이유: 예측할 때는 미래 값을 볼 수 없으므로, 평가도 같은 조건에서 함
예측 오차와 평가 지표
예측 오차실제 값에서 예측값을 뺀 값, 양수이면 실제보다 적게 예측함
\[e_t=y_t-\hat{y}_t\]
| 지표 | 식 | 뜻 |
|---|---|---|
| ME | \(\frac{1}{m}\sum e_t\) | 평균적으로 한쪽으로 치우쳤는지, 0에 가까울수록 좋음 |
| MAE | \(\frac{1}{m}\sum \lvert e_t\rvert\) | 평균적으로 몇 천 명 틀리는지 |
| RMSE | \(\sqrt{\frac{1}{m}\sum e_t^2}\) | 큰 오차에 더 큰 벌점 |
| MAPE | \(\frac{100}{m}\sum \left\lvert \frac{e_t}{y_t}\right\rvert\) | 실제 값 대비 몇 % 틀리는지 |
- \(m\): 검증 기간의 달 수 36, 예: 2001-04 실제 2,023.8, 예측 2,007.9이면 \(e=15.9\)
naive 예측과 seasonal naive 예측
naive마지막 관측값을 앞으로도 그대로 씀
\[\hat{y}_{n+h}=y_n\]
seasonal naive한 주기 전 같은 달의 값을 씀
\[\hat{y}_{n+h}=y_{n+h-12k}\]
- naive: 36개월 모두 2001-03의 값 2,007.9
- seasonal naive: 2001-04는 2000-04의 값 1,971.5, 2001-05는 2000-05의 값 1,992.3, \(k=\lceil h/12\rceil\)
기준 예측의 오차
검증 기간 36개월, 단위 천 명
| 방법 | ME | MAE | RMSE | MAPE |
|---|---|---|---|---|
| naive | -14.7 | 115.9 | 142.8 | 6.02% |
| seasonal naive | 54.7 | 84.1 | 95.6 | 4.25% |
- seasonal naive의 MAE·RMSE·MAPE가 모두 naive보다 작음: 계절성만 반영해도 MAPE가 6.0%에서 4.3%로 줄어듦
- 기준 예측(benchmark): 계산이 거의 들지 않는 예측, 더 복잡한 모형이 넘어야 할 최소 성적
- 새 모형이 기준 예측보다 검증 기간 오차가 작지 않으면 쓸 이유가 없음
회귀로 추세 표현: 선형 추세
선형 추세 모형시점 번호 \(t\)를 설명 변수로 쓰는 회귀, \(t=1\)이 1991-01
\[y_t=\beta_0+\beta_1 t+\varepsilon_t,\qquad \hat{y}_t=1,750.36+0.351\,t\]
- 실선: 학습 기간의 적합값, 점선: 검증 기간의 예측
- 한 달에 0.35천 명씩 늘어나는 직선은 U자 추세를 따라가지 못함: 검증 기간 MAPE 10.1%
이차 추세
이차 추세 모형\(t^2\)을 더해 휘어지는 추세를 표현
\[\hat{y}_t=1,888.88-6.298\,t+0.0536\,t^2\]
- 줄다가 늘어나는 흐름을 따라감: 검증 기간 MAPE 10.1% → 7.1%
- 계절성은 아직 반영하지 않음: 예측이 매끈한 곡선
계절성 표현: dummy 변수
dummy 변수그 시점이 해당 달이면 1, 아니면 0인 변수, 1월을 기준으로 2~12월에 11개
\[y_t=\beta_0+\gamma_2 D_{2,t}+\gamma_3 D_{3,t}+\cdots+\gamma_{12} D_{12,t}+\varepsilon_t\]
| \(\hat\gamma_m\) | 2월 | 3월 | 4월 | 5월 | 6월 | 7월 | 8월 | 9월 | 10월 | 11월 | 12월 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 계절성만 | -43 | +261 | +245 | +278 | +233 | +345 | +397 | +76 | +201 | +192 | +230 |
| 이차 추세 + 계절성 | -43 | +260 | +261 | +294 | +249 | +361 | +412 | +90 | +215 | +206 | +243 |
- \(\hat\beta_0\) = 1,574.0: 기준인 1월의 평균, \(\hat\gamma_m\): 1월보다 몇 천 명 많은지
- 예: 8월 \(\hat\gamma_8\) = +396.7 → 8월 예측 1,970.6
- 달이 12개인데 dummy가 11개인 이유: 12개를 모두 넣으면 상수항과 겹침
- 계절성만 넣은 모형은 추세가 없어 해마다 같은 값을 예측함: 검증 기간 MAPE 10.9%
이차 추세와 계절성을 함께 넣은 모형
모형이차 추세와 달 dummy 11개를 함께 넣은 회귀
\[\hat{y}_t=1,696.98-7.156\,t+0.0607\,t^2+\sum_{m=2}^{12}\hat\gamma_m D_{m,t}\]
- 학습 기간을 가장 잘 따라감: 학습 기간 MAPE 3.0%
- 검증 기간 MAPE 6.7%, ME -126: 실제보다 많게 예측하는 쪽으로 치우침
모형 비교: 검증 기간 오차
검증 기간 2001-04 ~ 2004-03, 36개월, 단위 천 명
| 방법 | ME | MAE | RMSE | MAPE |
|---|---|---|---|---|
| naive | -14.7 | 115.9 | 142.8 | 6.02% |
| seasonal naive | 54.7 | 84.1 | 95.6 | 4.25% |
| 선형 추세 | 193.1 | 209.4 | 239.5 | 10.15% |
| 이차 추세 | -84.0 | 133.7 | 179.8 | 7.08% |
| 계절성 | 217.9 | 217.9 | 229.7 | 10.86% |
| 이차 추세 + 계절성 | -126.2 | 131.7 | 153.3 | 6.70% |
- 검증 기간 오차가 가장 작은 방법: seasonal naive, MAE 84.1, MAPE 4.25%
- 회귀 모형 가운데서는 이차 추세 + 계절성이 가장 작지만 기준 예측을 넘지 못함
학습 기간 오차와 검증 기간 오차
| 방법 | 학습 기간 MAPE | 검증 기간 MAPE |
|---|---|---|
| 선형 추세 | 7.54% | 10.15% |
| 이차 추세 | 7.02% | 7.08% |
| 계절성 | 4.33% | 10.86% |
| 이차 추세 + 계절성 | 3.02% | 6.70% |
- 학습 기간 오차: 모형이 이미 본 자료에 대한 오차, 항이 많을수록 작아짐
- 검증 기간 오차: 보지 않은 미래에 대한 오차, 실제 예측 성능에 가까움
- 이차 추세 + 계절성: 학습 기간 3.0%에서 검증 기간 6.7%로 두 배 넘게 커짐
- 모형 선택: 검증 기간 오차로 함
잔차 확인
잔차학습 기간의 실제 값에서 적합값을 뺀 값, 모형이 설명하지 못한 부분
- 이차 추세 + 계절성 모형의 학습 기간 잔차
- 잔차가 몇 달씩 같은 쪽으로 이어짐: 이번 달 잔차와 다음 달 잔차의 상관계수 0.60
- 잔차에 패턴이 남아 있으면 모형이 아직 설명하지 못한 구조가 있다는 뜻
해석 시 주의
- 외삽: 이차 추세는 학습 기간 밖에서 계속 휘어짐, 검증 기간이 길수록 예측이 크게 벗어날 수 있음
- 구조 변화: 학습 기간에 없던 사건이나 정책 변화가 생기면 과거 패턴이 이어지지 않음
- 검증 기간의 길이와 시점: 실제로 예측할 기간과 같은 길이로 잡음
- MAPE: 실제 값이 0에 가까우면 커지거나 계산할 수 없음
- 최종 예측: 방법을 고른 뒤 학습 기간과 검증 기간을 합친 전체 자료로 다시 학습해 미래를 예측함
정리
| 개념 | 정의 | 예제의 값 |
|---|---|---|
| 구성 요소 | 수준, 추세, 계절성, 잡음 | U자 추세, 12개월 계절성 |
| 기간 나누기 | 시간 순서로 학습 기간과 검증 기간 | 123개월 / 36개월 |
| 오차 지표 | ME, MAE, RMSE, MAPE | seasonal naive MAE 84.1, MAPE 4.25% |
| 기준 예측 | naive \(y_n\), seasonal naive \(y_{n+h-12k}\) | 복잡한 모형이 넘어야 할 최소 성적 |
| 회귀 예측 | \(t\), \(t^2\), 달 dummy를 설명 변수로 | 이차 추세 + 계절성 검증 MAPE 6.7% |
| 모형 선택 | 검증 기간 오차로 고르고 전체 자료로 다시 학습 | 이 자료에서는 seasonal naive |