見出し画像

株の投資家による競馬AI制作記 着手からテストデータ全問正解まで


【投資家、競馬に現を抜かす】

ゆっくり金持ちになろうとすべきである、というのはバフェットの投資哲学です。

インデックス投資のように、分散の効いており値動きの落ち着いた投資対象を長くホールドすることが資産形成の最短経路という意味です。私もこの投資スタンスをフォローしています。

しかし、インデックス投資は非常に退屈です。自動で毎月NISA口座で同じ投資信託を買い続けているだけなので、ニュースも決算も見る必要がありません。

リスクの前に等しく平等な市場参加者を、己の実力で出し抜きたいという欲求から投資の世界の門戸を叩いた私にとって賢明な投資は退屈過ぎました。(当然続けますが)

また、若年投資家は同年代と話が合わなくなるという十字架を背負うことになります。

そこで私は、投資家が持つべき趣味の一つとして競馬を提案します。

【時間をかけずに勝つのが副業投資家】

正社員としての業務をこなし、投資に必要な情報を収集し、プライベートの予定もこなすというのは至難です。本業でも副業でも、タイムパフォーマンスを追求する必要があります。

情報を集めるにも、分析するにも時間をかけない仕組みを作ることが必要です。

【AIにおいて学習するのは機械だけ】

勝率を上げつつ、分析にかける時間を削減するには機械に働かせるのが良いです。

AIモデルを製作するのは意外と簡単です。どのようなアルゴリズムで学習したいかという方針さえ自分で決めてしまえば、コードの実装はchat GPTに任せてしまえばよいのです。

また、機械が学習している間はコーディングが進まないので万事休す状態になります。

私がデータの扱いに頭を悩ませている間は機械が休み、機械が必死に学習している間は私がアマプラとマッチングアプリに精を出す。という次第です。

【ここから本題:用いたデータ、特徴量エンジニアリング】

*用いたデータ

2019年に行われた中央競馬の全レースを対象としました。
欠損のあるデータを除くと、有効なデータ数は47000程度になりました。

そのうち以下のものを説明変数とし、目的変数は以下のように設定しました。

*説明変数

  • 体重

  • オッズ

  • 体重変化

  • 斤量

  • 距離

  • 芝かダートか

  • 右回りか左回りか直線か

  • 牡か牝か

  • 馬場コンディション

*目的変数

  • 着順(1~3着であれば1、それ以外は0)

説明変数を用いて3着以内に入る馬を当てるという設計です。

【EDA】

相関係数ヒートマップ

各変数間に大きな相関は見られません。意外にもオッズと着順に目立った相関はないということがわかります。

ランダムフォレストによるfeature importanceは以下のようになりました。

体重: 0.17919918339100685
齢: 0.04731151160968411
オッズ: 0.42141002809474637
体重変化: 0.11897775146568433
斤量: 0.05568586236183957
距離: 0.08163854628233583
芝・ダート_ダ: 0.008044207939915872
芝・ダート_芝: 0.008285564824755166
芝・ダート_障: 0.0005020831997288752
回り_右: 0.009836187379411748
回り_左: 0.009707674851248625
回り_直: 0.0010186320171243564
回り_芝: 0.0006500800900241922
性_セ: 0.0035284950101237113
性_牝: 0.005731749880281833
性_牡: 0.006411680186104543
condition_to_encode: 0.04206076141598397

やはり一番重要なのはオッズであるようです。次点で体重が重要なファクターであるのは意外な事実なのではないでしょうか。

【学習手法】

今回用いた学習器は以下4つです。

  1. ランダムフォレスト

  2. XGBoost

  3. LightGBM

  4. GBDT

それぞれについて適合率(Precision)を最適化するようにパラメータチューニングを行い、全てのモデルをアンサンブルしました。

適合率は以下の式で計算されます。

Precision = (True Positive)/(True Positive + False Positive)

すなわち3着以内に入ると予測したもののうち、本当に3着に入る割合を最適化する戦略を選んだということです。

投資と競馬の違いは、全損を食らう確率の大きさです。20%の勝ちを5回繰り返しても1回の全損で無に帰してしまいます。

利益を伸ばすには損する確率の最小化がベストなのではないかと判断しました。

2019年に行われたレースのうち、結果をランダムで8対2に分割し、8割のデータで学習した結果を2割のデータでテストして適合率を計算しました。

【結果】

  1. ランダムフォレスト:適合率0.7

  2. XGBoost:適合率0.88

  3. LightGBM:適合率1.0(ノーミス!!)

  4. GBDT:適合率0.71

全部アンサンブル
→適合率0.68

テストにおいてlightGBMは予想を外しませんでした!!!

【今後の展望】

今回は試験的に2019年の結果だけを用いて訓練とテストを行いましたが、悪くない結果を得られました。

しかし、この手法をこれからのデータに適応するにおいては、データのドリフトに注意を払わねばなりません。

オッズの決まり方や、馬具の技術的な革新などが起こればモデルは機能しなくなります。

AI技術が発展しても株価推移や経済の行方が誰にも予測できないのも、同様にデータのドリフトが原因です。

適宜モデルを更新し続け、運用する必要があります。


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