본문 바로가기
Analysis/Time series

Lecture 17. 비선형 확률과정

by 5ole 2021. 4. 6.

 

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 모두 사용 - 장기 예측시 무한정 증가/감소를 방지

 

댓글