JvLink To Importer

馬場状態と回収率の関係を調べてみた

馬場状態と回収率の関係を調べてみた

競馬予想で意外と見落とされがちなのが「馬場状態」です。良馬場と重馬場では求められる能力が異なり、馬券の期待値にも影響します。この記事では、馬場状態別の傾向をデータベースで分析する方法を紹介します。


馬場状態とは

JRAの馬場状態は4段階で発表されます。

コード 状態 含水率の目安
1 低い
2 稍重 やや高い
3 高い
4 不良 非常に高い

芝とダートで別々に発表され、JV-Linkでは shiba_babajotai_code(芝)と dirt_babajotai_code(ダート)としてレース詳細テーブルに格納されています。


馬場状態別の1番人気の成績

まず基本的な分析として、馬場状態ごとに1番人気の成績がどう変わるかを見てみます。

WITH fav AS (
SELECT u.race_code, u.umaban, u.kakutei_chakujun, u.tansho_odds,
r.shiba_babajotai_code AS baba
FROM umagoto_race_joho u
JOIN race_shosai r USING (race_code)
WHERE r.track_code LIKE '1%'  -- 芝
AND u.tansho_odds = (
SELECT MIN(u2.tansho_odds) FROM umagoto_race_joho u2
WHERE u2.race_code = u.race_code AND u2.tansho_odds > 0
)
)
SELECT
CASE baba
WHEN '1' THEN '良'
WHEN '2' THEN '稍重'
WHEN '3' THEN '重'
WHEN '4' THEN '不良'
END AS 馬場,
COUNT(*) AS レース数,
ROUND(100.0 * SUM(CASE WHEN kakutei_chakujun = '01' THEN 1 ELSE 0 END) / COUNT(*), 1) AS 勝率,
ROUND(SUM(CASE WHEN kakutei_chakujun = '01' THEN tansho_odds ELSE 0 END)::numeric / COUNT(*) / 10, 1) AS 回収率
FROM fav
GROUP BY baba
ORDER BY baba;

一般的な傾向として、馬場が悪化するほど1番人気の勝率が下がります。これは荒れた馬場では実力差が出にくく、波乱が起きやすいことを意味します。


重馬場で強い血統を探す

馬場が悪い時に好走する馬には血統的な傾向があります。パワーのある血統は重馬場で成績が上がることが多いです。

SELECT h.bamei AS 種牡馬,
COUNT(*) AS 出走数,
ROUND(100.0 * SUM(CASE WHEN u.kakutei_chakujun IN ('01','02','03') THEN 1 ELSE 0 END) / COUNT(*), 1) AS 重馬場複勝率
FROM umagoto_race_joho u
JOIN race_shosai r USING (race_code)
JOIN sanku_master2 s ON u.ketto_toroku_bango = s.ketto_toroku_bango
JOIN hanshokuba_master2 h ON s.ketto1 = h.hanshoku_toroku_bango
WHERE r.track_code LIKE '1%'
AND r.shiba_babajotai_code IN ('3', '4')
AND u.kakutei_chakujun BETWEEN '01' AND '18'
GROUP BY h.bamei
HAVING COUNT(*) >= 30
ORDER BY 重馬場複勝率 DESC
LIMIT 15;

良馬場と重馬場で成績が逆転する馬を見つける

「良馬場では凡走するが重馬場になると好走する」タイプの馬を見つけられれば、穴馬券のヒントになります。

WITH horse_baba AS (
SELECT u.ketto_toroku_bango,
CASE WHEN r.shiba_babajotai_code IN ('1') THEN '良' ELSE '重' END AS baba_type,
CASE WHEN u.kakutei_chakujun IN ('01','02','03') THEN 1 ELSE 0 END AS in_top3
FROM umagoto_race_joho u
JOIN race_shosai r USING (race_code)
WHERE r.track_code LIKE '1%'
AND u.kakutei_chakujun BETWEEN '01' AND '18'
)
SELECT ketto_toroku_bango,
SUM(CASE WHEN baba_type = '良' THEN in_top3 ELSE 0 END)::float /
NULLIF(SUM(CASE WHEN baba_type = '良' THEN 1 ELSE 0 END), 0) AS 良馬場複勝率,
SUM(CASE WHEN baba_type = '重' THEN in_top3 ELSE 0 END)::float /
NULLIF(SUM(CASE WHEN baba_type = '重' THEN 1 ELSE 0 END), 0) AS 重馬場複勝率
FROM horse_baba
GROUP BY ketto_toroku_bango
HAVING SUM(CASE WHEN baba_type = '良' THEN 1 ELSE 0 END) >= 5
AND SUM(CASE WHEN baba_type = '重' THEN 1 ELSE 0 END) >= 3
ORDER BY (重馬場複勝率 - 良馬場複勝率) DESC
LIMIT 20;

ダートの馬場状態は芝と逆?

ダートでは良馬場よりも稍重〜重のほうが走りやすいと言われます。雨で砂が固まると、脚抜きが良くなりスピードが出やすくなるためです。

SELECT
CASE r.dirt_babajotai_code
WHEN '1' THEN '良'
WHEN '2' THEN '稍重'
WHEN '3' THEN '重'
WHEN '4' THEN '不良'
END AS ダート馬場,
COUNT(*) AS レース数,
ROUND(AVG(u.soha_time), 1) AS 平均走破タイム
FROM umagoto_race_joho u
JOIN race_shosai r USING (race_code)
WHERE r.track_code NOT LIKE '1%'
AND r.kyori = 1800
AND u.kakutei_chakujun = '01'
GROUP BY r.dirt_babajotai_code
ORDER BY r.dirt_babajotai_code;

ダート1800mの勝ち馬の平均走破タイムを馬場状態別に比較すると、稍重〜重で最もタイムが速い傾向が見えるはずです。


機械学習への組み込み

馬場状態を予測モデルに組み込む際のポイント:

  • そのまま数値として入れる: 良=1, 稍重=2, 重=3, 不良=4 として特徴量にする
  • 馬場×血統の交差特徴量: 「この種牡馬の産駒は重馬場で複勝率が高い」を数値化する
  • 馬場×前走成績: 前走が重馬場で好走していた馬の、今回も重馬場での期待値を加味する

特に馬場状態は当日にならないと確定しないため、天気予報と合わせて「重馬場になりそうなら買い目を変える」といったリアルタイムの戦略調整にも使えます。


まとめ

分析 発見
1番人気の馬場別成績 重馬場ほど荒れやすい
種牡馬の重馬場成績 パワー型血統が有利
良/重の成績逆転馬 穴馬券の候補
ダートの馬場効果 稍重〜重でタイムが速い

馬場状態は「雨が降ったから荒れる」程度の認識で終わりがちですが、データで深掘りすると具体的な買い材料になります。

JvLink To Importer でデータベースを構築して、馬場分析を試してみてください。

この記事をシェア

Post