머신러닝/머신러닝

시계열 분석 - Exponential Smoothing

aiemag 2021. 3. 21. 11:04
반응형

Exponential Smoothing 의 이해를 위한 정리입니다.

 


Moving Average

Exponential Smoothing을 알기 위해 필요한 Moving Average에 대해 간략히 정리합니다.

Simple moving average

- 최근 기준 지난 N개의 실제 데이터의 산술평균을 차기의 수요량으로 예측하는 방법.

- N의 값을 크게하면 산술평균과 유사해지며 작게할수록 최신수요량과 유사.

 

Formula

k개의 window를 쓴다고 가정했을 때, n번째의 SMA의 기본 Formula는 n-k+1부터 n번째까지의 산술평균이다.

 

n+1번째의 SMA 값은 window 개수만큼 모두 계산하지 않아도 됨

n 번째 까지의 SMA 값에서 n+1 번째 관측치 값을 더한 후, n-k+1 번째 값을 빼기만 하면 된다.

 

Weighted moving average method

- N개에 포함된 모든 데이터에 각각 다른 비중을 부유하여 산술평균읠 구한 뒤 차기 수요량으로 예측.

 

 

EMA weights  N  = 15(이미지 출처 : wikipedia)

 

Formula

SMA와 비슷하나, n개의 window를 가지는 M번째 WMA는 각 sample(M번째부터 M-n+1까지) 별로 각각 n 부터 n-1 ... 2, 1 이 될때까지의 값을 가중치로 곱하여 \(\frac{n(n+1)}{2}\) 의 값으로 나눈 값이다.

 

M+1 번째 WMA는 다음과 같다.

\(Numerator_{M}\) = M번째 WMA 값의 Numerator

 


Exponential Smoothing

Moving Average와 유사하나 과거의 실적보다 최근 실적 데이터에 많은 비중을 두고 오래된 데이터일 수록 적은 비중을 두어 예측하는 방법.

 

 

Simple exponential smoothing

Trend, Seasonal 패턴이 없을 때 씀. 

Weighted Moving Average 형태이며, Exponential Moving Average라고도 함.

exponentially 하게 weight가 감소함.

EMA weights  N  = 15(이미지 출처 : wikipedia)

Formula

\(S_{t}=\alpha X_{t} + (1-\alpha)S_{t-1}\)

 

Parameters

\(S_{t}\) = t시간의 smoothed statistic

\(S_{t-1}\) = t-1 시간의 smoothed statistic

\(X_{t}\) = t 시간의 data value

\(\alpha\) = smoothing factor (0 < \(\alpha\) < 1) 

 

Double exponential smoothing

linear한 trend 가 있고, seasonal 패턴이 없을 때 사용

Holt's trend corrected 또는 Trend second-order exponential smoothing 이라고 부름.

 

Formula

\(S_{1}=X_{1}\)

\(B_{1}=X_{1}-X_{0}\)

For t>1,

\(S_{t}=\alpha X_{t} + (1-\alpha)(S_{t-1}+B_{t-1})\)

\(B_t=\beta(S_{t}-S_{t-1})+(1-\beta)B_{t}-1\)

 

Parameters

\(S_t\) = t시간의 smoothed statistic

\(S_{t-1}\) = t-1 시간의 smoothed statistic

\(\alpha\) = data 의 smoothing factor (0 < \(\alpha\) < 1) 

\(B_t\) = t시간의 best estimate of trend

\(\beta\) = trend smoothing factor (0 < \(\beta\) < 1)

 

Triple(Holt-Winters) exponential smoothing

 

Time series를 고려한 Exponential Smoothing을 이야기할 때 보통 Holt-Winters exponential smoothing을 말합니다.

Time series는 보통 trend, seasonal pattern을 동반하기 때문이죠.

이것을 살펴보기 위해 멀리 왔네요:)

 

Formula

\(S_0=X_0\)

\(S_t=\alpha\frac{X_t}{C_t-L}+(1-\alpha)(S_{t-1}+B_{t-1})\)

\(B_t=\beta(S_t-S_{t-1})+(1-\beta)B_{t-1}\)

\(C_t=\gamma\frac{X_t}{S_t}+(1-\gamma)C_t-L\)

 

Parameters

\(S_t\) = t시간의 smoothed statistic

\(S_t-1\) = t-1시간의 smoothed statistic

\(\alpha\) = data 의 smoothing factor (0 < \(\alpha\) < 1) 

\(B_t\) = t시간의 best estimate of trend

\(\beta\) = trend smoothing factor (0 < \(\beta\) < 1)

\(C_t\) = t시간의 sequence of seasonal correction factor

\(\gamma\) = seasonal change smoothing factor (0 < \(\gamma\) < 1)

 

Example

 

Data set : souvenir sales is from January 1987 to December 1993.

 

다음은 Holt-Winteres를 이용한 Data set의 Exponential Smoothing 결과이다.

전처리는 data를 log scale로 변환 후 사용

다음은 Holt-Winters를 이용한 Data set의 48개월 후의 예측치 결과이다.

 

 

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
library(forecast)
 
####################################
# Holt Winters Exponential Smoothing
souvenir <- scan("http://robjhyndman.com/tsdldata/data/fancy.dat")
souvenirtimeseries <- ts(souvenir, frequency=12, start=c(1987,1))
plot.ts(souvenirtimeseries)
 
logsouvenirtimeseries <- log(souvenirtimeseries)
plot.ts(logsouvenirtimeseries)
 
 
souvenirtimeseriesforecasts <- HoltWinters(logsouvenirtimeseries)
plot(souvenirtimeseriesforecasts)
 
# Holt Winters Exponential Smoothing Forecasting
souvenirtimeseriesforecasts2 <- forecast:::forecast.HoltWinters(souvenirtimeseriesforecasts, h=48)
plot.forecast(souvenirtimeseriesforecasts2)
plot(souvenirtimeseriesforecasts2)
 
cs

 

 


References

참고한 사이트입니다.

 

byjus.com/maths/exponential-smoothing/

icim.nims.re.kr/post/easyMath/840

a-little-book-of-r-for-time-series.readthedocs.io/en/latest/src/timeseries.html

otexts.com/fpp2/moving-averages.html

otexts.com/fppkr/holt-winters.html

en.wikipedia.org/wiki/Moving_average

반응형