計算機による競輪の予想と自動投票

現在、私はほぼ毎日車券を買っている。その日行われる全国の全てのレースを検討して、1日当たり平均約30個レース買う*1。こんなことができるのは、予想、投票をPC上の自作のプログラムによってほぼ自動的に行っているからである。この具体的なやり方を以下に紹介する。

概要

  • 前の日の夜に
    • KEIRIN.JPで出走表、レース結果の競輪見太郎用データをダウンロード
    • ネットから得られる並び情報を手動で取得
  • これらのデータを元に予想プログラムで投票するレースを選択する。
  • その日の朝に自動投票プログラムを起動する。プログラムは各レースのネット投票締切90秒前に投票していく(朝にまとめて全レース投票しないのは、直前のオッズを見て最終的な買い目を決めるため)。

実質的に人間がやることは、前の日の並び情報の取得だけである。予想、投票にかかる手間はほぼゼロだ。

データ

元になるデータは以前、ネットで競輪のデータを取得するで書いたように、見太郎データとネット上の並び情報である。

見太郎データはKEIRIN.JPのダウンロードのページから落とすのだが、手動でやると面倒なので必要なファイルだけを選んでダウンロードするプログラムを用意している。

並び情報もテキストで提供されているものは取得するプログラムを書いているのだが、pdfとかflashで提供されるものはwebブラウザで見て手で打ち込んでいる。ここは面倒だ。

成績データベースとレース解析ファイル

上のデータを元にまず選手ごとの成績データベースを更新する。ある選手を指定するとその選手の過去のレースの着順、バックを取ったか、(連絡みしてたら)決まり手なんかのデータを取り出せるようにしておく。データベースと言ってもただのテキストファイルで、使うときは選手の登録番号をキーとするハッシュテーブルに変換する。ファイルサイズは全選手1年分でも17MBほどの小さなものだ。

次に、解析ファイルを作る。これはレース毎に予想に必要なデータを集めたもので、メンバー、メンバーの各特性、並びなどが書いてある。簡単に言えば、専門紙を自分で作ってしまったようなものだ(ただし予想は書いてない)。

解析ファイルには、競輪選手の成績の評価値で書いた「成績評価値」や、脚質と成績の関係で書いた「HB率」も記述されている。これらは成績データベースを参照して算出される。このように独自に考案したの選手の特性を2次データとして加えることができるのは大きなメリットだ。

解析ファイルは1レースあたりファイルサイズが1KB程度の非常に小さなものである。私はあまり多くの要素を予想に組み入れようとはしない方針だ。

予想プログラム

解析ファイルを入力としてどのレースに投票するか選択し買い目を決定するのが予想プログラムである。私の書いたこのプログラムのロジックはかなり単純だ。しかし、そのロジックを得るのに統計解析の作業に多くのエネルギーをつぎ込んできた。

買い目の最終的な決定にはオッズデータを使うようにしている。したがって、投票直前にKEIRIN.JPからオッズを取得する必要がある。

自動投票システム

KEIRIN.JPではJavaScriptが動くwebブラウザを使って投票するようになっている。投票を任意のプログラムからできるような配慮はされていない。よってサーバとのやりとりのプロトコルが分からない(し解析する気力もない)ので、ここは手っ取り早くwebブラウザを外部プログラムから操作する方法を使っている。ブラウザ操縦というのはJRAの投票や株のシステムトレードなどでやる人が多いようで、web上を調べるとたくさん出てくる。

IERubyで操縦

私が取ったやり方は、windows上のInternet Explorerスクリプト言語Rubyで操縦するというものである。私はふだんlinuxを使っていてwindowsはよく知らないのだが、使い慣れたRubyIEを操縦するのが簡単なことが分かったのでこれを採用した。RubyにはCOMとかActiveXとか呼ばれる技術を扱うwin32oleというライブラリが標準で付いてきて、それだけでIEを操縦できる。

プログラムの詳細は省略するが、アドホックなノウハウのかたまりになっており、webページのデザインがちょっと変わったり、サーバからのレスポンスが遅れたりすると正常に動作しない代物だ。しかし、こんなんでも案外うまくいっており、実際の運用に大きな問題はない。異常動作を検出する機能を付けたのが信頼性向上につながっており、この手のプログラムでは重要だろう。

このシステムを使うと、朝PCを起動してコマンドをひとつ実行するだけで1日の投票を完全に行うことができる。非常に楽である。

予想、投票の自動化で得られるもの

単純作業の省略

投票するためにwebブラウザを操作するような単純作業は機械にやらせれば良い。また、車券の本質は過去のデータの統計解析にあると考えている私にとっては、個々のレースの予想も単純作業なのである。

数多くのレースに投票できる

多くのレースを買うほど、一定時間後の期待される回収率の分散が小さくなる。すなわち、本来得られるはずの回収率により早く収束する。これは儲ける目的において良い性質だ。数多くのレースを毎日買い続けることは、ネット投票とそのプログラムによる自動化による以外は非常にむずかしいだろう。

*1:ただし、1レース当たりの賭金は非常に少ないので、私は大口投票者ではない。