2014年7月31日木曜日

距離による時間差(2)

距離による時間差の記事で、2013年の京都の芝1200mと2400mの上位3頭平均タイムを示したが、クラスが上なのに遅いタイムの部分があった。これは、馬場が不良のときのデータも含んでいたのが理由のように思われるので、良馬場だけのデータにする。

2013年の京都の芝1200mの上位3頭の平均タイムは、以下である。
新馬(1レース) 1:10:1
未勝利(5レース) 1:09:4
500万下(4レース) 1:08:7
1000万下(7レース) 1:08:5
1600万下(2レース) 1:08:7
オープン(4レース) 1:07:8
GIII (2レース) 1:08:0
で、2400mは以下である。
未勝利(1レース) 2:26:2
500万下(4レース) 2:27:4
1000万下(4レース) 2:27:2
1600万下(3レース) 2:25:1
GII(2レース) 2:24:0

未勝利と500万下の差は、0.7秒と-1.2秒、
500万下と1000万下の差は、0.2秒と0.2秒、
1000万下と1600万下の差は、-0.2秒と2.1秒
である。少しはましになったが、やっぱり、きれいな差にはなっていない。スピード指数で比較するのは、難しいのではないか。

2014年7月30日水曜日

距離による時間差

同じ秒差でも、距離によって異なる価値がある。ということで、スピード指数では、以下のように距離指数というのを使って、距離による時間差を吸収している。
この指数は 1秒÷基準タイム×1000 の計算式から求められたものです。
実際のところ、どれぐらい差があるのだろうか。2013年の京都の芝1200mの上位3頭の平均タイムは、以下である。
新馬(2レース) 1:10:2
未勝利(5レース) 1:09:4
500万下(5レース) 1:08:9
1000万下(7レース) 1:08:5
1600万下(4レース) 1:09:1
オープン(5レース) 1:08:3
GIII (2レース) 1:08:0
で、2400mは以下である。
未勝利(1レース) 2:26:2
500万下(4レース) 2:27:4
1000万下(5レース) 2:27:6
1600万下(3レース) 2:25:1
GII(2レース) 2:24:0

未勝利と500万下の差は、0.5秒と-1.2秒、
500万下と1000万下の差は、0.4秒と-0.2秒、
1000万下と1600万下の差は、-0.6秒と2.5秒
である。きれいな差にはなっていない。2400mは未勝利のほうが500万下、1000万下より速いやんか。結局、データ数がそれほどないため、ほとんど誤差と言えるのだろう。

2014年7月29日火曜日

オープンにしかない距離

基準タイムを計算しようとしたとき、500万下、1000万下にない距離はどうすればいいのか。とりあえず、オープン以上しかないレースというのがどれだけあるのだろうか。2013年で見てみると(障害はのぞく)、

京都 芝3000m オープン平場と、GIのみ
京都 芝3200m GIのみ
阪神 芝3000m GIIのみ
中山 芝3600m GIIのみ
東京 芝2500m GIIのみ
東京 芝3400m GIIIのみ

これだけあるようだ。これらの距離は、オープンのタイムをもとに基準タイムを作るしかない。逆に言えば、これらのレースタイムは誤差が大きくなるだろうな。

2014年7月28日月曜日

例外的なデータ(2)

どんな距離のレースがあるんだろうとデータを見ていて気付いた。23600になっているデータがある。何じゃこりゃと思うと、これはダイヤモンドステークス(3600m)から取得したデータのよう。Yahooのページで確認してみると

芝・右・内2周 3600m [コースガイド

うーん、やられた。距離の部分を抜き出すために、このデータを、


Integer.parseInt(course.replaceAll("[^0-9]", ""));

として、数字の部分以外を削除していた。その結果、内2周の2も抜き出されてしまった。さて、どうやって切り出そうかな。[スペース]とmの間で抜き出すか。

String[] distances = course.split(" ");
for (String distance: distances) {
if (distance.endsWith("m")) {
return Integer.parseInt(distance.replaceAll("[^0-9]", ""));
}

}

上記のように、抜き出す部分を限定してみる。

2014年7月27日日曜日

基準タイムに何を使えばいいのか(2)

基準タイムに500万下、1000万下の平均タイムを使うとしても、そのクラスにはない距離というのがある。長距離、たとえば3200mなんてオープンにしかないし。ということは、その基準タイムは、オープンをもとに決めるしかない。したがって、オープンのタイムがこれぐらいだから、500万下もしくは1000万下だとこれぐらいと出すことになるのだろう。ということで、クラスごとにどれぐらいの差があるのかを調査中。たとえば、2013年の阪神競馬場芝1600mの平均(上位3頭)は以下。

新馬(8レース) 1:37:5
未勝利(13レース) 1:35:7
500万下(8レース) 1:34:8
1000万下(7レース) 1:34:5
1600万下(2レース) 1:33:8
オープン(4レース) 1:33:5
GIII(2レース) 1:35:1
GI(2レース) 1:34:5

これを見ると、何となく妥当なタイムが出ているように思うが、GIなどはレース数が少ない分、馬場の状態などで大きな違いが出る気がする。

2014年7月26日土曜日

基準タイムに何を使えばいいのか

500万下と1000万下の距離ごとの平均をとり、基準タイムとすることを書いた。しかし、実際に平均を取ってみると、不思議なデータもある。

2013年函館の芝2000mのデータ
500万下 8レース上位3頭の平均 2:03:8
1000万下 4レース上位3頭の平均 2:05:8

500万下のほうが2秒も速い。本来は、1000万下のほうがクラスが上なのだから速いはずである。しかし、たった4レースの平均だとすると、これぐらい差が出てもしかたないのかもしれない。もう少し調べてみよう。で、上記の対象になっているレースは、以下。
1回函館1日12レース 500万下 (混合)(特指) 定量 馬場:良 タイム: 2.00.6

1回函館3日8レース 500万下 [指定] 定量 馬場:良 タイム: 2.01.1
1回函館5日12レース 1000万下 (混合)(特指) 定量 馬場:良 タイム: 2.03.4
2回函館2日10レース 500万下 (混合)(特指) 定量 馬場:良 タイム: 2.02.1
2回函館3日10レース 500万下 (混合)(特指) 定量 馬場:良 タイム: 2.01.6
2回函館6日10レース 1000万下 (混合)(特指) 定量 馬場:良 タイム: 2.01.7
3回函館1日10レース 500万下 (混合)(特指) 定量 馬場:良 タイム: 2.02.0
3回函館3日10レース 500万下 (混合)(特指) 定量 馬場:良 タイム: 2.01.8
3回函館6日10レース 1000万下 (混合) 定量 馬場:良 タイム: 2.02.5
4回函館2日9レース 500万下 (混合)(特指) 定量 馬場:重 タイム: 2.06.9
4回函館5日12レース 1000万下 (混合)[指定] ハンデ  馬場:不良 タイム: 2.15.2
4回函館6日8レース 500万下 (混合)(特指) 定量 馬場:重 タイム: 2.12.5
これを見ると、500万下は、開催の最初のほうで行われていて、1000万下は後半だ。芝が荒れていたせいかもしれない。また、馬場不良で行われた4回函館5日12レースの非常に遅いタイムが効いているとも言える。

過去のデータはというと、
2012年
500万下 3レース上位3頭の平均 2:02:3
1000万下 2レース上位3頭の平均 2:02:4
2011年
500万下 3レース上位3頭の平均 2:02:4
1000万下 2レース上位3頭の平均 2:01:7

で安定しているように見える。馬場が悪いときのデータは外すべきか。

2014年7月25日金曜日

基準タイム

競馬でどの馬が勝つかはいろんな要因があるものの、速く走ったほうが勝ち、ということから考えると、やはり走破タイムが重要と言える。そして、競馬場によって走りやすさに差があることから、異なる競馬場での走破タイムをそのまま比較することは出来ないだろう。で、競馬場ごとの距離ごとに基準タイムを作って、比較しやすいようにするのが、第一ステップである。西田式スピード指数では、


各競馬場ごとに500万条件と1000万条件で行われたレースの1~3着に入着した馬のタイムの平均を求めてさらに平均したものです。
つまり各競馬場の各距離ごとに500万条件と1000万条件の中間に位置するモデル馬を想定して、これらが出すであろうタイムが基準タイムなのです。

になっている。同条件のレースは多くあることや、実力の拮抗ぐらいから考えて、この値を使うぐらいしかいい手はないかな、やっぱり。各距離と書かれているが、内回りと外回りは分けるべきかもしれない。分けようと思った場合、Yahoo競馬のページでは、
芝・右・外 1600m
のように外の場合のみ記述されているようだ。なので、このコース情報に"外"が含まれているかどうかを判定すればいいのだろう。また、500万、1000万条件を抜き出すには、
1000万下 (混合)[指定] 定量
のように書かれている条件に1000万下と書かれているかどうかで抜き出す。なお、2001年に900万下だったのが1000万下に変更になっている。Yahoo競馬のデータから見ると、変更になったのは、1回函館1日(2001/6/9)が最初のように見えるが、同時開催の東京・中京は900万のままだ。よくわからないな。とりあえず、900万下も1000万下も同じとしてマッチングすれば抜き出せるだろう。また、2歳の500万下と3歳以上の500万下には差がありそうな気がするが、平均だし、まずは気にせず同じものと取り扱うことにする。

この基準タイムは、予想するレースより、過去のレースのデータから求めないといけない。予想ソフトを作るのだから、当たり前だが、予想するレースが実施される前に手に入れられるデータのみを使うように制限する必要がある。ということで、基準タイムは、予想するレースの前年度のデータを使うことにするか。つまり、今(2014年)なら、2013年のデータを使うことになる。しかし、競馬場の改装工事があった場合、前年度データがないことも考えられるので、2年分の平均をとることにする。これで、データがないことを防げるだろう。