1. 상태 공간 모형 (State Space Models)
- 시계열 생성 구조를 (1) 관측식과 (2) 상태 전이식 으로 정의하는 시계열 모형
(1) 관측식(Observation Equation)
- 현재 상태 x(t) 와 잡음 v(t) 에 의해 실제로 측정가능한 y(t) 를 생성하는 관계식
(2) 상태 전이식 (State Transition Equation)
- 이전 상태 x(t-1) 와 현재 생성된 잡음 w(t) 에 의해 현재 상태 x(t) 가 생성되는 관계식
(3) 동적 시스템(Dynamic System)
- 입력 시계열을 받아 출력 시계열을 내놓는 시스템
- (예) ARMA 모형 - 백색잡음 𝜖t를 입력받아 yt를 출력하는 동적 시스템
(4) 상태 변수(State Variable)
- 동적 시스템의 현재 상태를 정의하는 값의 집합
- (예) AR(p) 동적시스템은 p개의 과거 Y값 {Yt−1,Yt−2,⋯,Yt−p}이 상태변수
(예) ARMA(p,q) 동적시스템은 p개의 과거 Y값 {Yt−1,Yt−2,⋯,Yt−p}과 q개의 과거 ϵ값 {ϵt−1,ϵt−2,⋯,ϵt−q}이 상태변수
2. 상태공간모형 알고리즘
(1) 지수평활법 (Simple Exponential Smoothing)
- 추세, 계절성 패턴이 없는 경우 적합함
- 미래의 시계열은 과거 특정 기간동안의 평균값으로 그 이전의 값들은 미래에 정보를 주지 않음
- 더 최근인 관측값에 더 큰 가중치를 주며, 가중치가 감소하는 비율은 매개변수 α로 조정
- α가 크면(즉, 1에 가까운 경우) 더 최근 관측값에 붙는 가중치
import pandas as pd
from statsmodels.tsa.api import SimpleExpSmoothing
import matplotlib.pyplot as plt
location = './Bike_Sharing_Demand_Full.csv'
raw_all = pd.read_csv(location)
# Simple Exponential Smoothing
target = raw_all.loc[:24*7*2, 'count'] # 2주치 데이터 336시간
target.plot(marker='o', color='black', legend=True, figsize=(20,6), ylim=(0,400))
fit1 = SimpleExpSmoothing(target).fit(smoothing_level=0.2, optimized=False) # 0.2
fcast1 = fit1.forecast(24).rename(r'$\alpha=0.2$')
fcast1.plot(marker='o', color='blue')
fit1.fittedvalues.plot(style='--', color='blue', label=r'$\alpha=0.2(Tr)$')
fit2 = SimpleExpSmoothing(target).fit(smoothing_level=0.6, optimized=False) # 0.6
fcast2 = fit2.forecast(24).rename(r'$\alpha=0.6$')
fcast2.plot(marker='o', color='red')
fit2.fittedvalues.plot(style='--', color='red', label=r'$\alpha=0.6(Tr)$')
fit3 = SimpleExpSmoothing(target).fit() # 1 전체
fcast3 = fit3.forecast(24).rename(r'$\alpha=%s$'%fit3.model.params['smoothing_level'])
fcast3.plot(marker='o', color='green')
fit3.fittedvalues.plot(style='--', color='green', label=r'$\alpha=%s(Tr)$'%fit3.model.params['smoothing_level'])
plt.legend()
plt.show()
(2) 선형 추세 알고리즘 (Holt)
간단 지수평활법에 추세를 반영한 예측 알고리즘
target = raw_all.loc[:24*7*2, 'count']
target.plot(marker='o', color='black', legend=True, figsize=(20,6), ylim=(0,400))
fit1 = Holt(target).fit()
fcast1 = fit1.forecast(24).rename("Holt's linear trend")
fcast1.plot(marker='o', color='blue')
fit1.fittedvalues.plot(style='--', color='blue', label="Holt's linear trend(Tr)")
fit2 = Holt(target, exponential=True).fit() # Exponential
fcast2 = fit2.forecast(24).rename("Exponential weighted trend")
fcast2.plot(marker='o', color='red')
fit2.fittedvalues.plot(style='--', color='red', label="Exponential weighted trend(Tr)")
fit3 = Holt(target, damped=True).fit() # Additive & Multiplicative
fcast3 = fit3.forecast(24).rename("Additive damped trend")
fcast3.plot(marker='o', color='green')
fit3.fittedvalues.plot(style='--', color='green', label="Additive damped trend(Tr)")
plt.legend()
plt.show()
(3) 계절 알고리즘 (Holt - Winter)
선형 추세 알고리즘에 계절성을 반영한 예측 알고리즘
Additive Seasonal Method : 𝑌𝑡 = 𝑇𝑡 + 𝑆𝑡 + 𝑅𝑡
Multiplicative Seasonal Method : 𝑌𝑡 = 𝑇𝑡 × 𝑆𝑡 × 𝑅𝑡
Damped Seasonal Method : Additive와 Multiplicative 모두 사용 - 장기 예측시 무한정 증가/감소를 방지
'Analysis > Time series' 카테고리의 다른 글
Lecture 19. 딥러닝 예측 실습 (2) | 2021.05.04 |
---|---|
Lecture 18. 시계열 딥러닝 알고리즘 (0) | 2021.05.02 |
Lecture 16. 다변량 선형확률과정 (0) | 2021.04.05 |
Lecture 15. Kaggle 자전거 수요 예측 (SARIMAX / Auto-ARIMA) (0) | 2021.04.05 |
Lecture 14. Kaggle 자전거 수요 예측 (RF/SARIMA) (0) | 2021.04.03 |
댓글