学ぶ ・ 血統と天気

天気と馬場 — 規則で推定する

全国 25 場の現在の天気から「推定の馬場状態」を出す仕組みです。統計モデルではなく単純な規則ですが、どんな情報を使い、何を使っていないかを知ることで、推定の限界が分かります。

このページで学ぶこと
  • 天気の数値データ (WMO 天気コード) の読み方
  • 天気コードと降水量から馬場状態を決める規則
  • 25 場の天気を 1 回の通信で取る方法とキャッシュ
  • この推定が使っていない情報 (と、本物の馬場発表との違い)

データ — Open-Meteo の現在の天気

天気は無料の気象 API Open-Meteo から、競馬場の緯度・経度を指定して取得しています。使う値は 4 つです。

項目意味
temperature_2m地上 2m の気温 (℃)
precipitation直近の降水量 (mm)
weather_codeWMO (世界気象機関) の天気コード
wind_speed_10m地上 10m の風速 (km/h)

25 場ぶんを 1 回で取るため、緯度と経度をカンマ区切りで並べて送ります (latitude=43.07,41.78,...)。結果は 10 分間キャッシュし、同じ問い合わせを繰り返さないようにしています。

規則 — 天気コード → 馬場

0 -> Triple("快晴", "sun", TrackCondition.FIRM)
1, 2 -> Triple("晴れ", "cloud-sun", TrackCondition.FIRM)
3 -> Triple("曇り", "cloud", TrackCondition.FIRM)
45, 48 -> Triple("霧", "cloud-fog", TrackCondition.GOOD)
51, 53, 55 -> Triple("小雨", "cloud-drizzle", if (precip > 1.5) TrackCondition.YIELDING else TrackCondition.GOOD)
71, 73, 75, 77, 85, 86 -> Triple("雪", "cloud-snow", TrackCondition.YIELDING)
61, 63, 65 -> Triple("雨", "cloud-rain", TrackCondition.YIELDING)
80, 81, 82 -> Triple("強い雨", "cloud-lightning", TrackCondition.SOFT)
else -> Triple("曇り", "cloud", TrackCondition.FIRM)
天気コード天気推定馬場
0〜3快晴・晴れ・曇り良
45, 48霧稍重
51〜55霧雨 (小雨)降水量 1.5mm 超なら重、それ以外は稍重
61〜65雨重
71〜86 (雪)雪重
80〜82にわか雨 (強い雨)不良

これは if 文の規則 (決定表) で、データから学習したものではありません。

推定の限界

本物の馬場状態は、競馬場が芝やダートの 含水率 (土にどれだけ水が含まれているか) を測って発表します。含水率は「今」の天気よりも、過去数日の雨の量、日差し、風、気温、そして芝の種類や水はけで決まります。

このアプリの推定は「今の天気」しか見ていないので、

  • 昨日まで大雨で今日は晴れ → 実際は重でも「良」と出る
  • 乾いた馬場に今降り始めた雨 → 実際は良でも「重」と出る

という食い違いが起きます。精度を上げるなら、Open-Meteo の過去の降水量 (past_days) を使って「直近 72 時間の累積降水量」を説明変数にし、過去の馬場発表を目的変数にして学習する、といった方法が考えられます。

予想への影響

推定馬場はレース予想エンジンの「馬場」の点数 (良 85、稍重 82、重・不良は馬体重しだいで 72 か 90) にだけ使われます。モンテカルロ と 3D シミュレーションの着順には影響しません。

まとめ
  • Open-Meteo から気温・降水量・天気コード・風速を取り、25 場を 1 回で取得、10 分キャッシュ
  • 天気コードと降水量の決定表で、良・稍重・重・不良を推定
  • 本物の馬場は含水率で決まり、過去数日の雨が重要。今の天気だけでは限界がある