머신러닝 파이썬

선형 회귀를 이용한 시계열 예측의 한계와 대안적인 방법(python)

fast learner 2023. 3. 17. 10:04

안녕하세요! 오늘은 선형 회귀를 사용하여 시계열 데이터를 예측하는 간단한 예제를 살펴보겠습니다. 이 예제에서는 구글(GOOG)의 주가 데이터를 사용하여 미래 주가를 예측해 볼 것입니다. 그런 다음 예측 결과의 한계점을 살펴보고 더 나은 방식을 제시하겠습니다.

먼저 필요한 라이브러리를 가져옵니다.

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error

구글의 주가 데이터를 읽어옵니다.

data = pd.read_csv('../data/GOOG.csv')
data_series = data['Close']
data_close = data[['Close']]

시계열 데이터는 순서를 유지해야 하므로 shuffle=False로 설정하여 train/test 데이터를 분할합니다.

train_data, test_data = train_test_split(data_close, test_size=0.2, shuffle=False)

선형 회귀를 위해 데이터를 Numpy 배열로 변환합니다.

X_train = np.array(range(len(train_data))).reshape(-1, 1)
y_train = np.array(train_data['Close']).reshape(-1, 1)

참고: LinearRegression()을 사용하기 위해서 입력 변수는 2D numpy array 이어야합니다.  reshape(-1,1)은 2d 열벡터로 변환해주는 코드입니다. 

선형 회귀 모델을 훈련시키고 예측을 수행합니다.

lr_model = LinearRegression()
lr_model.fit(X_train, y_train)

X_test = np.array(range(len(train_data), len(train_data) + len(test_data))).reshape(-1, 1)
y_test = test_data['Close'].values
y_pred = lr_model.predict(X_test)

모델의 성능을 평가합니다.

mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")
print(f"R-squared: {r2:.2f}")

예측 결과를 시각화합니다.

plt.figure(figsize=(10, 5))
plt.plot(data.index, data['Close'], label="Actual Price")
plt.plot(test_data.index, y_pred, label="Predicted Price", linestyle="--", color="r")
plt.xlabel("Date")
plt.ylabel("Stock Price")
plt.title("Stock Price Prediction using Linear Regression")
plt.legend()
plt.show()

예측 결과를 살펴보면, 선형 회귀를 사용한 시계열 예측의 성능이 좋지 않음을 알 수 있습니다. 이는 선형 회귀가 시계열 데이터의 복잡한 패턴, 추세, 계절성을 고려하지 못하기 때문입니다.

더 나은 방식으로는, 시계열 분석에 특화된 모델들을 사용하는 것이 좋습니다. 예를 들어, ARIMA(AutoRegressive Integrated Moving Average), SARIMA(Seasonal AutoRegressive Integrated Moving Average), Prophet 등의 모델들이 시계열 데이터의 추세, 계절성 및 자기 상관성을 고려하여 더 나은 예측 성능을 보입니다.

ARIMA 모델은 자기 회귀, 이동 평균, 차분의 개념을 결합하여 시계열 데이터의 비정상성을 처리하고, 시간에 따른 패턴을 고려할 수 있습니다. SARIMA 모델은 ARIMA 모델에 계절성 요소를 추가하여 시계열 데이터의 계절성까지 고려할 수 있습니다.

Prophet은 Facebook에서 개발한 시계열 예측 라이브러리로, 시계열 데이터의 추세, 계절성 및 휴일과 같은 특별한 이벤트를 고려하여 성능이 우수한 예측 모델을 만들 수 있습니다.

이러한 고급 시계열 분석 모델을 사용하려면, 각 모델에 대한 추가 학습과 파이썬 라이브러리를 사용한 구현 방법을 익혀야 합니다. 예를 들어, Python에서는 statsmodels 라이브러리를 사용하여 ARIMA 및 SARIMA 모델을 구현할 수 있고, Prophet 모델은 Facebook에서 제공하는 별도의 라이브러리를 사용하여 구현할 수 있습니다.

이상으로 선형 회귀를 사용한 시계열 예측의 한계와 대안적인 방법에 대해 소개했습니다. 시계열 데이터 분석에 관심이 있다면, 선형 회귀 외에도 다양한 시계열 분석 모델을 배워 보시길 추천합니다. 이를 통해 더 나은 예측 성능을 얻어 시계열 데이터 분석 업무에 활용할 수 있습니다. 감사합니다!

 

 

 

 

 

 

728x90
반응형