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操作だけで自動的にデータベースに取り込めます。
この記事をシェア