邹燕飞 刘淑英 钱红琳
摘 要:本文将机器学习的思想应用到足球世界杯冠军预测领域,选用近年来的足球世界杯小组赛数据作为实验样本,对样本进行预处理后分为训练样本和测试样本,采用机器学习的监督学习算法,先对训练样本进行学习,然后利用学习到的分类器对测试样本进行分类。
关键词:机器学习;特征分类;logistic算法;足球世界杯
中图分类号:TP391.9 文献标识码:A 文章编号:1671-2064(2019)22-0024-02
0 引言
本文主要是构建2018年足球世界杯比赛预测的模型,预测关于整个世界杯比赛的小组赛结果,分别为模拟四分之一决赛、半决赛以及决赛。该模型的建立主要可分为四步,即数据采集、数据预处理、模型训练、模型测试。
本模型使用的样本数据截取自1930年第一届以来入围2018俄罗斯世界杯小组赛的球队信息,将近40000行。该模型采用百分之八十的训练集,百分之二十的测试机来进行模型训练。模型具体实现分为五个步骤,分别是获取数据、预处理、获取模型、模型训练及测试。下面来详细介绍每个步骤的实现。
1 模型实现
1.1 获取数据
我们通过pandas.read_csv函数实现我们所需数据的读入,读取方式见以下代码,其中'C:/Users/Administrator/Desktop/FIFA/datasets/World Cup 2018 Dataset.csv'表示文件所在路徑,world_cup表示参加世界杯球队的信息,results表示1872年到2018年足球比赛的结果通过pandas的read_csv()函数来加载数据集,返回DataFrame,它是二位标记数据结构,列可以是不同的数据类型,是最常用的pandas对象。
1.2 数据预处理
为了使预测的结果尽可能的准确,我们对加载的数据进行处理,通过主场和客场的胜球数相减得到目标差异和赢的队伍。所以我们在结果数据集中添加两个特征:平局和胜利、净胜球数(目标差异)。
1.3 特征提取
数据非常庞大,我们做一个数据子集,仅包含尼日利亚的比赛,先注目在一个球队上发现哪些特征对一个国家有效,然后推广到所有参与世界杯的所有国家。我们可以利用seaborn来画图,seaborn是对matplotlib更高级的封装。代码如下:
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(1)
fig.set_size_inches(10.7, 6.27)
sns.set(style='darkgrid')
sns.countplot(x='Nigeria_Results', data=winsdf)
1.4 获取模型及训练
经过特征提取,发现比赛发生在哪个场馆,并没有对结构有重大影响。所以缩小数据集,仅保留参赛队。
df_teams_home = results[results['home_team'].isin(worldcup_teams)]
df_teams_away = results[results['away_team'].isin(worldcup_teams)]
df_teams = pd.concat((df_teams_home, df_teams_ away))
df_teams.drop_duplicates()
year = []
for row in df_teams['date']:
year.append(int(row[:4]))
df_teams['match_year'] = year
df_teams_1930 = df_teams[df_teams.match_year >= 1930]
df_teams_1930 = df_teams.drop(['date', 'home_score','away_score','tournament','city', 'country','goal_difference','match_year',axis=1)
用isin函数判断这个队伍是否是参加世界杯的队伍。锁定参加世界杯的队伍,用concat重新整合我们的结果集表格,整合之后可能含有重复的队伍,我们需要用drop_ duplicates()函数去掉重复的队伍。用int(row[:4])把字符串前四个转化成int型,和1930比较,筛选出1930年之后的队伍。属性特征过多,会造成维数灾难问题,所以就需要去掉这些不相关特征,降低学习任务的难度。通过drop函数去掉1930年之前的比赛和不会影响到比赛结果的数据列,例如日期、主场进球数、客场进球数、锦标赛、城市、国家、目标差异和比赛年份。
为了简化模型的处理,我们修改一下预测标签。代码如下所示。
df_teams_1930 = df_teams_1930.reset_index(drop= True)
df_teams_1930.loc[df_teams_1930.winning_ team==df_teams_1930.home_team,'winning_t-eam']=2
df_teams_1930.loc[df_teams_1930.winning_team == 'Draw','winning_team']=1
df_teams_1930.loc[df_teams_1930.winning_team= =df_teams_1930.away_team,'winning_t-eam']=0
用drop_index(drop=True)来改变index下标,因为我们winning_team这列都是字符,我们要把字符转化成数字。如果主场队伍获胜,那么获胜队伍则显示“2”,如果平局则显示“1”,如果是客场队伍获胜则显示“0”。
通過设置哑变量,将主场队伍和客场队伍从分类变量转换成连续变量。这时就要运用get_dummies()函数,这个函数它可以实现一种独特的pandas编码方式,它会将拥有不同值的变量转换成一位有效值,以便将它们加载到Scikit-learn模型中。将使用逻辑回归,因为逻辑回归可以针对一组可以影响到结果的既定数据集尝试预测结果输赢。一次输入一场比赛到算法中。然后模型就会学习输入的每条数据对比赛结果产生了积极的效果还是消极的效果,以及影响的程度。经过充分的(好)数据的训练后,就可以得到能够预测未来结果的模型。第一步导入模型,调用逻辑回归LogisticRegression()函数。第二步Fit()训练,调用fit(x,y)的方法来训练模型,其中x为数据的属性,y为所属类型接下来,我们将数据按照80%的训练数据集和20%的测试数据集分成X集和Y集进行学习和交叉验证,第三步predict()预测。利用训练得到的模型对数据集进行预测,返回预测结果。
利用训练得到的模型对数据集进行预测,返回预测结果。具体实现代码如下。
final=pd.get_dummies(df_teams_1930,prefix=['home_team','way_team'],columns=['home_team', 'away_team'])
X = final.drop(['winning_team'], axis=1)
y = final["winning_team"]
y = y.astype('int')
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.80, random_state=42)
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
score = logreg.score(X_train, y_train)
score2 = logreg.score(X_test, y_test)
print("训练集结果: ", '%.3f'%(score))
print("测试集结果: ", '%.3f'%(score2))
我们将这些数据传递到算法中,我们的训练集结果是55.4%,测试集结果是53.8%,说明我们这个模型可行。
1.5 模型测试
这里我们获取2018的国际足球联盟排名数据fifa_ rankings.csv,和2018世界杯参赛队伍信息fixtures.csv。在此数据上应用我们的训练模型。
2 比赛结果及分析
根据所构建的模型,应用到小组赛检测中,检测每一场比赛的输赢概率。通过选择赢的队伍作为比赛胜利一方对小组赛出现队伍进行预测。预测小组出线16支队伍为:乌拉圭、葡萄牙、法国、克罗地亚、巴西、墨西哥、英格兰、哥伦比亚、西班牙、俄罗斯、阿根廷、秘鲁、德国、瑞士、波兰、比利时,其中13支队伍出线进入16强。预测的准确率是81.2%。这样看来16强预测效果还是很不错的。
3 结语
算法还有些待改进优化的地方。一是因为足球不确定因素太多,如果仅根据往年输赢来判断的话,结果可能有些差异,所以可以通过国际足球联盟比赛的数据来评估出关于每一个球员的水平,根据球员的水平作为参考。二是利用混淆矩阵,混淆矩阵是分析模型好坏的,它可以帮我们分析出模型预测中哪些有误。三是为了提高模型预测的准确度,可以将多个模型组合在一起。
参考文献
[1] 戴维.逻辑回归解决文本分类问题[J].通讯世界,2018,25(08):266-267.
[2] 吴晓杰.基于多情境数据和半监督代价敏感模型的场所个性化语义识别[D].杭州:浙江大学,2017.
[3] 黄辉.基于ReliefF的多标签特征选择算法研究[D].广州:广东工业大学,2018.
[4] 赵琰.第31届奥运会女子足球比赛攻守转换特征分析[D].新乡:河南师范大学,2018.
Soccer World Cup Champion Prediction Based on Machine Learning Algorithm Model research
ZOU Yan-fei,LIU Shu-ying,QIAN Hong-lin
(Computer College of Xianyang Normal University,Xianyang Shaanxi 712000)
Abstract:In this paper,the idea of machine learning is applied to the prediction field of football World Cup champions. The data of recent football World Cup group matches are selected as experimental samples. After preprocessing, the samples are divided into training samples and test samples. The supervised learning algorithm of machine learning is used to learn the training samples first,and then the test samples are classified by the learned classifier.
Key words:Machine learning; Feature classification; Logistic algorithm; Football World Cup