版本 10.0(特徵雜湊 bb6a8f58) 歷史錨點 4fc88c8d 日期 2026-06-20
樣本外時段 A:2026-03-01 至 06-13(299 場);B:2025-09-01 至 2026-03-01(474 場)
本篇為 V10 系列的基礎白皮書,除記錄 V10.0 的結果外,亦完整奠定本系統的紀律、方法、框架、工具、數學與護欄。其後每個特徵版本(10.1、10.2…)各撰一篇,沿用本篇的方法與護欄,只記錄該版的增量。全文數據來自 registry 與窮舉掃描結果,不經人手輸入。
racing_engine 是一個從零重建的香港賽馬首選預測系統,以 Benter 條件邏輯回歸為核心。其設計把所有「會變的東西」參數化為三層——歷史(不可變資料)/特徵(計算碼)/參數(可調值)——並以五元組 ReproKey 鎖定可重現性。V10.0 忠實重做 Eric 的 V10.0 規格(5 特徵、Benter+XGB 集成),並在 4 部 Intel 認證機上窮舉 90,720 組參數、於兩個樣本外時段驗證。核心結論:在 5 特徵下 XGBoost 淨負面,純 Benter 最優(加權勝 22.4% / 位 49.4%,較基準 +2.5 / +1.9pp,且確定性)。
香港賽馬首選預測=場內排名問題:給定一場 N 匹馬,估計各馬勝出機率並選出首選。V10.0 的目標不是追求最高準繩,而是建立一個可信的地基:可重現、防洩漏、可窮舉驗證、誠實(不報假數)。一切日後改良(R 系列特徵工程)皆站在此地基上。
三層(唯一會變的東西):
- 歷史 (History):不可變資料;鎖定的馬卡一旦定案即成歷史。一次性載入 RAM 雜湊表;內容雜湊 snapshot_hash 覆蓋引擎讀取的所有欄位(賽果 7 欄+場次中繼)。
- 特徵 (Features):純 Python 計算碼。改任何計算方法 → 升特徵版本(10.0 → 10.1)。版本雜湊=該模組原始碼的 SHA。
- 參數 (Parameters):可調旋鈕。只改參數值 → 升構建(10.0.1 → 10.0.2)。
編號 <系列>.<特徵版本>.<構建>(如 10.0.3)。
ReproKey = (history_hash, feature_version_hash, param_hash, seed, env_fingerprint)。五者相同 → 結果相同。任何構建可由 registry 的 ReproKey + 參數 + 特徵版本精確重建。
4.1 Benter 條件邏輯回歸(核心勝出階段):每匹馬效用 Uᵢ = Σₖ βₖ xₖᵢ;場內 softmax
P(i 勝 | 場) = exp(Uᵢ) / Σⱼ exp(Uⱼ)。
本引擎 LogisticRegression.decision_function(X) 給出 Uᵢ,再場內 softmax——這正是 Benter 多項 logit 勝出階段。betas 由 MLE 在嚴格早於當前場的資料上擬合(非硬編碼)。
4.2 集成:win_prob = w·benter + (1−w)·xgb,場內歸一化。w 為構建參數(窮舉)。
4.3 入位機率(Harville):P(i 第二 | j 第一) = pᵢ/(1−pⱼ),遞推得入位(首三)機率;折扣 γ 應在驗證窗擬合,不可照搬文獻常數。
4.4 經驗貝葉斯收縮(Beta-Binomial,用於稀疏率,如檔位):對單元 c,θ̂ = (w_c + κ·μ) / (n_c + κ),μ 為上層均值,κ 為收縮強度(pseudo-觀測數)。把稀疏單元拉向母體,避免過擬合。關鍵防洩漏陷阱:κ 與 μ 必須由「逐場後更新的累加器快照」逐場即時重估,絕不可用完整表的最終 (w,n) 擬合——否則整個未來會洩漏進早場的收縮強度。本系統把 κ 設為構建參數(窮舉),μ 由點對點累加器即時算出,徹底消除此擬合洩漏面。
4.5 過彎失地(弧長幾何):在半徑 R、夾角 θ(弧度)的彎上,外走 p 條線者多跑 Δ = p·w·θ(w=線寬)。全程 Δ_total = w·Σᵢ(pᵢ·θᵢ)。約每線寬每 90° 彎 1–3 米;HV 緊彎 3 線外可達 4–5 個馬位。示例:HV 1200m 第 8 檔(約 7 條線外、θ_total≈1.6–2.4 弧度、線寬 1.8m)幾何上多跑約 20 米(~8 個馬位);惟馬可在彎上略快自我補償,實際讓賽約幾何值的一半,故係數 β 由資料學習、不可硬設秒數,並待分段數據校準。彎道超越更貴:要超越須走更外=瞬間跑更遠。
4.6 場形/競爭與位置動態:純場層純量在場內 softmax 中相消,故只能透過交互項(如 closer×步速壓力、closer×彎角)或場內相對(能力減場均)起作用。沿途走位可建為馬可夫傳遞矩陣並以矩陣乘法解析傳播(確定性),優於蒙地卡羅(避免種子不確定性)。
4.7 多重比較統計:窮舉 K 組會令「最佳」被雜訊抬高 ~√(log K);299 場的勝率標準誤約 ±2.3pp。故須以種子穩定性+空假設底線篩走雜訊冠軍(見 §7、§12)。
allX[:start] 為 O(1) 視圖。iteration_range(前 k 棵樹=n_est=k 模型)免費取得。故 90,720 組只需 ~720 次訓練。history / features / params / engine / sweep / registry / job / workers / ids。nthread=4;各值由每次運行的 env_fingerprint 記錄)下逐位元一致。中樞 Contabo 虛擬機 CPU 在大規模下浮點分歧 → 只調度、不認證。v10.0)+ NAS 完整 bundle + SHA256 校驗。5 個點對點特徵:recent_form(近 ≤4 場名次,近期加權、距離調整)、jockey_score、trainer_score(平滑勝率,優先同場同距離)、draw_adv(檔位幾何)、field_norm_draw(檔位/出賽匹數)。模型=Benter MLE + XGBoost 集成。
歷史庫 2,993 場;兩時段樣本外(A 近 299 場 / B 遠 474 場);窮舉 90,720 組(結構 XGB 720 × n_est 6 × 權重 21);4 機逐位元一致;逐賽日掃描、逐場認證。
| 構建 | 節奏 | 集成 (Benter/XGB) | A 勝/位 | B 勝/位 | 加權勝/位 |
|---|---|---|---|---|---|
| 10.0.1 | 逐場 | 0.60 / 0.40 | 21.07 / 45.82 | 18.78 / 47.05 | ~19.7 / ~46.6 |
| 10.0.2 | 逐賽日 | 0.60 / 0.40 | 21.40 / 48.16 | 18.99 / 47.05 | ~19.9 / ~47.5(基準) |
| 10.0.3 ⭐ | 逐場 | 1.00 / 0.00(棄 XGB) | 24.75 / 51.84 | 20.89 / 47.89 | ~22.4 / ~49.4 |
docs/V10.0_ensemble_weight_curve.zh-HK.png
docs/V10.0_param_response.zh-HK.png
→ H1 成立;H2 成立;H3 否證(XGB 淨負面);H4 成立(單調曲面)。
5 特徵下 XGB 為高方差學習器,過擬合並為機率注入雜訊、擾亂 argmax;Benter 多項 logit(低方差、為排名而設)更勝。圖一方差收斂直觀證明此點。即時可落地增益=採用純 Benter;進一步增益須靠特徵工程(場形、步速、分段速度、彎道幾何),非參數。
5 特徵為最小核心(缺評分走勢、負距、場形/步速、分段速度);增益來自棄 XGB 而非神奇參數;特徵增多後 XGB 或重新有用(每版重掃裁決);結論基於兩時段,上線需監測漂移。
V10.0 確立可重現、防洩漏、四機逐位元一致的 Benter 基線,並經 90,720 組窮舉得穩健結論:純 Benter(棄 XGB)最優,加權 22.4% 勝 / 49.4% 位。參數空間已最優;下階段為逐特徵改良(每版一篇白皮書)。
兩窗閘的首個實證(護欄發揮作用的最佳示範):10.1 的 draw_eb——以真實歷史檔位勝率(經驗貝葉斯收縮、點對點)取代硬編碼 draw_adv——通過防洩漏與重現性測試,但於兩窗閘被否決:窗 A 改善(勝 +0.67)、窗 B 失分(勝 −1.3..−1.5),與既往實戰失敗同一海市蜃樓模式。故檔位維持 V10.0、draw_eb 不晉升。單窗測試會誤收此 +0.67 海市蜃樓;兩窗閘正確攔截——這正是本系統紀律的價值所在。
SWEEP_FINDINGS.md、V10.1_DESIGN.md、registry、原始數據 sweep_10.0_results.jsonl.gz、研究工作流 wf_358b92d2-229。