はじめに — Keiba Vision の頭の中
Keiba Vision が「どの馬が勝ちそうか」をどうやって計算しているのかを、中学数学から始めて専門家が使う道具まで、一歩ずつ説明します。このページでは全体の地図を示します。
このページで学ぶこと
- Keiba Vision の中で「予想」と呼んでいる計算が、実は 3 種類 あること
- それぞれが数学のどの分野 (確率・統計・幾何・数列) を使っているか
- このドキュメントを読む順番と、使う記号の意味
予想は 1 つではない
アプリの画面には「勝率」「能力値」「着順」がいろいろな場所に出てきます。これらは同じ計算から出ているように見えますが、実は 目的も考え方も違う 3 つの仕組み から出ています。
| 仕組み | 画面のどこ | 何を出す | 数学的な正体 | 書かれている言語 |
|---|---|---|---|---|
| ① 予想エンジン | レース予想の「印」「買い目」「評価」 | 0〜100 の点数 | 経験則による 加重平均 (確率ではない) | Kotlin |
| ② モンテカルロ | レース予想の「勝率シミュレーション」 | 勝率・3 着以内率 | 確率モデル を乱数で解く | Zig (WebAssembly) |
| ③ 3D シミュレーション | 3D の画面 | 1 回分のレース展開と着差 | ②の 1 回分 + 運動の式 | Zig + JavaScript |
そのほかに、予想の「材料」を作る計算があります。
- 能力値 (名鑑の 45〜99 の数字) … Wikipedia の戦績を数値化し、順位に変換したもの → 能力値と適性
- 血量・近交係数 … 血統表から割合を計算する → 血統の数学
- 推定馬場 … 天気コードと降水量から判定 → 天気と馬場
① の「勝率」は確率ではない
データの流れ
Wikipedia の記事 ──(Kotlin が解析)──> 戦績・勝ち鞍 ──> 能力値・得意な馬場と距離
│
サンプル出馬表 (スピード指数・脚質・調教) ─────────────────┤
▼
┌─ ① 予想エンジン (加重平均) ─> 印・買い目
├─ ② モンテカルロ (10 万回) ─> 勝率
└─ ③ 1 回分の出来 ─> 3D の運動の式 ─> 映像・着差①は Kotlin のサーバー (PredictorEngine.kt) で、②と③の「出来」の計算はブラウザの中で Zig から作った WebAssembly (montecarlo.zig) で、③の映像は JavaScript (sim3d.js) で動いています。
読む順番
このドキュメントは、前のページの知識を次のページで使うように並んでいます。数学に自信がなければ上から順に、自信があれば気になるページから読んでください。
- 入門 — 確率の基本 と 乱数のつくり方。期待値・分散・正規分布・中心極限定理を、アプリで使う分だけ最短で身につけます。
- 予想のしくみ — 予想エンジン、モンテカルロ法、能力値と適性。このドキュメントの中心です。
- 3D と映像の数学 — 3D の運動学、コースの幾何学、カメラとアニメーション。微分・パラメータ表示・微分方程式が出てきます。
- 血統と天気 — 血統の数学、天気と馬場。
- 発展 — 本物の予想へ。オッズと控除率、確率の正規化、Plackett–Luce モデル、Brier スコア、ケリー基準など、専門家が実際に使う道具と、このアプリをどう改善できるか。
各ページの最後には 練習問題 があります。友達に説明する前に、自分で解けるか確かめてみてください。
前提知識
- 中学で習う 1 次関数、2 次関数、平方根、指数 ( のような計算)
- 「和の記号 」「関数 」という書き方に抵抗がないこと (出てきたときに説明します)
微分と積分は、使う場面で「何をしているか」を言葉で説明してから使います。知らなくても読み進められるようにしています。
このドキュメントで使う記号
| 記号 | 読み方 | 意味 |
|---|---|---|
| ピー・エー | 出来事 が起きる確率 | |
| イー・エックス | 確率変数 の期待値 (平均) | |
| , | 分散 | ばらつきの大きさ |
| シグマ | 標準偏差 () | |
| ミュー・アイ | 番目の馬の「平均的な出来」 | |
| ファイ | 標準正規分布の累積分布関数 ( 以下になる確率) | |
| シミュレーションの回数 | ||
| レースの距離 (m) | ||
| 番目の馬の走破タイム (秒) | ||
| 床関数 | 以下の最大の整数 |
ソースコードへのリンク
コードの見出し (ファイル名) を押すと、GitHub の実物のファイルが開きます。このドキュメントの数式は、すべて実際のコードと 1 対 1 で対応しています。数値の例も、実際のアプリが出した値です。
まとめ
- 「予想」は ① 加重平均の点数、② 確率モデル (モンテカルロ)、③ 1 回分のレース展開、の 3 種類
- ① は Kotlin、② ③ の計算は Zig (WebAssembly)、③ の映像は JavaScript
- 画面の「勝率」には、本物の確率 (②) と、点数 (①) の 2 種類がある