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 |
댓글