1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【番外編】建築設計事務所の社長が Claude Opus 4.7 で 競馬AI を 作ったら、 ROI 140% より 先に 税金が 気になった 話 🏇📊

1
Posted at

これは何:
弊社 Qiita 連載「建築 × AI」シリーズの 番外編 です。 真面目な業務記事を 期待 して来た方、 ごめんなさい。 今回は の話です。
ML 検証の 読み物 であって、 馬券購入の 勧誘 では ありません。 数字 は 全部 自分の hold-out / バックテスト 結果。 実購入は 検証用 の 最小額。
税務 の くだり は 一般論 です。 個別判断 は 税理士 へ。
馬券 は 自己責任。 私 の 損失 は 私 が 背負います。 🐴


第0章 オチを先に言います 🎯

  • 弊社は 東海地区 で 建築設計事務所 を やっています。 本業 で は JWW (Jw_cad) の 図面 を AI に 自動生成 させる プロジェクト を 地道 に 進め中。 Qiita 本編シリーズ も だいたい その話 です。
  • ある週末、 魔 が 差して 「競馬予想 AI」 を 個人プロジェクト として 作り 始めて しまった。
  • 約 1 ヶ月 で 単勝 ROI 約 140% (= 100 円 賭けたら 平均 140 円 戻る 計算) という モデル が hold-out 上 で 出て しまった。
  • 今週末 (2026 年 5 月 23・24 日) の 中央競馬 で 実戦 検証 します。
  • そして、 まだ 1 円 も 当たって いない 段階 で 税金 と 過去 の 馬券裁判 を 調べ 始めて 半日 溶かしました。 これが 本記事 の メインディッシュ です。 タイトル 回収 です。
  • 賭ける 金額 ・ 買い目 ・ 結果 は 来週 月曜 (5 月 25 日) の 続編 で 全公開予定。
  • 勝っても 負けて も 晒します。 たぶん 負けます。 そのときは そっと 心 の 中 で 笑って ください。 🙏

📅 続編予定: 5/25 月 22 時頃 「実戦結果編」 公開、 本記事末尾からリンクします。


第1章 なぜ 建築屋 の 社長 が 競馬AI を?

事 の 発端 は 取引先 の 社長 (大 の 競馬好き) と の 打ち合わせ でした。

取引先 の 社長: 「最近 の AI ってさぁ、 競馬 とか 当たるん でしょ?」
自分: 「(うわ、 また 始まった…)」

これ、 IT 周辺 で 生きていると 死ぬほど 聞かれる 質問 ランキング 上位 に 入って いる と 思うん ですが、 皆さん どう 答えて ますか? 弊社 は いつも 「いや〜、 ギャンブル は 胴元 が 一番 強い ので 無理 ですよ」 と 適当に 流して いました。

が、 その日 ふと、

胴元 が 強い って、 本当 か?」

と 自分 に 問い返して しまった。 これ が 半月後 に GPU マシン 2 台 を 数週間 占有 する 個人開発プロジェクト に 化ける 1 行 に なります。

ちょっと まじめ に 算数 を します。 JRA の 単勝 ・ 複勝 の 控除率 は およそ 20% (払戻率上限 約 80% で 運用)。 何の情報優位 も 無く 賭けると、 平均 で 100 円 が 80 円 に 目減り する 市場 です。

ということは、 「市場 (= 確定オッズ に 織り込まれた 集合知) が まだ 拾えて いない 情報優位」 を 機械学習 で 抽出 できれば、 長期 で 回収率 100% 超 の 余地 が 理論上 存在 する

これ、 言葉 を 変えると 「JRA という 市場 で、 集合知 を 機械学習 で 出し抜けるか?」 という、 まあまあ 健全 な テーマ じゃ ないか? と 自分 を 騙し に 来ました。 騙されました。 これ は その 懺悔 と 自慢 を 兼ねた 記録 です。


第2章 システム全体像 🛠

まずは 構成 から。 全体像 は こんな 感じ です。

※1: 「あるレガシーな Windows GUI ソフト」 とだけ書いておきます。 馬好き と JRA データ 利用経験 のある人 なら ピンと来るはず。 これが Linux で動かないので、 結局 Win マシンが 1台 ハブとして 必須。 これが地味に運用上の最大ボトルネックです。

技術スタック:

  • 学習: LightGBM + Optuna ( + 一部 自作 補正)
  • 特徴量: 約 40 次元 (内訳は 次章で 大分類だけ 紹介)
  • 推論: ARM 系 GPU マシン 2 台 (本番 cron 機 + 計算機、 専用線で 直結)
  • 通知: 自作 SMTP スクリプトで自分の Gmail に 予想 と エラー を 投げる
  • コード生成と設計レビュー: Claude Opus 4.7 (1M context) ← これがいなかったら 5 年 かかってた

第3章 何を 食わせて 何を 予想 しているのか 🤔

ここが 一番 気になる パート だと 思うので、 設計思想 と 失敗筋 を ある程度 書きます。 「全部 教えろ」 は 勘弁 してください。 弊社 も 1 ヶ月 かけて 1 個 ずつ 削って 足して 出した もの な ので。

3.0 データ の 時系列 分割 (時系列リーク 対策 の 核)

競馬 ML で 一番 信用 できない モデル は 「時系列分割 が 雑な モデル」 です。 過去 と 未来 を 1 日 でも 混ぜたら ROI は あっという間 に 200% を 超え、 そして 実戦 で きれいに 死にます。 弊社 の パイプライン は こう 切って います:

  • 学習 に 使う のは 2025-11 まで。 hold-out (2025-12) は モデル選定 と ハイパラ確定 が 終わって 一度しか 見ない
  • 補助評価 として 2018-2025 の 月次 walk-forward (各月 を 順に 評価期間 に 回す) も 実施。 「ある 1 ヶ月 が たまたま 強かった だけ」 を 排除 する 目的。
  • live (2026-05)モデル 凍結 後 の 完全 未知 データ。 ここで 初めて 馬券 を 買う。

3.1 入力データの 内訳 (約 40 次元 を 大分類で)

予想時点で取得可能? 列 が の もの だけ を 使い、 × は 一切 使いません。 これ が 時系列 リーク 監査表 です。

大分類 予想時点 で 取得可能? 採用
馬の属性 (基本) 性別、 年齢、 父系統、 母父系統 ○ (出走表 確定時点)
馬の属性 (動的) 馬体重 と その 変動傾向 △ (前走時点 まで を 使用)
馬の戦績 直近 N 走の 着順傾向、 上がり 3F の 偏差、 同条件 適性 ○ (前走 終了時点 まで で 集計)
騎手・厩舎 当該条件 勝率 / 連対率、 騎手 × 厩舎 相性 ○ (前走終了時点 まで)
コース・条件 距離、 芝/ダート、 コース形態、 馬場状態、 斤量、 枠順 ○ (出走表 + 当日 発表)
血統 (5代) 父〜高祖父母 系統 と 近交係数 ○ (静的情報) △ 全件取得中
払戻総額 ベース 指標 過去 レース の 合計票数 から 算出 (※当該レース の 票数 は 使わない) ○ (過去レース 確定後)
当該レース 確定 オッズ 単勝オッズ、 人気順 × (レース直前 にしか 確定 しない)
❌ 当該レース の 結果 由来 値 当該レース から 計算した どんな 統計 も × (未来情報)
❌ 競馬専門サイト 指数 一部 サイト は 結果反映 が 速い ため リーク 疑い × (検証 で ROI 不安定)
❌ 天候 (現地観測) 風速 / 気温 × (馬場状態 で 代替済)

オッズ を あえて 使わない 理由 は 2 つ:

  1. オッズ は レース 直前 に しか 確定 せず、 「前日朝 に 予想 を 出す」 運用 要件 を 満たせない
  2. オッズ系 を 入れる と モデル は 「人気馬 を 当てに 行く」 だけ の つまらない 子 に 育ち、 妙味 の ある 中穴 を 推せなく なる

3.2 学習方法 と 評価方法

  • アルゴリズム: LightGBM (目的関数 は ランキング学習 寄り の カスタム)
  • 学習データ: 2018 年 〜 2025 年 11月 まで の 中央競馬 全レース (約 数百万 行 ベース)
  • 第 1 評価 (hold-out): 2025 年 12 月 の 約 4 週
  • 第 2 評価 (月次ローリング): 2018 〜 2025 年 を 月次 walk-forward で 検証し、 年別 / 月別 ROI を 並べて 「ある月 1本 だけ で 偶然 強かった のでは ない」 ことを 確認
  • 不確実性評価: ブートストラップ で 単勝 ROI の 信頼区間 (95% CI)、 最大ドローダウン的中時オッズ分布 を 推計
  • 評価指標: ROI (回収率) と 上位馬 hit 率 を 同時に 見る (片方 だけ だと 危ない)
  • ハイパラ最適化: Optuna (現在 別マシンで 数百試行 走らせ中、 火曜 朝 完了予定)

特徴量の 取捨選択ablation (ある特徴量群を抜いたモデルと 入れたモデルを 比較) で 機械的に 判定しています。 「直感で 効きそう」 を 信用しない。 直感は 平気で 嘘 を つきます

時系列リーク防止 が 最大の関心事:
競馬 ML で 一番 多い 「水増し ROI」 の 原因 は、 学習データ に 未来の情報 を 紛れ込ませて しまう こと です。 例: ある馬 の 「シーズン通算成績」 を 各レース 時点 の 特徴量 に 使う、 など。 こ れを やると 学習時 ROI は ぐんぐん 伸びる が、 実戦 で 死ぬ。 私 の パイプライン では、 特徴量 を 生成 する 時点 で 「その時 まで に 利用可能 だった 情報」 だけ で 計算 する 規約 を 厳密 に 守って います (検査用 の レビュー スクリプト で 各特徴量 の 計算時刻 と 参照時刻 の 整合 を 機械的 に チェック)。

3.3 一番 効いている (たぶん) 軸

これは 競馬 ML 界 で わりと 共通認識 だと 思います:

  • 「同じ条件 で 過去 どう走ったか」 系: コース、 距離、 馬場、 距離 + 斤量、 斤量変化 — の 適性 が 一番 安定して 効く
  • 騎手 × 厩舎 の 相性: ベタな ように 見えて 効く
  • 時系列の リーク防止: ある時点 で 知り得ない 情報 (例: そのレース の 結果から 導いた 数字) を 過去側の 特徴量に 混ぜない、 これを 1 つ でも やったら 全 数字 が ウソに なる

逆に、 私が 散々 入れ替えて 結局 効果が 安定しなかった のは、

  • オッズ系・人気系 (ROI を 下げる方向に 振れがち)
  • 競馬専門サイト の 「指数」 系 (学習データに リーク しやすく、 また スクレイプ コスト に 見合わない)
  • 天候 / 風速 / 気温 (馬場状態 で すでに 取れている 情報 と 被る)

ROI を 110〜120% に 載せる ところまで は 公開されている 知見 で 多くの人 が 到達 できる 領域 だと 思います。 そこから 先 は データ前処理 の 職人技 と 試行錯誤 の 量 で、 私 も 1 ヶ月 かけて 1 つ 1 つ 削って 足して の 繰り返し でした。


第4章 しくじり 名場面集 😇

開発中 に 踏んだ 地雷 を 並べます。 これ を 笑い飛ばす ため の 記事 と 言って も 過言 では ない。

4.1 「toroku」 列 が 全行 77 で 固定 されている 事件

最初にやったのは、 各レース の 登録頭数出走頭数 を 生バイナリ から 読み出す 処理 でした。 仕様書 (古い PDF) を 頼り に offset 31 から 2 バイト で 読んだら、 全行 77 で 揃ってる。

: 「日本の競馬 って 1 レース 77 頭 走るん でしたっけ?」
Claude Opus: 「いいえ、 通常 最大 18 頭 です」
: 「ですよね」

しばらく悩んだ末に、 そのバイト位置は実は ASCII の "77" という 固定フラグ であって、 登録頭数 は 別の場所 (offset を 4 つ ズラした 位置) に 居ました。 当然 この 生データ には 公式 ドキュメント が ろくに ない。

教訓: 「常識的に あり得ない 値」 が 一面 並んでいる時は、 自分の オフセット計算 を 疑え。 バイナリ仕様書を信用するな、 実データを信用しろ。

4.2 「血統スクレイプ 950 馬」 で 精度が ガタ落ち

馬の 5代血統 (祖父母 → 高祖父母… 計 30 頭) を 入れたら モデル精度 が 上がるはず、 と 仮説を 立てて、 とりあえず 新しい馬 950 頭分 の 血統情報 を、 公開された 公式の 個人利用範囲 で、 利用規約 と robots.txt を 確認したうえで、 十分に低頻度 (1リクエストあたり 数秒待機 / 並列度 1) で 取得しました。 取得手順 や 具体 URL は 本記事 では 紹介しません (権利関係 と 規約遵守 の 観点 で、 各自 で 一次情報 を 当たって ください)。

そして組み込んで再学習させたら…

モデル: ROI 108% (前モデル 140% から マイナス 32 ポイント)

崩壊です。 なぜか?

原因はシンプルで、学習データ 全 211,000 頭 のうち、 血統情報 が ある のが 950 頭 (= 約 0.45%) しか 無かった ため。 LightGBM 君は、 99% が NaN で 1% 弱 だけ 値が ある カラム を 「これ ノイズ じゃん」 と 適切に 学習してくれず、 むしろ 既存特徴量 との 偽の相関 を 拾って 大コケ しました。

教訓: 欠損カバレッジが極端に低い特徴量はモデルを破壊する。 入れるなら全件、 入れないならゼロ件。 半端な部分集合が一番怖い。

対策: 全 21 万頭 を 同じ 低頻度ルール で スクレイプし直し中 です。 ETA は約 5日。 マシン は 24時間 稼働 です。 これ も 面白おかしくて、 「血統データ の ために 5 日 かけて 21 万件 を 数秒/req で 順番 に 取得 する」 って 文字 に すると 完全 に バカ ですよね。 でも やってる。

4.3 票数データ を 統合 したら ROI が 下がる 謎

オッズが 直接 使えない 条件 (前日 予想 だと オッズが 固まってない ため) でも 「払戻総額」 = 票数 の 合計 から 人気度合い を 推定できる はず、 と 考えて、 別ファイル から 票数系 の 数値 を 取り出して 特徴量 に 追加 しました。

結果: ROI -13 ポイント

なぜ? と 1日 悩んで 気がついた のは、 当たり前 と 言えば 当たり前 の 話 で、 「票数 ∝ 人気 ∝ オッズ」 なので、 オッズを 使わない 約束 を 票数経由 で 破っていた だけ でした。 しかも 人気馬偏重 になって 単勝の 妙味 が 消える。

教訓: 「直接使ってないからリークじゃない」 と思った特徴量が、 1ホップ先で 普通に リークしている。 競馬は 情報の連鎖が 濃いので、 こういうのが ザラに 起きます。

これ、 同じ罠を 業務系の機械学習でも たくさん 見かけます。 「ユーザ ID 入れてないから個人特定リークじゃない」 → 「でも IP + UA で 95% 識別できてました」 みたいな。 競馬は機械学習の練習台として 異常に 優秀 です。


第5章 当たる前 から 税金 を 心配し始めた 男 の 半日 💸

ここが この記事 の タイトル回収 パート です。 ROI 140% の モデル が hold-out で 出た 瞬間、 自分 は 重大 な 事 に 気付いて しまいました。

自分: 「これ、 もし 本当 に 勝ち続けたら、 税金 どうなるん やろ?」

落ち着いて ください。 自分 は まだ 1 円 も 当てて いません。 何なら 来週 月曜 までに 1 円 も 払戻 が ない 可能性 すら ある。 hold-out 上 の 数字 と 実戦 の 数字 は 別物。 そんな こと は 機械学習 を やった こと の ある 人間 なら 全員 知って いる。

にも かかわらず、 ここで 国税庁 タックスアンサー と 過去 の 裁判例 を 半日 かけて 調査 し 始めた の が この男 (私) です。 馬券 を 1 枚 も 買って いない 段階 で。 取らぬ狸 を 通り 越して 狸 の 子孫 の 進学費用 まで 心配 して いる 状態 です。

5.1 競馬の払戻金 は どの 所得?

国税庁 の 一般的 な 整理 は こう とされて います (※あくまで 概念整理 です。 個別事案 は 必ず 税理士 または 所轄税務署 に 確認してください):

  • 競馬 の 払戻金 は 一般 には 一時所得 として 扱われる ことが多い
  • 一時所得 の 課税対象 = ( 払戻金 − その的中馬券の購入額のみ − 特別控除 50万円 ) × 1/2

ここで 重要 なのは 「この扱い に なると 外れた馬券 の 購入額 は 経費 と されない」 という 点。 例えば、 1年間 で 100 万円 賭けて 110 万円 取り戻し、 そのうち 当たった馬券 の 購入額 が 10 万円 だった と すると、

  • 課税対象 ≒ (110 − 10 − 50) × 1/2 = 25 万円 が 一時所得 に

外れ馬券 90 万円 は 無かったこと に される のが この 扱い の 怖い ところ。 一方、 趣味 で 年に 数回 賭ける 程度 なら 50 万円 特別控除 の おかげで 課税対象 に なる ことは ほぼ ない、 と 一般 に は 説明 されます。

5.2 例の 「馬券裁判」 シリーズ

ところが ですね、 私が 半日 溶かした のは ここから 先 です。 過去 に 「外れ馬券 を 経費 に できる か」 を 争った 有名 な 裁判 が あります。

  • 大阪 馬券裁判 (最高裁 平成27年3月10日 判決)

    • 元会社員 が 独自 の ソフト で JRA 全レース を ほぼ網羅的 に 自動購入 し、 数年 で 数十億 円 を 賭け、 数億 円 の 黒字 を 出した 事案
    • 国税 は 「一時所得 ・ 外れ馬券 は 経費 に ならず」 と 課税 → 当人 は 「これ は 営利目的 で 継続的 に やってる 雑所得 だ、 外れ馬券 は 必要経費 だ」 と 主張
    • 最高裁: 当該事案 では 雑所得、 外れ馬券 も 必要経費 と 認定 (当人 勝訴)
  • 札幌 馬券裁判 (最高裁 平成29年12月15日 判決)

    • こちら も 同様 に 自動 ・ 大量 ・ 継続 購入 ケース で、 雑所得 + 外れ馬券 経費 が 認定

ただし どちら も 「営利目的 で 継続的 に 行われた」 こと、 つまり 趣味 を 超えた 事業性 が 認められた、 と 整理 されて います。 国税庁 の 整理 も この 2 判決 を 受けて 「自動的 に 多数 を 継続購入 する など の 例外的 な 購入態様 に 限り 雑所得 として 扱い 得る」 と、 限定的 な 方向 で 整理 されて いると 報じ られて います (※具体的 な 適用判断 は 個別事案 ごと に 異なる ので、 該当 し得る 規模 で 運用 する 場合 は 税理士 への 事前相談 が 推奨 され ます)。

5.3 「で、 俺の 場合 は?」 の 検討会 (脳内)

ここから 私 は 1人 で 検討会 を 開きます。 当事者 私、 反論役 私、 司会 私。

司会私: 「では、 ご相談者 の 状況 を ご説明ください」
当事者私: 「自作 AI モデル で 中央競馬 の 予想を 出して、 毎週末 上位レース のみ を 限定額で 単勝購入 する 予定です」
反論役私: 「自動 投票 では?」
当事者私: 「いいえ、 目視で 確認 して 手動 投票 します」
反論役私: 「全レース 購入 では?」
当事者私: 「いいえ、 モデル が 強気の 上位 数レース のみ に 絞ります」
反論役私: 「継続性 は?」
当事者私: 「まだ 1 円 も 当ててません
司会私: 「ご相談者、 そもそも 課税の 心配 を する 段階 に 達して おりません。 本日 は お引取り ください」

…という 結論 が 半日 かけて 出ました。 半日 返して ほしい

ただ、 真面目な 話 として、 機械学習 で 一定 の 期待値 が 出る モデル を 持っている なら、 「将来 黒字 が 安定 した 場合 の 申告区分 を 事前 に 整理 しておく」 のは 経営者 と して は むしろ 健全 だ、 と 自分 を 慰めて おきます。 (ホビーが 法人 の 経費 に ならない こと も 同じく 半日 かけて 確認 した と は ここ だけ の 話)

5.4 教訓 (?)

  • 皮算用 は 楽しい。 ただし 仕事 の 時間 を 削る な
  • 黒字 を 出す 前 に 税理士 に 確認 する ほど の 額 を 賭ける 予定 は ない
  • 当たって から 心配 しろ

第6章 Claude Opus 4.7 (1M context) と 組む コツ 🤖

この開発、 ぶっちゃけ Claude Opus 4.7 が いなかったら ぜったい 完成 してません。 特に 1M トークン context が 効きました。

私が個人的に 効いたな〜 と思ったプラクティス:

  1. 「memory ファイル」 を Claude 自身に管理させる
    • 「過去 ハマった ポイント」 や 「自分 が 説明 を 何度も 求められて 嫌 だった こと」 を 専用 md ファイル に Claude 自身 が 書く
    • セッション 冒頭 に 必ず 読ませる
    • 副作用として、 後から 自分 が 読み返しても 「あ、 ここで こう ハマったのか」 が 全部 残る
  2. 長時間 タスク は 中断せず 一気に
    • グローバル 設定 に 「途中で 質問するな、 最善策で 進め」 と 書いておく
    • 何度も 「どうしますか?」 で 止まると、 一晩 で 終わる 作業 が 三晩 に なる
  3. エラー は 3回 まで 自力解決 させる
    • 「ライブラリ 競合 は 自分で 直せ」 と 投げて おくと、 venv 切り直し から バージョン pin まで 勝手 に やってくれる
    • 私 が 監視 してた のは 主に 「方向性 が ズレ てないか」 だけ
  4. 重要 メトリクス は 必ず 「テストセット」 で 出させる
    • 「学習データ の ROI が 200%」 みたいな ヤバい 数字 が 出ても 喜ばない
    • 直近 1ヶ月 を hold-out にして そっち で 評価。 今の ROI 140% も そっち の 数字

第7章 現状 の モデル概要 と 評価サンプル 📊

⚠ 以下 の 数字 は hold-out (2025/12) と 月次 バックテスト 上 の 値 で、 実戦 の 収益 を 保証 する もの で は ありません。 実戦 ログ は 続編 で。

7.1 ROI の 計算式 と 検証ルール

ROI = ( hold-out 期間 の 払戻合計 ) / ( hold-out 期間 の 購入合計 )
購入合計 = ( 1点 100 円 × 単勝 ) × ( 推奨レース数 )
推奨レース = モデル の 推定 期待値 が 閾値 を 超える レース のみ (= 全レース 購入 では ない)
  • 券種: 単勝 のみ
  • 1レース 1点 100 円 固定 (Kelly 等 の 動的ベット は 採用 して いない)
  • 対象: モデル が 推奨 し た レース のみ (見送り レース は 購入額 = 0)
  • payouts は JRA 公式払戻 (税引前) を 用いる

ROI 100% = ちょうど 元本 維持、 100% 未満 = マイナス、 100% 超 = プラス。 JRA の 単勝 控除率 は 約 20% (上限 払戻率 80%) なので、 「市場 から 何の情報優位 も 引き出せて いない モデル の 期待 ROI ≒ 80%」 が ベースライン です。

7.2 hold-out (2025/12) サンプル 数

指標
評価期間 2025-12-02 〜 2025-12-29 (約 4 週)
中央競馬 全レース 数 約 300
モデル 推奨 (= 購入) レース 数 約 150
購入合計 (= 150 × 100 円) 約 15,000 円
的中数 約 37
単勝 的中率 約 24.5%
払戻合計 約 21,000 円
単勝 ROI 約 140%
平均 配当 (的中時) 約 570 円
中央値 配当 (的中時) 約 360 円
最大 配当 (的中時) 約 4,200 円

サンプル サイズ が 推奨 150 レース と 限定的 な ため、 単独 で は 偶然 の 寄与 を 排除 し切れません。 月次 walk-forward と ブートストラップ で 補強 します。

7.3 年別 ROI (2018-2025 月次 walk-forward、 補助評価)

推奨 レース 単勝 ROI 単勝 的中率
2018 約 1,700 約 112% 約 21%
2019 約 1,750 約 128% 約 23%
2020 約 1,700 約 119% 約 22%
2021 約 1,800 約 135% 約 24%
2022 約 1,750 約 122% 約 23%
2023 約 1,800 約 131% 約 24%
2024 約 1,750 約 125% 約 23%
2025 (1-11月) 約 1,600 約 133% 約 24%
全期間 平均 (重み付き) 約 13,800 約 125% 約 23%

hold-out 単月 で 140%、 8 年 walk-forward で 125% が それぞれ 別 の 評価軸 の 「ベスト 推定」。 続編 で ブートストラップ 95% CI / 最大 ドローダウン / 的中時 オッズ 分布 (ヒストグラム) を 公開予定。

7.4 表 を 読む とき の 注意

  • 上記の モデル1位馬 の 単勝 的中率 (≠ JRA1番人気 の 的中率) に 注意
  • モデル1位馬 の 複勝圏 (3着以内) 率 (hold-out)約 81%
  • 競馬 の 単勝 ROI は 少数 の 高配当 的中 で 大きく 振れる。 表 の 「最大配当」 を 1 つ 外す だけ で ROI が 数 ポイント 動く
  • 馬場 状態 / 騎手 / 出走馬 が 期間 を 跨いで 変わる と 一発 で 崩れる 性質 が ある
  • モデル 自身 が 出した 予想 で 自分 が 買う ことで オッズ を 動かす リスク は 個人投資額 では 無視 できる 水準

私 の モデル も 今週末 初めて 「学習 に 使ってない 現役 の 馬たち」 を 予想 する ので、 ぶっちゃけ どう なる か 私 にも 分からない

これ が 楽しい。


第8章 今週末 (5/23・24) の 実戦検証 予告 🏇

ここから が 本番 です。 hold-out の 数字 が 強い ことは わかった。 では、 学習 にも 評価 にも 一切 使って いない 「来週末 の レース」 で、 同じ ぐらい の 数字 が 出るのか? それ を 確かめる のが 今週末。 これ ばかり は やって みない と わからない。 楽しい。 こわい。

これ は ML 検証 の ログ取り であって、 馬券購入 を 推奨 する もの では ありません。

  • 5/23 (土) 朝 7:00: 本番機 の cron が 起動 → 当日 の 全レース 予想 CSV が 私 の Gmail に 届く
  • その日 の うちに: 私 が 内容 を 確認 し、 検証用 の 最小額 で 単勝 を 購入
  • 5/24 (日) 朝 7:00: 同じく 日曜版 が 届く → 同じ ルール で 購入
  • 5/24 (日) 19:00: 検証 cron が 走り、 週次 ROI が 自動集計 される

検証 ルール (詳細 は 来週公開):

  • 単勝 のみ (モデル が 一番 強い と 評価されている 券種)
  • モデル の 推奨 上位 N レース に 限定
  • 1レース 上限 / 週末 合計予算 上限 ともに 検証用 の 最小額。 具体額 は 来週公開
  • 購入 は 手動 確認 のみ、 自動投票 は しない

馬券 は 自己責任 です。 私 の 数字 を 見て 真似 で 賭ける こと は 一切 推奨 しません。 私 は 趣味 と 検証 の ため に 必要 最小限 の 出費 で やります。


第9章 来週月曜 (5/25) の フォローアップ 予告 📅

来週月曜 の 22時頃 に 「実戦結果編」 として 別記事 を 公開 予定 です。 こんな内容を出します:

  • 的中率・回収率 の 生数字 (隠さず全部)
  • モデル が 推した 全レース と 実結果 の 突き合わせ表
  • 賭けた金額・買い目・結果収支 (恥ずかしい やつ)
  • モデル が ハマった 理由 or 外した 理由 の 反省会
  • 来週以降 の 改善案
  • そして… 211,000 頭 血統 スクレイプ が 終わってたら その 取り込み結果 も 載せます
  • (おまけ) 「税金 を 半日 調べた 件 の 後日談」 ← 万が一 黒字 が 出てしまった 場合 のみ

勝っても 負けても、 「機械学習 を 競馬 と いう 過酷 な テストベッド に 突っ込むと こう なる」 と いう 実例 と して 価値 が ある と 思って います。 たぶん 負けます。 負けたら 笑ってください。 勝ったら 一緒 に 笑い ましょう。


第10章 おわりに 🌳

弊社 の 本業 (建築 設計 × AI) も ちゃんと 進んで います。 競馬 は あくまで 休日 プロジェクト で、 自分 に とっては 「ノイズ だらけ の 実世界 データ を どう 機械学習 で 料理 するか」 の 一番 真剣な 練習台 です。

仕事 で 扱う 図面 データ も、 結局 の ところ 「人間 が 手で 書いた ノイズ だらけ の デジタル化 遺産」 という 意味 で は 競馬 の 生バイナリ と 大差 ありません。 同じ 「仕様書 が ろくに 無い バイナリ を 実データ から 解読 する」 という 筋肉 が、 両方 で 鍛えられる。

それ が 伝われば 番外編 と しては 大成功 です。

来週月曜、 また 会い ましょう。 (たぶん 意気消沈 した 顔 で。)


🔁 最後に もう一度: 本記事 は ML 検証 の 読み物 です。 馬券購入 を 推奨 する もの で は ありません。 公営競技 は 余剰資金 で 適度 に。
困ったら → 厚労省 ギャンブル等依存症 相談窓口


関連記事 (Qiita 本編シリーズ)

  • (本編シリーズ各記事へのリンクは公開時に追加予定)

使用ツール と 参考リンク

  • Claude Opus 4.7 (1M context) — メイン開発パートナー
  • LightGBM / Optuna — 学習・ハイパラ最適化
  • Python (paramiko / pandas / requests) — 全工程
  • JRA 払戻率 等 の 基礎情報: JRA スーパープレミアム / 払戻率の説明
  • 競馬 の 払戻金 と 所得税 の 一般的 整理: 国税庁 タックスアンサー No.1490 / 最高裁 判決 (平成27年3月10日 / 平成29年12月15日)
  • 私 の 睡眠時間 — 大量 に 消費 (返却不可)
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?