前走とのコース距離の変化

競馬における「前走とコース距離の変化」を特徴量に活用する方法

競馬の予測モデルで精度を高めるためには、今回のコース距離が前走のコース距離からどのように変化したかを分析することが有効です。コース距離変化(増加・減少)を特徴量として取り入れることで、今走の競争馬のパフォーマンスをより正確に予想することが可能になります。

なぜ「距離の変化」が重要か?

競争馬は「今回のレース距離が何メートルか」を把握しておりません。このため、競走馬は前走の記憶を基準に今走を走ることになります。また、レースで走る距離によって、馬の体は異なる負荷やリズムに順応します。 例えば、短距離を走ったその後急遽長距離のレースに向かうと、馬の体はまだ短距離向けのリズムやスタミナ割りに慣れているかもしれません。以下のような点で、前走の距離が競争馬に影響する可能性があります。

リズムとスピードの調整

競争馬は自然に自分のペースや走り方を調整します。短距離で速いペースに慣れていると、次のレースでもそのペースを引きずりやすく、長距離の場合には早めに疲れる可能性があります。

体力の配分

競争馬は一定の距離に合わせてエネルギーを使うようにトレーニングされています。そのため、長距離を走っていた競走馬が短距離走を走ると、エネルギーを温存し、本来の力を発揮できない場合があります。

距離変化を特徴量として組み込む方法

距離変化の特徴量の候補としては以下が考えられます。どれが最適かは予想モデルによって異なるため、各種検証し特徴量に組み込むと良いでしょう。もしくはLightGBMは重要度の低い特徴量を加えても、精度が落ちにくい特徴を持っているため、迷ったらすべて特徴量に組み込むのも一つの手です。

距離変化

現在のレースの距離から前走の距離を引いた値。これは、距離がどの程度変わったかをシンプルに示します。

距離増加フラグ

距離が増加した場合は1、減少した場合は-1、変わらない場合は0とする。この方法で距離変化の方向性を捉えやすくなります。

距離変化率

前走距離に対する最新距離の比率。この比率が大きいほど、前走と比べて距離が大きく変わったことを意味します。

Pythonの実装コード

距離変化の特徴量を作成するpythonのコードを紹介します。
下記コードのkeiba_dataはレース結果の収集で作成したデータを使用します。

import pandas as pd
import numpy as np

#競馬データ読み込み
keiba_data=pd.read_csv(r"〇〇") #〇〇には競馬データ.csvのファイルパスを入力

#日付をdatetime型のする。
keiba_data['日付'] = pd.to_datetime(keiba_data['日付'], format='%Y年%m月%d日')

#競馬データを馬IDを昇順に、日付を降順に並び替える
keiba_data=keiba_data.sort_values(by=["馬ID","日付"], ascending=[True, False])
#馬IDでグループ化
grouped = keiba_data.groupby("馬ID")

#空のリストを作る
empty_list=[]

#groupedから各馬IDの馬のレース結果を抽出する。(uma_id(使わない)は馬ID、df_umaはその馬IDの馬のレース結果。)
for uma_id,df_uma in grouped:
    df_uma["距離変化"] =  df_uma["距離"]-df_uma["距離"].shift(-1) 
    df_uma["距離変化率"]=(df_uma["距離"]/(df_uma["距離"].shift(-1)))*100
    #空のリストにdf_umaを格納する
    empty_list.append(df_uma[["距離変化","距離変化率"]])

#空のリストにいれたデータフレームを統合する。
df=pd.concat(empty_list,axis=0)
#keiba_dataにdfを統合し、距離変化、距離変化率を入れる
keiba_data=pd.concat([keiba_data,df[["距離変化","距離変化率"]]],axis=1)

#距離増加フラグの関数を作成する。

#関数を作る(ある列が-を含む場合:-1、+を含む場合:1、それ以外0)
def categorize_value(value):
    if  value < 0:
        return -1
    elif value > 0:
        return 1
    else:
        return 0  # 当てはまらない場合は0

#関数を適用し、距離増加フラグを作る
keiba_data['距離増加フラグ'] = keiba_data['距離変化'].apply(categorize_value)

投稿者プロフィール

ひよこい
ひよこい
独学でpythonを学び競馬予測しています。これまでの競馬成績は以下の通り。回収率150%を目指します。
2021年回収率:119%
2022年回収率:104%
2023年回収率:121%
2024年回収率:88%
PAGE TOP