Chapter 12에서는
* Time Series decomposition method of analysis(시계열 분해 분석 방법) 및 forecasting에 도움이 될만한 방법
* Python에서 Time Series data를 자동으로 decompose(분해)하는 방법
* addtive and multiplicative time series problem을 decompose하고 결과를 plotting하는 방법에 대해 배운다.
Time Series Components
* forecasting method를 선택하는 데 Time Series가 Systematic(체계적), Non-Systematic(비체계적)인 구성 요소로 나누는 것은 유용하다.
* Systematic : 일관성 또는 반복이 있고 설명 및 modeling할 수 있는 time series components
* Non-Systematic : 직접 modeling할 수 없는 time series components
* Level : series의 평균 값
* Trend0 : series의 증가 또는 감소 값
* Seasonality : series에서 반복되는 주기(short-term)
* Noise : series의 랜덤 변동
* 위의 네가지 components를 보면 Level, Trend, Seasonality는 systematic하고 noise는 non-systematic한 것을 알 수 있다.
* 따라서 Time Series components는 세 가지의 systematic, 한 가지의 non-systematic components로 구성된 것이다.
Combining(결합) Time Series Components
* Series는 위에서 언급한 네 가지 구성 요소의 집합or조합이다.
* 모든 Series는 level과 noise가 있으며 trend와 seasonality는 있는 것도 있고 없는 것도 있다.
* 구성 요소를 addtive or multiplicative로 combining하는 것으로 생각하면 도움이 된다.
Additive Model
* y(t) = Level + Trend + Seasonality + Noise
* Additive Model은 구성 요소들이 덧셈으로 이루어진 model이며 선형 직선이다.
* seasonality도 동일한 빈도와 진폭을 갖는다.
Multiplicative Model
* y(t) = Level * Trend * Seasonality * Noise
* Multiplicative Model은 구성 요소들이 곱셈으로 이루어진 model이며 2차or지수함수와 같은 비선형이다.
* seasonality 또한 비선형이기에 시간이 지남에 따라 빈도와 진폭이 바뀐다.
Decomposition as a Tool
* 분해는 주로 시계열 분석에 사용되며 분석 도구로 예측 모델을 알리는 데 사용할 수 있다.
* 일반적으로 모델링 복잡성 측면or특정 모델에서 구성 요소를 가장 잘 포착하는 방법 측면에서 시계열 예측 문제에 대해 구조화된 사고 방식을 제공한다
Automatic Time Series Decomposition
* statsmodels library에서 제공하는 season_decompose()함수를 통해 분해를 할 수 있다.
* 위의 함수에서 덧셈or곱셈 분해를 지정하고 그에 따른 결과를 낸다.
* time series plot과 일부 요약 통계를 활용하여 time series 모형이 곱셈인지 덧셈인지 파악하고 위 함수에 그것을 적용시킨다.
* 결과로는 observed, trend, seasonal, residual의 data를 반환한다.
* residual(잔차)는 표본으로 추정한 회귀식과 실제 관측값의 차이이다.
* 즉, 이 경우에서는 원시 dataset과 trend의 차이라고 보면 된다.
* 아래는, 예제이다. ( series부분에 dataset만 read해주면 된다. )
from statsmodels.tsa.seasonal import seasonal_decompose
series = ...
result = seasonal_decompose(series, model='additive')
print(result.trend)
print(result.seasonal)
print(result.resid)
print(result.observed)
from statsmodels.tsa.seasonal import seasonal_decompose
from matplotlib import pyplot
series = ...
result = seasonal_decompose(series, model='additive')
result.plot()
pyplot.show()
Additive Decomposition
* 1~99까지 선형 증가 time series를 생성하고 additive model로 decompose하는 예제이다.
* 임의의 증가하는 수에 대한 series이므로, trend는 선형 증가가 되며 seasonal은 없음을 알 수 있다.
# additive decompose a contrived additive time series
from random import randrange
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
series = [i+randrange(10) for i in range(1,100)]
result = seasonal_decompose(series, model='additive', period=1) #series dataset에서 pandas object가 아니거나 series index에 빈도가 없는 경우 사용
result.plot()
pyplot.show()
Multiplicative Decomposition
* 1~99까지제곱으로 변환 후 multiplicate model로 가정하고 분해할 수 있다.
* 이 예제의 경우에는 sqrt() 변환을 통해 선형으로 만들 수 있다.
* 곱셈으로 이루어진 model같은 경우에는 seasonal=1을 통해 계절성이 없음을 알 수 있다.
# multiplicative decompose a contrived multiplicative time series
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
series = [i**2.0 for i in range(1,100)]
result = seasonal_decompose(series, model='multiplicative', period=1)
result.plot()
pyplot.show()
Airline Passengers Dataset
* 원시 dataset을 보면 특히 진폭이 증가하는 것을 보며 multiplicative model임을 알 수 있다.
* 따라서 곱셈 model로 가정하고 multiplicative depose를 수행한다.
# multiplicative decompose time series
from pandas import read_csv
from matplotlib import pyplot
from statsmodels.tsa.seasonal import seasonal_decompose
series = read_csv('airline-passengers.csv', header=0, index_col=0, parse_dates=True,
squeeze=True)
result = seasonal_decompose(series, model='multiplicative') #additive multiplicative
result.plot()
pyplot.show()
#################################
result1 = seasonal_decompose(series, model='additive') #additive multiplicative
result1.plot()
pyplot.show()
'Study > time series forecasting with python' 카테고리의 다른 글
Chapter 14. Use and Remove Seasonality (0) | 2021.07.21 |
---|---|
Chapter 13. Use and Remove Trends (0) | 2021.07.21 |
Chapter 11. A Gentle Introduction to the Random Walk (0) | 2021.07.12 |
Chapter 10. A Gentle Introduction to White Noise (0) | 2021.07.12 |
Chapter 9. Moving Average Smoothing (0) | 2021.07.12 |