多模型智能预测量化交易系统
·
多模型智能预测系统
项目简介
本系统是一个集成了15种机器学习与深度学习模型的足彩预测平台。通过多模型集成、自动特征筛选、超参数优化等技术,实现了对比赛结果的智能预测。系统采用模块化设计,支持单模型训练、投票集成、堆叠集成以及加权融合,并提供了完整的预测结果分析和保存功能。
支持的模型
[
"LightGBM", "XGBoost", "CatBoost", "LogisticRegression",
"Voting", "Voting_scaled", "Stacking", "Stacking_scaled",
"RandomForest", "SVM", "NaiveBayes", "GradientBoosting",
"PyTorch", "DecisionTree", "SequentialKeras"
]
其中:
- 原生集成:
Voting(软投票)、Stacking(元学习器为轻量 XGBoost) - 标准化版本:
_scaled后缀表示使用标准化特征的版本(适用于逻辑回归、SVM、朴素贝叶斯) - 深度学习:PyTorch 残差网络、Keras Sequential MLP
效果展示
系统在不同联赛上的测试集 F1 分数(宏平均)以及组合命中率(Top2 概率组合)。其中集成模型(Voting / Stacking)的表现通常优于单个基模型。
核心架构
系统分为两大模块:
1. 训练模块(ModelClassifier)
负责数据预处理、特征工程、超参数优化、模型训练与保存。
核心流程:
- 数据加载:从 DataFrame 读取原始比赛数据。
- 特征构建:通过
build_all_features生成 300+ 维特征(包括主客队历史统计、上下盘统计、欧赔均值等)。 - 标签编码:将“胜/平/负”映射为 0/1/2,并计算类别权重。
- 数据划分:80% 训练 + 20% 测试,再从训练集中分出 20% 作为验证集(用于早停和超参数优化)。
- 特征筛选(针对每个模型独立进行):
- 使用排列重要性(Permutation Importance)或模型内置
feature_importances_计算特征贡献。 - 保留重要性大于均值的特征,若为空则保留最重要的一个。
- 使用排列重要性(Permutation Importance)或模型内置
- 超参数优化:利用 Optuna 框架对每个模型的关键超参数进行贝叶斯搜索(如树模型的最大深度、学习率,线性模型的正则化强度等)。
- 模型训练:使用最佳参数在完整训练集上训练,并在验证集上早停(深度学习模型)。
- 保存:将模型权重、标准化器(scaler)、特征列表、标签编码器保存到磁盘,供预测使用。
关键优化点:
- 特征重要性驱动:每个模型使用不同的最优特征子集,避免“垃圾特征”干扰。
- 验证集独立:超参数优化和早停均基于验证集,防止过拟合。
- 类别权重:自动计算
class_weight='balanced'缓解结果分布不均衡问题。
2. 预测模块(ModelPredict)
加载已训练的模型,对新数据进行预测,并支持多种融合策略。
核心流程:
- 加载预处理器:读取每个模型的
scaler和feature_names,对齐输入特征(缺失特征填充 0)。 - 逐模型预测:根据模型类型选择原始特征或标准化特征,调用模型获得预测类别和概率。
- 融合策略(可选):
- 单联赛融合:对某一联赛类型(如“英超”),若提供了模型准确率字典,则按准确率加权平均概率。
- 跨联赛综合预测:对多个联赛类型的预测结果进行加权平均(权重可配置),得到最终“综合”预测。
- 软投票:当没有权重时,简单平均所有模型的概率。
- 结果处理:
- 计算命中率、组合命中率(Top2 概率组合是否包含真实结果)。
- 导出 Excel 文件,并自动添加条件格式(预测错误标红)。
- 合并多方法预测文件,生成综合对比表。
核心代码片段
特征重要性 + 筛选
def get_best_feature(self, model_type, model, X, y):
importance_df = self.get_feature_importance(model_type, model, X, y, feature_names)
threshold = importance_df['importance'].mean()
best_features = importance_df[importance_df['importance'] > threshold]['feature'].tolist()
if not best_features:
best_features = [importance_df.iloc[0]['feature']]
return best_features
超参数优化示例(逻辑回归)
def objective(trial):
C = trial.suggest_float('C', 1e-3, 1e3, log=True)
penalty = trial.suggest_categorical('penalty', ['l1', 'l2', 'elasticnet'])
l1_ratio = trial.suggest_float('l1_ratio', 0.0, 1.0) if penalty == 'elasticnet' else None
lr = LogisticRegression(C=C, penalty=penalty, l1_ratio=l1_ratio, ...)
score = cross_val_score(lr, X_train, y_train, cv=5).mean()
return score
study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=50)
集成预测(加权软投票)
if weights:
weighted_sum = np.zeros_like(all_probas[0])
for proba, w in zip(all_probas, weights):
weighted_sum += w * proba
final_proba = weighted_sum / sum(weights)
final_pred = np.argmax(final_proba, axis=1)
运行方式
- 准备数据:Excel 文件需包含
比赛序号、联赛、主队、客队、比分、结果等列。 - 训练:
classifier = ModelClassifier(model_dir='./models', model_types=model_list, ...) for model in model_list: classifier.run(model) - 预测:
predictor = ModelPredict(model_dir='./models', model_names=model_list, ...) results, output_path = predictor.predict(num=26051, predict_out_path='./output')
性能分析
- 单模型:通常 LightGBM / XGBoost 的 F1 在 0.48~0.52 之间,组合命中率(Top2)可达 70% 以上。
- 集成模型:Voting / Stacking 可将 F1 提升至 0.55~0.60,组合命中率提升至 75% 左右。
- 耗时:完整的 15 个模型训练(包括超参数优化)约 2~3 小时(取决于数据量)。预测阶段单场比赛耗时 < 1 秒。
技术亮点
- 自动特征筛选:为每个模型定制最优特征集,避免手动特征工程的繁琐。
- 高可扩展性:新增模型只需实现
train_XXX方法并支持predict_proba即可无缝接入集成框架。 - 鲁棒性设计:所有预测过程均包含缺失特征补零、异常值填充、标准化对齐等防御性代码。
- 生产就绪:模型持久化、多线程/多进程并行预测、结果自动合并和 Excel 美化输出。
未来改进方向
- 引入时序交叉验证(按比赛时间划分训练/测试集)。
- 加入泊松回归或贝叶斯模型作为基模型。
- 开发 Web 界面,实时滚动预测。
本系统完整代码托管于内部仓库,欢迎交流讨论。
预测、结果自动合并和 Excel 美化输出。
未来改进方向
- 引入时序交叉验证(按比赛时间划分训练/测试集)。
- 加入泊松回归或贝叶斯模型作为基模型。
- 开发 Web 界面,实时滚动预测。
本系统完整代码托管于内部仓库,欢迎交流讨论。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)