이번 포스트에서는 파이썬을 사용하여 데이터 시계열 분석 샘플 프로젝트를 만들어보겠습니다. 시계열 데이터는 시간의 흐름에 따라 기록된 데이터로, 예를 들어 주식 가격, 기후 데이터, 트래픽 데이터 등 여러 분야에서 사용되며 중요한 인사이트를 제공할 수 있습니다.
프로젝트 개요
이번 프로젝트에서는 주식 시계열 데이터를 사용하여 주가 예측을 해보겠습니다. 우리의 목표는 과거의 주식 가격 데이터를 기반으로 미래의 가격을 예측하는 모델을 만드는 것입니다. 이를 통해 주식 투자에 도움을 줄 수 있습니다.
데이터 수집
먼저, 주식 데이터를 수집해야 합니다. 이 프로젝트에서는 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 모델을 학습시켜 주가를 예측하는 모델을 만들었습니다. 이를 통해 여러분도 데이터의 시계열 특성을 파악하고 예측 모델을 개발할 수 있습니다.