Excel로 하는 미래 예측(2): 시계열 예측

미래 예측에는 다양한 유형이 있을 것이다. 우선 미래를 하나의 가능성으로 바라보는 경우 — 예측(forecasting)과, 미래를 여러 가지의 가능성으로 바라보는 경우 — 시나리오 플래닝(scenario planning)이라는 유형으로 나눌 수 있을 것이다. (미래 예측에 관한 본 블로그의 다른 글을 참조할 것) 그리고 예측은 단기 예측장기 예측으로 나눌 수 있을 것이며, 예측 변수(predictors)가 몇 개냐에 따라서 나눌 수도 있다. 예측되는 표적 변수(target)의 과거 데이터만을 가지고 하는 시계열 예측(time sceries forecasting)과, 하나 이상의 예측 변수를 사용하는 지도학습 모형 예측(supervised learning model forecasting)으로 나눌 수도 있을 것이다. 그 밖에도 선형예측(linear forecasting)비선형 예측(non-linear forecasting), 시뮬레이션(simulation)실데이터 예측(real data based forecasting)으로 나눌 수도 있을 것이다.

이번 포스팅에서는 엑셀을 가지고 표적 변수의 과거 데이터만으로 수행하는 시계열 예측을 시도해 보자. 시계열 예측은 특정한 변수의 값이 과거의 시간의 흐름에 따라 어떻게 변화했는지를 알고 있다는 가정 아래 그 변수가 미래에 가질 값을 예측하는 데 관심을 둔다. 때문에 시간적 요소가 중요하다. 예컨대 주가나 날씨가자주 그러한 방법으로 예측된다.

시계열 예측에는 데이터 추동 예측(data-driven forecasting)과 모형 추동 예측(model-driven forecasting)이 있다. 데이터 추동 예측은 예측 변수와 표적 변수 사이의 구분이 없는 시계열 분석 방법이다. 예측변수는 동시에 표적 변수이다. 데이터 추동 예측에는 평균화(averaging) 또는 평활화(smoothing) 같은 기법이 사용된다. 모형 추동 예측은 독립변수와 종속변수를 포함한다. 그런데 독립변수가 시간(time). 가장 간단한 방법은 다음과 같은 형식을 지닌 선형회귀모형이다.


위의 식에서 y(t)는 시간 t에서의 표적변수의 값이다. 학습용 데이터가 주어지면 미래의 y 값을 예측하기 위해서 계수 a와 b를 추정한다.

먼저 데이터 추동 예측부터 알아보자. 엑셀로 구현하기 전에 개념적인 설명이 필요하다.

기본 개념: 시계열 예측에서는 시구간(time period)이라는 개념이 중심이다. 시구간은 문제에 따라 초, 일, 주, 월, 분기, 년 따위의 단위를 갖는다. 그리고 시구간에 대응하는 데이터 계열(time series)인 이 있고, 또한 시계(horizon)에 대한 예측(forecast)으로 라고 표기하며, n 이후 h번째 시구간에 대한 예측을 의미한다. 보통 h=1인데 그것은 마지막 데이터 포인트 직후의 시구간을 말한다. 그러나 h는 1보다 클 수 있다. 끝으로 주어진 시간 t에 대하여 예측 오류(forecast error)  가 있다.

(1) 단순 예측(naive forecast): 계열의 다음 시구간에 대한 예측 즉, 은 계열에서 마지막 데이터 포인트 와 같다고 추정된다. 식으로 표시하면,

(2) 단순 평균: 다음 시구간의 데이터 포인트를 계열의 모든 데이터 포인트의 평균으로 계산한다.

1월부터 12월까지 월간 데이터가 있다면, 다음 해 1월(n+1)의 값을 예측하기 위하여, 간단하게 1월(n=1)부터 12월(n=12)까지의 값을 평균한다.

(3) 단순이동평균(simple moving average, SMA): 단순 평균은 한 시점에서 측정치들의 평균을 가리키나 시간이 들어간 측정치들의 평균에는 이동평균을 사용한다. 시간이 흐름에 따라 측정치가 어떻게 변화되었는지를 알고 싶기 때문이다. 동일한 시구간을 잡아서 각 기간에서의 측정값들의 평균을 구한다. 이것을 단순이동평균이라고 부른다. 2일 이동평균, 5일 이동평균, 10일 이동평균, 50일 이동평균 등등. 시구간이 짧아지면 원 데이터와의 차이가 없어진다. 

만약 5일 이동평균을 계산한다면, 첫 4일은 이동평균이 없고, 5일째 되는 날 측정값의 첫 이동평균을 갖는다. 그 다음부터는 하루씩 더해진 날짜들에 해당되는 측정값들의 이동평균을 갖게 된다. 만약 25일 동안의 5일 이동평균을 구하면, 20개의 이동평균을 갖게 될 것이다.

(4) 가중이동평균(Weighted Moving Average, WMA): SMA에는 항상 현재의 측정값과의 차이가 존재한다. 이 차이를 줄이는 대안이 WMA이다. 어떤 경우에는 가장 최근의 값이 이전의 값들보다 더 큰 영향을 미친다. 대부분의 지수적 증가가 이러한 효과 때문에 발생한다. 다음 구간의 예측은 다음과 같은 모형으로 계산할 수 있다.

위 식에서 이며, 일반적으로 이다. 

(5) 지수이동평균(Exponential Moving Average, EMA): EMA는 WMA의 한 유형이다. EMA에서는 가중승수(weighting multiplier)를 사용한다.  가중승수는 로 구할 수 있다. n은 시구간의 크기이다. 만약 2일 이동평균이라면 가중승수는 2/3(2+1)이다. 시구간이 길어지면 가중승수가 작아진다.

EMA는 다음 공식으로 구할 수 있다.

  • EMA={(금일 종가 – 어제의 EMA)*가중승수}+어제의 EMA

이 식을 곰곰히 살펴보면, 어제 범한 예측오류(금일 종가 빼기 어제의 EMA)에 가중 승수를 곱하고, 그것을 어제의 예측값(EMA)에 더해 오늘에 대한 예측(EMA)로 사용한다는 의미이다.

  • 최초 EMA = 첫 계산 기간의 SMA

(6) 지수 평활화(exponential smoothing): 평활화(smoothing)의 정신은, 어떤 변수의 매일 매일의 변동에는 신호와 소음이 함께 포함되어 있기 때문에 트렌드를 발견하기 위해서는 소음을 제거함이 바람직하다는 것이다. 그런 의미에서 앞에서 서술한 이동평균들도 평활화 기법이다. 그런데 지수 평활화는 아예 평활화를 이름으로 달고 있다.

 지수평활화는 다음 시구간의 값을 예측하기 위해 이전 시구간의 예측값을 사용한다. 그런데 이전 시구간 예측에서 예측오류가 났으면 그 오류를 다음 시구간 예측에 일정 정도 반영해 주는 방법이다. 만약 예측이 지나쳤으면 이번 예측에 일정한 값을 감해서 다음 번 예측에 투입하고, 예측이 낮았으면 이번 예측에 일정한 값을 더해서 다음 번 예측에 투입한다.

 

(1)식을 아래와 같이 바꾸어 쓸 수 있다. 그러면 다음 시구간 값()이 전년도의 예측값()에, 전년도의 예측오류()에 가중치()를 곱한 값을 더한 결과라는 점이 분명해진다.   

지수평활화를 이용해서 월간 예측을 한다면, 2월의 예측값을 구하기 위하여 1월의 실제값뿐 아니라 1월에 대한 예측값을 사용한다.  위의 식에서 가중치  는 일반적으로 0과 1 사이의 값을 갖는다. 가 0에 가까우면 다음 시구간의 예측값은 이전 예측값과 유사하고, 가 1에 가까우면 다음 시구간의 예측값은 이전 실제값과 유사해 진다. 가 1이라면 위에서 소개한 단순예측이 된다. 에 대한 일반적인 값은 경험적으로 0.2부터 0.4 사이의 값이다.

엑셀을 사용해서 데이터 추동 예측 다섯 가지 방법(단순 평균 제외)을 하나의 사례에 적용해 보자. 아래 엑셀 자료는 어느 기업이 13개월 동안 달성한 월별 매출액(단위 백만원)이다. 

단순예측은 금월 매출액을 다음 달 예상 매출액으로 잡는다. 12월의 실제 매출액 720억4천5백만원(B3)이 1월의 예상 매출액(C4)가 되었으며, 1월의 실제 매출액(B4)은 2월의 예상 매출액(C5)가 되었다. 이하 마찬가지이다.

D열에 있는 3월 이동평균(SMA(3))은 12월, 1월, 2월의 실제 매출액을 평균하는 값(=AVERAGE(B3:B5))으로 63,304.33(D6)이다. 4월 SMA(3)(D7)은 (=AVERAGE(B4:B6))이고, 5월 SMA(3)(D8)은 (=AVERAGE(B5:B7)이며, 이하 동일한 방식으로 계산된다.

E열의 3월 가중이동평균(WMA)을 구하는 데는 세 개의 가중치가 필요하다. 시구간의 첫월에 대한 가중치는 0.2, 둘째월에 대한 가중치는 0.3, 셋째월에 대한 가중치는 0.5이다. 현재에 가까워질수록 더 큰 가중치를 주고 있다. 3월 WMA(3)(E6)은 (=B5*$E$19+B4*$E$18+B3*$E$17)로 계산된다. 4월 WMA(3)(E7)은 (=B6*$E$19+B5*$E$18+B4*$E$17)로 구할 수 있다. 이하 동일한 방식으로 계산된다.

F열의 3월 지수이동평균(EMA)을 구하려면 먼저 가중승수를 구해야 한다. 시구간이 3이므로 가중승수는 2/(3+1)=0.5이다. 첫번째 EMA(3) 값(F6)은 3월의 SMA(3) 값과 동일하다. 두번째 EMA(3) 값(F7)은 (=0.5*(B7-F6)+F6)로 구해진다. 실제값에서 예측값을 뺀 예측오류에 가중승수 0.5를 곱하고 그것을 예측값에 더하면 된다. 세번째 EMA(3) 값(F8)은 (=0.5*(B8-F7)+F7)로 구하면 된다. 이하 동일한 방식으로 계산된다. 

G열의 지수평활화(exponential smoothing)를 구하려면 가중치 Alpha가 필요하다. 여기서는 임의로 Alpha=0.3이라고 하자. 첫번째 지수평활화의 1월 예측값(G7)은 12월의 실제 매출액을 가져온다. 2월 예측값(G5)은 ( =$G$17*B4+(1-$G$17)*G4)로 구해진다. 3월 예측값(G9)은 (=$G$17*B5+(1-$G$17)*G5)로 구할 수 있다. 이하 동일한 방식으로 구해진다.

이 서로 다른 예측 평활화들을 어떻게 평가할까? 한 가지 방법은 오류를 비교하고 가장 작은 오류를 낸 기법이 이 데이터에 가장 잘 맞는 방법으로 간주될 수 있을 것이다.

통계학의 분산분석이나 회귀분석에서 오류를 실제값과 예측값의 차이(즉, 오차)의 제곱(보다 정확히는 오차 제곱의 평균)을 이용하여 모형 검정값을 측정한다. 마찬가지로 시계열 예측에서도 오류의 크기를 예측오류의 제곱의 평균(Mean Squared Errors, MSE)로 측정할 수 있다. 위 다섯가지 예측 평활화의 MSE가 아래와 같다.

MSE의 크기가 SMA(3)가 가장 크고(95,175,919), EMA(3)가 가장 작음(23,599,945.7)을 알 수 있다. 즉, 이 사례에서는 EMA(3)가 가장 정확한 예측값을 내고 있다는 것이다. 흥미 있는 사실은 금년도 실제 매출액으로 내년도 매출액을 예상하는 단순예측의 성능도 그다지 나쁘지 않다는 점이다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

This site uses Akismet to reduce spam. Learn how your comment data is processed.