STL 분해
LOESS
- 국소 회귀 평활(LOESS, Locally Estimated Scatterplot Smoothing)
- 시계열의 각 부분에서 시간 t에 대한 국소 회귀를 적용하여 매끄러운 곡선을 추정
STL 분해
- STL: LOESS를 사용한 계절성과 추세 분해
- Seasonal and Trend decomposition using LOESS
- R. B. Cleveland, W. S. Cleveland, McRae, Terpenning의 1990년 방법
- 특징:
- 정해진 함수 모양에 제한되지 않는 계절 패턴 추정
- 계절 성분이 시간에 따라 변하는 경우에도 적용
- 추세와 계절 성분의 매끄러운 정도 조절
- 이상점의 영향 조절
실습 준비
import pandas as pd
- 월별 전자 장비 주문 지수를 연·월순으로 정리
df = pd.read_excel('elecequip.xlsx')
long_form = pd.melt(df, id_vars=['year'], var_name='month', value_name='demand')
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
long_form['month'] = pd.Categorical(long_form['month'], categories=months, ordered=True)
ym = long_form.sort_values(['year', 'month']).dropna().reset_index(drop=True)
STL 적용
period: 계절성 주기- 월별 데이터에서 1년 주기는 12
.fit(): 추세·계절·나머지 성분 추정
from statsmodels.tsa.seasonal import STL
result = STL(ym.demand, period=12).fit() # 월별 데이터의 1년 주기
result.plot();
실행 결과
<Figure size 640x480 with 4 Axes>

- 그래프 순서: 관측값(
demand), 추세(Trend), 계절 성분(Season), 나머지 성분(Resid)
이상점의 영향 조절
robust=True: 일시적으로 크게 이탈한 관측값의 영향을 추세와 계절 성분에 적게 반영
STL(ym.demand, period=12, robust=True).fit().plot()
실행 결과
<Figure size 640x480 with 4 Axes>
<Figure size 640x480 with 4 Axes>

추세의 매끄러움
trend: 추세를 평활하는 구간의 길이- 값이 클수록 더 매끄러운 추세 추정
period보다 큰 홀수로 지정
STL(ym.demand, period=12, trend=13).fit().trend.plot() # 주기 12보다 큰 홀수
실행 결과
<Axes: >
<Figure size 640x480 with 1 Axes>

계절 성분의 매끄러움
seasonal: 계절 성분을 평활하는 구간의 길이- 값이 클수록 계절 성분이 더 매끄럽게 변함
- 3 이상의 홀수로 지정. 기본값은 7
- 예제의
seasonal=3도 유효한 설정
STL(ym.demand, period=12, seasonal=3).fit().seasonal.plot() # 계절 성분의 평활 구간
실행 결과
<Axes: >
<Figure size 640x480 with 1 Axes>

퀴즈
LOESS의 원리를 가장 잘 설명한 것은 무엇인가요?
퀴즈를 풀려면 대화형 기능을 불러와야 합니다.