开始之前的第一步是整体分析。 主要目标是预测 NBA 比赛的结果。 你必须首先确定哪些因素会影响NBA比赛的结果。 首先想到的一些事情:
后三点比较难通过现有的数据统计来直接反映,或者说比较难量化,所以这里我们主要关注前三点。 基于前三点,初步确定以下八个特征:
数据
第二步是爬取所需的数据。 - 是一个专业的篮球数据网站,涵盖了各种篮球统计数据、详细的比赛数据、基础/高级球员数据、基础/高级球队数据、每场比赛每个球员的投篮位置、投篮距离等。直接爬取静态HTML页面即可获取网站上的数据,无需太多复杂的反爬虫机制。 您可以使用库来解析 HTML 页面以获取所需的数据。 比赛日程及成绩如下:
首先爬取2007-08赛季至16-17赛季共10个赛季的NBA比赛统计数据,包括日期、主客场球队、得分、比赛类型(常规赛还是季后赛)、比赛场数统计如下如下
每支球队每个赛季打82场常规赛,总共30支球队,总共1,230场比赛。 11-12赛季,由于联盟停摆,各队只打了66场常规赛nba预测推荐和比赛分析,总共990场比赛。 2012-13赛季nba预测推荐和比赛分析,由于2013年4月美国波士顿发生爆炸事件,凯尔特人队与步行者队的一场主场比赛被取消,导致常规赛比其他正常赛季少了一场比赛。
本文仅预测常规赛比赛结果。 10个赛季总共有12,059场常规赛。 上述八个特征是根据这 12059 个游戏构建的。 我们首先使用一个赛季的数据来构建特征。 由于有些功能需要前10场比赛的数据,所以对于赛季初的前10场比赛,我们使用上赛季末的比赛来完成。 每场比赛对应一个8维特征,标签表示主队是否获胜。 下图展示了三款游戏的特征和标签格式(未归一化):
注:10个赛季中,已有4支球队变更队名,队名变更需要办理。
有了处理后的数据集,接下来的流程就相对标准化了。 首先,将12059条数据随机分为训练集和测试集(训练集80%,测试集20%)。 机器学习库使用Learn,在训练集上尝试SVM(/)、神经网络等多种模型作为分类模型训练。 在调整模型超参数方面,寻找更好的超参数配置。
各组模型在各季节训练集和测试集上的最佳准确率如下。
从上表可以看出,LR模型是所有模型中性能最好的,达到了69.11%的预测精度。 几个模型之间的性能差异非常小,这意味着69%线基本上是当前功能的性能上限。 如果想提高预测准确率,就必须在特征上下功夫(目前使用的特征只是有限地考虑球队)近期/赛季胜率、净胜率等。其实影响因素远不止这些游戏的结果)。
这个结果并不理想。 我们的目标是能够利用这种模式在不赔钱的情况下购买足球。 考虑引入其他功能来提高模型性能。 我在国外博彩网站上试了一下每场比赛两队的赛前赔率作为一个特色。 理论上来说,这应该是一个比较“强大”的功能,因为博彩网站往往有很多普通人不知道的场内外信息。 信息,这个赔率包含更多与比赛相关的信息,这应该会改善模型的预测。
赔率数据来自这里,是Excel格式的文件。 您只需提取所需的信息即可。 我们先简单看一下这个赔率的预测准确度(赔率高的一方获胜,赔率低的一方输)。 我们可以看到,仅使用这个简单的判断就可以达到64%的准确率。 可见这个功能还是比较有用的。 使用具有新特征的数据重新训练模型。 结果如下。
此处图片
可以看到各个模型的预测精度都有所提高,最好的LR可以达到70%左右的精度。
去做
去做
一些想法
简单回顾一下,整个过程大概有80%的时间花在了处理数据上(爬取、清理、提取等)nba预测推荐和比赛分析,但是因为数据本身还蛮有趣的,所以我并不觉得很烦人,而且——没有太多反感-爬行器机制(谢天谢地)。
那么它再次验证了机器学习中的一个真理:数据(特征)决定了性能的上限,而不同的算法只是以不同的方式逼近这个上限。 对数据的深入理解在实际应用中非常重要。 只有了解业务领域的背景、数据与业务的联系、数据之间的关系,才能构造出更好的特征。 也算是一个小小的收获。 (当然Deep Nets可以在一定程度上减少特征工程的工作量,但前提是数据量一定要充足,在本篇讨论的问题场景中,数据量是不够的)