- 내용:
- 주가 예측의 한계점
- 주가 변동 방향 예측의 중요성
- 주가 변동 방향 예측을 위한 데이터 준비
- 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. 모델 학습 (1) | 2024.06.13 |
[LSTM] 5. LSTM 모델 구축 (0) | 2024.06.13 |