본문 바로가기
Data Analysis/Scipy

3. [Python] Time Series Decomposition

by 베짱이28호 2022. 10. 2.

3. [Python] Time Series Decomposition

 


 

1. 시계열 분해

시계열 분해는 시계열 데이터를 여러 구성 요소로 나누어 분석하는 기법이다.

 

2. 시계열 분해의 구성 요소

  • 시계열 데이터는 일반적으로 다음 세 가지 주요 구성 요소로 분해된다.
    • X = T + S + R
  • 추세(Trend): 데이터의 장기적인 변화 방향
    • 시계열 데이터에서 이동평균 추출
  • 계절성(Seasonality): 일정한 주기로 반복되는 패턴
    • 주기가 p인 시계열로 분해 시, 인덱스가 0~p-1인 데이터끼리 모아서 평균을 낸다고 생각하면 된다.
  • 잔차(Residual): 추세와 계절성으로 설명되지 않는 불규칙한 변동
    • R = X - (T + S)

3. Scipy 코드

from scipy import stats
from statsmodels.tsa.seasonal import seasonal_decompose

p = 7
decomposition = seasonal_decompose(daily_revenue['daily_revenue'], period=p)
attributes = ['observed', 'trend', 'seasonal', 'resid']

fig, axes = plt.subplots(4,1,figsize=(12,10))
fig.suptitle(f'주기성 {p}일', fontsize=16)

for ax, attr in zip(axes, attributes):
    data = getattr(decomposition, attr)
    data.plot(ax=ax)
    ax.set_title(attr.capitalize(), fontsize=13)

plt.tight_layout()
plt.show()

  • 가지고있는 1년의 매출 데이터에 대해서 7일 단위로 시계열 분해를 진행한 결과.
  • Trend에서 하반기에서 상승하는 것을 확인할 수 있다.
  • Window size를 늘리면 곡선이 완만해진다.
  • 푸리에 변환과 비슷한 방식이라고 생각하면 될 듯 하다. (도메인이 다르긴 하지만.. )
    • 푸리에 변환에서는 DC에서 AVG를 사용하는 반면, 시계열 분해에서는 MAVG를 사용한다.
    • signal X를 DC + AC + Noise로 구분하는 방법

'Data Analysis > Scipy' 카테고리의 다른 글

4. [Python] Chi-Square test  (0) 2022.10.08
2. [Python] ANOVA  (0) 2022.09.25
1. [Python] T-test  (0) 2022.08.29

댓글