Model
模型說明
TX-Oracle v3:Elo 評分加 LightGBM 排名模型。以下內容逐項對照公開源碼,可自行核對。
融合公式Ensemble
blendZ = α · lgb_z + (1 − α) · elo_z α = 0.88 排名分 = blendZ + 0.5 · (factor_bonus ÷ 100) finalScore = 1500 + blendZ × 100 (顯示用,唔包 factor)
lgb_z、elo_z 係同一場內各自標準化(減平均、除標準差)。冇 LightGBM 分嘅馬以全場平均代入。現行正式預測嘅 factor_bonus 只計檔位同負磅兩項。
源碼:src/routes/analyze.tsElo 更新公式Elo
對每對馬 i、j(i 名次較好): expected_i = 1 / (1 + 10^((R_j − R_i) / 400)) delta_i += K / (N − 1) × (1 − expected_i) delta_j += K / (N − 1) × (0 − expected_j) K = 40,初始評分 = 1500
N 為完成賽事匹數;所有配對變動加總後同時套用;同名次當 0.5/0.5;未完成(DNF/PU)唔計。馬匹、騎師、練馬師各自用同一方法更新。
elo_composite = (0.7 × 馬匹 + 0.2 × 騎師 + 0.1 × 練馬師) ÷ 有資料權重之和
評分軸:馬匹快照分 overall、turf_sprint、turf_mile、turf_middle、turf_staying 五軸儲存,但正式預測只讀 overall 軸;其餘四軸冇加權入預測,所以冇「五軸權重」。騎師同練馬師只有單一評分。騎練權重可經回測調整,以上係預設值。
源碼:scripts/elo/engine.tsLightGBM 訓練LambdaRank
目標:lambdarank;評估:NDCG@1、NDCG@3;截斷:前 4 名
標籤:第1名→4、第2名→3、第3名→2、第4名→1、第5名或之後→0
label_gain:[0, 1, 7, 31, 127, …]
缺失值:全部特徵缺失值填 −1
類別特徵:going_code:場地狀況文字轉類別代號
輪數:以早停搵最佳輪數,再用全部資料重訓
防洩漏:所有往績只用賽日之前資料;唔用任何賠率
特徵清單(52 項+going_code)Features
- 1distance賽事今場途程(米)數值
- 2field_size賽事今場出賽匹數數值
- 3draw賽事檔位數值
- 4actual_weight賽事實際負磅(磅)數值
- 5is_sprint途程組別途程 ≤1200m0/1
- 6is_middle途程組別途程 1400–1600m0/1
- 7is_distance途程組別途程 ≥1800m0/1
- 8h_eloElo馬匹 overall 軸評分,取賽日前最近快照數值
- 9j_eloElo騎師評分,取賽日前最近快照數值
- 10t_eloElo練馬師評分,取賽日前最近快照數值
- 11days_since_last休息距上仗日數數值;初出為缺失
- 12dist_starts途程往績同途程 ±200m|賽日前全部往績:出賽數及頭三名次數(不平滑)計數
- 13dist_top3途程往績同上,頭三名次數計數
- 14going_starts場地往績同一場地狀況|賽日前全部往績:出賽數及頭三名次數(不平滑)計數
- 15going_top3場地往績同上,頭三名次數計數
- 16draw_starts檔位往績同馬場、途程 ±100m、同檔位,全部馬匹歷史計數
- 17draw_top3檔位往績同上,頭三名次數計數
- 18combo_starts騎練組合同一騎師×練馬師組合歷史計數
- 19combo_top3騎練組合同上,頭三名次數計數
- 20weight_avg5負磅近5仗平均實際負磅數值
- 21factor_bonus加分休息+途程+場地+檔位+負磅+騎練 六項規則分總和(見下)數值
- 22form_n近績近5仗可用場數0–5
- 23form_avgpos_w近績名次÷出賽匹數,加權 0.40/0.25/0.15/0.10/0.10(最近最重)0–1
- 24form_top3rate_w近績同權重嘅頭三率0–1
- 25form_pos_slope近績近5仗名次線性斜率,正數=進步數值;1仗為0
- 26tv_starts交叉往績練馬師×馬場出賽數計數
- 27tv_top3交叉往績練馬師×馬場頭三數計數
- 28jv_starts交叉往績騎師×馬場出賽數計數
- 29jv_top3交叉往績騎師×馬場頭三數計數
- 30jdb_starts交叉往績騎師×途程 ±200m 出賽數計數
- 31jdb_top3交叉往績騎師×途程 ±200m 頭三數計數
- 32jg_starts交叉往績騎師×場地狀況出賽數計數
- 33jg_top3交叉往績騎師×場地狀況頭三數計數
- 34tg_starts交叉往績練馬師×場地狀況出賽數計數
- 35tg_top3交叉往績練馬師×場地狀況頭三數計數
- 36horse_pace_n跑法近8仗有沿途走位紀錄嘅場數計數
- 37horse_pace_early跑法近8仗第一個走位點平均位置數值
- 38horse_pace_style跑法早段平均 ≤2.5 領放、≤4 跟前、其餘後追1/2/3;無資料0
- 39race_n_leaders步速今場領放型馬匹數計數
- 40race_n_closers步速今場後追型馬匹數計數
- 41horse_pace_clash步速領放:−(領放數−1);後追:max(0, 2−後追數);跟前:0數值
- 42class_now_num班次今場班次;一級賽−1…三級賽−3,第一至五班1–5,新馬6數值(細=高班)
- 43last_class_num班次上仗班次,同一轉換數值
- 44class_delta班次上仗班次 − 今場班次(正數=升班)數值
- 45sect_n分段近6仗有分段紀錄場數0–6
- 46sect_early_avg分段首段位置平均數值
- 47sect_late_kick分段首段位置 − 末段位置平均,正數=後上數值
- 48draw_x_sprint交互短途時取檔位,否則0數值
- 49paceclash_x_distance交互長途時取步速衝突值,否則0數值
- 50sire_top3_sm血統父系子女頭三率,(頭三+40×全體率)÷(出賽+40)0–1;無血統−1
- 51sire_dist_top3_sm血統父系子女於同途程 ±200m 頭三率,同一平滑0–1;無血統−1
- 52damsire_top3_sm血統外祖父子女頭三率,同一平滑0–1;無血統−1
factor_bonus 規則分Factors
rate(出賽, 頭三, scale) = ((頭三 + 0.30 × 5) ÷ (出賽 + 5) − 0.30) × scale ;冇往績 = 0
休息<7日 −10;7–28日 +10;29–60日 0;61–120日 −5;>120日 −15;初出 0
途程rate(途程往績, 15)
場地rate(場地往績, 12)
檔位rate(檔位往績, 10)
負磅−(今場負磅 − 近5仗平均) × 0.5
騎練rate(騎練組合往績, 8)
訓練特徵入面嘅 factor_bonus 係六項之和;正式預測加分只計檔位同負磅。
測試過但未採用Not promoted
試閘、場內相對值、配備變化、分段速度 z 值、賽後評述(受阻/走大疊/出閘失準):經 1,299 場 walk-forward A/B 測試,命中率冇穩定改善,未用於正式預測。長休復出、班次適應、騎練180日勝率等只喺回測檔,未升正式版。