方法論

BR-STATのデータ収集からモデル評価までの全プロセスを公開します。

1. データ収集

BOAT RACE公式が提供するデータファイル (mbrace.or.jp) から、 B (番組表) ファイルとK (競走成績) ファイルを取得しています。

ファイル内容取得タイミング
B{YYMMDD}.TXT出走表 (選手情報, 機材, 成績)レース前日
K{YYMMDD}.TXT競走成績 (着順, ST, 配当, 気象)レース終了後

データは Shift_JIS 固定長フォーマットで、バイト位置ベースのパーサーで解析しています。 2021年1月から2026年2月までの約5年分、計61か月を処理済みです。

2. データベース設計

PostgreSQL (Neon) 上に正規化された3層構造で構築しています。

  • raw層 — 取得元データの保存 (アーカイブ用)
  • normalized層 — 正規化済み業務データ (race, race_entry, race_result 等)
  • analytics層 — 特徴量テーブル, 予測結果, モデル管理

全テーブルの INSERT は UPSERT ベースで冪等設計。 同じデータを再投入しても重複や破壊が起きません。

3. 特徴量設計

features_race_entryテーブルとして、1,650,480行 x 43列で生成しています。

公開モデル (v2) で使用する22特徴量はすべてレース前に取得可能な情報のみです。

使用する特徴量 (22列)

lane_nonational_win_ratenational_place2_ratelocal_win_ratelocal_place2_ratemotor_place2_rateboat_place2_rateageweightclass_gradestadium_idrace_nowind_speedwave_heightnational_win_rate_ranklocal_win_rate_rankmotor_rate_rankboat_rate_rankweight_ranknational_win_rate_difflocal_win_rate_diffmotor_rate_diff

除外した特徴量 (リーク防止)

course_nostart_timingfinish_position

これらはレース後にしか確定しない情報であり、事前予測に使用すると情報リークになります。

4. モデル設計

アルゴリズムLightGBM (Gradient Boosting Decision Tree)
目的関数binary_crossentropy (is_top1)
評価指標binary_logloss
num_leaves64
learning_rate0.05
feature_fraction0.8
bagging_fraction0.8
min_data_in_leaf200
early_stopping100 rounds
best_iteration284

モデルの出力は各艇の独立確率ですが、1レース6艇の制約があるためSoftmax正規化をレース単位で適用しています。

P(i) = exp(score_i) / sum(exp(score_j)) for j in 1..6

5. 評価方法

データは時系列分割で分けています。 ランダム分割は未来情報リークを引き起こすため採用しません。

用途期間サンプル数
Train (学習)2021-01 ~ 2024-12約 125万
Valid (検証)2025-01 ~ 2025-12約 32万
Test (テスト)2026-01 ~約 5.5万

評価指標

  • Top1 Accuracy: AIの1着予測が当たる確率。ランダム=16.7%。
  • LogLoss: 確率予測の対数損失。確率の正確さを測る基本指標。
  • Brier Score: 確率のキャリブレーション精度。0が完璧。
  • Calibration Curve: 予測確率と実際の的中率の対応関係。

6. データ出典

本サイトで使用するデータは、BOAT RACE公式 (mbrace.or.jp) が 一般公開しているデータファイルから取得しています。

予測結果や統計分析はBR-STAT独自のものであり、 公式の見解を代表するものではありません。