AI予想システム ORACLE PRO を個人開発した記録 #3 — 14時間の大規模 rescrape、8年分の競馬データを取り直した話

はじめに

こんにちは、しおぴーです。

前回 (#2 データ収集とスクレイピング設計) では、netkeiba からデータを取得する基本設計について書きました。

今回は 「貯めたデータを丸ごと取り直すことになった話」 について書きます。

ある日、ふと思ったんです。

「このデータ、本当に信用できるんだっけ?」

そして気づけば、PC を 14時間ぶっ通しで動かして、8年分のデータを取り直していました。


発端: データの不整合に気づいた瞬間

最初の違和感は、ある特定のレースの予想精度が異常に悪いことでした。

「同じ条件なのに、なぜここだけ外れるんだろう?」

DB を見てみると、馬体重が抜けていたり、上がりタイムが入っていなかったり、過去の取得時の不具合の名残が点在していました。

1件、2件なら問題ない。でも 100件以上見つかった瞬間、決断しました。

「全部取り直そう。」


データ規模

ORACLE PRO の競馬 DB は、2018年〜2026年の8年5ヶ月分。

レコード数にして約 134万件

馬1頭1レースで1レコード。

これを丸ごと、netkeiba から再取得する作業に挑むことになりました。


設計: 「old」 と「new」 に分けた理由

まず最初に決めたのが、バッチを 2つに分けたこと でした。

  • old バッチ: 2021年1月 〜 2023年9月 (古い順、forward)
  • new バッチ: 2023年10月 〜 2026年3月 (新しい順、reverse)

なぜ分けたのか?

理由1: リスク分散

もし途中で 1つのバッチが止まっても、もう片方は生きている。
完全に止まるリスクを減らせる。

理由2: 復旧優先順位

直近データの方が予想に効く。
「new」 を先に動かせば、止まっても直近データは揃う。

理由3: 取得方向の違い

  • old は forward (古い順) → 抜けを発見しやすい
  • new は reverse (新しい順) → 直近の重要データから埋まる

これは設計したというより、手動運用しながら自然に出てきた知恵 でした。


実行: 14時間ぶっ通しの戦い

5/14 (木) の朝6時31分。

2026-05-14 06:31:09 [INFO] scraper 起動

ここから、14時間にわたる長い旅が始まりました。

中盤の不安

数時間経って、進捗ログを見にいくと:

[1500/3055 49%] 取得中: 20220314

まだ半分

このペースなら、完走まであと7時間。
寝ても起きても、まだ続いてる。

PC のファンの音が、ずっと一定のリズムを刻んでいたのを覚えています。

終盤の景色

夜8時を回った頃、ログにこんな行が流れました:

[3055/3055 100%] 取得中: 20180101
2026-05-14 20:20:12 [INFO]   20180101: 471頭 取得完了
2026-05-14 20:20:27 [INFO] scraper 完了

14時間。3,055日分。完走。

その瞬間、ようやくキッチンに行って、ビールを開けました。


結果と教訓

数字で見る成果

項目
取得対象期間 2018/01/01 〜 2026/05/14
処理日数 3,055日
取得レコード 約 134万件
所要時間 約 14時間
失敗日数 0日

教訓1: バッチは小分けにする

大きな処理を「えいやっ」 で1本にすると、止まったときに困る。
小分けにすれば、リトライが楽。

教訓2: 進捗ログは「日付」 単位

「何件目」 でなく「何月何日」 のログにすると、人間が見て安心する。
「あ、もうすぐ 2020年に入る」 と分かれば、感覚的に残り時間が掴める。

教訓3: progress.json は神

中断時に「どこまでやったか」 を JSON で残しておけば、再開コマンドで即復帰できる。

{
  "version": 1,
  "last_run_started_at": "2026-05-14T06:31:09",
  "completed_dates": [...],
  "failed_dates": [],
  "current_position": "20180101"
}

これがないと、毎回最初からやり直しになっていました。

教訓4: データ品質は「取得時」 にしか担保できない

「あとで直せばいい」 と思ったデータは、永遠に直されません。
取得時のバリデーション、メタデータ、ログ、全部大事。


このあと

134万件のデータが揃ったところで、ORACLE PRO の予測精度がどう変わったか?

実は、ある指標で 目に見えた改善 が起きました。

その話は #4 で書きます。


おわりに

「14時間ぶっ通しでスクレイピング」 と書くと格好いいですが、実際は PC の前に座って Slack を見ながら待っていただけです。

でも、データ基盤に向き合った14時間は、その後の予想精度に確実に効いてきました。

データに正直に向き合う、というのは地味で根気のいる仕事ですが、これがないとAIは成立しないんだなと改めて感じます。


次回: #4 — 大規模再取得で見えた、予測精度の意外な変化


ORACLE PRO 個人開発記録シリーズ:
– #1 個人で AI 競馬予想システムを作り始めた話
– #2 データ収集とスクレイピング設計
– #3 14時間の大規模 rescrape (本記事)
– #4 大規模再取得で見えた、予測精度の意外な変化 (近日公開)

コメント

タイトルとURLをコピーしました