[파이썬] 파이썬을 이용한 데이터 시계열 분석 샘플 프로젝트

이번 포스트에서는 파이썬을 사용하여 데이터 시계열 분석 샘플 프로젝트를 만들어보겠습니다. 시계열 데이터는 시간의 흐름에 따라 기록된 데이터로, 예를 들어 주식 가격, 기후 데이터, 트래픽 데이터 등 여러 분야에서 사용되며 중요한 인사이트를 제공할 수 있습니다.

프로젝트 개요

이번 프로젝트에서는 주식 시계열 데이터를 사용하여 주가 예측을 해보겠습니다. 우리의 목표는 과거의 주식 가격 데이터를 기반으로 미래의 가격을 예측하는 모델을 만드는 것입니다. 이를 통해 주식 투자에 도움을 줄 수 있습니다.

데이터 수집

먼저, 주식 데이터를 수집해야 합니다. 이 프로젝트에서는 pandas_datareader 라이브러리를 사용하여 외부 API에서 주식 데이터를 가져올 것입니다.

import pandas as pd
import pandas_datareader.data as web

# 데이터 수집 기간 설정
start_date = '2015-01-01'
end_date = '2021-12-31'

# 주식 종목 및 데이터 소스 설정
stock_symbol = 'AAPL'
data_source = 'yahoo'

# 데이터 가져오기
df = web.DataReader(stock_symbol, data_source, start_date, end_date)

위의 코드에서 “AAPL”은 애플 주식을 의미합니다. 가져올 데이터의 시작일과 종료일을 설정한 후, DataReader 함수를 사용하여 주식 데이터를 가져옵니다. 이 데이터는 df 변수에 저장됩니다.

데이터 전처리

데이터를 가져왔다면, 전처리 과정을 통해 모델에 적합한 형태로 데이터를 가공해야 합니다. 주요한 전처리 단계로는 결측치 처리, 정규화, 특성 공학 등이 있습니다.

# 결측치 처리
df = df.dropna()

# 정규화
from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
df['Close'] = scaler.fit_transform(df['Close'].values.reshape(-1, 1))

# 특성 공학
df['Year'] = df.index.year
df['Month'] = df.index.month
df['Day'] = df.index.day

위의 코드에서는 결측치를 제거하고, Close 칼럼을 정규화합니다. 그리고 날짜 정보를 활용하여 Year, Month, Day 칼럼을 추가하는 특성 공학 작업을 수행합니다.

모델 학습

데이터를 전처리한 후에는 모델을 학습시킬 차례입니다. 이 프로젝트에서는 간단한 LSTM(Long Short-Term Memory) 모델을 사용하겠습니다.

from keras.models import Sequential
from keras.layers import LSTM, Dense

# 입력 시퀀스 준비
X = df[['Year', 'Month', 'Day', 'Close']].values

# 출력 시퀀스 준비
y = df['Close'].shift(-1).values[:-1]  # 다음 날 주가 데이터

# 데이터 분할
split_ratio = 0.8
split_idx = int(len(X) * split_ratio)

X_train, X_test = X[:split_idx], X[split_idx:]
y_train, y_test = y[:split_idx], y[split_idx:]

# 모델 구성
model = Sequential()
model.add(LSTM(128, input_shape=(X_train.shape[1], X_train.shape[2])))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')

# 모델 학습
model.fit(X_train, y_train, epochs=100, batch_size=32, verbose=1)

위의 코드에서는 입력 시퀀스 X와 출력 시퀀스 y를 준비합니다. 데이터를 학습 데이터와 테스트 데이터로 분할한 후, LSTM과 Dense 레이어를 사용하여 모델을 구성합니다. 마지막으로, 모델을 학습시킵니다.

결과 평가

마지막으로, 학습된 모델을 통해 예측을 수행하고 결과를 평가해보겠습니다.

y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

# 예측 결과 역정규화
y_train_pred = scaler.inverse_transform(y_train_pred)
y_test_pred = scaler.inverse_transform(y_test_pred)

# 실제값 역정규화
y_train_true = scaler.inverse_transform(y_train.reshape(-1, 1))
y_test_true = scaler.inverse_transform(y_test.reshape(-1, 1))

# 예측 결과 평가
from sklearn.metrics import mean_squared_error

train_rmse = mean_squared_error(y_train_true, y_train_pred, squared=False)
test_rmse = mean_squared_error(y_test_true, y_test_pred, squared=False)

print(f'Train RMSE: {train_rmse:.2f}')
print(f'Test RMSE: {test_rmse:.2f}')

예측 결과를 역정규화한 후, 실제값과의 평균 제곱근 오차(RMSE)를 계산하여 모델의 예측 성능을 평가합니다.

결론

이번 포스트에서는 파이썬을 사용하여 데이터 시계열 분석 샘플 프로젝트를 진행해보았습니다. 주식 데이터를 가져와 전처리를 수행한 후 LSTM 모델을 학습시켜 주가를 예측하는 모델을 만들었습니다. 이를 통해 여러분도 데이터의 시계열 특성을 파악하고 예측 모델을 개발할 수 있습니다.