前日終値と当日終値の差で予測できるか?日経平均でテストしてみた。
前日差を使用した、翌週の予測を立てる
と、いうことで過去の値動きの金額をもとに未来の予測ができるかどうかを試したいと思い、今回ディープラーニングで予測を立てられるか検証してみようと思います。
データの準備
と、いうことで例の如くyfinanceライブラリを使い、2000年1月のデータから2023年の12月のデータを取得しました。今回は日経平均の終値をもとに分析をしていきます。今後ある程度個別株で試してみたいと思っているので、これはまたお楽しみに。
import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
# 日経平均株価のデータを取得
n225 = yf.download("^N225", start="2000-01-01", end="2023-12-31")
# 終値のチャート用データ
closing_prices = n225['Close']
# 前日差(終値の差分)のチャート用データ
daily_diff = n225['Close'].diff()
# チャートの作成
plt.figure(figsize=(14, 7))
# 終値のチャート
plt.subplot(1, 2, 1) # 1行2列の1番目
plt.plot(closing_prices, label='終値', color='blue')
plt.title('日経平均株価の終値')
plt.xlabel('日付')
plt.ylabel('終値')
plt.legend()
# 前日差のチャート
plt.subplot(1, 2, 2) # 1行2列の2番目
plt.plot(daily_diff, label='前日差', color='red')
plt.title('日経平均株価の前日差')
plt.xlabel('日付')
plt.ylabel('前日差')
plt.legend()
plt.tight_layout()
plt.show()
まず、このコードで2020年からの終値と前日差データ取れているか一応チャートの形で確認。
みた感じしっかりとデータを取得できているようなので、このデータを取り合えずバックアップ兼ねて、csvに保存します。
# daily_diffをCSVファイルに保存
daily_diff.to_csv('daily_diff.csv', header=True)
ディープラーニング実施。
今度は全四週間の前日差を使い、どのくらいの差があるかを計算し、それをディープラーニングにかけていきます。以下、コード
import numpy as np
import pandas as pd
from keras.models import Sequential
from keras.layers import Dense
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# データの準備
# weekly_diff_avg_new に週ごとの平均前日差が含まれていると仮定
X = []
y = []
for i in range(len(weekly_diff_avg) - 4):
X.append(weekly_diff_avg['Close'].iloc[i:i+4].values)
y.append(weekly_diff_avg['Close'].iloc[i+4])
X = np.array(X)
y = np.array(y)
# データの標準化
scaler = StandardScaler()
X = scaler.fit_transform(X)
# データを訓練セットとテストセットに分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# モデルの構築
model = Sequential([
Dense(64, activation='relu', input_shape=(4,)),
Dense(64, activation='relu'),
Dense(1)
])
model.compile(optimizer='adam', loss='mse')
# モデルの訓練
model.fit(X_train, y_train, epochs=100, validation_split=0.2, verbose=1)
# モデルの評価
test_loss = model.evaluate(X_test, y_test)
print(f"テストデータの損失: {test_loss}")
スコアはテストデータの損失: 12607.6162109375との結果。ちなみに0に近ければ近いほどOKとのこと。
その後、改善したコードでは
テストデータの損失: 0.015102462843060493との結果が出ており、このラーニング情報をもとに翌週の前日差は
予測される翌週の平均前日差: -69.5047378540039
と、いう結果になりました。
来週3/25の日経平均はおそらく横ばい
前日差が100円未満のため、おそらく横ばいであることが考えられます。おそらくマイナス金利の解除されるという材料が出てしまっており、本日日経平均はプラス1000円とかなり上昇しています。そのため、売買が拮抗すると考えられると予測されます
※あくまでも参考にされても問題ないと思いますが、未来を確約する結果ではございません。また、投資を勧める内容ではないことを念の為、こちらで宣言いたします。
修正したディープラーニングのコード LSTM採用
もし、よかったら以下に今回の修正したディープラーニングのコードと、取得した日経平均のデータを置いておりますので、ご興味あればお試しください。
ここから先は
¥ 300
この記事が気に入ったらサポートをしてみませんか?