【競馬AI】今後のアップデートロードマップ。【AI:Gaspard】

開発を始めてから早9ヶ月。
当ブログでの公開から早5ヶ月。
そして、専用Webページでの公開から早1ヶ月。

おかげさまで多くの方にご覧いただき、ブログの訪問者数の約5倍くらいにまで達しています。この場をお借りしまして、改めてお礼申し上げます。

https://engineer-lime.com/ai_gaspard/index.html

肝心の予測精度ですが、時には大穴を引き当てたり、時には本命馬を思いっきり飛ばしたりといったところ。完璧には程遠く、まだまだ精度向上の余地があると思っています。

より精度の高いAIを作るべく、今後も日々アップデートを重ねていく所存です。当記事では今後予定しているアップデート内容についてご紹介していきます。

1. 最終目標。

これはとてもシンプル。高的中率/高回収率、それだけです。

「言うは易く行うは難し」という言葉がある通り、それはそれはとても難しい問題。1日や2日で行ったアップデートではとても叶えることの出来ない目標。少しずつ、少しずつ積み重ねて目指すゴールです。

2. 目標達成に向けたロードマップ。

1. 特徴量を増やす。

競馬AIで大事なもの。それは『特徴量』です。

「なんだそれ?」という方に向けて簡単に説明しますと、みなさんが予想されている際に考慮されている要素のことと思っていただければ大体合っています。

例えばダートの短距離が得意な馬がいたとします。
人間が予想を組み立てるとしたら、『テンの速さ』や『ゲートの上手さ』、それから『コーナリングの上手さ』、はたまた『馬の体調』等が挙げられるでしょうか。

競馬AIでは「この馬、テンが速いよ」とそのまま投げるのではなく『テンが速いと言える根拠』、人間が「何をもってそう判断したのか」を教えてあげる必要があります。その判断基準となるデータを『特徴量』と呼びます。

『特徴量』は1つや2つだけではなく、多ければ数百、数千にまで達するケースもあります。これをいかに増やすかどうかが第一関門です。

これまでは過去成績を中心とした特徴量のみを取り扱ってきましたが、次回のアップデートではそれ以外の領域、例えば馬体に関する特徴量なども大量投入いたします。

ただしAIは何でもかんでもデータを突っ込めばいいというものではありません。効果のあるデータのみを突っ込むことで真価を発揮します。頭が痛くなるような細かい調整の積み重ねになりますので、このアップデートには早くとも1ヶ月以上は掛かるかもしれません。

2. コンテンツの拡充。

現在は各レースごとに各馬の分析結果(想定勝率/想定3着内率)を公開しています。

追加を検討しているコンテンツについては以下記事で語っています。

過去記事でもご案内している通り、競馬は予想することも楽しみの一つと考えています。ですのであくまで「この馬って信頼できる馬なのかな?」と最終判断を下したい時に数値を参考にしていただくような運用を推奨しています。その判断基準となるようなデータをどんどん追加していこうと考えています。

3. 収益化。

最もモチベーションを向上させる要素って何だと思いますか?

私は何だかんだで『お金』に勝るものはないと思っています。ですので収益化は誰しもが考える最終目標地点でしょう。私も例外ではありません。

しかし以前から皆様に『どんなに成果が上がろうとも絶対に有料化しない』と何度も何度も伝えてきました。今でもその考えは曲がっていませんし、今後も曲げる気は一切ありません。

じゃあどうやって収益化するのか。3つの要素があります。

1) 広告収入。

ご覧いただいている皆様からすれば『広告うぜぇ』って思われているかもしれませんね。その通りだと思いますが許してください・・・!!

何を隠そう私はWeb広告ベンチャー出身のエンジニア。自分1人の力でどこまで稼げるか試してみたいのです。

2) 馬券収入。

何を作っているか。そう、お金を生み出すための仕組みを作っているのです。

つまりは単純に精度を向上させれば収益化に繋がります。皆様とWin-Winの関係を築き上げるための架け橋です。

3) 年収アップ。

きっとこれは多くの方が盲点だと思われたでしょう。

競馬AI開発として行っている行為はアプリケーション開発と変わりません。つまり、エンジニアとしての市場価値を高める行為そのものなのです。

自分のスキルが向上すれば、そのまま自分の年収アップに繋がっていくのです。

4. マシンの増強。

『開発機』および『サーバ』いずれもスペックアップしていくことを考えています。

今現在使っている開発機は以前別の記事でご紹介したM1チップ搭載のMacBook Pro。
動作は軽快でとても満足の行く買い物でしたがメモリが少ないのが悩みどころ。今あるアップル製品に候補となる製品はありませんので、今後新発売したハイスペックなマシンを購入したいと考えています。

そしてサーバの増強も視野に入れています。
某大手競馬AIではサーバ代に月400万近く掛けているらしいです。それくらいサーバのスペックも重要ということですね。

いずれも大きくお金の掛かる物。そのためにもしっかりと収益化を意識していかなければなりません。

5. 技術公表。

これは完全にオマケなのですが、しっかりと成果が出た暁には内部仕様を少しでも公開しようと考えています。

ここについては今の段階では詳しく語りません。

3. さいごに。

今回はいつもとは少し違った趣旨で記事を執筆してみました。

今後とも競馬AI Gaspardをよろしくお願いいたします。

【モンハンライズ】マカ錬金に使用するモンスター上位素材を自動収集するプログラムを作った【MH:Rise】

またまたモンハン自動化ネタ。本編より楽しいです。

内容

今回も動画をご用意いたしました。
www.youtube.com

オトモ隠密隊派遣を利用して稼ぐ感じですね。

5回クエストを消化するたびに受け取ることが出来ますが、クエストを消費する部分については偉大なる先人様である 『こちゃてす様』 が作成されたプログラムを拝借させていただきました。

カムラポイントが尽きない限り延々と繰り返してくれます。カムラポイントがないよ!という方については、こちらも『こちゃてす様』が自動収集プログラムを公開してくれているので是非ご参考に。

実行環境

参考までに私の実行環境ですが、本体は通常版Switchの初期ロット/ソフトはパッケージ版になります。

そして利用しているマイコンは以下。(画像クリックでAmazonの商品ページに飛びます)
名称長いですが『KOOKYE Pro Micro ATmega32U4 5V/16MHz Module Board マイクロコントローラーボード Arduino Leonardo Replace ATmega328 Arduino Pro Miniと互換 3個セット』という商品名です。
こちらは他製品比較で少々お高めですが、『ATmega32U4』というチップを搭載していれば動くはずです。

コード

参考までに今回作成した関数部分を公開します。
何度も検証して正常動作を確認出来ておりますが、利用される方は各々で検証ください。

呼び出す順番は以下の通り。
1〜3までは初期処理として設定し、それ以降の4〜10でループを組む形になります。

1. 里内移動関数(6:集会所準備エリア)
2. 隠密隊派遣受付前まで移動する関数
3. 隠密隊派遣関数
4. 里内移動関数(7:集会所)
5. クエスト消費関数(こちゃてす様作成のものを参照。5回繰り返してください。)
7. 里内移動関数(6:集会所準備エリア)
8. 隠密隊派遣受付前まで移動する関数
9. 隠密隊成果物受け取り関数
10. 隠密隊派遣関数

里内移動関数

こちゃてす様が作成された関数に『集会所 準備エリア』までの移動処理を追加しています

//里内移動関数
void Map_teleport(int select) {
// 里内移動ショートカット呼び出し:里内でのマイナスボタンの挙動を「タイプ2」に変更しておく必要あり
pushButton(Button::MINUS, 750, 1);
if (select == 7) {
// クエスト受注時に利用する処理
// 集会所まで移動
pushHatButton(Hat::UP, 400, 1);
} else if (select == 6) {
// 隠密隊派遣する際に利用する処理
// 集会所 準備エリアまで移動
pushHatButton(Hat::UP, 400, 2);
} else {
pushHatButton(Hat::DOWN, 450, select);
}
// 決定
pushButton(Button::A, 1200, 1);
}

隠密隊派遣受付前まで移動する関数

新規作成。集会所準備エリアに入ってから呼び出します。

// ネコ前まで移動
void moveFrontOfCat() {
// 集会所 準備エリアに移動する
Map_teleport(6);
// キャラ移動
Transport_stick(45,300);
Transport_stick(90,200);
}

隠密隊派遣関数

ネコに話しかけて派遣するまでの一連の処理になります。
アキンドングリを使うかどうかは関数呼び出しの際に指定してください。1で使う/0で使わない になります。

// 隠密隊派遣関数
void covertTroops(int nuts) {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 調査先選択:「百竜夜行」を選択 / 百龍夜行は出現ランダムなので無い場合は「溶岩洞」が選択される
pushButton(Button::A, 1500, 1);
pushHatButton(Hat::UP, 500, 1);
pushButton(Button::A, 500, 2);
// オトモ選択:オトモアイルーを上から4頭選出(※要事前ソート)
pushButton(Button::A, 500, 6);
// アキンドングリ利用チェック
if (nuts == 1) {
// アキンドングリを利用するパターン。Xボタンを押下する
pushButton(Button::X, 1200, 1);
}
// 決定
pushButton(Button::A, 500, 2);
// 会話終了
pushButton(Button::B, 500, 2);
// 会話終了まで待ち時間を挟む
delay(3000);
}

隠密隊成果物受け取り関数

派遣後、5回クエストを消化次第実行する形になります。

// 隠密隊成果物受け取り
void receiveTroopRewards() {
// 話しかける
pushButton(Button::A, 2000, 1);
// 「オトモ隠密隊」にカーソル移動&決定
pushHatButton(Hat::DOWN, 500, 1);
pushButton(Button::A, 500, 2);
// 受け取る
pushButtonContinuous(Button::A, 6000);
// 会話終了
pushButton(Button::B, 500, 2);
delay(3000);
}

まとめ

今回はモンスター上位素材を自動収集するプログラムのご紹介でした。
ご自由に流用いただいて構いません。もし不明点があればTwitterにて承ります。
「そもそもどうやって作るんだよ」「マイコンってなんやねん」って方についても是非(笑)

以前投稿したネタ

engineer-lime.com

【モンハンライズ】採掘と福引を自動化したお話。【MH:Rise】

ツイッターの方ではちょくちょく公開させていただいておりましたが、amiiboを使うと引くことの出来る福引を完全自動化&無限引きに対応させてみたお話です。

内容

まずは動画を作ったのでご覧ください。(※2021/04/07 07:00に公開されます)

福引自動化&無限引き

通常の福引はセール中に1度という制約がありますが、amiiboで引くことの出来る福引は1日3回までの制約を除けば無限に引き続けることが出来ます。しかも日付の管理はあくまで本体側の時計でしか判断されておらず、時計さえずらしてしまえば何度でも簡単に引くことが出来てしまいます。ポケモン界隈で流行っていた自動化の手法で簡単に実装出来ると踏み切って実装してみたのがきっかけ。

結論からするとまだまだ改良の余地あり。
amiiboは純正コントローラから読み込む必要があるのですが思いの外すんなりと読み込んでくれないんですよね。 15秒ほど猶予を持たせてみましたが、これでも時々失敗してしまうことがありました。

また今回はPCからBluetoothでSwitchに接続する形式を取ってみましたが、有線と比べると多少のラグが発生してしまうこともありました。ラグが発生して然るべきキーが実行されないと処理が途中で変な方向に向かってしまうんですよね。
少々時間は掛かってしまいますが、ポケモンで実装したときと同じようにマイクロコンピュータデバイスを使って実行する方式に変更しようと思っています。ある程度の反響があればソースコード等の公開も考えています。それまでに動作を安定させたいな。

amiiboについて補足

amiiboで引くことの出来る福引には大きく分けて2パターンあります。

1つ目がMHRiseコラボとして発売された3体。マガイマガドとオトモガルクとオトモアイルーの3体ですね。
こちらについては専用の福引が用意されています。それぞれの当たりは以下の通り。

amiibo 当たり その他
マガイマガド 鎧玉系 原珠/罠(落とし穴/シビレ罠/タル爆弾)
オトモガルク 鬼神薬グレート 硬化薬/閃光玉/音爆弾/強走薬
オトモアイルー アキンドングリ 謹製おだんご券/秘薬/粉塵

f:id:rhymerr:20210407030651p:plain

マガイマガド(これは普通の当たりです。大当たりのスクショ撮れていなかった…大当たりでは鎧玉と原珠のレア度が更に上がって罠の個数が増えます。)
f:id:rhymerr:20210407030720p:plain

オトモガルク(大当たり)
f:id:rhymerr:20210407030730p:plain

オトモアイルー(大当たり)
f:id:rhymerr:20210407030704p:plain

どれも魅力的ですが、個人的には防具の強化に役立つ鎧玉と、よく使うけど作るのが結構面倒臭い罠一式が入っているマガイマガドを推します。

そしてもう2つ目のパターンがその他のamiiboで実行した場合。
通常の福引と同じく、ランダムのようです。回復薬とかが手に入るのでこちらでも十分だと思いますね。

採掘自動化

福引自動化はそれなりのコンピュータ知識に加えて品薄でなかなか手に入らないamiiboが必要ということで明らかに敷居が高いです。なのでオマケとして割と簡単に実装できる採掘自動化も紹介に取り入れてみました。
こちらは連射機能付きコントローラーがあれば誰でも簡単に実装出来ます。

昔はホリパッドといえばスティックが異常に固くて使いづらい印象でしたが最近のは純正に近い使用感でかなり使いやすく感じますね。純正までの質感はないにしても、半額以下なので許容範囲です。

まとめ

競馬AI開発の傍らで作った物の紹介でした。もうちょっと動作を安定させるまで続けたいと思います。

追記

マイコンに移植しました。
非常に安定して動作してくれていますので、近日中に内部構造を公開します。

内部構造公開。

使う処理は2つだけ。

1. 福引を実行する関数
2. 月日を変更する関数

これらをループするだけの簡単仕様です。joyconでも出来なくはないですが、絶望的に固定しづらいのでプロコンを推奨。

利用開始の条件としては、プロコンにamiiboを固定⇒雑貨屋の選択肢「amiiboを読み込む」にカーソルを合わせておくだけでOKです。

俗に言う『時渡り』ですね。ポケモンでもおなじみのロジックなので今更語ることもないでしょう。とってもシンプル。
ちなみにこちらのコードは緊急で書き上げたこともあり、最も語句が短くシンプルに書けそうだった『NintendoSwitchControlLibrary』というライブラリを利用させていただいております。詳しくはググってください。モンスター素材自動収集プログラムとは利用しているライブラリが異なりますのでご注意ください。気が向いたら移植するかもしれません。

福引を実行する関数

本体部分になります。

// 福引実行
void execLottery() {
// amiibo読み込み
pushButton(Button::A, 5000);
// 回して受け取る
pushButton(Button::A, 50, 11);
}

月日を変更する関数

月と日をそれぞれ+1します。日付の重複判定が時々掛かってしまうようですのである程度のランダム性を持たせるためにそうしています。
理論的なことには詳しくないので体感のレベルですが、2021/1/1から開始すると1日放置しっぱなしでも延々と回り続けてくれました。

// 時計変更
void timeFlyer() {
// ホーム画面 > 設定
pushButton(Button::HOME, 500);
pushHat(Hat::DOWN, 25);
pushHat(Hat::RIGHT, 25, 5);
pushButton(Button::A, 100);
// 設定 > 本体 > 日付と時刻
holdHat(Hat::DOWN, 2000);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::DOWN, 25, 4);
pushButton(Button::A, 200);
// 日付と時刻 > 現在の日付と時刻
pushHat(Hat::DOWN, 25, 2);
pushButton(Button::A, 500);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25);
pushHat(Hat::UP, 25);
pushHat(Hat::RIGHT, 25, 3);
pushButton(Button::A, 50);
// ホーム画面 > ゲーム画面
pushButton(Button::HOME, 1000);
pushButton(Button::A, 500);
}

その他記事

engineer-lime.com

【競馬AI】Twitterへの自動投稿を実装したお話

これまではレース前のAI分析結果を当ブログのみに掲載していましたが、先日よりTwitterへの自動投稿を実装/運用開始しています。『どうやって活用すればいいの?』というご質問をいただきましたので、当記事にて色々と解説していきます。

自動投稿のフォーマットについて

執筆時点では以下の通りとなっています。

本当は分析結果を全て掲載したいのですが皆さんご存知の通りTwitterでは文字数140字以下という制約があります。やむを得ず絞り込んでいる形となりますので今後の展開としては他所に掲載していき、ツイートにはリンクを付与するような形式を考えています。

見方について

見て分かる通り、『3着以内に入る確率』を掲載しています。
レースごとに比較評価を行った結果となっていますので、数値が高ければそのまま評価が高い、ということになります。

活用方法について

競馬は『予想を楽しむ』ことが大事だと考えています。ですので、まずは皆様主軸で予想を立てていただくことを第一として掲げています。

engineer-lime.com

オススメの活用方法としては、皆様が立てた予想に対する後押しとして使って頂く形になります。
例えば2021/03/14の例で行けば『デアリングタクトで大勝負を掛けたい』といった時ですね。
AIでは『史上初、無敗で3冠達成した!だからこんなところでは負けないだろう!』『圧倒的1番人気』『新聞での評価も抜群!』といった人間による決めつけが含まれる要素を一切認識していません。故に常に冷静で、どんなに成果を上げている馬であろうとも適性がないと判断されればキッパリと切り捨てていきます。

次点では流しの紐探しとして活用いただくのもいいでしょう。
人気馬を切り捨てることの裏返しで、人気薄で明らかに相手にされていない馬でも冷静に判断してくれます。思いもよらぬ人気薄がリストアップされていた時には紐の1つとして追加いただいても面白いかもしれません。

今後の展開について

以下を考えています。

全頭表示する仕組みを作る

こちらは冒頭でも触れた内容ですね。Twitterでは文字数制約がありますので上位1〜3頭のみツイートし、それ以降の馬については何の縛りもない外部のWebサイト上での更新、リンクを付与して誘導するような形を考えています。

AIにより判定した買い目を公開していく

現在は私自身もチューニングを行っている最中なので公開することは控えておりますが、最終的にはこちらについても公開していければと考えています。
大前提として私は予想家ではありませんし、予想家として活動していくつもりも一切ありません。あくまでただのエンジニアであり、自身のスキル向上を図るために公開していますので乗っていただくことに関しては皆様の自己責任というスタンスで考えています。その引き換えとして、仮にどんなに成果が出ようとも多くの方が行われているような有料予想への転換はないとお約束しておきます。公開を続けていく限りは永年無料でご覧いただけます。

公開について具体的な方法は検討中ですが、リアルタイム性や皆様からの反響を得たいという点からライブ形式での配信を検討しています。 その時には参考にされる方が大勢いてはオッズ妙味がなくなってしまいますので、Twitterアカウントに鍵を掛ける等して視聴者数の制限を行うことになると思います。ですのでフォローがまだの方は是非お早めにフォローいただくことをお勧めいたします。

運用成果の公開

買い目公開の延長です。実際の的中率や回収率も公開していきたいと考えています。

最後に

競馬予想AIが人間に勝る日を夢見てこれからも開発を継続していきます。今後とも応援いただけますと幸いです。

回収率をマイナスからプラスに転じたい方以外は見ないでください。【競馬予想AI開発者から、競馬予想AIとの付き合い方について。】

まだタイトルを見ていない方、今すぐご確認ください。
これより下は元々プラス収支の方にとっては有益な情報でない可能性が非常に高いです。

この文章を読んでいただいているこの瞬間も皆様の大切な時間をいただいているわけですから、本当にマイナス収支からプラス収支にしたいよ、という方以外は今すぐブラウザバックを推奨いたします。

.
.
.
.
.

…と、冒頭から派手に攻めてみました。情報商材屋さんなどが使いがちな常套句ですね(笑)
煽るようなタイトルですが決してそういった気持はありませんのでご容赦ください。

ブロガーとして活動しているつもりですから、より多くの方に読んでいただきたいというのが本音です。お時間許す限り読んでいただけますと幸いです。

当記事の本題は『競馬予想AIとの付き合い方』になります。競馬AI開発者、そして1競馬ファンとして執筆していきます。

私の他にも大勢の方が競馬AIを作って、twitterなどで公開してくれていますね。
先に結論から申しますと、『特性を理解して、用法用量を正しく守って使いましょう』ということです。
順を追って説明していきましょう。

まず最初に・・・

当ブログを初めて閲覧いただいた方向けにお伝えしておくと私は競馬予想を売る気は一切なく、それどころか馬券で大儲けしようといった考えもなく、ただ単に自分のエンジニアとしてのスキル向上として競馬AIの開発および結果の公表を行っています。このスタンスは未来永劫変えるつもりはありません。

分かりやすく言えば『ただのオタク』です(笑)

マイナス収支で安定している人にありがちな間違い

さて、本題です。
タイトルになぞらえて、「マイナス収支で安定している人にありがちな間違い」をいくつか紹介していきたいと思います。

人気馬,オッズが低い=軸として信頼出来る

はい、ありがちですね。
断言します。その考えの元、人気順やオッズだけ見て買い続けていると必ず負けます。
統計と照らし合わせながら解説していきましょう

そもそも1番人気ってどれくらい信頼出来るのか

人気順ごとの勝率を調べてみたらこんな結果になりました。

人気順 勝率
1番人気 約32%
2番人気 約19%
3番人気 約13%
4番人気 約10%
5番人気 約7%

1番人気に推されている馬でも大体3割程度の勝率でしかないのです。
3回に2回は負けている、ということです。

同じ1番人気でもオッズの上下があるでしょ

その通りです。僅差の1番人気よりも圧倒的な1番人気の方が強いはずですね。
それでは単勝1倍台の時にはどの程度の勝率になっているのかをお見せしていきます。

オッズ 勝率
1.1 約81%
1.2 約63%
1.3 約63%
1.4 約60%
1.5 約57%
1.6 約49%
1.7 約46%
1.8 約44%
1.9 約40%

純粋に1番人気だけでフィルタを掛けると3割程度でしたので、確かにオッズが下がれば下がるほど勝率が上がっていくことが分かります。
しかし不思議ですね。1.1倍はとても信用出来そうな結果が出ているのにそれ以上になるとあまり差を感じません。
1.1倍だけ圧倒的に勝率が高いのは恐らくですがそこまで推されるレベルにまでなると名馬クラスが多いからでしょうか。

ただし勝率が高いとはいえ、1.1倍の馬を買い続けたら10回中10回的中しなければもれなくマイナス収支になってしまいます。5回中1回は負けるのに、です。

少し範囲を広げて1.5倍だった場合を考えてみます。勝率は約57%となっています。ざっくりと計算すると10回中4回は外れる計算です。6回勝った場合は150×6=900です。実際には3%盛っているので100%には到底及ばないという結果になります。

更に条件を拡張して、今度は連対率と複勝率を見ていきましょう。

オッズ 連帯率 複勝率
1.1 約88% 約94%
1.2 約83% 約94%
1.3 約82% 約90%
1.4 約80% 約89%
1.5 約79% 約87%
1.6 約70% 約82%
1.7 約69% 約79%
1.8 約61% 約76%
1.9 約61% 約74%

ここで意外だったのは連対率です。1.5倍を下回ってやっと8割に達するという結果になりました。

また、複勝に至っても1.7倍を下回ってやっと8割に達するという結果になっています。ここまでの人気馬となるとほぼ確実に複勝払戻は1.1倍まで落ちているでしょう。こちらも単勝1.1倍の時と同様に5回に1回は外れる確率となりました。言い換えれば買えば買うほど損をしていくということです。

そもそも『人気順』ってどうやって決まるのさ?

1競馬ファンとして分析した結果は以下の通りとなります。

  • 新聞での評価が良いから
  • 前走が強かったから
  • 血統適性があるから
  • いい騎手が乗っているから
  • オッズが低いから(多数に巻かれる初心者的思考)

他にも色々あると思いますが、まずはこれくらいとします。
さて、挙げた要素のうち「本当の強さ」を評価しているものってどれくらいあるでしょうか?
結論を出してしまうとそこまで多くないはずです。結局のところは感情的な部分による影響が大きいと思っています。

競馬予想AIのメカニズム

さて、単勝オッズが1.1倍だったケースを考えます。5回に1回は負けるという統計が取れています。
もし仮に、5分の1に該当する馬を見つけることが出来たらどうなるでしょうか?理論上はそれだけでも勝つことが出来ると言えます。

競馬予想AIでは主に各馬ごとのデータを統計化し、他馬と比較やその馬ごとの適性を判定することにより順位付けを行っています。中にはオッズを評価軸の1つとして使っている方もいるようですが、私が作成しているAIでは使っていません。
言い方を変えてしまえば、明らかに過剰人気している『危険な人気馬』を容易に探し出すことが出来るのです。

プラス収支の人の予想に丸乗りしていればいつかは・・・

そもそも論ですがもしあなたが完璧な馬券術を持っていたとしたら、その情報を安易に売り捌きますか?
私だったら絶対に独り占めしますね。その方がオッズが下がらず儲かりやすいですから(笑)

誤解を招かないために先に伝えておきますと、私自身は予想を販売する行為に対して一切の反対意見はありません。一定の需要がある以上は売っても問題ない、という考えです。
ただし私は一度も買ったことありません。何故なら「当たる確証がない情報にはお金を払いたくないから」からです。

販売する側の心理を考えてみます。
1つ考えられるのが、「実は買い目に不安があって、外したときのリスクを少しでも減らすために予想を売っているんじゃないか」ということです。
冒頭でも申した通り、絶対に自信があるなら少しでも配当金を多くするために独り占めしませんか?
私なら間違いなくそうしていますね。

競馬予想AIでは統計に基づいて勝率や期待値を算出できる

人による予想はどうしても各個人の感情を含みがちで、所詮は個人の感覚によるものでしかありません。
仮に確固たる自信がある予想であったとしても、です。
ましてや「実は自信のない予想」だったらどうなるでしょう?

競馬予想AIでは統計に基づいて数値を算出してくれます。
一切感情を持たず 且つ 自信がある場合とない場合とでは数値の大きさが物語ってくれるのです。
乗っていい場合とそうでない場合が目で見て分かります

負けを取り戻そうとして大金を注ぎ込んでしまう

実は以前私もやったことがあります。結果は惨敗でしたね。
理由は明確で、冷静さを失っていたからだと思います。

競馬予想AIは常に冷静

競馬予想AIというのは所詮機械です。故にどんな時でも冷静さを欠くことはありません。

AIによる予想を開始してから見えてきた傾向なのですが、最終レースは美味しいレース率が非常に高いと感じます。
具体的には「実力あるのに過小評価されていてオッズが高い馬がいる」ことです。
きっとこの状況を作り出しているのが、最後の最後に負けを取り戻そうとヤケになって上位人気馬にブチ込んでいる方々なのかもしれません。

競馬AIでは想定勝率を算出することが出来ます。
ここで割り出された確率とオッズを照らし合わせることにより、美味しい馬を見分けることが出来ます

競馬予想AIとの付き合い方を考える

さて、長くなりましたがここから先は1人のAI開発者目線から語らせていただきます。

AI予想は『完璧』でない

そもそもですがAI予想というのは先述しました通り、基本は過去の成績から相対評価して順位付けを行うものです。
よって過去実績のない新馬戦、それから既走馬でも前走からの成長分やその日の体調といった要素まで考慮することはほぼ不可能です。
人間であれば新聞を読んだり、ニュース記事を読んだり、パドックや返し馬を見れば一定数の判断は下せますよね。
AIではそういった我々が普段何気なく行っているような判断が出来ません。
故にAI予想に丸乗りするのは危険です。1開発者の私が言うのですから、それ以上信頼に足る要素はないと思います。
より正確性を高めたいならば最終判断は必ず人間が行うべきなのです。

ではAI予想とどう向き合うべきか

以下は1人の競馬予想AI開発者としての意見です。

  • 自分が買おうと思っている馬の能力値は相対的に見てどうなのか
  • この人気は適正なのか

といった最終判断の材料としてAIを活用いただくことを提案いたします。

上記になぞらえて行くと、『単勝1倍台の馬は本当に強いのか?』という判断材料として活用いただくところからでもいいと思います。
単勝1倍台ということはぶっちぎりで評価されているということです。仮にこれが本当に強さに対する評価であれば、AIでの分析結果でも上位評価に収まるはずですよね?

先に説明したとおり、1人気の勝率は約3割、1倍台だけに絞ってもせいぜい6割しか行かないのです。
しかしAIの評価が低ければそれは危険信号と言えるのではないでしょうか。

競馬は『予想すること』も楽しみの1つ

初心に帰ってみましょう。大前提として競馬って予想することも楽しみの1つじゃありませんか?
せっかくですから予想することも楽しみましょう。丸乗りしているだけじゃ非常に勿体ないです。

まとめ

AI開発者視点より、競馬予想AIとの向き合い方について執筆してみました。
私は純粋に自分のエンジニアスキルを高めたく、読者様はより一層回収率を高めたい。それに尽きると思っています
このWin-Winの関係を今後末永く続けていきたいと考えています。私としてもより精度の高い予想モデルを完成させるべく日々健闘しておりますので、是非是非今後ともチェックいただけますと幸いです!

さいごに

『ここの競馬AIの予想精度はどれくらいなの?』と気になった方は是非過去記事もご覧ください!!

engineer-lime.com

engineer-lime.com

engineer-lime.com

2020年 第65回有馬記念を振り返る

非常に悔しい結果となりました。

前書き

有馬記念の時期になると「あぁ今年ももう終わりなんだな」と実感しますよね。
私が初めて観戦した有馬記念はサトノダイヤモンドが勝利した第61回でした。当時全く知識がないながらも菊花賞での走りが圧巻だったので迷わず単勝馬券を購入し、最後の最後で差し切って勝利してくれた姿を見て感動しました。配当金はとても安かったですが、当たったことには変わりなし。その時の感動と歓声は今でもはっきりと覚えています。
そして翌年、前年では惜しくも2着に破れたキタサンブラックが勝利。有終の美を飾り、ホッとしたことを昨日のことのように覚えています。これがもう3年前の出来事だなんて、時の流れは早いですねぇ。

さて、今回は当ブログの初の試みとして有馬記念の予想公開なんてものをやってみました。とはいっても予想記事として公開したのではなく、今自作している競馬予想AIの精度を披露するためのものですがね。
結果からすると、「半分当たり」「半分外れ」といった結果に終わってしまいました。この意味は後述します。

予想を公開した記事はこちら。まだご覧になられていない方は是非ご一読いただけますと幸いです。
engineer-lime.com

結果&感想

勝利したのはクロノジェネシスでした。
いや〜、最近は本当に牝馬が強いですね。斤量差を見直したほうがいいんじゃないかってくらい、大一番では牝馬が目立っていると感じます。
鞍上は北村友一騎手。昨今は有力馬=外人騎手への乗り替わりが多いですが、この馬だけはデビューから一貫して北村友一騎手が継続騎乗しています。より一層応援したくなるコンビですね。
着差としては僅かながら、仮にもう少し距離が伸びてもそのまま後続を寄せ付けず勝利していたんじゃないかと思うくらい、文句のない勝ち方でした。宝塚記念での圧勝は伊達じゃないですね。

2着にはサラキア。昨年まではいまいちパッとしない馬でしたが、今年に入ってからは父ディープインパクト譲りの抜群の切れ味から末脚一閃、とても気持ちの良いレーススタイルで有力馬の仲間入り。今回も「そこから届くのか?」と思うくらい後ろからの追い込み競馬でした。鞍上の松山弘平騎手もお見事です。

3着にはフィエールマン。どちらかというと良馬場が向いている馬だと思います。やはり地力がある馬だと感じましたね。
4着にはラッキーライラック。現役馬の中で一番好きな馬でした。馬場も展開も向かないながら、4着に入ってくれて嬉しかったです。
5着は同着でカレンブーケドールとワールドプレミアが入選しました。いずれも一線級の馬だと再認識。

予想の結果について

「半分当たり」「半分外れ」と先述しましたが、結果は以下の通りでした。

予想時期 結果
前日夜 当たり
発走直前 外れ
前日夜予想 発走直前予想
クロノジェネシス ラヴズオンリーユー
ラヴズオンリーユー カレンブーケドール
カレンブーケドール クロノジェネシス
フィエールマン フィエールマン
ラッキーライラック ワールドプレミア
サラキア ラッキーライラック

※いずれも軸1頭から5頭へ流して買うことを想定しています。予想および私が購入した物は以下記事にて紹介しています。
engineer-lime.com

配当金は以下の通りでした。

券種 配当金
単勝 250円
馬連 10330円
馬単 11360円
3連複 7370円
3連単 50150円

なかなかの大当たりでしたね。2着にサラキアが入線してくれたおかげです。
前日夜に予想を公開してそこそこの人数の方にご覧いただけたようですので、もしかしたら私のAI予想のおかげで的中された方もいらっしゃるかもしれません。的中された方、本当におめでとうございます!
しかし馬体重の有無だけでここまで予測結果が変わってしまうとは・・・予想ロジックをしっかりと見直した方がいいですね。

私は予想記事に公開した通り直前で買い目を変更してしまったため外れてしまいましたが、AIの精度をある程度証明できる形となりましたので後悔はありません。更なる強化を行い、年明け一発目の金杯にてリベンジしたいと思います!

今後の競馬予想公開について

今回の予想記事ですが、嬉しいことに前日夜と発走直前にアクセス数が急増しました。ご覧いただいた皆様ありがとうございます!
私としては今回のように正々堂々とAI予想を公開することによって自分自身に対する追い込みとなり 更に精度を求めていく姿勢が強まります。読者様においてはある程度精度が保証されているであろう私の予想モデルを参考にしていただくことで、より馬券的中率が上がると考えています。
お互いWin-Winなんですよね。

ですので今後も予想の公開を続けていきたいと考えています。次回は2021年の開幕日に開催される「中山金杯」「京都金杯」の予想を公開させていただきます!是非是非twitterのフォロー&当ブログをブックマークいただき、予想の参考としてお役立てください。

twitter.com

競馬AIを作成したら収支が一気に上向き調子になったお話。

まずはこの推移を見て欲しい。

f:id:rhymerr:20201220223125p:plain
完全に上向き調子になっています!
もちろん、何も変えずに上向き調子に持ってきたのではありません。

回収率がプラスに転じた”ワケ”

最初に言っておくと 運が良かった というわけではないです。詳しくは以下に纏めます。

1. 券種を単勝メインから3連複メインに変えたこと

競馬を始めてからずっと単勝一筋で突き進んできましたが、僅差で負けて「あ〜、複勝にしときゃ良かったよ」と思う機会が多いことに気付きました。
要するに、馬圏内を当てることは得意だけど1着を当てるとなると私にとって難易度が高かったのです。
複勝やワイドだとある程度の金額を注ぎ込まなきゃリターンが少ない、馬連だと3着になったときが悔しい。そうなると残るのは3連複だけでした。
よほどガチガチじゃ無い限り10倍を切ることは少ないですし、何より多めに買っても思ったより点数が嵩まないのがGood。

2. 予想方法を変えたこと

これまでは『ハイブリッド新聞』というメディアのみを見て予想していました。知らない方のためにざっくりと説明すると完全にデータ主義の新聞で感情論一切なし、そしてこれまでの実績から「相対評価したレーティング的な物」「前半3ハロンは大体これくらいのタイムで走破するだろう」「後半3ハロンは大体これくらいのタイムで走破するだろう」といった具体的な数値がまとめられている競馬新聞です。その他にも「出遅れ率」「4コーナーで5番手以内にいた確率」などなどが纏められており、展開から予想するスタイルの方にはピッタリと言えます。
特に分かりやすく効果を発揮してくれるのが、出だしのスピードから「行った行った」の前残り競馬になりやすいダートの短距離走ですね。絶大な効果を発揮してくれました。
大変満足していたのですが、どうも私はこのデータに対して感情を上乗せして解釈してしまい、且つ 新聞に頼りすぎてまともに展開予想の時間を割かず直前の急なフィーリングで買い目を決めてしまうことが多かったのです。
そこで考えたのが「自分で考えないこと」。と言ってしまうと聞こえが悪いですが、他人の予想に丸乗りする という意味ではなく判断を機械に任せてしまおうというもの。俗に言う『競馬AI』という奴です。 独自のロジックでハイブリッド新聞に掲載されているようなレーティングや予想走破タイムを算出し、その比較結果を基に『3着以内に入る確率』を算出して上位の馬を選んで流す、といった形にしました。
結果は…冒頭の通りです。完全な上昇傾向が見られるようになりました!

3. その日その日で一発を狙わず、「年間トータルで勝とう」という考えに切り替えたこと

「その日の負けを少しでも減らそう」と考えて最終レースにぶち込む方、結構いらっしゃると思います。私も典型的なそれでした。
自己分析した結果、この行動のせいで大きな赤字を生み出していることに気付いてしまいました。そりゃそうですよね、冷静さを欠いているんですもの。
とてもシンプルな思考ですが、今は「今週はしょうがない。また来週頑張ろう」と考えるようにしています。

具体的な購入スタイル

『3連複1頭軸5頭流し』です。10点なので1000円から賭けられます。重賞だけ買うとしたら月1万円ほどで済みます。
買い目の決め方は上でも紹介したように競馬AIが割り出した最も3着以内に入る確率の高い1頭から次いで確率の高い5頭に対して流す、といったシンプルなスタイル。
サンプルとして『2020年11月1日に開催された東京11R 天皇賞(秋)』ではこんな感じでした。

馬番 馬名 3着内偏差
9 アーモンドアイ 100
6 フィエールマン 92
7 クロノジェネシス 85
4 ダノンキングリー 77
8 キセキ 71
2 カデナ 48

今回だと『アーモンドアイ』を軸に『フィエールマン』『クロノジェネシス』『ダノンキングリー』『キセキ』『カデナ』に対して流すという結果になります。カデナはともかく他については実績馬ばかりなので普通に一発ありそうですよね。
余談ですが今回の天皇賞、私の本命は『フィエールマン』でした。AIの予想でも2番手評価。これは行けると思い、調子乗って頭で購入する馬券まで購入しましたが首差で叶わず。出だしの不利がなければ…と考えたくもなりますが結果は素直に飲み込むことにしています。
結果はご存じの通り。以下の通り確定しています。

1着 アーモンドアイ
2着 フィエールマン
3着 クロノジェネシス
4着 ダノンプレミアム
5着 キセキ
…
8着 カデナ
…
12着 ダノンキングリー  

ダノンキングリーは明らかにおかしい結果になりましたが、大穴のカデナは人気以上の着順になりましたし馬券も綺麗なくらいに的中しています。
今回は1〜3着の順番まで正しく、仮に頭から3連単で購入していたら1点で当たっていた非常に珍しいケース。流石に出来すぎた結果になっていますが、こんな感じで確率を割り出してくれます。

競馬AIについて

私以外にも開発されている方がチラホラといらっしゃるかと思います。私も本職はエンジニアですから、その方々に負けないように、そして自分の技術力を測るといった意味で開発を始めています。
技術的な話をすると使用している言語はpythonで、LightGBMなどのライブラリを利用して作成しています。

実際にはAIなんて作ったこともなかったので1から手探りで作っているわけですけれども、それでも上向き調子です。
現状に満足せず、どんどん精度を上げていきたいですね。

最後に

上に纏めたものは全て過去の実績。精度を確かめるために12/27の15時頃、当記事を更新する形で『有馬記念』の予想を公開しようと思います。
気になる方は是非是非見に来てください。爆発的にアクセス数が伸びるようであればその先の重賞レースでも公開を考えます。

2020年有馬記念のAI予想:2020/12/26 20:00追記

ちょっと早いですが事前予想をupしておきます。
本命クロノジェネシス、対抗ラヴズオンリーユー、それからカレンブーケドール、フィエールマン、ラッキーライラック、サラキアという結果になりました。悪くないんじゃないでしょうか。
結果はいかに。
f:id:rhymerr:20201226200706j:plain

2020年有馬記念のAI予想(馬体重発表後版):2020/12/27 14:30追記

馬体重発表後に改めて分析しました。
やや上位に変動有りですね。私はこちらを信じて購入したいと思います。
f:id:rhymerr:20201227142146p:plain
f:id:rhymerr:20201227143404j:plain
f:id:rhymerr:20201227143411j:plain

2020年有馬記念の結果:2020/12/27 15:50追記

昨晩の解析結果通りに流していれば当たっていましたね…。出直してきます!来年にご期待ください!!

続記事書きました。(2020/12/27 20:30)

engineer-lime.com