| HOME | backupに戻る | リンク元に戻る |

■基本的方向性

世に競馬予想プログラムは多数ありますが、基本的には一つのパターンしかありません。「データから結果を予想する」です。 (当たり前!)で、そのデータに何を使い、どう分析し、どう結果を予測するのか?が異なるわけです。

私の場合、データの取得方法はスポーツ新聞です。専門紙ではありません。予想の分析方法については、現在 「MAX型」から「分布型」(後述)へと変更している課程です。結果がいいようならもう少し「分布型」を続けてみる予定です。

■出走馬能力データ作成について(概略)

データの取得方法は前述の通り、スポーツ新聞を利用しています。理由は、もっとも費用がかからないためです。

まだ試行錯誤中であるため、専門紙のように情報量が多すぎると、 「入力」に時間がかかりすぎて、レースを楽しめないという本末転倒の結果になります。

入力するデータは、基本的に客観的なデータほとんど全てです。客観的データとは数値化できるデータです。 例えば、出走したレースの格や着順から斤量やタイム差まであり、入力に1時間程度かかります。 主観的なデータとは、ズバリ「関係者の話」です。 これは参考程度にしています。

有料の電子情報を利用すれば、データの入力もあっという間に変換可能(なようにプログラムを組めばよい)ですが、 年がら年中予想するわけでもなく、気が向いた時にやる程度なので割に合いません。

■能力分析方法について

まず、入力されたデータを「数値化」し、合計して、比較する、というパターンは一緒だと思います。

データの数値化

数値は全て新聞の通り入力します。バランスや変換は全て、別途に関数を使って行います。 これによって後で必ず必要になる”関数修正”をする際に、データ部分を変えなくても済みます。

また、基準値となる値も別シートにしてそこから参照させます。変更がしやすいという同じ理由です。 例えば「斤量1kgにつき1馬身の遅れ」や「1馬身0.33秒」などが、基準値です。

MAX型の限界

以前は、現在作成中の「分布型」分析よりも簡単にできる単純合計型のEXCEL関数を利用していました。 レースの格や着順に「点数」を付け、掛け合わせたものを合計する、これで基本的には比較が可能です。 ただし、値が多い方から3番目までのBOXで馬連3点買いをするというわけではなく、上がりタイムや開催地実績などを 自分で比較しながら買い目を練る程度のことはしていました。 雑多なデータを人の目で見比べるわけですから、当然見落としや思いこみが入ります。 当たるも八卦当たらぬも八卦程度の精度になってしまいました。

この方法は穴馬を見つけることもありましたが、 たいていは数値が多い馬は必然的に人気馬になり易いので、「期待値(オッズ÷数値)」は低いものでした。

そこで、いつかはもう少し細かな分析をEXCEL化したいと考えていました。 暇を見ては、EXCELシートに分析用関数を書き足し土日で実証(テスト)する、ということをボチボチ繰り返して 2年以上たち、単純な「最大値型」から「分布型」と呼べる程度のところまで持ってくることができました。

(利用データが少ない内は、データの最大値を持つ馬を選ばざるを得ませんが、データ自体が多くなって比較項目が多くなると、 競馬新聞の「記者予想欄」のようにデータに印を付けて「色の濃い」場所(=平均値以上の値)、 を多く持っている馬を見出すことが可能になります。△がいっぱい付いている馬のようなものです。 一つ一つは中の上程度で光る馬に埋もれてしまっても並べてみると意外と揃っている、という場合があるのです。

分布型について

比較項目は、近4走関係で、「格*着順」(「格だけ」の一応データはとってありますが実際は格のみでは使用しません)、 「上がりタイム」、「着差」、「斤量」、「位置取り」。 成績関係で「全成績」、「開催地実績」、「距離実績」、「重馬場実績」。 本当は「騎手実績」なども考慮したいのですが、入力時間の関係で外してあります(そのかわり、リーディング情報から 上位騎手にはポイントを加えています)。今回データ関係で、「斤量」、「馬名」、「オッズ」。これは JRAのページから電子データとして入手し、馬名入力の手間を省いています。

分析手順について

近4走データの成績部分は、数値化した後合計し、ポイントの大小で比較します。ポイント比較には「偏差値」を利用します。

近4走データのタイム部分は、平均化して、上がりタイム想定値などに利用します。

成績データは、通常の連対率比較の他に、数値化(ポイント化)もしておきます。 (例えば、1700mダートを1回しか走っていなくて、1着または着外だった場合、それぞれ連対率は100%、0%になりますが、 適正な値で数値化してあればそれがデータの信頼率といえるからです。

想定上がりタイムの分析

レースの上がりタイムと、4角コーナーでの位置を予想することは、競馬予想のキモといえる部分です。 私の場合は、近4走の平均値を使っています。テストしてみて、不向きなようなら最小値を使う変更を行うつもりですが、 関数が難しいので現在は平均を使っています。

最小値を使う長所は、穴馬が頑張っちゃった時に漏れが少ないこと、短所は「除外」などが過去にあった場合 最小値が「0」になったり「関数エラー」になったりしやすいことです。

現在は、平均値を出した後、1000mレースに換算し、また48kg(通常最低斤量)に換算し、最後に芝レース換算して 基準値を算出します。この基準値を当該レースの距離や斤量に掛け戻すのです。 さらに競馬場の特質「中山の坂」や「東京、京都の長い直線」と別途算出しておいた「4角コーナーでの想定位置」を クロス参照させて、付加します。

偏差値化

これらの数値は、このまま取っておき、別途必要な分のみ「偏差値」化していく必要があります。 これは、各項目によって最大値と最小値が違うため、後で分析しやすくするために行うものです。 通常偏差値分布を適正に行えば、0〜100の値の間に納まります。納まらない場合は、「標準偏差」を変更するか、 そのまま使うかします。どちらもたいして違いはありません。「だいたいの値を読む」のが偏差値の仕事です。

注意しておきたいのは、偏差値によっては決して精密精巧な結果は得られない、ということです。 偏差値とは悪名高き偏差値教育(安易に偏差値を利用し信奉してしまったがために誤った利用法になってしまった) でも周知のことですが、企業単位の株式動向よりも平均ダウの動向予測や、 (例として列記するのははばかりがありますが)この場合の「出走馬全頭」の全体比較など (本来は開催地ごとの傾向分析などの方がより向いている)、 「全体をおおざっぱに見る」事に向いていますが、「個別の対象の能力を算出する」ものではありません。 重ねて述べますが「偏差値」は「全体」値を表す関数であり、個別の能力を算出「できない」のです。

偏差値の式

偏差値の求め方は、下記のような式になります。

母集団A〜Zの内、対象Bのbの値の偏差値について、
偏差値(b)=(「bの値」-「母集団A〜Zのbの値の平均」)÷「母集団A〜Zの標準偏差」*「任意の偏差の広がり範囲」 +「任意の中央の値」

もう少し数式化すると、下記の式(リンク先)になります。
偏差値の数式(wiki)

標準偏差とか広がり具合とか分かりにくいのですが、EXCELにはちゃんと専用の関数が用意されているので、 特に面倒な標準偏差の計算などする必要なく「STDEV」を使えば済みます。

エクセル上では、下記の式になります。
bの偏差値=(b-AVERAGE(A:Z))/STDEV(A:Z)*10+50

各b、A、Zには実際のエクセル上では「セルの住所」が入ります。後ろの方の「10」の部分が 値の散らばり具合を示し、「50」の部分は中央の値を表します。 もし平均点と同じnという値があればそれは偏差値50となります。

もし、あまり広がりがなかった場合は「10」を「25」にして見てください(無茶ではない範囲で任意の数です)。 また中央の値が「0」の方が見やすいという方は、「50」の部分を「0」に変えればいいわけです。

偏差値化すると

偏差値化すると、各項目の値が「0.3(秒差)」であろうと「456(点)」であろうと 項目ごとに比較する分には、必ず平均は(この場合)50点になり、だいたい0〜100に納まるため、 次のような一つの式で全て平均値より高い値(または低い値など)を抽出できます。
bのだいたいの優秀度=IF(bの偏差値>=90,"◎",IF(bの偏差値>=80,"○",IF(bの偏差値>=70,"△","")))

「だいたい」と書いたのは、先程も述べたとおり、偏差値は大まかな値しか見ることができないため、 必ずそこに誤差が発生しているということです。例えば上がりタイムが「34.1秒」と「33.9秒」が 全体の広がりの中であまり差がないと判断されれば、同一の値になってしまうのです。

偏差値の世界では、例えば私が小学校5年生の時に50m走で初めて「5.9秒」を出した時の感動は、 もしかすると「6.0秒」と同等に扱われてしまうかもしれないのです。 これが、「偏差値は個別の能力を表すことができない。」といえる根拠です。

では、こんな不確かな偏差値で、どうすればいいかというと先述の通りに「下手な鉄砲も数打ちゃ当たる」方式で とにかくたくさんの項目を偏差値化してしまうのです。

偏差値分析型の見方

スポーツ新聞のように、右から横に馬名を並べるとすると、縦軸には各項目の偏差値調査の結果を列記していきます。 上記◎○△の式の結果が計算シートにあるなら、馬名を表示しているシートに別シートを参照させるだけで済みます。

平均点よりも優れた値だけを表示しているため、より多くの印が付いている馬が「来やすい」ということになります。

ただし間違ってもらいたくないので、また重ねて述べますが、「より多くの印が付いている馬」=「1着に来そうな馬」 ではありません。偏差値で順位までは付けられないのです。

あくまでだいたい上位に来そうな馬なのです。

偏差値分析型の弱点

分析型はだいたいの濃淡で見分けるため、買い目が多くなります。

成績がいい馬を選ぶので、「超万馬券」の元になる、「なんでこんな馬が来ちゃったの?」 的な結果には、「絶対に」対応不可能です。別途予想を加えてください。

■予想自動化方法について

これについては、プログラムにVBAを使えば演算自体は可能で、実際に作ったこともありますが、 全く当たりませんでした。

2段階計算の時間的限界

VBAで最初に作ったのが、「成績のいい馬が抽出されやすいおみくじ」と 「その馬が当該競馬場で且つ予想される展開で勝てる確率」のクロス抽出演算の自動化でした。 まず馬を抽出し(上がりタイムなどの成績がいい馬程当たりやすくするのは簡単。民意調査で東京など人口集中都市が出やすくなるのと 同じ関数を利用)、その後で、開催地実績などからその馬が本当に来られるかをもう一度抽出させるわけです。

1度ずつ試すならVBAは不要ですが、自動化させるために必要です。下記のVBAを使います(2002年ぐらいのソースなので 現行のOfficeのverで使用できるかは不明、下位互換だと思うから大丈夫だとは思いますが、 VBAはループしても「Esc」キーで止められることを覚えておいてもらえば問題ありません)。

'結果が出るまで自動でページ更新を繰り返すマクロ
Declare Sub Sleep Lib "kernel32.dll" (ByVal dwMillsecounds As Long)

Sub refre1()
 Dim myRng As Range
 Dim myChk As Boolean
  Set myRng = Range("セルの住所:このセルが「真」になったら更新を止める")
  myChk = False
     Do Until myChk
        Call Sleep(1)
      ActiveSheet.Calculate
      myChk = myRng.Value
     Loop
End Sub

さらに、再抽選が面倒な時にボタン一発でおみくじをスタートできるマクロをシート上に貼り付けると便利。

'スタートボタン用マクロ
Private Sub Kakunin_Click()
refre1
End Sub

これが失敗作で、結果が出るのに結構時間がかかるのです。確率は「18*18*17*17*16*16」でなんと2千万余分の1。 パソコンでやってもトイレに行って帰ってきて結果が出ているかどうか位なのです。 マクロ自体には問題はありません。 これはおみくじの方法に問題があります。しかも当たらない!

当たらない理由は、「開催地実績などからその馬が本当に来られるか」の部分に与えたデータだけでは、 穴馬が抽出される確率が低いからです。 結構いい線までは行きますが、そのものズバリはなかなか出ません。 本命で決着した場合にはいい頻度で出ます。

※実際に連に絡んだ軸馬の抽出頻度はかなり高いのですが、連に絡んだもう2頭の「穴馬」がなかなか「一緒に」 引かれないのです。でもそれは当たり前で、「出やすい馬(=本命党寄り)」の結果が出やすい仕様なのです。

幅を持ったおみくじ型の限界

(そこで、気が付いたわけです。「なんだじゃあ、時間をかけておみくじを引かなくても、平均値や偏差値で 同様の回答が得られるじゃないか」と。

※さいころを10回振って、6が一度も出ないことはあるが、1000回も振れば6の出る頻度は十分に6分の1に近づく、 というのと同じ考え方です(必要十分な試行は平均値に収束する)。

※抽出のEXCEL関数に興味があって知りたい場合は、 「excel 確率比例抽出法」で検索してみてください。計算式はそれほど難しくありません。

■外的要因を変えることで試行結果が異なるプログラム。経験・馬場・コースなど

これについては、比較的簡単で、vlookup系関数を利用します。

vlookupなどは、配列関数で、指定された文字列や数値を指定された範囲から見つけ出し結果を返すことができます。 つまり、「中山」と指定すれば直線が「短」で「坂」という別セルに書かれたデータを参照し、 さらにそれが別セルで別途待っているvlookupに参照されて、 今度は「短」から「逃(前のこり)」などを選ぶことができるわけです。

後はそれに数値化を組み合わせて、「逃」の馬はポイントを「1.1倍」にする、という関数を組むわけです。

| HOME | backupに戻る | リンク元に戻る |


for back up,NYARGO