2012年3月3日土曜日

競馬予想の精度

これから競馬予想を作っていくわけですが、その目標は「勝ち馬をあてる」ことにあります。ただ、競馬でもうけるには、「この馬が勝ちそうだ」という予想では不十分で、その勝つ確率まで分からないとダメ。勝ちそうだという馬の「真の勝率」が3割だとして、その馬のオッズが3.4より低ければ、勝率とオッズの掛け算の結果は1以下となり、期待される返金額は掛けたお金以下、期待リターンはマイナスとなります。むしろ、勝率が1%であっても、その馬のオッズが100倍を超えているなら、期待される返金額は掛けたお金を上回り、期待リターンはプラスとなります。もっとも、勝率1%の馬か勝つことは100回に1回の比率でしかなく、そうした稀なチャンスを待つことはなかなか難しい。100円掛けるとしても100回待つには1万円は必要です。また100回待てば必ず1回勝つわけではなく、場合によっては200回やそれ以上待たないと勝たないかもしれない。そもそも「勝率は1%」と正確に評価することは難しい。

このように、競馬で儲けるには、勝馬予想だけでなく、その勝率まで必要です。しかし、いきなり勝率まで予想するのは難しいので、まずは勝ち馬予想の精度から始めることにしましょう。私の手元には2010年3月28日の「日刊競馬」というのがあり、1面は第40回高円宮記念(GI)の予想、解説となっています。4歳以上のオープンで、18頭が出走。過去八走の成績と、6人の予想印、見解と情報、スタッフ予想、能力指数、専門誌8社の予想などなど。非常にモリだくさん。ここで、予想印とは、◎や○、△、▲で示される予想のこと。◎が本命、○が対抗、▲が単穴で、△が連下と呼ばれ、この順番で強さが示されます。つまり、一番強いのが◎の本命、2番目に強いのが○という感じです。

では、この予想印はどれほど正しいのでしょうか。単純に考えれば、◎の馬の勝ち数、○の馬の勝ち数などを求め、 それらが大きいほど、また△よりは▲、▲よりは○、○よりは◎という順番も加味した勝ち数が多いほどいい。例えば、10レース中「◎で5回1着で他は外れ」のほうが、「○で5回勝ち他は外れ」よりもすぐれた予想ということです。このように、印には◎が1番、○が2番、▲は3番、△は4番といった順番があり、同じ勝数を予想しても順番の高い印で勝ち数が多いほうが価値があるわけです。一方、馬にはレースでの着順という情報があるのですが、ここでは勝馬予想を考えているので、勝った、負けたというという二値の情報とし、勝ちを1、負けを0とします。すると、予想の精度は高い順番の印での1の数が多ければ高いことになります。では、その精度を数値化するのはどうすればよいのでしょうか。ここでは、AUROC(Area under ROC curve)と呼ばれるROCカーブの下側(under)の面積(area)から計算されるAR(Accuracy Ratio)を紹介します。

図を見てください。全部で3レースあり、各3頭出走し、全9頭の馬にそれぞれ本命◎、対抗○、単穴▲の印がついています。また、レースの結果の着順も示してあります(図の上段)。この情報を、中段に示された情報にまとめます。◎、○、▲の順番に馬を並べます。印の右下の数字がレース番号)が示されています。そして、印の下に、レース結果を書きます。馬が勝てば1、負ければ0とします。下段はROCカーブを示しています。中段の情報から下段のROCカーブを描くのには、次のようにします。今、◎の馬が3レース分で3頭いて、そのうち二頭が勝ち、1頭が負けたので、原点(0,0)からx軸に1、y軸に2進み、(1,2)と(0,0)を結びます。次に、○の馬3頭のうち、1頭が勝ち、2頭が負けなので、x軸に2、y軸に1すすんで、(3,3)に到達し、(1,2)と結びます。最後、▲の馬3頭は頭も勝っていないので、x軸に3、y軸に0すすんで、(6,3)に到達し、(3,3)と結びます。こうして、原点(0,0)と(6,3)を結ぶ折れ線が描かれましたが、これをROCカーブ(緑)です。このROCカーブの下側の面積AUROCは、横6縦3の長方形の面積18からカーブの上側部分の面積3をひいて15となります。

この面積と予想精度はどのような関係にあるのでしょう?まず、予想が完璧で本命馬◎がすべて勝った場合、ROCカーブは原点と(0,3)と(6,3)を結ぶ折れ線(赤点線)になります。この時の面積は18で、実際の予想での面積15より大きくなっています。逆に最悪の予想の場合、つまり本命、対抗が全敗し、▲が3頭とも勝った場合、ROCカーブは原点と(6,0)と(6,3)を結んだも(赤一点鎖線)のとなり、ROCカーブの面積は0となります。予想とレース結果に関係がない場合、◎、○、▲が一勝ずつとなりますが、このときのROCカーブは(0,0)と(6,3)を結んだ対角線(黄)となり、面積は18の半分の9となります。ARは、この予想が結果と全く関係がない場合の面積を基準とし、完全な場合に1となるように定義されています。上の予想の場合、予想のROCカーブの面積は15だったので、基準の面積9を引いて6とし、18(完璧)-9(基準)で割ることにより、ARは6/9となります。

では、実際の競馬予想の精度はどの程度なのでしょうか?今回の課題は、日刊競馬にある18レースの競馬予想の精度を求めることです。

①上図の例をデータファイルにし、読み込んでAUROC、ARを計算する。
②競馬新聞の予想をデータファイルにする。レース結果はYahoo!競馬で取得する。
③①のプログラムをもとに、②のデータで6人(柏木、宮崎、黒津、久保木、桧原、本誌飯田)の予想の精度(AR)を求める。

ヒント:次のプログラムを参考に

 http://dl.dropbox.com/u/13984080/AR.c

図の例のデータファイルは
 http://dl.dropbox.com/u/13984080/20120303.d

にあります。 データはCSV形式。レース番号、馬番号、徴の番号、着順です。
プログラムをコンパイルし、

./a.out 20120303.d ROC.d
とすると、ROCカーブのデータを作成し、ファイルROC.dに書き込みます。
gnuplotでプロットしてください。

gnuplotを起動し、

plot ROC.d w l lw 4

で、ROCカーブを描いてくれます。


課題のデータ入力をまとめたのでアップします。全部で18レース分です。
(本命1、対抗2、 単穴3、二重△4、△5、その他6としています。勝馬1、負け馬0。)

http://dl.dropbox.com/u/13984080/20120303_kadai.d

このデータを用いて6名の予想者それぞれのARを計算してください。
また、この情報をどのように活用すれば、よりARが高くなるか考えてください。