AI馬体診断ツールの作成経緯と結果まとめ ― 遠回りと発見の記録
普段は依頼を受けて仕事の効率化ツールを作ったり、趣味でゲームアプリを作ったりしています。
今年は「プロ野球風POGドラフト指名シミュレータ」なんてものも作りました。
今回の話は、その延長線上にあります。長年の趣味である一口馬主で、募集馬を検討するときにAIがどこまで使えるのか。
それを試してみたい。
そう思ったのが、そもそものきっかけでした。
今回は、ウマアイ -eye×AI- というAI馬体診断ツールを作るまでの話をします。
けっこう遠回りしましたし、多くの費用と時間がかかりました。

そもそも、手持ちのデータが無い

始まりは単純な問いです。
皆さんと同じで募集カタログを見て、なんとなく良さそうだなと目星を付ける。
その相馬眼は、データで裏付けられるのか。
でも調べてみると、驚くほどデータが無いんです。
募集時のカタログ情報と、その後の実際のレース成績を1頭単位で突き合わせたデータベースなんて、どこにも売っていません。
だから、自分たちで作るしかありませんでした。
まず、手元に残っていた紙やPDFの募集カタログを片っ端から引っ張り出しました。(過去に資料請求したクラブも多くあります)
それだけでは全然足りず、各クラブの公式サイトやデータベース、ネット上に残っている過去の募集ページも、しらみつぶしに回りました。
カタログ・測尺・価格・血統・成績。全部が手入力だったわけではありませんが、一口クラブの馬に限定してここまで揃ったデータベースは他になく、それを作り上げるまでに一番時間がかかりました。
今では13クラブ・8,000頭を超える規模になっていますが、最初の1頭を登録した日は、ゴールなんてまったく見えていませんでした。
あの日見た馬の形をAIはまだ知らない

技術的な壁も、いろいろありました。
そもそもAIは、馬体のどこが耳で、どこが胸で、どこがトモなのか、最初は何も知りません。馬体という形がどういうものかを、1から学習させていく必要がありました。ここが地味に、一番苦労したところです。
機械学習のためにトリミングしたり、線で囲って修正したりをひたすら繰り返しました。
馬体に測定枠を重ねる機能でも、似たような壁にぶつかりました。耳や鼻先が見切れたり、枠が胴体からズレたりするバグが頻発したんです。
馬体という立体的で複雑な形を、正しく扱うのは思っていた以上に大変でした。
地味な話ですが、こういう積み重ねが一番時間を食います。

アノテーションツール自体を作るところから始めています。
的中率は、作れてしまう
最初は、AIに馬体の写真をそのまま渡して判断させようとしていました。
そしてどの程度のクラスまでいけるのかを出してもらいたいと。
どんどん最新モデルが出てきて、あれができる!これができる!と言われていますから…。
例えば活躍している馬の体型をモデルにして、近似値からこの馬も走るかな、と。
写真だけで判断させようとしていたんです。
でも、それでは良い精度が出ない。
そう気づくまで、そんなに時間はかかりませんでした。
なぜなら馬体と言っても距離や芝ダートの適性の違いで、ベストな馬体というのが変わってくるからです。
それを募集時写真のある一口馬主クラブ限定で絞り込みを行うと、成績データの母数が少なり、信用できる数値じゃなくなります。
全く当たらないわけではないのですが…。
そして厄介なのはここからでした。
そして一口クラブの馬は、現状4〜5割が未勝利のまま競走生活を終えます。
だから、全部の馬を「未勝利」と予測するだけで、的中率は5割前後になります。
極端な話、すべての馬を「1勝クラス」としてしまえば、±1クラスの見かけの的中率はぐっと跳ね上がります。(大体80%近く)
これは一種の数字のマジックです。
AIが何を根拠に判断しているのか。
その数字が本当に意味のあるものなのか。
そもそもAIが馬体を見るといっても、どこを見てそう言っているのか。
今は何かと話題性のあるAIですが、人間の側がきちんと理解していないと使いこなせないし、意味がありません。全自動などはもってのほかです。
あくまでAIは人間の発想を検証/実行するサポート役だということ。
だから私が理解できない数字は使わない。
これは私が日々AIを使いこなす中でも、大事にしていることです。
効くと思ったものが、効かない

写真だけに頼るのをやめてからも、似たような壁には何度もぶつかりました。
一番堪えたのは、良かれと思って足した工夫が、逆効果だったと分かる瞬間です。
例えば、募集時の体型データにトモの形状分析を足せば予測が良くなるはずだと思って試したら、むしろ精度が落ちました。
効かないどころか、害になっていたんです。
クラス到達の予測をバーで表示する画面でも、最初の設計では8割の馬が「未勝利」のバーに埋もれてしまい、実質何も伝わらない表示になってしまいました。
単純に一番可能性が高いクラスだけを表示する方式だと、こうなってしまう。
なので何が好走する馬の相関がある項目なのかを一つずつ検証していきます。それはAI側が提案してくれることもありますし、私が思いついたものも片っ端から実行しました。
最終的に効いてる項目への重みづけをし、統合して点数化し、順位方式にすることで、ようやく実用的な表示になりました。
ここで言う「クラス的中精度」というのは、その馬が競走生活を通じて最終的にどのクラス(未勝利・1勝・2勝…オープン、など)まで到達するかを、募集時点でどれだけ言い当てられるか、という数字です。
こうして精度を積み上げていっても、正直なところ限界はあります。
ウマアイのクラス的中精度自体は、40〜50%くらい。±1でも70%に届きません。これは、未勝利全張りと同等かそれ以下の数字です。(まぁ精度を求めてそんな全張りしてくるAIは嫌ですが笑)
ただ、この数字はある意味当然でもあります。
1勝クラスと2勝クラスの間なんて、展開のあや、相手関係、レースの回り合わせひとつで簡単に入れ替わる世界です。
馬自身の力はほとんど変わらないのに、結果としてのクラスだけがブレる。そのブレまで言い当てにいくのは、そもそも筋が悪い戦い方だと思っています。
だから私は、「どのクラスに分類されるか」を確実に当てにいくよりも、「走る確率の高い馬を評価できる」「走らない馬の評価を落とせる」ことのほうが大事だと考えて設計しました。
クラス分けそのものを言い当てるより、そちらの方が私にも、一口沼のお仲間にも実用的だと思い、そちらに舵を切りました。
私はジョン・コナーじゃないから

検証まわりでは、もうひとつ徹底したことがあります。
これはもしこれから、AI検証を進めようとされる方がいらっしゃるのであれば頭に置いてほしいことです。
AIは、精度だけを無理に高めようとすると、もうすでに答えが分かっているデータに数字を無理やり寄せてしまうことがあります。
見かけ上だけ精度が高く出てしまう、というやつです。
私はこれを避けるために、全テスト期間を通じてひとつのルールを徹底しました。
テストする年のデータは、その年の学習には使わない。そして未来の情報は含まない。
例えば、キャロットの2015年産を検証するなら、学習に使うのは2014年までのデータだけです。
それより後の情報は、いわば未来の話。
実際の予測時点ではまだ分からなかったはずの情報なので、テストのときも、その時点までしかなかったデータしか使わないようにしました。でも実際の募集馬申し込みの時は同じ状況なのですから。
未来を知っている人間が、知らないふりをして予測するのは簡単です。でも、それでは検証の意味がありません。
私はジョン・コナーじゃないので、未来を知ってしまった側には立たないと決めていました。
チラ見を我慢した漢の中の漢
この、年をまたいで答えを覗かないというルールを、さらに一段階徹底したのが、次の話です。
開発初期から、2つの世代のデータをあえて封印していました。
キャロットの2018年産86頭と、シルクの2014年産72頭です。
モデルの特徴選びにも、パラメータの調整にも、この2つは絶対に使わない。何ヶ月も、そう決めて手を出さずにきました。
といっても、この2つを選んだことに特別な理由はありません。
好きな馬がいたから選んだわけでもありませんし、正直この年の活躍馬をピンポイントで覚えているかと言われれば微妙です。
例えば「クローズにしておいて」とAIに頼んでも、実際には参考にしていたりすることが多々あるんです。
なので、この2シーズンのデータは徹底的に抜いてやっていました。
そろそろ確認したいなー、答え合わせ以外の推測だけでもやらせてみようかな…?と途中で何度も思いました。
でも、精度のために自分を甘やかさないために、ここは譲れません。
結果は、僕自身も最後まで知りませんでした。機械学習のどの工程でも一切開けず、最後の最後に開封して答え合わせをしました。
そしてツールの調整が完了し、ついにこの封印を解く日が来ました。
結果を抜粋



まぁまぁ満足な結果で安心しました!特にシルクの勝上率100%は良かったです。
エフフォーリアもあと少し高評価できれば良かったですね。

成果はここまで来ました
他の年代を含めた全体の結果を数字で見ていきます。

AI評価が上位20%の馬と下位20%の馬(4,216頭)を比較すると、勝ち上がりで1.73倍、2勝クラス以上で2.09倍、オープン以上で2.88倍、重賞以上では5.80倍の到達率差が出ました。

この差は、価格帯を揃えても残ります。募集価格が低位・中位・高位、どの層で見てもAI評価が高い方が上回りました。
特に高位層では35.0%対20.3%、そもそもOP馬が少ない低位層でも11.1%対8.3%という差です。
値段が同じでも、走る馬と走らない馬をある程度は見分けられている、ということです。
次は具体的にどんな馬を当てれたのかの一例をお出しします。

個別の例で見るともっとはっきりします。
価格では中位から下位だったのに、AIは評価を引き上げていた馬が何頭もいます。
ダンビュライトやピクシーナイトのように重賞・GIまで届いた馬もいれば、ストライクイーグルやゴールドスークのようにオープンまで届いた馬もいます。
※あくまで大きく順位を評価したものの例になります。価格順と評価順の差が少ないものは割愛しています
ただ、ここには伸びしろも見えています。
たとえばピクシーナイトは、価格順位だけを見れば31位という馬でしたが、実際の馬体や血統からAIは12位まで評価を引き上げていました。
それでも、その時点でAIがつけていた層は「3勝〜オープン」まで。
実際にはG1(スプリンターズS)まで駆け上がった馬です。
価格に引きずられず評価を上げることはできても、そこからさらに「重賞〜GI」という一番上の層まで押し上げられるかどうかは、まだ課題として残っていることは正直にお伝えしたい部分です。
募集馬評価カルテについて
こうして積み上げてきた測尺・血統・価格・成績・馬体(体型)の情報とモデルを、全部まとめて1頭ずつの形に落とし込んだのが、募集馬診断カルテです。

このAIは、DBが私個人の環境に依存しているところが大きく、今の形のまま他の方にツールとして直接使っていただくのは難しい状態です。
そこで、このAIを使ってカルテを作成し、それをお届けする、という形をとっています。
目玉は、クラス到達の予測。ここまでのデータ収集と検証で分かった知見を、そのまま活かしています。それに加えて、同じように検証と調整を重ねてきたモデルである、デビュー体重の予測モデル、デビュー時期の予測モデルも活用しています。
測尺のバランス、血統の傾向、クラス到達の見立て、芝ダート適性。これまで検証してきた内容が、1枚のシートに集約されるイメージです。
カルテの各項目の詳細はこちら
本ツールの根幹であるウマアイ -eye×AI- においては、これからも皆さんと意見を交わしながら、更なる高みを目指して成長させていきたいと思います。
そのためにも、この独自DBを活用して一口馬主ライフにおいて情報発信しつつ、繋がりが出来れば嬉しいです。
また、AIコンサルタントの立場からは、皆さんが使用できる範囲でのAI活用方法についても言及できればと考えております。
ここまで読んでいただき、ありがとうございました。
少しでもワクワクを感じていただけたら、いいね・フォローで応援していただけると励みになります。
Xもあります⇒ウマウマ(@inabaaaa08)さん / X
今後ともよろしくお願いします。
うまうま

関連記事
#競馬 #一口馬主 #AI馬体診断 #開発秘話 #ウマアイ #募集馬診断
