見出し画像

2021年競馬予想AI開発の振り返り

早くも2021年もあとわずかになりました。
2021年4月から本格的にnoteを書き始め、競馬予想AIの開発記は15本、競馬予想は80本投稿してきました。ご覧いただいた皆様には改めてお礼申し上げます。

今回は競馬予想AI開発を中心に(しかしてない)2021年の活動をまとめました。

競馬予想AI開発を始めたキッカケ

競馬予想AI開発をはじめたきっかけは機械学習の勉強でした。一般人にまで機械学習が利用できるように各種環境が整いはじめたため、その可能性に興味を持ち競馬予想を目標に開発を行ってきました。
そして、開発過程を記録し機械学習に興味を持っている人やこれから始めて以降と思っている人のためになればとこのnoteで競馬予想AI開発について書き始めました。


2021年人気だった記事

開発記は15本書きました。今年よく閲覧されたnoteを見てみましょう。

『ランク学習で着順予想するとなかなか強力だったお話』

こちらはLightGBMのLamdaRankアルゴリズムの使用方法を説明した記事です。年間で最も閲覧数といいね数が多かった記事です。

競馬予想においてレースごとの馬同士の比較が重要ですが、今までの機械学習では比較を考慮するアルゴリズムが少なくまた、どのように使えばよいのかわかりづらかったのが難点でした。自身もLamdaRankを使用するにあたって苦労したため、開発記にまとめることとしました。
リファレンスの英語を読みながらパラメータの意味などを解釈するのに苦労した思い出があります。

自身も苦労して書いた記事ということで皆様にも役に立てたのではないでしょうか。


『特徴量の選択と作成で精度向上を目指そう』

こちらは特徴量作成についてまとめた記事です。

特徴量を作成したり選択するための方法について広く浅く書いています。各手法については詳しく書かれている書籍もありますのでこの記事は道しるべ的な役割となっています。最後に簡単に特徴量追加による結果を示しています。

精度の向上に欠かせないのが特徴量です。特徴量の作り方に困った時はこの記事で確認していただけたらと思います。


『LightGBMで着順を予想してみよう』

こちらはLightGBMの使ってパラメーターをセットして予測するまで一通りの手順について紹介した記事です。

LightGBMは使いやすく、Optunaを使えば自動でパラメータもチューニングしてくれます。初心者の方にも使いやすいためこの記事がよく閲覧されたのかもしれません。


今年の成果

なにをもって成果とするかとても悩ましいですが、スローペースながらも今年も競馬予想AIを開発し続けてきたことは1つの成果だと思っています。

競馬予想AIの性能

成果と言えばどれくらいAIの性能が上がったかのほうがしっくりくるかもしれません。といっても厳密に記録を付け続けてきたわけではないので、今年の初めからどれくらい性能が上がったのか簡単に紹介しようと思います。

的中率

  • 単勝:27.2% → 30.4%

  • 1着予想の3着内率:56.8% → 64.8%

  • 2着予想の3着内率:47.3% → 49.8%

  • 3着予想の3着内率:39.3% → 40.9%

  • ワイド3頭BOX:30.4%

  • 馬連:14.5%

  • 馬単:8.2%

  • 3連複:8.8%

  • 3連単:1.5%

回収率

  • 単勝:76.5% → 110.1%

  • 1着予想の複勝:82.0% → 103.9%

  • ワイド3頭BOX:125.3%

  • 馬連:131.7%

  • 馬単:143.1%

  • 3連複:244.2%

  • 3連単:290.4%

数%の的中率を上げるのに凄く苦労したなというのが率直な感想です。しかし回収率を見ても確実に性能は上がっており開発し続けてきてよかったなと思います。あくまでテストデータによる評価なのでこの数値を保証するものではありませんが、単勝や複勝以外も楽しめるAIに成長したのではないかと実感しています。
毎月、単勝と複勝の成績はまとめて記事にしているのですが、時間があれば他の馬券の統計も取ってみたいですね。


苦労したこと、つらかったこと

競馬予想AI開発ではたくさんの苦労がありました。これから何かのAI開発に取り組みたい人のためにもいくつか紹介します。

バグ対応

今年の半分以上はバグ対応をしていた気がします。
AI開発を始めたとき「まずは動くものを」ということで作り始めたこともあり、保守性は度外視していました。テスト処理も不十分でした。どんどん規模が大きくなるたびに保守性は悪くなり、影で性能に直結するバグを育ててしまいました。
バグにもいくつか種類があり、

  • プログラムの構文エラー

  • ロジックのエラー

  • データのエラー

などがあります。この中で苦労するのが下の2つです。ロジックのエラーは「これでいけるはず」と思っていたものがそもそも論理的に間違っているものです。これはテストで見つけるにはなかなか難しいです。新しいロジックを導入する時は導入前に妥当性を慎重に検証しておく必要があります。小さな例でいうと欠損値の穴埋めがあります。とりあえず平均値で、とりあえず0で、と穴埋めすると失敗します。なぜその値である必要があるのか論理的に検証しておく必要があります。

もうひとつが、データのエラーです。
例えばスクレイピングをしてデータを取得している場合、取得先のDOMの構造が変化しているとエラーを出さずに誤ったデータを取得してくることがあります。チェック機構を作ればほとんどの場合は防げますが、積極的にチェックをしないと見つけることができないエラーです。

余裕があればAIを作り始める前に保守性を考えてプログラムを組むべきですが、成果がなかなか出ないのもモチベーション低下につながります。少なくとも基本的なAIが完成したらチェック機構を整備していくべきです。

煮詰まった時

これ以上は性能が上がらないし、次にどうすればいいのかわからない。この時期がとても長くてつらいです。

ほかの競馬予想AIを作っている人のブログなどを見てアイディアをもらうのも一つの手ではありますが、付け焼刃である可能性があります。研究は煮詰まった時にどう打開するかがキモでもあり、打開できた時唯一無二の自分だけのAIができあがります。そういう意味で、状況を打開する能力や技術も大切だと実感しました。

そのために大切なもののひとつが機械学習そのものについての知識です。例えば、コピペで作ったAIは早い段階で次の道を失いがちです。性能が凄いAIのコードを無料で公開している人は居ないですしそれ以上のものは作れなくなります。コピペ先が無くなればそれで終わりです。しかし、機械学習そのものの知識があれば「この理論を変えてみよう」というアイディアも出てきます。時にはその理論の裏付けのためにさらにほかの知識も必要かもしれません。AI開発のためには調べて学習することが不可欠です。

状況を打開する能力として、今自分は何がわからないのかを把握しなければいけません。プログラミングが分からないのか、ライブラリの使い方が分からないのか、競馬が分からないのか、数学がわからないのか、自分の立ち位置をしっかり把握しておく必要があります。そして、何を勉強しなければいけないかを見つける技術が必要です。この技術が一番重要で難しいと思っています。自身も1年間とても苦しみながら進んできましたが、独学で開発を進める人の多くはこの問題に直面するはずです。できれば相談できる人が居ればbetterです。孤独はつらいです。


嬉しかったこと

性能が上がった時

『苦労したこと、つらかったこと』を乗り越えて性能が上がった時はやはり嬉しいです。1度に格段に性能が良くなることはありませんが少しずつ積み重ねた結果、『今年の成果』で書いたように目に見えて性能が良くなっているのを見ると間違いではなかったんだなと安心します。

メッセージやコメントをいただいた時

noteを見てTwitterのDMなどでメッセージをいただくことが稀にあります。本当にnoteを見てくれている人が居るんだなと思って嬉しくなりますし、続けていて良かったなと思う瞬間です。孤独に開発しているのでこのようにアクションをいただけるととても嬉しくなります。


謝辞

最後になりましたが、記事を購入していただいた皆様、DMをいただいた皆様、サポートして頂いた皆様、noteをご覧いただいた皆様にお礼申し上げます。皆様の力になれたかとても不安ですが、2022年も開発を続けていく予定ですので来年も見守っていただけますと幸いです。
また2022年にお会いしましょう!


▼競馬予想AI開発記

▼FANBOX


よろしければサポートをよろしくお願い致します。いただいたサポートは今後の技術向上のために書籍費用等に当てられ、このnoteで還元できればと思います。