第6回では、予想画面を「10秒で見られる形」に作り直した話を書きました。
今回は、その画面に載せている選手タグの話です。
「初日に強い」「準優で崩れやすい」といった条件別の得手不得手を、過去成績から機械的に判定しています。
ところが作ってみると、「女子戦に強い選手」の一覧に男子選手が32人いました。
「準優に強い」を機械に測らせたい
競艇では、同じ選手でも条件によって成績が変わると言われます。
初日はまだ調整が定まっていない。節の後半は整備が進む。準優は勝ち上がった選手ばかりになる。優勝戦はさらに相手が強い。女子戦には女子戦の特徴があり、強風の日にはまた別の難しさがあります。
そこで現在は、次の6条件について成績が普段より上下する選手を探しています。
初日、節後半、準優、優勝戦、女子戦、強風。
人間の印象ではなく、過去データから機械的に判定するのが目的です。
素朴に数えると、全員が同じ評価になった
最初は単純に比較しました。
たとえば準優なら、「その選手の準優での成績」と「それ以外のレースでの成績」を比べます。
すると結果は、
準優は全員悪化。
女子戦は全員改善。
という、ほとんど役に立たないものになりました。
考えてみれば当然です。
準優は勝ち上がってきた強い相手ばかりなので、普段より着順が悪くなりやすい。女子戦も通常の男女混合戦とは相手関係が変わります。
つまり測っていたのは「その選手が準優に強いか」ではなく、「準優というレースそのものが難しい」という事実でした。
同じレースに出た6人と比べる
そこで比較方法を変えました。
その選手だけを見るのではなく、同じレースに出た6人の中でどのくらいの成績が期待されていたかを先に計算します。
全国勝率が6人の平均よりどれくらい上か下かを使って期待される着順を出し、実際の着順がそこからどれくらい上振れ、あるいは下振れしたかを見ます。
期待値を作る表も、条件ごとに分けました。
準優と通常戦で同じ基準を使えば、「準優はそもそも難しい」という条件そのものの影響が残ってしまうからです。
さらに対象者全体の中央値を引き、母集団全体が持つ偏りも調整しています。
この形にすると、
「相手が強いのに踏ん張った」
「相手が弱かったのに取りこぼした」
という違いを拾えるようになりました。
これは自分だけでは思いつかなかった観点で、外から指摘を受けて追加したものです。入れてから評価の分布がかなりまともになりました。
女子戦タグに、男子が32人いた
ところが分布を眺めていると、女子戦のタグに見覚えのある男子選手の名前が並んでいました。
数えてみると32人。
女子戦への適性を判定しているはずなのに、男子選手にも◎○△×が付いていました。
開催名は12文字で切れていた
原因は1つではありませんでした。
まず、女子戦かどうかの判定に開催名を使っていました。
ところがデータベースに保存されている開催名は12文字で切れています。
「○○女子リーグ戦」のように後半に女子戦を示す文字が入っていても、その部分が保存時に落ちていれば判定できません。
逆方向の問題もありました。
「ほぼ女子戦〜サマーモード」「レディースVSルーキーズ」「桃咲まゆ杯〜ほぼ女子戦」のように、タイトルには女子やレディースという文字が入っていても、実際には男女が出走する開催があります。
つまり、女子戦を取りこぼす一方で、女子戦ではないレースも拾っていました。
名前ではなく、実際に走っている6人を見る
そこで、開催名から判定するのをやめました。
実際にそのレースへ出走している6人を見て、全員が女性と判定できるレースだけを女子戦として扱います。
選手の判定には、女子限定開催への出走履歴を使っています。
この方法に変えると、かなりきれいに分かれました。
| 開催 | レース数 | 出走6名が全員女性 |
|---|---|---|
| オールレディース競走 | 72 | 72 |
| ヴィーナスシリーズ | 72 | 72 |
| レディースVSルーキーズ | 72 | 12 |
| ほぼ女子戦〜サマーモード | 72 | 3 |
修正前の女子戦対象は17,448レース。
修正後は26,092レースまで増え、男子選手への女子戦タグ付与は32人から0人になりました。
対象が増えたのは、開催名の途中で「女子」を示す文字が切れていたレースも拾えるようになったためです。
1つ直したら、別の壊れも見つかった
女子戦を直したついでに、残り5条件も確認しました。
すると「節後半」の判定も壊れていました。
開催を「会場と開催名」だけでまとめていたため、同じ会場で同じ名前の開催が数年後に行われると、同一開催としてまとめられていたのです。
たとえば2021年の6日間開催と2026年の4日間開催が1つの開催として扱われれば、当然「何日目か」の計算もおかしくなります。
調べると、3,132グループ中514グループで実際に影響が出ていました。
開催初日の日付を識別キーへ追加して修正しました。
1つの条件でデータの持ち方に問題が見つかったなら、同じデータを使っている別の条件も疑う。
地味ですが、この確認で別のバグも拾えました。
やらないと決めたこと
タグを作るうえで、やらないと決めていることもあります。
ひとつは、性格や意欲を評価しないことです。
たとえば「プレッシャーに弱い」というタグは、それらしい数字から作れてしまいます。
しかし手元のデータから分かるのは、特定条件で期待より着順が上だったか下だったかだけです。
なぜそうなったのか、本人がどう感じていたのかまでは分かりません。
なので表示するのは、「準優で期待より上振れている」「強風条件で下振れている」といった観測可能な範囲だけです。
もうひとつは、元データにないものを無理にタグ化しないことです。
「記念戦」「安定板使用」なども候補には挙がりましたが、現在持っているデータでは確実に判定できません。
取れないものを推測で埋めると、見た目だけもっともらしいデータになります。
そのため、判定できないタグとして理由付きで残しています。
極端な評価は少なくした
現在のタグ分布はこうなっています。
| タグ | ◎ | ○ | △ | × | 計 |
|---|---|---|---|---|---|
| 初日 | 67 | 255 | 259 | 50 | 631 |
| 節後半 | 25 | 217 | 188 | 31 | 461 |
| 準優 | 126 | 271 | 301 | 185 | 883 |
| 優勝戦 | 106 | 172 | 207 | 165 | 650 |
| 女子戦 | 7 | 46 | 45 | 31 | 129 |
| 強風 | 143 | 287 | 300 | 128 | 858 |
◎と×は少なく、大半が○と△です。
これは意図した分布です。数レースの上振れだけで「超得意」、少し負けただけで「苦手」と判定しないようにしています。
ただし、女子戦タグはまだ信用しきっていない
男子32人問題は直りました。
しかし、女子戦タグそのものにはまだ別の問題があります。
タグと出走経験の量が強く結びついているように見えるからです。
女子戦で◎が付いた7人の平均出走数は725走。
×が付いた31人は平均226走でした。
これでは「女子戦に強い選手」を測っているのではなく、「経験の多い選手」を高く評価している可能性があります。
比較の土台になる期待値の表が、男子を多く含む母集団から作られていることが原因のひとつではないかと見ています。
ただし、ここを直すと判定方法の中心部分に触れます。
数字だけ合わせる修正はせず、別途検証してから直します。
直っていない問題も書いて残しておかないと、そのうち自分でも「これは解決済みだった」と勘違いします。
次回は、この連載の最終回です。
こうして見つかった不具合や、怪しいけれどまだ直していない問題を、修正後も消さずに残している「台帳」の話を書きます。

コメント