見出し画像

機械学習(サポートベクターマシン)を用いた株価予測

皆さん
こんにちわ、高橋勇気です。

本日は先月に引き続き、AIを用いた株価予測について記事を書きたいと思います。
これまで、K-最近傍法とニューラルネットワークを用いた株価予測をしてきましたが、今回はサポートベクターマシンになります。

機械学習(K-最近傍法)を用いた株価予測
機械学習(ニューラルネットワーク)を用いた株価予測

今回は株価の分析になりますが、私はメガバンクでFXのトレーダーをしていたことがあります。
その経験を元に以下の記事も書いておりますので、お読みいただけると嬉しいです。

メガバンクの元外国為替トレーダーが語る、FXをやる前に絶対に知っておきたい11個のこと

それではいよいよ本題です。

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


サポートベクターマシンとは

今回、使用するサポートベクターマシンは機械学習の中でも最も知名度の高い分析手法の1つになります。
簡単なイメージ図ですが、このようになります。

サポートベクターマシンの概念図①

ここではグループAとグループBの2つがあり、これを分類するための境界線を書きたいとします。この時、どのような境界線が”最も適切”と言えるでしょうか。
上図では具体例として赤線と黄色線を書いておりますが、サポートベクターマシンでは境界付近のデータ(サポートベクタと言う)から境界線までの距離(マージンと言う)が最大になるように境界線が書かれます。
上記の例では黄色線ではなく赤線になります。

しかしデータ量が大きくなり、かつ複雑になると、下記のように誤判別が発生することもあるでしょう。

サポートベクターマシンの概念図②

ここで重要なことはサポートベクターマシンにおいては、マージンを最大化しつつ、誤判別を少なくするような境界線を引くことが求められております。
数式で書くとこのようなになります。

サポートベクターマシンの数式

さてサポートベクターマシンを用いて分析する際に、人が分析前に決めなければいけない変数が2つあります。
1つ目は正則化パラメータ(C)になります。
もう1つはカーネルのバンド幅と呼ばれるgammaです。
詳しい説明は省略いたしますが、簡単に言いますと、境界線の複雑度合いです。例えばgammaが小さいと境界線は直線になり、gammaが大きいと曲線になります。

サポートベクターマシンを用いて分析する際はこの2つの変数を事前に決定した上で行う必要があります。
ここでこの2つの変数の最適数値を求める方法の1つにグリッドサーチと呼ばれる手法があります。

グリッドサーチとは

グリッドサーチの説明は非常に簡単です。
端的に言うと、モデルに決定しなければいけない変数の候補値を与えることで、それらの候補値全てを総当たり検証する手法になります。
例えば、上述の例で以下の候補値を与えたとしましょう。

C =  [0.1, 1, 10, 100, 1000, 10000, 100000]の7パターン
gamma = [0.01, 0.1, 1, 10, 100,1000, 10000の7パターン

この場合7パターン×7パターンの合計49パターンを総当たりで検証する手法になります。

交差検証とは

分析結果を記載する前に機械学習の代表的な検証方法の1つ交差検証について説明いたします。
機械学習において、モデルの精度を計算する際、データを学習データと検証データの2つに分けます。ここで交差検証を用いると、データを複数のパターンで分割し、全ての分割パターンでモデルの精度測定を実施いたします。
概念図は以下になります。

交差検証の概念図

”Split 1”においてまず白塗りの4ボックスのデータを用いて学習し、黒塗りのボックスのデータを用いてモデルの精度を検証します。これを”Split 5”までの5パターン実施し、その予測精度の平均値をモデル自体の予測精度として出力したします。

データによっては最初の方と最後の方でデータに偏りが発生してしまうケースもあるでしょう。これらのデータに対してより正確にモデルの精度を測定するための検証手法が交差検証になります。

使用したデータ

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

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

①から③のデータを用いて、翌日の日経平均株価が上昇するか、下落するかをサポートベクターマシンを用いて分析していきます。

分析手法

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

上述の交差検証を用いて予測精度を測定いたします。上述の概念図と同様に5パターンの予測精度を計算し、その平均値をモデルの精度として出力したいと思います。

分析ツール

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

分析結果①(2つの説明変数を使用した場合)

まずは米10年金利とドル円を用いて翌日の株価が上昇するか、下落するかと分析します。
分析結果は以下です。数字は予測の正答率になります。

2つの説明変数で予測

このマトリックスの左上に行くほど、正答率は向上しているように見えますが、あまり大きな差はないでしょう。使用する変数が2つだけでは正答率も上昇しない結果となりました。

分析結果②(4つの説明変数を使用した場合)

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

4つの説明変数で予測

今回は明確に左上に行くほど、正答率が改善しております。正答率も60%まで上昇しており、良好な結果となりました。

Cが大きくなることは誤判別を許容することになります。またgammaが小さくなることは、境界線が単純な線で書くことを意味しております
つまり誤判別を許容し、単純な境界線を用いることで検証データに対する正答率が上昇したことを意味しております。

分析結果③(8つの説明変数を使用した場合)

さらにユーロドル、DAX(ドイツ株)、ゴールド、VIXも加えて8つの指数を説明変数として日経平均株価を予測していきます。学習させる変数を増やしていることから予測精度の向上に期待です。

8つの説明変数で予測

分析結果②と比較すると、より顕著な結果となりました。
Cが大きくなり、gammaが小さいほど、予測精度が向上しております。正答率も60%台前半まで上昇しており、まずまずの結果となりました。

因みにこちらのnoteには載せておりませんが、このマトリックスにおいて、Cを大きくし、gammaを小さくしていくと正答率60%位が出力され続けることになりました。

最後に

さて今回はサポートベクターマシンを用いた株価分析を実施いたしました。
誤判別を許容(Cを上昇)させ、境界線を単純化(gammaを低下)することで予測精度が向上した結果となったことは非常に興味深かったです。
なぜそのような結果になるかは不明ですが。。。

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

高橋勇気

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