시계열 데이터 분석 파이썬

시계열 데이터 분석 파이썬: 시간의 파급효과 활용하기

시계열 데이터 분석은 일정한 시간 간격으로 된 데이터에 대한 분석 기법으로, 경제, 금융, 기상청 등에서 널리 사용됩니다. 이번 포스팅에서는 파이썬을 이용한 시계열 데이터 분석의 기초부터 실전까지 살펴보겠습니다.

1. 시계열 데이터란?

시계열 데이터는 시간에 따라 측정된 데이터입니다. 예를 들면, 매일 평균 기온, 매월 판매량 등이 시계열 데이터입니다. 이러한 시계열 데이터는 시간의 파급효과를 분석함으로써 사건과 사건 간의 인과관계를 파악할 수 있습니다.

2. 시계열 데이터 분석 도구

시계열 데이터 분석을 수행하기 위해서는 다음과 같은 도구들이 필요합니다.

  • Pandas: 가장 기본적인 시계열 데이터 분석 라이브러리입니다.
  • Matplotlib: 데이터 시각화 도구입니다.
  • StatsModels: 시계열 모델링 및 추론을 위한 라이브러리입니다.
  • Prophet: Facebook에서 개발한 시계열 예측 도구입니다.
  • ARIMA: 시계열 예측 모델 중 가장 기본적인 ARIMA 모델입니다.

3. 예시: ARIMA 모델을 이용한 주식 가격 예측

ARIMA(Autoregressive Integrated Moving Average) 모델은 시계열 데이터 예측에 가장 많이 활용되는 모델 중 하나입니다. 이 모델을 이용하여 주식 가격을 예측하는 방법에 대해서 알아보겠습니다.

3-1. 데이터 불러오기 및 전처리

주식 데이터를 pandas를 이용해 불러옵니다. 이번에는 Yahoo Finance에서 제공하는 AAPL(Apple) 주식 데이터를 사용하겠습니다.

“`python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df = pd.read_csv(‘AAPL.csv’, sep=’,’)
“`

불러온 데이터를 살펴보겠습니다.

python
print(df.head())

다음과 같이 출력됩니다.

Date Open High Low Close Adj Close Volume
0 2010-01-04 30.490000 30.642857 30.340000 30.572857 26.466835 123432400
1 2010-01-05 30.657143 30.798571 30.464285 30.625713 26.512596 150476200
2 2010-01-06 30.625713 30.747143 30.107143 30.138571 26.090879 138040000
3 2010-01-07 30.250000 30.285715 29.864286 30.082857 26.042646 119282800
4 2010-01-08 30.042856 30.285715 29.865715 30.282858 26.215786 111902700

Date 컬럼을 날짜 형태로 변경해줍니다.

python
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)

3-2. 데이터 시각화

시각화를 통해 데이터의 패턴을 확인합니다.

python
plt.plot(df.index, df['Close'])
plt.xlabel('date')
plt.ylabel('price')
plt.show()

주식시계열데이터

결과적으로, 대충 상승 추세인 것으로 보입니다.

3-3. ARIMA 모델 학습 및 예측

ARIMA 모델을 학습시키기 전에 여러 구성 요소를 조정해야 합니다. 우리는 최적의 p, d, q를 선택하기 위해 그리드 서치 기법을 사용합니다.

“`python
import itertools
import warnings
from statsmodels.tsa.arima_model import ARIMA

warnings.filterwarnings(‘ignore’)

p = d = q = range(0, 4)
pdq = list(itertools.product(p, d, q))

aic_result = []
for param in pdq:
try:
model = ARIMA(df[‘Close’], order=param)
model_fit = model.fit(disp=0)
aic_result.append((param, model_fit.aic))
except:
continue

best_param, best_aic = min(aic_result, key=lambda x: x[1])
print(“best param : “, best_param, “best aic : “, best_aic)
“`

위 코드를 실행하면 (1, 1, 2) best aic : 55751.54562174539를 얻습니다.

최적의 파라미터를 구했으니 모델을 학습시키고 예측값을 구합니다.

python
model = ARIMA(df['Close'], order=best_param)
model_fit = model.fit(disp=0)
pred = model_fit.predict(start='2012-01-03', end='2012-03-30', dynamic=True)

마지막으로 시각화를 통해 예측값을 출력합니다.

python
plt.plot(df.index, df['Close'], label='True Value')
plt.plot(pred.index, pred.values, label='Predicted Value')
plt.xlabel('date')
plt.ylabel('price')
plt.legend(loc='best')
plt.show()

주식예측결과

시계열 데이터 분석을 위한 파이썬 라이브러리를 사용하여 간단한 ARIMA 모델을 구축하고 주식 가격을 예측해보았습니다. 시계열 데이터 분석은 관심 변수가 시간에 따라 변화하면서 상호작용하는 경우에 유용합니다. 앞으로 다양한 분야에서 시계열 데이터를 분석하는데 큰 도움이 되리라 생각됩니다.