皆さんおはようございます、こんにちは、こんばんは.REDです。馬券予想する時、皆さんは馬のタイム・騎手・厩舎・血統・オッズなどから予測し答えを出していることだと思います。
それは本当に思い込みによるものではなく、間違いなく勝てるデータですか?
今回はデータ分析の有用性にスポットを当ててみました。
膨大な競走馬データもMySQLを利用することで過去に遡り、
- 勝てるデータなのか?
- 単なる思い込みだったのか?
一括で分析・答えを出すことができます。これだけを見てもデータ分析は重要です。
Contents
デシジョンツリーは競馬にピッタリ?
私が競馬分析をしてみようと思ってから初めて聞く言葉でしたが、デシジョンツリーは決定木とも呼ばれているようです。何のことだかサッパリなので、以下に健忘録もかねてまとめてみたいと思います。
間違えている部分があるかもしれませんが、競馬のデータ分析が有用であることが分かってもらえれば、きっと大丈夫ですよね?(笑)
デシジョンツリーって何?
データマイニングといえば、JRA-VANでも提供されているので聞き覚えのある方も多いはずです。データマイニング手法は 予測と分類を目的にしたもので、予測を目的にしたものを「回帰木」と言い、分類を目的にしたものを「分類木」と分けて呼ばれます。
- 予測と分類を多段階で行う。
- 多段階の分岐を階層化し、樹木図で表現する。
うん。何のことかさっぱり分かりませんので、図で見てみましょう。
デシジョンツリーは樹木を逆さにした状態で見ることでグッと分かりやすくなります。
木の幹 部分が目的変数で、枝部分が説明変数になります。
以下にゴルフをするかで決定木を作った図があります。
分類木を自動生成するアルゴリズム(詳細は述べない)があり、それを上の表に示すデータセットに適用すると、従属変数である「ゴルフをするか」を説明する最も良い方法は、変数「天気」を用いることだという結果が得られる。
変数「天気」の値によって表を並び替えると以下の図のようになる。
変数「気温」の値によって表を並び替えると以下の図のようになる。
以上のことから、説明変数の選択によって、信頼できるデータ・信頼できないデータが現われるということが分かる。
デシジョンツリーを競馬に当てはめてみる
デシジョンツリーをデータ分析したい競馬に当てはめて考えてみましょう。

- 第一段階は、目的変数を決める。1着になるかならないか
- 第二段階で、説明変数 = 過去競走馬のタイムや騎手などで分類
一般的には馬のタイム・騎手・厩舎・血統・オッズなどから予測し、この馬が1着に来る可能性が高いと予想することだと思います。そのほとんどは単なる思い込みによるものが多くなってしまいがちです。
デシジョンツリーを競馬に当てはめてみると、1着馬を目的変数にすることで、そこから様々な分析が可能になる。有用なデータを見つける事ができることと、単なる思い込みを確信に変えることができる可能性がある。
当然、過去に起こった現象が、未来でも必ず起こるとは言えないですが、なんとなくワクワクしませんか?
分類木を自動生成するアルゴリズムがあるというのが気になりますが、(私もまだ分かりません)ここでは、競馬に勝つためのデータ分析の有用性を考えるのが目的ですので、以後調べることにして、ここでは省きます。
このように、自分だけの有用なデータを見つけるためには、MySQLでデータ分析することが近道になることだと思います。
基本統計量は馬毎の能力判断にピッタリ?
これはあくまで一つの例としてのものです。例えば、馬以外にも騎手・調教師・種牡馬・血統・オッズなど、人によって分析する方法は様々だと感じるからです。
当然、競馬は多数派の予想になってしまうと負けに近づくことになってしまいます。スピード指数が良い例で、大多数の人が使い始めるとそれに伴い回収率も著しく低下してしまいます。
理想は、まだ誰も予想に使用していないロジックを使用し、かつ そのロジックの回収率が100%を超えることです。(基本統計量でオリジナルを見つける事が重要です。)
基本統計量には、代表値と散布度があります。
代表値
代表値には全体的な傾向を表すことができるもので、3つの値があります。
競馬で考えると、それぞれ多種多様な使い方ができそうです。
平均値
私も知っていた(笑)一般的に知られているのが平均値です。データの合計をデータの個数で割り算するだけのものです。競馬では調べたいデータの平均を求めるときに使えますね。MySQLでは、AVG関数で平均を求めることができます。
AVG(col_name)
中央値
データを大きい順に並べて丁度、真ん中にくる値が中央値です。
「1.2.3.4.5」のデータがある場合、平均値も中央値も = 3 となりますが、
「1.5.7.8.9」のデータがある場合、平均値 = 6、中央値 = 7となります。
競馬の場合、平均値よりも中央値の方が信頼できるケースがありそうです。
最頻値
「1.1.1.2.2.2.2.2.3.3.4.4.5」のデータがある場合の最頻値 = 2となります。
競馬でしたら近5走の上がり3Fや、脚質を調べるなどに向きそうです。
MySQLでは最頻値関数が用意されていないようですので、自身で式を作る必要があります。
平均値・中央値・最頻値を比較
平均値・中央値・最頻値が全て同じ 3と、指標数が等しい場合と
平均値が3、中央値が4.5、最頻値が 6と、指標数が等しくない場合があります。
以上の事から分かるのは(特に競馬は)
平均値のみで判断せず、全ての代表値の度数分布を確認する必要があるということです。
散布度
散布度はデータのバラつきを表すものです。
最大値
データの中で最も大きい値です。
MySQLでは、MAX関数でデータの最大値を求めることができます。
MAX(col_name)
最小値
データの中で最も小さい値です。
MySQLでは、MIN関数でデータの最小値を求めることができます。
MIN(col_name)
範囲
最大値 – 最小値 = 範囲です。データの幅を表します。
MAX(col_name) - MIN(col_name)
分散・標準偏差
次のようなデータA・Bがある場合、平均値はどちらも6になります。
データA | 4 | 5 | 6 | 7 | 8 |
データB | 0 | 1 | 8 | 10 | 11 |
この平均値は同じ扱いをすると信頼できないものになります。
そこで分散を求めてみましょう。A・B の分散は次の式で求めることができます。
{(観測値1–平均値2乗+(観測値2–平均値2乗+(観測値3–平均値)2乗}÷(データ数–1)
データAの標準偏差: 2.5
{(4-6)^2+(5-6)^2+(6-6)^2+(7-6)^2+(8-6)^2}÷(5-1)
= (4+1+0+1+4)÷4
= 10÷4
= 2.5
データBの標準偏差: 26.5
{(0-6)^2+(1-6)^2+(8-6)^2+(10-6)^2+(11-6)^2}÷(5-1)
= (36+25+4+16+25)÷4
= 106÷4
= 26.5
これで、A・Bどちらがバラつきのない信頼できるデータになるのかが見えてきました。
MySQLで式を作ればいいですね。
まとめ
このようにデシジョンツリーを基に、基本統計量を使用するだけでも競馬分析に有用であると思いませんか?競馬に勝つためには、競馬データのどこに注目し、どのように分析し、分析したデータの回収率が100%を超える、自分だけのデータを見つける事が出来るかが重要だと思います。以上、競馬データの有用性をまとめてみました。
競馬データを分析してみたいという方がおられましたら、競馬データベースを構築する方法をまとめた記事がありますので、参考にしてみてください。
コメント
しばらく更新されてないみたいですが、参考になる情報をありがとうございます。
SQL入門書籍を読んでもよくわかりませんでしたが、ブックマークし、今後の参考にさせていただきます。
だいさん。コメントありがとうございます。
不定期更新ですが、参考にしていただけるよう
ぼちぼち頑張ります!