毎週150万円の実弾を馬券に突っ込む男、横けんです。
今回は予想そのものの話ではなく、「予想を作るまでの作業」の話をします。
私はTARGET frontier JVという競馬ソフトを20年近く使っています。データを引っ張り、集計し、印を入れ、また集計する。この繰り返しが予想の土台です。ただ正直に言うと、この作業に週で何時間も溶けていました。
そこで、この操作そのものをAIにやらせてみることにしました。結論から言うと、データのダウンロードから印の生成、TARGETへの書き戻しまで、ほぼ全部が自動で回るようになりました。ただし、ここに辿り着くまでに何度も事故りました。その過程で分かった「守らないと必ず壊れる6つのこと」を、包み隠さず書きます。
▶ 私が毎週150万円を賭けながら3年かけて作った競馬予想AIの全体像は、「競馬予想AIの作り方・完全ガイド」に最初から順にまとめています。
なぜ予想そのものではなく「作業」を自動化したのか
予想の精度を上げる話は、みんなやりたがります。でも私が本当に困っていたのは、精度以前の部分でした。
木曜にデータを落とし、印を作り、それをソフトに戻す。土日には結果を集計する。この一連の作業は、頭を使っているようで実はほとんど使っていません。決まった手順を、決まった順番で繰り返しているだけです。
それなのに時間だけは確実に持っていかれる。しかも疲れます。疲れた状態でレースを見ても、いい判断はできません。

作業時間が空けば、その分だけレースを考える時間に回せます。私が自動化に手を出した理由はこれだけです。AIに予想させたかったわけではなく、AIに雑用をさせたかった。
実際にどこまで自動化できたのか
今の時点で、次のことがコマンド一発で回ります。
- 木曜:出馬表や馬データをソフトから書き出す
- そのデータで印とコメントを生成する
- 生成した印を、ソフトの「馬印」欄に書き戻す
- 土日:週末の回収率を集計して、画像として切り出す
- その画像を使ってブログの下書きまで作る
数字で言うと、ある日曜の32レース分をまとめて書き戻したとき、ソフト側の完了表示は「新規32件/上書き0/結合0/同一0/パス0」でした。生成したレース数とぴったり一致しています。取りこぼしもダブりもゼロということです。
別のコマンドでは、6種類のファイルを一括で書き出す処理を通しでテストして、それぞれ95行・124行・101行・133行と想定どおりの件数が出ました。未勝利戦の絞り込みでは484頭から181頭まで正しく落とせています。
この記事の元になった週次レポートに載せている回収率の表も、私は一切触っていません。AIがソフトを開いて、条件を設定して、表を切り抜いて、画像として保存しています。
鉄則その一:画面の位置を覚えさせてはいけない
これが最大の落とし穴です。
「画面の左から500ドット、上から300ドットの場所を押せ」という指示は、一見いちばん簡単です。実際に最初はそう書きました。そしてモニターを変えた瞬間に全部壊れました。
ノートパソコンと外付けモニターでは画面の細かさが違います。文字の拡大率が違うだけでもズレます。座標を覚えさせた自動化は、必ずいつか壊れます。しかも壊れたときに「押したつもりで別の場所を押している」ので、気づくのが遅れます。これがいちばん怖い。

今は座標を一切使っていません。メニューは「項目の名前」で指し、リストは「その行の文字」で選び、押すべきボタンは「ボタンとしての正体」で掴んでいます。どのパソコンで動かしても同じ結果になります。
鉄則その二:マウスで押しても反応しないボタンがある
これは意外でした。人間と同じようにマウスカーソルを動かしてクリックさせても、TARGETのボタンは反応しないことがあります。
ソフトの作りによって、「マウスが動いた」という信号を見ているものと、「ボタンが押された」という信号を見ているものがあるからです。TARGETは後者でした。だからマウスを動かす方式ではなく、ボタンに直接「押されたぞ」と伝える方式にしています。
鉄則その三:エスケープキーで閉じてはいけない
開いた画面を閉じるとき、エスケープキーを叩いたり、ウィンドウの×を押したりするのがいちばん手軽です。これをやると、TARGETは中途半端な状態のまま残ります。
次の処理を始めたときに「前の画面がまだ生きている」状態になり、そこから連鎖的におかしくなります。面倒でも、画面に出ている「キャンセル」ボタンをきちんと押す。これだけで安定性がまるで変わりました。
鉄則その四:ダイアログを見た目で判断してはいけない
「処理が終わりました」という小窓が出たかどうかで、次に進むかを決めたい場面がよくあります。
ところがTARGETでは、この小窓のタイトルが本体の画面とまったく同じでした。タイトルで探すと、本体を「小窓だ」と勘違いします。そのまま次に進んで、当然のように失敗します。
今は「そこにOKボタンがあるかどうか」で判定しています。名前ではなく中身で見る。人間の目でやっている判断を、そのまま言葉にしてやる必要がありました。
鉄則その五:終わり方が2種類あることを知っておく
ファイルの書き出しには、終わったときに完了の小窓が出るものと、何も出ずに黙って終わるものの2種類があります。
これを取り違えると悲惨です。出ない方を「出るはずだ」と思って待つと、永遠に待ち続けてタイムアウトします。逆も同じで、出る方を無視して先に進むと、書き出し途中のファイルを読みにいって壊れたデータを掴みます。
どの処理がどちらの型なのかは、実際に一つずつ動かして確かめるしかありませんでした。ここはショートカットがありません。
鉄則その六:書き出されるのは「今映っている画面」だ
TARGETには画面の内容をそのままファイルに落とす機能があります。便利なのですが、落ちてくるのはそのとき表示していたレイアウトそのままです。
別のタブを開いた状態で書き出すと、列の並びも列の数も変わったファイルが出てきます。見た目は正常なので気づきません。そのまま集計に流すと、まったく違う数字が出ます。
今は書き出す前に必ず決まったタブへ切り替えるようにして、列の数まで検査しています。データが正しいかどうかは、中身を見るまで分からない。ここは自動化とは関係なく、競馬のデータを扱う人全員に言えることだと思います。
画像の切り抜きは「罫線」を頼りにした
週次レポートに載せている回収率の表は、AIが画面から切り抜いています。ここでも座標は使っていません。

やり方はこうです。まず画面の中から緑色の見出し行を探します。次に横の罫線の間隔を測って1行の高さを割り出します。最後に縦の罫線を数えて、必要な列の右端を決めます。そこで初めて切り抜きます。
回りくどいようですが、この方式なら画面の大きさが変わっても、行数が増えても、正しい場所で切れます。人間が目でやっていることを、そのまま手順にする。これが結局いちばん壊れにくいという結論になりました。

日付を固定で書かない、という地味だけど大事な話
最初に作ったときは、対象の日付を直接書き込んでいました。動きます。その週は。
翌週になると、先週のデータを一生懸命処理してしまいます。しかもエラーは出ません。正常に終わったように見えて、中身が先週のものになっている。これは危ないパターンです。
今は「今週の土曜と日曜」を毎回その場で計算させています。3日間開催の週でも取りこぼさないよう、画面の見出しを実際に読んで確かめる作りにしました。毎週動かすものに、その週だけの値を書き込んではいけません。
自動化して、結局なにが変わったか
いちばん大きいのは、やる気に左右されなくなったことです。
手作業でやっていた頃は、負けた週の集計が本当につらかった。数字を直視したくないので後回しにする。後回しにすると次の週の準備が押す。押すと雑になる。この悪循環がありました。
今は勝っても負けても同じように集計が回ります。感情が入らないので、負けた週のデータほど冷静に見られるようになりました。自動化の一番の効果は時短ではなく、記録が途切れなくなったことかもしれません。
もう一つは、失敗の記録が残るようになったことです。手でやっていると「あれ、先週どうやったんだっけ」が積み重なりますが、手順を書いた時点でそれが記録になります。今回書いた6つの鉄則も、全部そこから出てきたものです。
これから自動化しようとしている人へ
私はプログラマーではありません。40年競馬をやってきただけの人間です。それでもここまで来られたので、やり方さえ間違えなければ誰でもできると思っています。
ただ、順番だけは間違えないでください。いきなり全部を自動化しようとすると、必ず途中で壊れて心が折れます。私は「回収率の表を1枚切り抜く」ところから始めました。それが安定してから次に進みました。
そして何より、自動化したものは必ず検算してください。「エラーが出ていない」と「正しい」はまったく別のことです。件数が合っているか、先週のデータを掴んでいないか、列の数は想定どおりか。ここを飛ばすと、静かに間違えたまま何週間も走り続けます。馬券を買う人間にとって、これは致命傷です。
作業が減った分は、ぜひレースを考える時間に回してください。私はそのために自動化しました。
この内容を実際に使った週の実戦記録(買い目と収支つき)はこちらです。→ 【競馬AI】AIがTARGETを操作|地方競馬の本命ロジックを中央式に進化
▶ あわせて読みたい:【TARGET設定】「馬印」は8つ使い分けろ! 記憶に頼らず穴馬を自動で炙り出す、プロの分類ルール完全公開
▶ あわせて読みたい:【TARGET活用】レース回顧は記憶するな! 気づきを「備考欄」に入力して、自分だけの「検索できるデータベース」を作る手順



コメント