머신러닝을 이용한 주식 예측(4)

LSTM의 경우 Data가 자꾸 전 데이터를 따라가려는 성질이 많은것 같다.

그래서 우선 머신러닝에 대해 기초를 배울겸 Linear구조로 구현하여 다음날에 대한 예측을 해보았다.

Layer의 구조는 아래와 같다.

def __init__()
    self.layer_1 = nn.Linear(self.input_size, 64)
    self.layer_2 = nn.Linear(64, 64)
    self.layer_out = nn.Linear(64, 1)

    self.relu = nn.ReLU()
    self.dropout = nn.Dropout(p=0.1)
    self.batchnorm1 = nn.BatchNorm1d(64)
    self.batchnorm2 = nn.BatchNorm1d(64)
    self.loss_function = nn.BCEWithLogitsLoss()
    self.optimizer = optim.Adam

def forward(inputs):
    x = self.relu(self.layer_1(inputs))
    x = self.batchnorm1(x)
    x = self.relu(self.layer_2(x))
    x = self.batchnorm2(x)
    x = self.dropout(x)
    x = self.layer_out(x)
    return x

내일 주식 상승 하락 예측

내일의 주식가격이 상승할지 하락할지를 예측하도록 해보았다.

Data는 삼성전자 주식을 1997년 7월 처음 상장했을 때부터 지금까지 데이터를 사용하였다.

학습데이터는 58%정도의 정확도를 보여주었다.

Epoch 050: Loss: 0.66487 Acc: 58.952

밑의 표는 sklearn에 있는 confusion_matrix함수를 실행한 결과다.

예측하고싶은 데이터에 대한 실제 결과와의 차이를 표로 쉽게 알 수 있다.

  예측 하락 예측 상승
실제 하락 414 524
실제 상승 415 627

sklearn의 classification_report에 대한 결과.

train data 와 test data가 비슷한 것을 알 수 있다.

다만 정확도가 좀 떨어진다.

                  precision    recall  f1-score   support

    (하락)0.0       0.50      0.44      0.47       938
    (상승)1.0       0.54      0.60      0.57      1042

    accuracy                           0.53      1980
   macro avg       0.52      0.52      0.52      1980
weighted avg       0.52      0.53      0.52      1980

내일 주식이 3%이상 상승할지 예측

이번에는 주식이 3%이상 오를지를 예측하도록 해보았다.

train Data는 예상이상의 정확도를 보여주었다.

Epoch 010: Loss: 0.60555 Acc: 68.500
Epoch 020: Loss: 0.48656 Acc: 86.500
Epoch 030: Loss: 0.42147 Acc: 87.750
Epoch 040: Loss: 0.31748 Acc: 95.250
Epoch 050: Loss: 0.24089 Acc: 95.250

그러나 test Data에서는 전혀 반대의 결과가 나왔다.

confusion_matrix함수를 실행한 결과다.

  3%이상 안오름 3%이상 오름
실제 안오름 2977 390
실제 오름 564 89

classification_report에 대한 결과다.

              	precision    recall  f1-score   support

         0.0       0.84      0.88      0.86      3367
         1.0       0.19      0.14      0.16       653

    accuracy                           0.76      4020
   macro avg       0.51      0.51      0.51      4020
weighted avg       0.73      0.76      0.75      4020

아주 낮은 정확도를 나타냈다. overfiting은 아닌것 같은게.. 하나의 주식 Data만을 학습시킨게 아니라,

여러개의 다른 주식들의 data를 2020-06-01부터 지금까지의 Data를 학습시켰고, 또 다른 주식으로 Predict했을때의 결과다.

이 때 다른 주식들을 계속 학습 시켰을 때는 정확도가 꾸준히 높은 정확도를 나타냈었다..

따라서 왠지는 아직 잘 모르겠다.. 분석 필요.