파이썬과 머신러닝을 활용한 주식 시장 변동성 예측

소개

주식 시장은 변동성이 높아 예측하기 어렵다는 특징을 가지고 있습니다. 그러나 최근에는 파이썬과 머신러닝을 활용하여 주식 시장의 변동성을 예측하는 방법이 많이 연구되고 있습니다. 이 글에서는 파이썬과 머신러닝을 사용하여 주식 시장 변동성을 예측하는 방법에 대해 알아보겠습니다.

데이터 수집

주식 시장의 변동성을 예측하기 위해서는 과거의 주가 데이터가 필요합니다. 이를 위해 주식 데이터를 수집해야 합니다. 파이썬의 pandas 라이브러리를 사용하여 주식 데이터를 입력할 수 있습니다. 주식 데이터는 주식 가격, 거래량, 시장 지수 등을 포함하여야 합니다.

import pandas as pd

# 주식 데이터를 가져오는 함수
def get_stock_data(symbol, start_date, end_date):
    stock_data = pd.read_csv(f'{symbol}.csv')
    stock_data['Date'] = pd.to_datetime(stock_data['Date'])
    stock_data = stock_data.set_index('Date')
    stock_data = stock_data.loc[start_date:end_date]
    return stock_data

# 예시: 삼성전자 주식 데이터 가져오기
start_date = '2021-01-01'
end_date = '2021-12-31'
samsung_data = get_stock_data('005930', start_date, end_date)

특성 추출

주식 데이터를 사용하여 머신러닝 모델을 학습하기 위해서는 적절한 특성을 추출해야 합니다. 주식 시장의 변동성을 예측하는 데에는 대부분 기술적 분석 지표를 사용합니다. 대표적인 기술적 분석 지표로는 이동평균선, 상대강도지수, 볼린저 밴드 등이 있습니다. 이러한 지표들을 파이썬의 라이브러리를 사용하여 추출할 수 있습니다.

import talib

# 이동평균선 추출
samsung_data['MA10'] = talib.SMA(samsung_data['Close'], timeperiod=10)
samsung_data['MA20'] = talib.SMA(samsung_data['Close'], timeperiod=20)

# 상대강도지수 추출
samsung_data['RSI'] = talib.RSI(samsung_data['Close'])

# 볼린저 밴드 추출
upper, middle, lower = talib.BBANDS(samsung_data['Close'], timeperiod=20)
samsung_data['UpperBB'] = upper
samsung_data['MiddleBB'] = middle
samsung_data['LowerBB'] = lower

머신러닝 모델 학습

적절한 특성을 추출한 후에는 이를 사용하여 머신러닝 모델을 학습시킬 수 있습니다. 주식 변동성을 예측하기 위해 주로 회귀 모델과 분류 모델을 사용합니다. 대표적인 머신러닝 알고리즘으로는 선형 회귀, 랜덤 포레스트, 신경망 등이 있습니다. 파이썬의 scikit-learn 라이브러리를 사용하여 간단하게 모델을 학습할 수 있습니다.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 특성과 타겟 데이터 분리
X = samsung_data[['MA10', 'MA20', 'RSI', 'UpperBB', 'MiddleBB', 'LowerBB']]
y = samsung_data['Volatility']

# 학습 데이터와 테스트 데이터로 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X_train, y_train)

# 선형 회귀 모델 예측
predictions = model.predict(X_test)

평가

학습한 모델의 성능을 평가하기 위해 일반적으로 평균 제곱근 오차(RMSE)나 결정 계수(R-squared) 등을 사용합니다. 머신러닝 모델의 성능을 평가하는 방법에는 다양한 지표가 있으며, 주식 시장 변동성 예측에는 주로 평균 제곱근 오차를 사용합니다.

from sklearn.metrics import mean_squared_error, r2_score

# RMSE 계산
rmse = mean_squared_error(y_test, predictions, squared=False)

# R-squared 계산
r2 = r2_score(y_test, predictions)

print(f'RMSE: {rmse}')
print(f'R-squared: {r2}')

결론

이렇게 파이썬과 머신러닝을 활용하여 주식 시장의 변동성을 예측하는 방법에 대해 알아보았습니다. 주식 시장은 많은 요인들에 의해 영향을 받기 때문에 완벽한 예측은 어렵지만, 데이터와 머신러닝 알고리즘을 활용하여 상당한 예측력을 얻을 수 있습니다. 참고로, 이 글의 내용은 예시를 위한 것이므로 실제 투자 결정에 활용하기 전에 추가적인 연구가 필요합니다.

참고 자료