648. March Machine Learning Mania 2025 | march-machine-learning-mania-2025
感谢 Kaggle 再次举办本次竞赛。
今年我在这次竞赛中的旅程并不顺利。在二月中旬(锦标赛开始前几周),我决定开始缓慢收集不同的数据来构建我的模型,主要包括:Kenpom、MassyOrdinal 和 538。我已经准备好了 Kenpom 数据并测试了截至 2024 年(去年)的数据,但我忽略了 538 在 2025 年不可用,而 MassyOrdinal 可用较晚这一事实。这时我不得不转变方法,从 @raddar 的 notebook 中汲取灵感。
该 notebook 提供了真正精心设计的特征,这些特征包括提供的数据、使用平均统计数据和团队质量 derived 的特征。
我基于此建立了我的方法。
虽然我尝试调整不同的算法(CatBoost, LightGBM),但 XGBoost 表现最好,所以我进行了特征选择(29 个特征),而不是(raddar 选择的 25 个特征):
features = [
"men_women",
"T1_seed",
"T2_seed",
"Seed_diff",
"T1_avg_Score",
"T1_avg_FGA",
"T1_avg_OR",
"T1_avg_DR",
"T1_avg_Blk",
"T1_avg_PF",
"T1_avg_opponent_FGA",
"T1_avg_opponent_Blk",
"T1_avg_opponent_PF",
"T1_avg_PointDiff",
"T2_avg_Score",
"T2_avg_FGA",
"T2_avg_OR",
"T2_avg_DR",
"T2_avg_Blk",
"T2_avg_PF",
"T2_avg_opponent_FGA",
"T2_avg_opponent_Blk",
"T2_avg_opponent_PF",
"T2_avg_PointDiff",
"T1_elo",
"T2_elo",
"elo_diff",
"T1_quality",
"T2_quality",
]
我进一步调整了 XGBoost 参数:
param = {}
param["objective"] = "reg:squarederror"
param["booster"] = "gbtree"
param["eta"] = 0.0093
param["subsample"] = 0.6
param["colsample_bynode"] = 0.8
param["num_parallel_tree"] = 2
param["min_child_weight"] = 4
param["max_depth"] = 4
param["tree_method"] = "hist"
param['grow_policy'] = 'lossguide'
param["max_bin"] = 38
num_rounds = 704
性能更好,并实现了更低的 Brier 分数。
然后是最后部分,由于我今年的经历波折,我决定提升模型预测,所以我做了:
| 比赛 | ID | 预测值 | 新预测值 |
|---|---|---|---|
| Baylor v Mississippi State | 2025_1124_1280 | 0.58185013 | 0.98185013 |
| BYU vs VCU | 2025_1140_1433 | 0.683304479 | 0.980304479 |
| ST Mary CA vs Vanderbilt | 2025_1388_1435 | 0.714379186 | 0.954379186 |
| Mississippi vs North Carolina | 2025_1279_1314 | 0.664069204 | 0.964069204 |
| Texas A&M vs Yale | 2025_1401_1463 | 0.853761116 | 0.953761116 |
| UCLA vs Utah St | 2025_1417_1429 | 0.673425592 | 0.973425592 |
最初,特征帮助实现了更低的 Brier 分数。进一步调整 XGBoost 提高了分数,最后,手动调整纠正了早期回合中的一些错误预测,从而实现了整体更好的 Brier 分数。