7/10 Today I Learned -1

boks·2024년 7월 10일
post-thumbnail

📖 학습한 내용

  • 시계열 분석- AirPassengers

📖 핵심내용

📌 시계열 분석- AirPassengers

기간을 인덱스로 변환

시각화의 용이성, 통합 및 병합, 정 기간에 대한 데이터 필터링의 장점이 있다.

df['Month'] = pd.to_datetime(df['Month'])
df2 = df.set_index(['Month'])

로그변환

  • 분포의 정상화
    비대칭적 분포에서 반복되는 차이의 값을 어느정도 일정하게 맞춰줄 수 있다.

  • 이상치의 영향 감소

  • 비율적 변화 분석 가능
    예를 들어, 10에서 20으로의 변화와 100에서 200으로의 변화를 동일한 비율로 볼 수 있게 도와준다.

  • 데이터의 스케일 조정

df2_log = np.log(df2)


-> 점점 커지던 진폭이 어느정도 일정해졌다.(분포의 정상화)

rolling statistics

  • 이동평균
    이동평균은 시계열 데이터의 노이즈를 줄이고 데이터의 일반적인 추세를 파악하기 위해 사용
    시계열데이터의 지정된 윈도우 범위 내에서 평균을 계산
    rol_mean = df2.rolling(window=12).mean()

  • 이동표준편차
    주어진 윈도우 크키 내에서 데이터의 변동성을 측정하는 지표
    rol_std = df2.rolling(window=12).std()

정상성 검사 (stationary test)

  • Augmented Dickey-Fuller (ADF) test
    테스트는 귀무가설로 데이터가 비정상적이라는 가정을 세우고, p-값이 일정 임계값보다 작으면 데이터가 정상적임
    비정상성을 띄는 데이터가 만연한 세상에, 임계값보다 작은 값이 나왔으므로, 귀무가설을 기각한다 -> 정상성을 띄는 데이터이다.

차분

  • 이동평균 제거
df3_logavg= df2_log - movingavg
df3_logavg.(inplace = True)


-> 각 값에서 이동평균을 제거

  • 지수가중 이동평균 빼기
wats=df2_log.ewm(halflife=12, min_periods=0, adjust=True).mean()
plt.plot(df2_log)
plt.plot(wats)

  • 미뤄진 자기자신과 빼기
shift=df2_log-df2_log.shift(4)
plt.plot(shift)

PACF, ACF

그래프를 보고 자기회귀(AR) 모형의 차수, 이동평균(MA)의 차수를 구한다. 여기까지 몇번 차분했는지에 따라 차분(Differencing)의 차수를 구할 수 있다.


이 과정을 반복하여 최적의 자기회귀(AR) 모형의 차수, 이동평균(MA)의 차수, 차분(Differencing)의 차수 조합을 찾는다.

ARIMA

odel = ARIMA(df2_log, order=(5,4,4))
model_fit = model.fit()
forecast = model_fit.forecast(steps=12)
print(forecast)

plt.figure(figsize=(10,6))
plt.plot(df2_log, label='Original')
plt.plot(forecast, label='Forecast', color='red')
plt.legend(loc='best')
plt.title('Air Passenger Forecast')
plt.show()

📖 흥미로운 점 / 새로 알게된 점

  • 정상성 (stationary)
    평균이 일정함
    분산이 일정함
    자기공분산이 일정함 :두 시점 간의 공분산이 시차(lag)에만 의존해야 함

📖 어려운 부분

  • rolling statistics
    사용하기 전에 계절성이 반복되는 기간을 측정해봐야하는지
profile
설계엔지니어의 변신

0개의 댓글