以下のUdemyの講座を参考に、株価の機械学習をしようと思ったら、どうもうまくいかなくて奇怪学習になった話。
内容
過去の株価データから将来の株価を予測する。
期待するアウトプット
予測値を含んだ株価チャート
(お手本では、こんなの。緑が実測値、黄色が予測値)
実装したコード
# 機械学習(マシンラーニング)
df_nojima['label'] = df_nojima['Close'].shift(-30)
df_nojima.tail(20)
# label列を削除
X = np.array(df_nojima.drop('label', axis=1))
X = sklearn.preprocessing.scale(X)
# 学習精度を予測
predict_data = X[-30:]
X = X[:-30]
y = np.array(df_nojima['label'])
y = y[:-30]
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(
X, y, test_size = 0.2)
lr = sklearn.linear_model.LinearRegression()
lr.fit(X_train,y_train)
accuracy = lr.score(X_test, y_test)
accuracy
# 予測値を算出
predicted_data = lr.predict(predict_data)
predicted_data
# 株価の予測値を含んだチャートを描画
df_nojima['Predict'] = np.nan
last_date = df_nojima.iloc[-1].name
one_day = 1800
next_unix = last_date.timestamp() + one_day
for data in predicted_data:
next_date = datetime.datetime.fromtimestamp(next_unix)
next_unix += one_day
df_nojima.loc[next_date] = np.append([np.nan] * (len(df_nojima.columns) - 1), data)
df_nojima['Close'].plot(figsize=(15, 6), color='green')
df_nojima['Predict'].plot(figsize=(15, 6), color='orange')
plt.show()
得られたアウトプット
まとめ
なぜか、2015年以前の株価が黄色(予測値)に。忠実にお手本コードを模写したつもりだったが、眠気に負けて「まいっか」提出。せっかく最後までコードを打ち終えたので、もったいない精神から記録に残すことに。明日あらためて原因の追究、正しいアウトプットを提出したいと思う。