前回まで、スリット判定AIにどんな特徴量を入れれば精度が上がるのか、いろいろと試してきました。
平均STを使ってみたり、標準偏差を使ってみたり。
STの速い率や遅い率、中央値なども試しました。
ただ、なかなか「これだ」というものが見つかりません。
そんな検証を続けているうちに、少しずつ別の疑問が出てきました。
「そもそも、12種類のスリットPatternを全部予測する必要があるのかな?」
今回は、そこから開発の方向を考え直した話です。
機械学習なら、まあ何とかなると思っていた
そもそもAI開発を始めたとき、機械学習について今ほど分かっていませんでした。
12種類のスリットPatternを予測すると決めたものの、
「機械学習なら、データを入れて学習させれば、まあ何とかなるんじゃないかな」
くらいの感覚でした。
今思えば、かなりざっくりした考えです。
機械学習で何ができて、何が難しいのかも、まだよく分かっていませんでした。
実際に教師データを作って、AIに学習させて、評価してみる。
そして特徴量を変えて、また試してみる。
そうやって検証を続けていくと、思っていたほど簡単ではないことが少しずつ分かってきました。
12種類に分類したスリットを、それぞれ正確に予測する。
やってみる前は、そこまで難しいことだとは思っていませんでした。
でも、実際に検証してみると、思ったようには進みません。
「このまま12Patternの精度を追い続けて、本当に最終的な予想につながるのかな?」
そんな疑問が、少しずつ大きくなっていきました。
そこで、単純に精度を上げる方法を考えるのではなく、そもそものアプローチを変えてみることにしました。
12種類を全部当てる必要があるのか?
考えてみれば、最終的にやりたいのは「スリットPatternを当てること」ではありません。
最終的な目的は、レースの着順を予想することです。
スリットを予測するのは、そのために役立つ情報を得るためでした。
ところが、検証を続けているうちに、少しずつ、
「スリットPatternを予測すること」そのものが目的になっている
ような感覚が出てきました。
もちろん、12種類のPatternを正確に予測できるのであれば、それを使って最終的な予想につなげればいい。
でも、そこがなかなかうまくいかない。
それなのに、
「どうすれば12Patternをもっと正確に予測できるか」
だけを考え続けるのは、少し違う気がしてきました。
本来の目的から考えれば、
「最終的な着順予想に必要な情報が得られればいい」
はずです。
そう考えると、12種類すべてを細かく分類する必要があるのか、疑問になってきました。
だったら、もっとシンプルにできないか
そこで最初に思いついたのが、
「イン逃げしやすいスリット」
と
「イン逃げしにくいスリット」
くらいにまとめてしまう方法でした。
12種類のPatternをすべて予測するよりも、かなりシンプルです。
そして、この考え方にはもう一つ理由がありました。
自分自身が、普段どのようにレース結果を予想しているのか。
そこに一度戻って考えてみました。
そもそもこのAI開発は、自分の予想をPythonやAIを使って形にしてみようと思ったところから始まっています。
だったら、AIに何を予測させるかを考えるときも、自分が実際にどんな順番で予想しているのかを整理してみた方がいい。
自分の場合、まず最初に考えるのが、
「このレースはイン逃げするのか?」
ということでした。
イン逃げすると考えたら、
「じゃあ2着、3着になるのは誰か」
と考えます。
逆にイン逃げしないと思ったら、
「じゃあ誰が1着になるのか」
を考える。
つまり、自分の予想そのものが、
イン逃げするかどうかを最初に判断する
という流れになっています。
ここまで整理すると、
「12種類のスリットのどれなのか」
を細かく当てるより、
「このスリットはイン逃げしやすいのか?」
を判断できた方が、自分の予想プロセスにもつながりやすい。
そう考えるようになりました。
スリット予測は「目的」ではなく「手段」
ここで、開発全体の構造も整理しました。
自分が最終的にやりたいのは、レースの着順を予想することです。
そのために、
スリットを予測する。
↓
そのスリットがイン逃げに有利なのかを見る。
↓
選手の能力なども合わせる。
↓
イン逃げするかどうかを判断する。
↓
最終的な着順を考える。
こう考えると、スリット予測は最終目的ではありません。
あくまで、その先の予想につなげるための手段です。
ここまでいろいろ分析してきた中で、少しずつ手段が目的化しているような感覚がありました。
それでも、スリット予測がうまくできる結果が出ているなら、そのまま進めてもよかったと思います。
でも、実際には思ったように進んでいません。
だったら、ここで一度立ち止まって、本来の目的に戻って考えた方がいい。
そう思いました。
そして、もう一つ気になっていたこと
実は、これまでの分析の中で、少し気になっていたことがありました。
自分がレース結果を予想するとき、選手のスタートについて、
「この選手は自分のタイミングで行くタイプ」
「この選手は周りに合わせる感じがある」
といったことを、なんとなく区別していました。
もちろん、当時は感覚的なものです。
これをどうやって数字にすればいいのかは分かっていませんでした。
そこで実際にデータを分析してみると、選手によってスタートの特徴に違いがあることが見えてきました。
そして、その結果が、自分がこれまで持っていた感覚とそれほどズレていませんでした。
これは少し面白い結果でした。
「自分の経験則も、あながち間違いではないのかもしれない」
と思えたからです。
もちろん、これだけで自分の予想方法が正しいと証明されたわけではありません。
ただ、感覚で考えていたことをデータで確認してみて、ある程度近い結果が出た。
これは、次の方向を考えるうえで一つの材料になりました。
選手ごとのスタート特性を使ってみる
ここまでの検証を踏まえて、
「選手ごとのスタート特性を使って、スリットを考える」
という方向なら試してみてもいいのではないかと思うようになりました。
今までのように、
「12Patternをどうやって正確に予測するか」
だけを考えるのではありません。
選手それぞれが、
「どんなスタートをしやすいのか」
という特徴をまず考える。
そして、その6艇をレースの中で比較してみる。
そうすれば、スリットの形も少し見えてくるかもしれません。
もちろん、この時点では、
「これでうまくいく」
と確信していたわけではありません。
あくまで、
「この方向なら試してみる価値はありそう」
という感覚です。
ただ、今までよりも自分の予想の考え方に近いアプローチになってきました。
ここから、少し考え方を変えてみます
これまでの検証では、
「どの特徴量をAIに入れれば、12種類のスリットPatternを予測できるか」
を中心に考えてきました。
でも、ここからは少し違います。
「そもそも、レース前に分かる情報だけで、今回のスタートをどこまで考えられるのか?」
という方向に進んでみます。
過去の選手のスタートには、何か特徴があるのか。
その特徴は、次のレースでもある程度再現するのか。
そして、それを6艇分並べたときに、スリットの形を考える材料になるのか。
まだ分かりません。
でも、12Patternの精度だけを追い続けるよりは、最終的な着順予想につながる可能性がありそうです。
ここからは、これまで蓄積してきた選手の過去データを使って、別の角度からスタートを見ていくことにしました。
次回予告
12種類のスリットPatternを予測することが、最終的な目的ではない。
そう考えるようになったことで、開発の方向を少し変えることにしました。
次に注目したのは、レース前から分かる「選手の過去のスタート特性」です。
過去のスタートデータから、
「この選手は今回もスタート上位になりやすいのか?」
を調べてみることにしました。
ここから、また別の検証が始まります。
あわせて読みたい
前回は、STの中央値を使って、平均STとは違った情報をAIに与えられないか検証しました。
結果は期待したほど改善せず、平均STと中央値は、かなり重なる情報なのではないかと考えるようになりました。
今回は、そこから少し視点を変えます。
12種類のスリットPatternを予測すること自体が、本当に必要なのか。
自分の予想プロセスに戻りながら、競艇AI開発の方向を考え直していきます。
競艇AI開発日記 第17話|ST中央値を試してみても、やっぱり大きな変化はありませんでした
