目录
1. 背景
2. 输入特征选择
3. 数据集-特征获取
4. 数据预处理
5. 模型训练与选择
6. 预测
7. 2018后新的数据
8. 个人总结
在这四年一次的足球世界杯即将来临之际,公司将要举办一个模型预测与人工预测的比赛活动,虽然本人不是足球迷也不是伪球迷,但是绷着对机器学习的热爱,决定凭借自己匮乏的足球知识建个模型参加这个比赛。无论成败与否,享受其中即可。
特征的选择通俗的讲就是选择什么特征最能影响足球比赛。能我让这个不懂足球的人想到的是下面这些特征:
1. 明星队员:比如梅西,C罗,姆巴佩,内马尔等等。但是这些球员的实力怎么衡量呢?还有就是不断有新的球星出现,是不是这个特征有点多?再有这个数据是不是好得到呢?
2. 主客场:听说篮球这个特征很重要,但是世界杯就只有主办方一家是主场,其它是客场。
3. 裁判:有些比赛裁判可能偏向一个国家队,这就操成该罚球的不罚,但是裁判这个特征随机性太强,每届都在变,而且你也不知道他偏向哪个队。
4. 教练:感觉也是特征,而且比较稳定。但是怎么衡量呢
5.球队状态:影响是有,但感觉无从下手的样子。
6. 观众:历史数据应该还有办法,但是新比赛拿不到。
最后就是球队了,如果球队的整体实力比较高,哪怕是没有明星队员,结果也不差,而且球队的整体实力其实暗含教练,球员和明星球员的这几个特征的。综合这些特征个方面的因素和提取的难易程度,最后选择了球队名字作为输入特征。
由于比赛来的太突然,就几天就要开始比赛当时,所以带着侥幸的心理在网上搜了一下是不是有相关的数据集,果然有很多。最终选择Kaggle里下载已经整理好的数据而且还是免费的。
下载数据集
大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
下载后数据如下:
FIFA World Cup | Kaggle
百度网盘也可以下载
链接: https://pan.baidu.com/s/1ky-73f9YTe2o1YI1TyMt9A 提取码: 1pt6
虽然Kaggle这里提供的数据有很多特征,但是我们只需要三个特征,模型的输入是两个队的名字,模型的输出是结果(2:Home Team队胜,1:平,0:Away Team 队胜)。
数据预处理大致的步骤是
从Excel里加载数据;根据每队的得分生成新队列Winning_Team;去掉和本次世界杯无关的国家队;去掉无关的特征;winning_team数值化;保持新的Excel;
代码如下:
数据预处理后会在datasets文件下生成raw_train_data.csv,里面的数据如下:
保持数据集大致步骤如下:
加载数据集;利用DictVectorizer对两个队伍的名字进行数字化;保持数据集方便后面训练模型用。
代码如下:
以上代码会在datasets文件下生成train_data.npz文件
数据预处理的完整代码如下:
reprocess_dataset() 方法是数据进行预处理。
save_dataset() 方法是对预处理过的数据,进行向量化。
由于这个数据集里没有2018年后的数据,所以我自己又手动收集了一下2018后新的数据。可以把这个新的数据集和上面预处理后数据集合在一起。
2018年和2022年的数据可以下面百度网盘下载
链接: https://pan.baidu.com/s/1fe_z6kRXB8T69wx1HBxO8g 提取码: o55d
用不同的传统机器学习方法进行训练,训练后的模型比较
ModelTraining AccuracyTest AccuracyLogistic Regression(逻辑回归)67.40%61.60%SVM(支持向量机)67.30%62.70%Naive Bayes(朴素贝叶斯)65.50%63.80%Random Forest(随机森林)90.80%65.50%XGB(X (Extreme) GBoosted)75.30%62.00%
可以看到随机森林模型在测试集上准确率最高,所以我们可以用它来做预测。
下面是完整训练代码:
执行上面代码会生成下面文件:
大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!
预测逻辑大致如下:
输入两个队伍名字对队伍名字进行验证加载模型利用模型进行预测并输出每个的概率
执行下面预测代码,结果是Ecuador胜于Qatar, 英国队胜于伊朗队大佬们都在玩{精选官网网址: www.vip333.Co }值得信任的品牌平台!。
预测的完整代码如下:
2018年和2022年的数据可以下面百度网盘下载
链接: https://pan.baidu.com/s/1fe_z6kRXB8T69wx1HBxO8g 提取码: o55d
特征少的可怜,如果可以加一些球员的信息和状态的特征会更好,数据也相对太少,如果可以把欧洲杯,亚洲杯,非洲杯和美洲杯的每届数据加入进来就好了。数据有点旧(1930年后所有数据),这也是没办法,因为没有其它数据了。
如果预测的是比分,是不是也可以用分类做呢?比如最多可以踢入4个球每个队,当然像西班牙队可以踢进去7个球太罕见了,我们可以忽略不计,哈哈。那就是25个类别。效果会不会好呢?有待检验。