JvLink To Importer

JV-Linkで取得できるデータの種類と活用法②

JV-Linkのデータ構造と競馬予想への活用法

前回の記事ではJV-Linkで取得できるデータの種類を紹介しました。今回はもう少し踏み込んで、実際にデータベースに格納されるテーブルの構造と、各フィールドをどう予想に活かすかを解説します。


レース詳細テーブル

レース1件ごとの基本情報が格納されるテーブルです。主なカラムは以下の通りです。

カラム 内容
race_code 16桁のレース識別コード 2026年東京1回1日目1R
keibajo_code 競馬場コード 05=東京, 09=阪神
kyori 距離(メートル) 2400
track_code トラック種別 芝・ダート・障害
shiba_babajotai_code 芝の馬場状態 良・稍重・重・不良
tenko_code 天候 晴・曇・雨
grade_code グレード G1・G2・G3・OP・条件戦
honshokin1〜5 1〜5着の本賞金 単位:万円
lap_time1〜25 200mごとのラップタイム 秒単位

活用法: ラップタイム分析

ラップタイムはレースの流れを数値化したものです。前半のラップが速ければハイペース、遅ければスローペースと判断でき、「ハイペースで差し馬が有利だったか」「スローで逃げ切りが決まりやすかったか」を定量的に分析できます。

-- 東京芝2400mのレースで、前半5Fのラップ合計を算出
SELECT race_code,
lap_time1 + lap_time2 + lap_time3 + lap_time4 + lap_time5 AS first_5f
FROM race_shosai
WHERE keibajo_code = '05' AND kyori = 2400 AND track_code LIKE '1%'
ORDER BY first_5f;

前半5Fが速いレースと遅いレースで、差し馬の好走率がどう変わるかを調べれば、ペース予測から有利な脚質を導けます。


馬毎レース情報テーブル

1頭1レースにつき1行。出馬表の情報と、レース後の成績が同じ行に格納されます。

カラム 内容 備考
ketto_toroku_bango 血統登録番号(馬ID) 10桁、全テーブル共通の馬の識別子
umaban 馬番 1〜18
wakuban 枠番 1〜8
futan_juryo 斤量 kg単位
kishu_code 騎手コード 騎手マスタと結合
bataiju 馬体重 kg
zogen_sa 前走比増減 +4, -2 など
kakutei_chakujun 確定着順 01〜18, 00=出走取消
soha_time 走破タイム 1234 → 1:23.4
kohan_3f 上がり3ハロン 秒×10で格納
corner1〜4_juni コーナー通過順位 各コーナーでの位置取り
tansho_odds 単勝オッズ 10倍して格納(65→6.5倍)

活用法: スピード指数の算出

走破タイムをそのまま比較しても意味がありません。距離・馬場状態・コースが違えばタイムの基準が変わるからです。スピード指数は、走破タイムを標準化して馬の能力を横断的に比較するための数値です。

-- 馬場・距離ごとの基準タイムを求める
SELECT keibajo_code, kyori, shiba_babajotai_code,
AVG(soha_time) AS base_time
FROM umagoto_race_joho u
JOIN race_shosai r USING (race_code)
WHERE kakutei_chakujun BETWEEN '01' AND '05'
GROUP BY keibajo_code, kyori, shiba_babajotai_code;

基準タイムとの差分をスケーリングすれば、「東京芝2400mの良馬場で指数80」のような数値が得られ、異なるレース条件の馬同士を比較できるようになります。

活用法: 脚質判定

コーナー通過順位を使えば、各馬の脚質(逃げ・先行・差し・追込)を数値化できます。

-- 直近5走の4角通過順位の平均で脚質を推定
SELECT ketto_toroku_bango,
AVG(corner4_juni) AS avg_4corner
FROM umagoto_race_joho
WHERE kakutei_chakujun BETWEEN '01' AND '18'
GROUP BY ketto_toroku_bango;
-- avg_4corner: 1〜3 → 逃げ・先行, 4〜8 → 中団, 9〜 → 差し・追込

血統テーブル

3世代の血統情報が格納されています。

カラム 内容
ketto_toroku_bango 対象馬
ketto1
ketto2
ketto3 父父
ketto4 父母
ketto5 母父
ketto6 母母

各カラムの値は繁殖馬登録番号で、繁殖馬マスタと結合すると馬名がわかります。

活用法: 種牡馬別の条件適性

血統テーブルとレース結果を結合すれば、種牡馬ごとの芝/ダート成績、距離別成績、馬場状態別成績を集計できます。

-- 種牡馬別の芝・ダート勝率を比較
SELECT h.bamei AS sire_name,
CASE WHEN r.track_code LIKE '1%' THEN '芝' ELSE 'ダート' END AS surface,
COUNT(*) AS runs,
SUM(CASE WHEN u.kakutei_chakujun = '01' THEN 1 ELSE 0 END) AS wins,
ROUND(100.0 * SUM(CASE WHEN u.kakutei_chakujun = '01' THEN 1 ELSE 0 END) / COUNT(*), 1) AS win_rate
FROM umagoto_race_joho u
JOIN sanku_master2 s ON u.ketto_toroku_bango = s.ketto_toroku_bango
JOIN hanshokuba_master2 h ON s.ketto1 = h.hanshoku_toroku_bango
JOIN race_shosai r USING (race_code)
GROUP BY h.bamei, surface
HAVING COUNT(*) >= 100
ORDER BY win_rate DESC;

新馬戦や初の条件(初ダートなど)で過去成績がない場合、血統からの推測が特に有効です。


オッズテーブル

馬券種ごとにテーブルが分かれています。

テーブル 内容 キーカラム
odds1_tansho 単勝オッズ umaban, odds, ninki
odds1_fukusho 複勝オッズ umaban, odds_saitei, odds_saikou
odds2_umaren 馬連オッズ umaban_1, umaban_2, umaren_odds
odds6_sanrentan 三連単オッズ umaban_1〜3, sanrentan_odds

オッズは10倍した整数値で格納されています(65 → 6.5倍)。

活用法: 期待値ベースの投票判断

自分の予測モデルが各馬の勝率を出力するなら、オッズと掛け合わせて期待値を計算できます。

期待値 = 予測勝率 × オッズ

例: 予測勝率20% × 単勝オッズ8.0倍 = 1.6(プラス期待値)
例: 予測勝率10% × 単勝オッズ5.0倍 = 0.5(マイナス期待値)

期待値が1.0を超える馬券だけを買い続ければ、理論上は長期的にプラス収支になります。これが「期待値投票」の基本的な考え方です。


調教データテーブル

坂路調教とウッドチップ調教で別テーブルです。

カラム 内容
ketto_toroku_bango 馬ID
chokyo_nengappi 調教日
time_gokei_4furlong 4ハロン合計タイム(坂路)
time_gokei_6furlong 6ハロン合計タイム(ウッドチップ)

活用法: コンディション判定

直近の調教タイムを過去の自己ベストや平均と比較すれば、馬のコンディションを推測できます。

-- 各馬の坂路調教ベストタイムと直近タイムを比較
SELECT ketto_toroku_bango,
MIN(time_gokei_4furlong) AS best_time,
(SELECT time_gokei_4furlong FROM hanro_chokyo h2
WHERE h2.ketto_toroku_bango = h1.ketto_toroku_bango
ORDER BY chokyo_nengappi DESC LIMIT 1) AS latest_time
FROM hanro_chokyo h1
GROUP BY ketto_toroku_bango;

直近タイムがベストに近い、あるいは更新している場合は「仕上がりが良い」と判断できます。


機械学習での特徴量としての活用

上記のデータを組み合わせると、1頭あたり数十〜数百の特徴量を生成できます。例えば:

  • 過去成績系: 直近5走の着順平均、上がり3Fの平均・最速、勝率・連対率
  • 条件適性系: 同コースでの成績、同距離での成績、同馬場状態での成績
  • 血統系: 父・母父の同条件での産駒成績
  • 騎手系: 騎手の同コース勝率、該当馬との相性
  • 調教系: 直近調教タイムの自己比較
  • オッズ系: 前走オッズとの比較、人気変動

これらをPythonのpandasでDataFrameにまとめ、LightGBMやXGBoostなどの勾配ブースティングモデルに入力すれば、予測モデルが構築できます。


まとめ

JV-Linkのデータは構造化されているため、SQLで自在に集計・分析できます。スピード指数の算出、血統分析、期待値投票、機械学習モデル構築など、すべてはデータベースにデータを蓄積することから始まります。

JvLink To Importer を使えば、この記事で紹介したテーブル構造のデータをGUI操作だけで自動的にデータベースに取り込めます。

この記事をシェア

Post