- 내용:
- 주가 예측의 한계점
- 주가 변동 방향 예측의 중요성
- 주가 변동 방향 예측을 위한 데이터 준비
- LSTM 모델 구축 및 학습
- 모델 평가 및 결과 해석
주가 예측의 한계점
이전 강의에서는 주가의 정확한 가격을 예측하는 LSTM 모델을 구축하고 평가했습니다. 하지만 투자자 입장에서는 주가의 정확한 가격을 예측하는 것보다 주가가 오를지 내릴지를 예측하는 것이 더 중요할 수 있습니다. 주가의 작은 변동까지 정확히 예측하기는 어렵기 때문에, 가격의 오르내림을 예측하는 모델이 실질적인 투자 전략 수립에 더 유용합니다.
[이전강의] : [LSTM] 7. 모델 평가 및 예측
주가 변동 방향 예측의 중요성
주가 변동 방향을 예측하면 다음과 같은 장점을 가질 수 있습니다:
- 리스크 관리: 상승과 하락의 방향성을 예측하여 리스크를 줄일 수 있습니다.
- 투자 결정: 매수와 매도 시점을 더 정확하게 결정할 수 있습니다.
- 효율적인 전략: 가격의 절대적인 예측보다 방향성 예측이 더 실용적입니다.
주가 변동 방향 예측을 위한 데이터 준비
주가 변동 방향을 예측하기 위해서는 주가 데이터에서 상승(1) 또는 하락(0)을 나타내는 라벨을 생성해야 합니다.
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.model_selection import train_test_split
import numpy as np
# 주가 데이터 로드
data = pd.read_csv('AAPL.csv')
# 날짜 열 변환 및 인덱스 설정
data['Date'] = pd.to_datetime(data['Date'])
data.set_index('Date', inplace=True)
# 주가 변동 방향 라벨 추가
data['Target'] = (data['Close'].shift(-1) > data['Close']).astype(int)
data = data.dropna() # 결측값 제거
# 입력과 출력 데이터 분리
X = data[['Close']]
y = data['Target']
# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, shuffle=False)
# 데이터 정규화
scaler = MinMaxScaler(feature_range=(0, 1))
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
LSTM 모델 구축 및 학습
이제 주가 변동 방향을 예측하는 LSTM 모델을 구축하고 학습시켜보겠습니다.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, LSTM
# 데이터셋 생성 함수
def create_dataset(data, labels, time_step=1):
X, y = [], []
for i in range(len(data) - time_step):
a = data[i:(i + time_step), 0]
X.append(a)
y.append(labels[i + time_step])
return np.array(X), np.array(y)
time_step = 60
X_train, y_train = create_dataset(X_train, y_train.values, time_step)
X_test, y_test = create_dataset(X_test, y_test.values, time_step)
# LSTM 입력 형태로 데이터 재구성
X_train = X_train.reshape(X_train.shape[0], X_train.shape[1], 1)
X_test = X_test.reshape(X_test.shape[0], X_test.shape[1], 1)
# LSTM 모델 구축
model = Sequential()
model.add(LSTM(50, return_sequences=True, input_shape=(time_step, 1)))
model.add(LSTM(50, return_sequences=False))
model.add(Dense(1, activation='sigmoid'))
# 모델 컴파일
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
# 모델 학습
history = model.fit(X_train, y_train, epochs=10, batch_size=1, validation_data=(X_test, y_test))
모델 평가 및 결과 해석
학습된 모델을 사용하여 주가 변동 방향을 예측하고, 그 성능을 평가합니다.
from sklearn.metrics import accuracy_score, confusion_matrix
# 예측 수행
train_predict = (model.predict(X_train) > 0.5).astype(int)
test_predict = (model.predict(X_test) > 0.5).astype(int)
# 정확도 평가
train_accuracy = accuracy_score(y_train, train_predict)
test_accuracy = accuracy_score(y_test, test_predict)
print("Train Accuracy: {:.2f}%".format(train_accuracy * 100))
print("Test Accuracy: {:.2f}%".format(test_accuracy * 100))
# 혼동 행렬 출력
conf_matrix = confusion_matrix(y_test, test_predict)
print("Confusion Matrix:\n", conf_matrix)
결과 해석
- 정확도 (Accuracy): 예측 값이 실제 값과 일치하는 비율을 나타냅니다. 예를 들어, 테스트 정확도가 85%라면 모델이 테스트 데이터의 85%에서 주가의 변동 방향을 정확하게 예측했다는 의미입니다.
- 혼동 행렬 (Confusion Matrix): TP (True Positive), TN (True Negative), FP (False Positive), FN (False Negative)의 값을 통해 모델의 예측 성능을 평가할 수 있습니다. 예를 들어, TP는 주가가 오를 때 올린다고 예측한 경우의 수입니다.
이 강의에서는 주가의 정확한 가격을 예측하는 것의 한계를 이해하고, 주가 변동 방향을 예측하는 방법을 배웠습니다. 이를 통해 투자자들은 더 효율적이고 실질적인 투자 결정을 내릴 수 있습니다. 다음 강의에서는 모델의 성능을 더욱 향상시키기 위해 다양한 하이퍼파라미터 튜닝과 추가적인 기술을 탐구할 것입니다.
'비트코인 자동매매 프로그램 > [전략개발] 인공지능' 카테고리의 다른 글
[K-means clustering] 1. 인공지능을 활용한 주식 시장 레짐 감지 및 거래 전략 수립 (0) | 2024.06.17 |
---|---|
[K-means clustering] 0. 인공지능을 활용한 주식 시장 레짐 감지 및 거래 전략 수립 (0) | 2024.06.17 |
[LSTM] 7. 모델 평가 및 예측 (1) | 2024.06.13 |
[LSTM] 6. 모델 학습 (0) | 2024.06.13 |
[LSTM] 5. LSTM 모델 구축 (0) | 2024.06.13 |