競艇AI開発日記 第28話|選手同士の「連動性」をAIに入れてみる

前回は、6艇のスタートにはそれぞれ独立した動きだけではなく、選手同士の連動があるのではないか、というところから「基準になる選手」がいるのかを調べました。

実際に、相関の高い選手や、同じグループ内でスタートが連動しているように見えるケースも見つかりました。

ただ、

「この選手が基準です」

と決めて、それをAIの中心にするところまではうまく落とし込めませんでした。

そこで今回は、少し考え方を変えてみます。

「誰が基準なのか」ではなく、「選手同士がどのくらい連動しているのか」を数字にして、AIに入れてみる。

まずは試してみることにしました。

「基準選手」ではなく、連動性を特徴量にしてみる

前回調べたように、同じグループの選手同士には一定の相関がありました。

それなら、特定の選手を「基準」として扱うのではなく、

この選手は、同じグループの選手とどのくらい連動しているのか?

を数字にしてしまえばいいのではないか。

そう考えました。

とはいっても、自分が最初から具体的な特徴量を考えられたわけではありません。

ここもAIに相談しながら、使えそうな数字を作ってみました。

まずは3つの数字を作ってみる

今回試したのは、主に3つです。

group_corr

同じグループにいる他の2艇の平均STと、自分のSTがどのくらい連動しているのかを表す数字です。

相関係数なので、数字が大きいほど、一緒に変化する傾向が強いと考えられます。

group_slope

こちらは、前回の回帰分析で見ていたものです。

自分のSTが変化したとき、同じグループの他2艇の平均STがどのくらい変化する傾向があるのかを数字にしました。

例えば、傾きが0.6なら、

自分が0.01秒速くなったとき、他2艇の平均STも約0.006秒速くなる

というように見ることができます。

group_sample

その選手×コースについて、過去にどれくらいのスタートデータがあるのかを表す数字です。

データが少ない選手と、十分なデータがある選手では、相関や回帰の数字の信頼性も変わってきます。

そこで、過去のデータ数も一緒にAIへ渡してみることにしました。

ベースのAIと比べてみる

ここからは、実際にAIへ入れて比較してみます。

まずは、それまで使っていた基本的な特徴量だけでモデルを作ります。

そこへ、

  • group_corr
  • group_slope
  • group_sample

を少しずつ追加して、結果がどう変わるかを見てみました。

結果はこのようになりました。

特徴量AccuracyMacro F1ROC-AUC
ベース72.7%0.4370.476
+group_corr73.6%0.4560.482
+group_slope73.2%0.4530.508
+corr+slope73.6%0.4560.523
+corr+slope+sample72.7%0.4210.552

数字だけを見ると、少し変化しています。

特に最後のケースでは、ROC-AUCが0.552まで上がりました。

「お、少し良くなっているのかな?」

と思う数字ではあります。

ただ、実際に結果を見たときの自分の感想は、

「たいして変わらないなぁー」

でした。

また、これだけで「group_sampleが有効だった」と判断するのもまだ早いと思っています。

それでも「使えない」とは思わなかった

では、group_corrやgroup_slopeは意味がなかったのか。

自分は、そこまで単純には考えませんでした。

今回の結果だけで見ると、劇的に予測性能が変わったわけではありません。

でも、

「もっと深掘りしたら使える可能性はあるんじゃないか」

という感覚はありました。

例えば、特徴量の作り方を変えたり、他の情報と組み合わせたりすれば、もう少し何か見えてくる可能性はあります。

だから、

「この特徴量はダメだった」

というより、

「今回試した範囲では、大きな改善にはつながらなかった」

という感じです。

ただ、ここで別の問題が出てきました。

特徴量探索は、どこまで続ければいい?

ここまでの開発を振り返ると、最初は平均STだけを見ていました。

そこから、

  • STの標準偏差
  • ST差
  • STの分布
  • 選手同士の相関
  • グループ内の連動
  • 基準になる選手の可能性

と、いろいろな方向を調べてきました。

もちろん、それぞれに面白い発見はありました。

でも、

「これを入れればスリット予測が劇的に良くなる」

という特徴量は、なかなか見つかりませんでした。

そして、今回のgroup_corrやgroup_slopeについても、深掘りすれば使える可能性はある。

そうなると、

「じゃあ、もう少し調べてみよう」

となります。

でも、その先にはさらに別の特徴量が出てくるかもしれません。

また別の分析をして、その結果から新しい特徴量を考えて……。

そうやっていくと、いつまで経ってもAIそのものを作るところまで進まなくなりそうです。

自分の中では、

「あまり深みにハマると、出られなくなる気がする」

という感覚がありました。

一度、プロトタイプを作ってみよう

そこで、ここで一度止まることにしました。

特徴量探索を続けるのではなく、

「一回、プロトタイプでもいいからAIを作ってみよう」

と考えました。

平均STだけでは足りないと思って、いろいろな特徴量を探してきました。

でも、ここまで調べても、スリット予測を劇的に改善できそうな特徴量は見つかっていません。

だったら、完璧な特徴量を見つけてからAIを作るのではなく、

今ある材料で一度AIを形にしてみる。

その方が次に進めそうです。

実際にAIとして動かしてみれば、

「ここが足りない」

「この特徴量を追加した方がいい」

といったことも、今より分かりやすくなるかもしれません。

次は「どんなAIを作るか」を決める

今回、選手同士の連動性を数字にしてAIへ入れてみました。

結果として、多少の変化はありましたが、劇的に予測性能が変わるほどではありませんでした。

ただ、今回の分析で分かったのは、特徴量そのものだけではありません。

AI開発では、「もっと調べられる」からといって、ずっと調べ続ければいいわけではない。

ということでした。

どこかで区切りをつけて、実際にAIを作ってみる必要があります。

そこで、ここからは特徴量探しをいったん止めます。

次は、

  • 何を予測するのか
  • どんなデータを使うのか
  • どうやってAIを評価するのか

といった、実際に使うことを前提にしたAIの形を決めていく段階へ進みます。

あわせて読みたい

競艇AI開発日記

← 競艇AI開発日記 第27話|基準になる選手はいるのか?

競艇AI開発日記

競艇AI開発日記 第29話|グループ全体ではなく1号艇を見る →

コメント

タイトルとURLをコピーしました