見出し画像

機械学習(K-最近傍法)を用いた株価予測

こんにちは、高橋勇気です。

最近、機械学習(AI)の勉強をしており、その勉強過程で分析したことを記事にしたいと思います。

AIと聞くと非常に難解で複雑なプログラミングが必要なイメージがありますが、初歩的なAIであれば、全然そんなことがありません。

今回は、数あるAIの中で最もシンプルな機械学習を選び、非常に簡単な分析を行ってみました。

具体的に用いた機械学習はK-最近傍法になります。

また以下の書籍を参考にプログラムを構築しております。
機械学習の初心者にとっても非常に分かりやすく書かれており、”まず動くものを作る”と言う意味では大変参考になりました。

K-最近傍法とは

  • 主にクラス分類で使用される最もシンプルな機械学習の1つ

  • K-NN法とも呼ばれる(K-Nearest Neighbor Algorithm)

ウィキペディアはこちら 

K-最近傍法の簡単な説明はこちらをご覧ください。
尚、K-最近傍法で最も重要なパラメータはKとします。これは端的に言いますと、予測を行う上でいくつのデータを参照するかになります。

K-最近傍法のイメージ図

学習データとして青丸と赤丸のデータが与えられており、黄色の星が予測対象となります。

この図表ではK-最近傍法を用いて黄色の星がグループAとグループBのどちらに属するかを予測したいと思います。プロセスは以下です。

まずはK-最近傍法で最も重要なパラメータであるKを決定します。この場合はK=6。

既に与えられているデータ(学習データ)と予測対象を1つの空間にプロットし、距離が近いものからK個選択する。その後、選ばれたK個のグループを多数決で決定する仕組みである。

この場合はグループAが4つ、グループBが2つであるため、多数決の結果、黄色の星はグループAに属すると予測することになります。

 

使用したデータ

2020年10月から2021年9月までの日次データ(約200営業日)

予測対象:日経平均株価
予測に使用した変数は3パターン。
①   米国国債10年、ドル円
②   米国国債10年、ドル円、原油、SP500
③   米国国債10年、ドル円、ユーロドル、SP500、DAX、ゴールド、原油、VIX'

 ①から③のデータを用いて、翌日の日経平均株価が上昇するか、下落するかをK-最近傍法を用いて分析していきます。

 

分析手法

約200営業日のデータを学習データと検証データに分割する必要があります。

機械学習では全データの75%で学習し、残りの25%で性能を検証するケースが多いため、本分析でも同じようにしております。つまり2020年10月から2021年6月までのデータを学習データとし、2021年7月から2021年9月までのデータを検証データとして性能を分析しました。

 

分析ツール

Scikit-learnをJuputer Note Book上で分析を実施しました。
使用言語はもちろんPythonです。

 

本分析の注意点

用いている市場データですが、公表されているデータの時間帯が異なります。

具体的にはドル円は24時間取引されておりますが、日経平均株価は9時から15時までです。この分析では便宜的に”1日”の値幅又は変化率で分析していることから使用しているデータはかならずしも同時間帯の値幅ではないことに注意が必要です。

また各国で休日は当然異なりますが、この休日調整も施しておりません。例えば、米国市場だけが休日の場合、その日の値動きはゼロとして分析しております。

  

分析結果①

まずは米10年金利とドル円を用いて翌日の株価が上昇するか、下落するかと分析します。
散布図は以下です。

米10年金利とドル円の値動きと日経平均株価の上昇or下落

横軸が米10年金利の変化幅。縦軸がドル円の変化(%)です。
また青丸は翌日の日経平均株価が下落したことを、赤三角は上昇したことを示しています。

データ数が200営業日であるため、かなり被っており、特に学びのある結果ではなかったです。

次にK-最近傍法を用いて、予測精度を分析していきます。

上述した通り、K-最近傍法で最も重要なパラメータはKです。つまり予測したい点からいくつの近い学習データを用いるかです。このKについては10から200までの変数としております。

2つの変数を用いた日経平均株価の予測精度

このグラフは横軸がK、縦軸が予測精度を示しています。
青線は学習データを用いた予測精度、赤線は検証データを用いて予測精度です。

2020年10月から2021年6月までのデータを学習データとして使用し、2021年7月以降の日経平均株価の上下を予想します。その後、予測が当たったかどうかを事後的に確認し、予測精度を計算しているわけです。縦軸のAccuracyが0.55は、2021年7月から9月までの約60営業日の内、55%(33営業日)の日経平均株価の上下を予測できたことを示します。

ここで、値幅は考えておりません。
日経平均株価の上昇を予想した場合、10円の上昇でも1000円の上昇でも同じです。方向だけを予測しております。

このグラフでは、当然ですが、検証データの予測精度(赤線)に注目です。Kの数が少なすぎると勝率は50%程度であり、全く予測になっておりませんが、Kが75位までは徐々に予測精度が向上しており、学習効果の表れでしょう。しかしKが75位からは特に学習が進んでいるわけではないため、K=75を境に学習がストップしていることが分かります。

 

分析結果②

米10年金利とドル円に加えて、原油とSP500も追加しました。
コモディティの代表指数である原油と米株の代表指数であるSP500を追加しております。

個人的には翌日の日経平均株価に対しては前日の米株の動きが大きく影響を与えていると考えているため、予測精度の向上に期待です。

 予測精度は以下になります。

4つの変数を用いた日経平均株価の予測精度

残念ながら予測精度は向上しませんでした。分析結果①と同様に予測精度は55%程度になります。
米株を学習データに追加したものの、日経平均株価の予測精度向上に寄与しなかったことは意外です。

 

分析結果③

さらにユーロドル、DAX(ドイツ株)、ゴールド、VIXも加えて8つの指数を説明変数として日経平均株価を予測していきます。

分析結果②は残念な結果となりましたが、学習させる変数を増やしていることから予測精度の向上に期待です。 

予測精度は以下になります。

8つの変数を用いた日経平均株価の予測精度

 予測精度は60%以上まで上昇しました。特にKが30位や100位では予測精度は65%と非常に高い結果となっております。

このグラフを見て、気になったことが2つあります。

まず1つ目はKが30から75にかけて予測精度が低下している点です。過学習を起こしている可能性が高そうですね。

また2つ目はKが100以上になると、検証データを用いた予測精度が訓練データを用いた予測精度を上回っております。普通では起こりえない現象です。なぜこのような事象が発生したかは不明ですが。

 これらを踏まえると使用するKは30にするのが良いかもしれません。

 

最後に

今回はK-最近傍法という機械学習の中では最もシンプルな手法を用いて市場の値動きを分析してみました。

今後はもう少し高度なAIを用いて市場の分析結果を報告していきたいと思っております。

もしこの記事を読んで、少しでも面白かったと感じて頂けた方はスキを押していただけると嬉しいです。また何か質問やご意見などありましたらコメント欄にお願いいたします。
リクエストもお待ちしております 

高橋勇気

この記事が気に入ったらサポートをしてみませんか?