본문 바로가기
Statistics/Time Series Analysis

TSA - 3. 패턴분해

by bents 2021. 1. 22.

시계열 패턴 추출기법 (Stationary Time Series)

; 시계열의 전환점 또는 변화의 방향를 해석하려면, 추세-주기 성분 >> 계절 성분 제거 데이터

 

# 고전적 시계열분해 예측기법 / 비추

1) 분해 종류 (계절성, 추세주기, 나머지)

  • 곱셈 : 계절성 변동크기가 추세-주기 변동크기에 비례하여 변한다면 y = 추세 * 계절 * 나머지

  • 덧셈 : 계절성과 추세주기가 독립일 때, 또는 곱셉의 로그변환 y = 추세 + 계절 + 나머지

2) 추세-주기 성분 추출(계절성 제거)

  • 이동평균

  • 중심화 이동평균, 이동평균의 이동평균 : 2*12MA(월) , 7MA(일)

  • 가중이동평균

3) 사용하지 말아야 할 이유

  • 계절성분이 매년 반복된다는 것을 가정함, 즉 계절성분의 반복주기가 변하면 추출못함.

  • 일시적 특이패턴 추출못함

# STL 분해기법 (Seasonal and Trend using Loess)

; Loess를 사용한 계절성과 추세 분해

1) 장단점

  • SEAT와 X11과는 다르게, STL은 월별이나 분기별 데이터를 포함하여 어떤 종류의 계절성도 다룰 수 있습니다.

  • 계절적인 성분이 시간에 따라 변해도 괜찮습니다. 계절성분의 변화율을 사용자가 조절할 수 있습니다.

  • 추세-주기의 매끄러운 정도를 사용자가 조절할 수 있습니다.

  • 가끔 있는 이상값이 추세-주기와 계절성분에 영향을 주지 않게 만들 수 있습니다(즉, 사용자가 강력한 분해법을 명시할 수 있습니다). 하지만, 이상값은 나머지 성분(remainder)에 영향을 줄 것입니다.

  • (단점) 거래일이나 달력 변동을 자동으로 다루지 않고, 덧셈 분해만 지원합니다. ; Box-Cox변환으로 곱셈분해가능.

from statsmodels.tsa.seasonal import seasonal_decompose
​
ts = df.timeseries
result = seasonal_decompose(ts, model='additive') # multiplicative
result.trend
result.seasonal
result.resid



2) 성분 강도 측정하기 (추세강도, 계절강도)

  • 추세강도 = MAX(0, 1 - Var(나머지)/Var(추세+나머지) )

  • 계절강도 = MAX(0, 1 - Var(나머지)/Var(계절+나머지) )

3) 성분 합산으로 예측하기

  • 계절성분 제거된 시계열 : 나이브 예측값, 표류예측, 비계절성 ARIMA예측

  • 계절성분 시계열: 나이브 계절성 예측값

  • 더하기

4) seasonal sub-series plot 시각화

; 시간에 따른 계절성분의 변화 with 평균

 

#Exponential Smoothing 예측기법

1) 단순 ES ; 관측치의 가중평균 (초기값, 가중치가 매개변수임)

2) 선형추세 ES : 관측치의 가중평균 + 추세(기울기)의 가중평균 * 예측시차

  • 과거의 추세(기울기)가 시간이 지나도 유지된다.

3) 감쇠추세 ES : 관측치의 가중평균 + 추세(기울기)의 가중평균 * 예측시차의 등비급수

  • 과거의 추세(기울기)가 시간이 지날수록 약해진다.

  • alpha = 1 : 최근 데이터에 민감한 절편. Beta = 0 : 시간에 따라 민감한 추세.

4) 계절성 선형추세 ES : 관측치의 가중평균 + 추세(기울기)의 가중평균 * 예측시차 + 계절성 가중평균

  • 덧셈 기법은 계절성 변동이 시계열 전반에 걸쳐 거의 일정할 때 사용

  • 곱셈 기법은 계절성 변동이 시계열의 수준에 비례하게 변할 때

5) 계절성 감쇠추세 ES : {관측치의 가중평균 +추세(기울기)의 가중평균 * 예측시차의 등비급수} * 계절성 가중평균

  • 덧셈 기법은 계절성 변동이 시계열 전반에 걸쳐 거의 일정할 때 사용

  • 곱셈 기법은 계절성 변동이 시계열의 수준에 비례하게 변할 때 ; 예측값의 수준이 증가함에 따라 더 크고 증가하는 계절성 변동을 설명함.

예측 범위(forecast horizon) 길이, 테스트 데이터 크기, 예측 오차 측정 방식, 데이터의 빈도 등 여러 변수에 의해 예측 작업이 변할 수 있기 때문에, 한 가지 기법이 모든 예측 시나리오에 대해 다른 모든 기법보다 좋을 것이라고 보장하기 어렵습니다. 어떤 한 가지 예측 기법에서 필요한 것은 일관적인 예측값입니다. 이렇게 얻은 예측값은 수작업으로 진행한 것과 자주 비교해야 합니다.

 

##ETS 예측기법 (Error,Trend,Season)

; ETS가 ARIMA, SARIMA보다 성능이 좋은 편인듯..

 

1) 혁신상태공간모델 for 예측구간!

  • 과측데이터 측정식(Measurement equation)

  • 비관측 성분/상태(수준, 추세, 계절성)가 시간에 따라 어떻게 변하는지 기술하는 몇 가지 상태식(state equation)

    • 혁신 --> 덧셈/곱셉 오차

      : 수준식(관측치)에 학습오차항 추가하기 : 곱셈오차 - 데이터가 양수일 때만 사용

    • 상태 --> None/선형/감쇠 추세, 공간 --> None/덧셈/곱셈 계절성

from statsmodels.tsa.exponential_smoothing.ets import ETSModel

model = ETSModel(austourists, error="add", trend="add",damped_trend=True,
				# simple exponential smoothing
				; none
				# heuristic
        initialization_method='heuristic'
				# Holt-Winters’ seasonal method
				seasonal="add",seasonal_periods=4
                )
fit = model.fit()

# prediction
pred = fit.get_prediction(start='2014', end='2020')

simulated = fit.simulate(anchor="end", nsimulations=17, repetitions=100)

for i in range(simulated.shape[1]):
    simulated.iloc[:,i].plot(label='_', color='gray', alpha=0.1)
df["mean"].plot(label='mean prediction')
df["pi_lower"].plot(linestyle='--', color='tab:blue', label='95% interval')
df["pi_upper"].plot(linestyle='--', color='tab:blue', label='_')
pred.endog.plot(label='data')
plt.legend()

*https://www.statsmodels.org/dev/examples/notebooks/generated/ets.html#Holt-Winters'-seasonal-method

 

# 여러개 계절성이 존재하는 경우

1. STL ; # pip install statsmodels

2. dynamic harmoic regression : covariate 있음

3. TBATS (Exponential smoothing state space model with Box-Cox transformation, ARMA errors, Trend and Seasonal components) ; # pip install tbats

  • TBATS의 특장점
    • 계절성 패턴이 변하지만, 느리게 변함.

    • covariate 없음

    • 단계별 선형 함수와 일별 계절성 패턴을 허용하기 위한 회귀

 

# Prophet 정리 잘 되어있는 블로그

m-insideout.tistory.com/m/13

 

[논문 리뷰] 페이스북 시계열예측 모델 | prophet

2017년 페이스북에서 공개한 시계열 예측 방법인 prophet 논문을 리뷰해보려고 합니다. prophet은 R/Python 라이브러리도 공개되어 있어서 적용하기도 쉽고 날짜 정보와 예측할 y만 있으면 되기 때문에

m-insideout.tistory.com

 

 

'Statistics > Time Series Analysis' 카테고리의 다른 글

TSA - 5. 동적회귀  (0) 2021.01.22
TSA - 4. 자기회귀  (0) 2021.01.22
TSA - 2. 일반회귀  (0) 2021.01.22
TSA - 1. 시각화 및 벤치마크 예측기법  (0) 2021.01.22
모수추정방법 /  (0) 2021.01.22