자기 상관
ACF (Auto Correlation Function)
- 정의: 시계열 데이터에서 서로 다른 시점(lag) 간의 상관계수. (1시점 전과 현재, 2시점 전과 현재, ... )
- 용도: 시계열 정상성, 계절성, 추세 등 특성 파악 사용.
- 실습 데이터
temp = pd.read_excel('washington_temp.xlsx') # 기온 데이터 불러오기
temp['date'] = pd.to_datetime(temp[['Year', 'Month', 'Day']]) # 컬럼으로 나눠진 연, 월, 일을 하나의 날짜로 합침
temp.set_index('date', inplace=True) # 날짜를 인덱스로
- 월평균 기온 데이터
monthly = temp.resample('M').AvgTemperature.mean()
monthly.plot() # 월평균 기온 그래프
-
Python ACF 계산:
from statsmodels.tsa.stattools import acf
acf(monthly) # ACF 값 계산: 6개월(-0.92), 12개월(+0.91) 등 주기적 상관 확인 -
Python ACF 그리기:
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(monthly) # ACF 그래프 그리기 -
ACF Plot 해석:
- 막대: 각 시차(Lag)별 자기 상관 계수.
- 하늘색 음영: 자기 상관 계수 신뢰 구간(오차 범위). 막대가 이 범위 벗어나야 통계적 유의미.
- 시차 커질수록 데이터 수 부족해져 오차 범위 넓어짐.
- 추세 있는 비정상 시계열: ACF 서서히 감소.
- 계절성 있는 시계열: 계절성 주기마다 ACF 높게 나타남.
차분 (Differencing)
- 정의: 현재 시점 값 - 이전 시점 값 (일정 시점 간 차이).
- 목적: 시계열 정상화(stationarize). 선형적 추세 제거 효과.
- Python:
.diff()# 맥주 생산량 데이터 (추세, 계절성 있음)
# beer = pd.read_excel('beer.xlsx', ...)
beer_diff1 = beer.production.diff().dropna() # 1차 차분 (바로 전 값과의 차이)
beer_diff1.plot()
plot_acf(beer_diff1) # ACF 보면 추세 감소, 계절성 뚜렷해짐
plt.show() - 계절 차분: 계절성 제거 위해 계절 주기만큼 차분.
# 분기 데이터이므로 1년(4분기) 간격 차분
beer_diff4 = beer.production.diff(4).dropna()
beer_diff4.plot()
plot_acf(beer_diff4) # ACF 보면 추세/계절성 거의 제거됨 (정상성 확보)
plt.show()