はじめに
大学時代、研究室で日々考えていたのは「金のあるニート」になること。しかしながら、生まれも育ちも一流からは程遠い私にはそのような機会は舞い降りてこない。
気が付けば社会人となり10年経過するところであるが、このままでは生涯サラリーマンという有様。
天才的なビジネスセンスがあり、一発サービスを当てることができれば、生まれ育ちも関係ないかもしれない。
残念なことに、そのような才覚も実力もない私はサイコロを振って、運に任せるしかないのである。
そうだ、totoで一発当てて、「金のあるニート」の夢を実現しよう...。
とりあえずの予想手法
という訳で、totoの予想を始めてみることに。予想手法を考えないといけない訳だが、ベースラインとしてEloレーティングで予想することを行ってみよう。
恐らく誰もが通った道で、これだけでは上手くいかないのであろうけど。
Eloレーティングの計算式についてはWikipediaを見られたし。
2021年の結果を予測するにあたっては、2020年の試合結果からレーティングを計算することにしました。
探したらPerlモジュールがあったので、実装にはChess::Eloモジュールを使いました。
レーティングの初期値は1500、K=32としました。
計算結果は以下の通りとなりました。
順位 | チーム名 | レーティング | リーグ順位 |
---|---|---|---|
1 | 川崎F | 1681.107036 | 1 |
2 | 名古屋 | 1584.388649 | 3 |
3 | G大阪 | 1582.47218 | 2 |
4 | 鹿島 | 1580.854472 | 5 |
5 | C大阪 | 1543.406678 | 4 |
6 | FC東京 | 1525.930539 | 6 |
7 | 柏 | 1520.900705 | 7 |
8 | 大分 | 1496.759443 | 11 |
9 | 広島 | 1496.565606 | 8 |
10 | 横浜FM | 1486.914516 | 9 |
11 | 札幌 | 1478.386123 | 12 |
12 | 鳥栖 | 1472.253848 | 13 |
13 | 浦和 | 1465.983398 | 10 |
14 | 横浜FC | 1422.628439 | 15 |
15 | 清水 | 1421.548719 | 16 |
16 | 仙台 | 1421.441177 | 17 |
17 | 湘南 | 1412.878183 | 18 |
18 | 神戸 | 1405.580288 | 14 |
レーティング1位と18位の差が275なので、1位と18位が対戦した場合に1位の勝率が約83%です。
当然中位のチーム同士の対戦になると、甲乙つけがたい状態になります。
このレーティングの値から勝敗や引き分けをどう割り振るかがカギになりそうです。
私がJリーグの試合結果のサイトから作ったデータファイルは以下においています。
計算には使いませんでしたが、得点もデータには含めています。
https://github.com/s1ncha/toto
さて、問題はここからどう改良するかだよなぁ。
勝敗のデータは比較的簡単に見つけて整形できたけど、これ以外の要素はデータを整えるのが大変そうだ。