競輪データ解析

機械学習とデータで競輪と向き合うブログ

カテゴリー

AI(人口知能)による競輪予想システムの開発

AIによる公営ギャンブル予想

特に競馬では多くの人が実践しておりその性能を競い合うドワンゴ主催の大会「電脳賞」なんてのもある。また,卍氏の件はその性能と例の裁判の両面で有名だ。ボートレースにおいてもAIでの予想は賑わっており,検索すれば結構な情報が出てくる。しかしながら競輪での実践情報というのは競馬・ボートレースと比べて圧倒的に少ない。なので今回は私が開発している競輪予想システムについてざっくりと書くことにした。

競輪予想システムの概要

入出力は単純で,競輪のレースデータを与えるとオススメの買い目を提供してくれるものだ(オススメの買い目が無ければ提供はない)。このオススメの買い目は予想システムに搭載しているAI(人工知能)が過去の様々なデータから判断して提供される。

予想システムの実装に使っているのは以下のソフトや言語で,どれもOS依存の機能やライブラリなどは使用していないので,この予想システムもWindows/Linuxどちらでも動作する。

  • ベースとなる種々なプログラム(主にCとrubyで作成)
  • 過去のレース情報等を蓄積しているデータベース(DBMS:Postgres)
  • 機械学習モデル(Rで作成)

今回取り上げる予想システムは3代目か4代目くらいで,これまでに過去のシステムの開発作業によって多くの休日を失い,過去のシステムの実証実験によって多額の資金を失っている。

f:id:ai_keirin:20180626111434p:plain

競輪予想システム構成図

 

AIが判断するオススメの買い目とは

これはブログでも何度か取り上げているが,特定条件下で回収率の高い買い目のことである。先行一車だったり1着予測値だったりラインワンツー予測値だったり並びだったりという回収率に影響しそうなパラメータを組み合わせ,統計的に解析・判断させている。

過剰適合と汎化性能

オススメの買い目を提供させる機能を実装する上で単純に回収率だけを追い求めることは危険で,これをやってしまうと極端に的中率が低い買い目だったりノイズのような条件にフィットした買い目を提供してしまういわゆる過剰適合状態になってしまう。そのような買い目でも結果的に回収率が高ければいいのだが,AIの想定する回収率に収束するという保証はどこにもない。的中率は低いが回収率が高いというのは偶発的要素が強いものと私は判断しているのでこれらのタイプの買い目は避けるように実装している。
こういった過剰適合の問題への対応は機械学習によるモデル作成の場合と同様に考えることができる。条件を増やしすぎない(正則化)ことやクロスバリデーションを実施すること,アンサンブル学習の手法を取り入れるなどだ。これらの処理を組み込んでおくことで少なくとも明らかにおかしいデータや買い目を除外することはできるし,汎化性能を高めることにつながる。

オススメ車券の提供に対する許容度調整機能

AIにはオススメの買い目予想の提供に対してどれだけ厳格になるかを調整する機能を持たせている(許容度調整機能)。
この機能は大雑把に言うと調整値が高いほど信頼度の高い(と思われる)買い目しか提供しなくなる機能で,理論的には調整値が高ければ高いほど車券購入額が減り,回収率は高くなるものだ。イメージ的にはSVMのコストパラメータのようなもので,これを高くしすぎるとAIは慎重になり一切オススメの買い目を提供しなくなる。逆に低くしすぎると寝食を忘れたかのごとく買い目を提供しまくる。そしてこの機能は色々な条件毎に個別に調整できるようにしてある。例えば想定される的中率に対して調整したり回収率に対して調整したり,もちろん組み合わせることもできる。え!じゃあ的中率も回収率もめっちゃ高いとこを設定すればいいじゃん!と思われるかもしれないが,そうそう上手く行くものではない。このあたりはP値や信頼区間の話そのものである。

 

競輪予想システムの性能を車券購入シミュレーションで検証

予想システムの概要を知っていただいたところで次はその性能を測ってみよう。AIの頭脳には2017年12月31日までの様々なデータが蓄積されている。そこでAIにとって未知の世界である2018年1月1日~2018年6月中旬までの約6か月間の車券購入シミュレーションをさせて予測性能の検証をしてみる。

車券購入シミュレーション条件

  • 車券は2車複
  • 許容度調整値を2つの条件に適用し,その2つの調整値をそれぞれ振る
  • 対象レースはある特定の集団に分類したレース

※この「ある特定の集団に分類したレース」というのは別に予想システムにとって都合の良い(例えば高い回収率を出すような)ものではないことを予め言っておく。

 

車券購入シミュレーション結果

表の見方だが今回は許容度調整値を2つの条件で振っているので表の右側・下側に行くほど車券購入許容度が厳しくなる(理論上,車券購入額が少なく回収率は高くなる)ものとなっている。つまり最も車券を多く買う(許容度が緩い)のは表の左上の回収率(96%)で,逆に最も車券を買わない(許容度が厳しい)のは表の右下の回収率(126%)となる。
また,回収率に応じて表の背景色を以下のように設定した。

  • 回収率70%未満は背景濃灰
  • 回収率80%未満は背景灰
  • 回収率90%未満は背景薄灰
  • 回収率100%未満は背景無色
  • 回収率100%以上は背景青
  • 回収率110%以上は背景緑
  • 回収率120%以上は背景黄
許容度調整値A・B vs. 回収率(2車複)
許容度調整値A→
↓許容度調整値B
1(低) 2 3(中) 4 5(高)
1(低) 96 101 104 109 115
2 98 100 106 110 117
3(中) 98 103 107 112 122
4 97 105 108 116 122
5(高) 100 107 112 119 126

次のグラフは日付軸での回収率遷移をプロットしたもの。上で掲載した表から3つの水準(左上…許容度低,中央…許容度中,右下…許容度高)を抜き出しプロットした。

f:id:ai_keirin:20180626111427p:plain

回収率遷移グラフ(2車複)

許容度調整値に対して車券購入額・回収率は狙い通りの特性となり,回収率も良好な結果となっている。

車券購入シミュレーション結果(2車単)

次は車券の種類を2車単に変えてみよう。

許容度調整値A・B vs. 回収率(2車単)
許容度調整値A→
↓許容度調整値B
1(低) 2 3(中) 4 5(高)
1(低) 72 72 71 74 78
2 67 69 70 75 78
3(中) 70 74 81 85 92
4 80 88 86 93 95
5(高) 84 85 92 95 96

f:id:ai_keirin:20180626111431p:plain

回収率遷移グラフ(2車単)

許容度調整値に対して車券購入額・回収率は理論的な推移を示しているものの,回収率は100%を下回る結果となった。このレース分類に対してAIの2車単予想能力は現状では実用に耐えうるものではないということだ。AIの能力が足りてないのか,一時的なものでサンプル数が増えれば変わっていくのか,そもそも予測できるような法則性が無いのか。理由は色々考えられるがとりあえずこのレース分類でAIから提供される2車単の買い目を購入することは控えた方が良さそうだ。

こんな感じで予想システムが上手く動いていそうなものもあれば,ダメダメなものある。今回紹介したのは2車複・2車単だったが,もちろん3連複・3連単・ワイドにも対応しており,車券の種類と条件の組み合わせを色々変化させることで様々な状況下に応じてオススメの買い目を提供してくれる。なので怪しい性能の買い目を無理に買うことはなく,良い感じに性能が出ていそうなものだけを買うようにしている。

おわりに

競輪はメンバー構成や選手の心理等で結果ががらりと変わるものだ。その人間臭さを含めて予想するのが競輪の醍醐味であり難しさでもある。それ故に「AI予想で勝とうなんて無理に決まってる!」「機械に選手の気持ちが分かるわけない!」と批判を受けるのも当然かもしれないし,実際そのとおりなのかもしれない。私もこれまでの開発で失敗を繰り返してきた中,何度もそう思って匙を投げそうになっている。しかしそのような人間臭いアナログ的な要素を吸収できるようなモデルや人工知能を搭載したシステムを作ることができれば,AIによる競輪予想システムを構築することは不可能ではないはずである。

おわり。