2018年的第一篇文章,拖到现在才发布!

更新时间:2024-02-24 12:10:57 作者:金义直播

在回顾了MIT的《The Edge》课程后,我决定对课程进行梳理,输出一些关于数据分析的专题文章。 本文与线性回归相关。 我选择了一个比较容易理解、文化差异不大的数据分析案例与大家分享:利用NBA球队数据预测未来赛季的得分。 当然nba得分命中发展趋势,感兴趣的朋友也可以在小世界公众号(ID:)后台回复“NBA”,获取数据下载链接,一起参与分析。

注:由于课程是用R语言授课,所以最好有一定的R语言基础知识和基础统计知识才能参与分析。

我们首先加载训练数据集,看看数据的基本特征。

> NBA<-read.csv("NBA_train.csv")
> str(NBA)

nba得分王命中率_nba命中率怎么算_nba得分命中发展趋势

该数据包含1980年至2011年所有球队的数据。可以看出,有835个观察值和20个变量。 变量为赛季结束时间()、球队名称(Team)、当年是否进入季后赛()、常规赛获胜场数(W)、常规赛积分(PTS, )、对手常规赛得分 ()、投篮命中数 (FG, Field )、投篮命中数 (FGA, Field )、两分投篮命中数 (X2P)(R 不适合以数字开头如果是数字开头的话,R会带上)、罚球(FT,罚球)、进攻篮板(ORB、)、后场篮板(DRB、)、助攻(AST)、抢断(STL)、盖帽(BLK) )、失误数 (TOV)。

每个篮球队的目标都是尽可能地进入季后赛。 那么,需要赢多少场比赛才能进入季后赛呢?

> table(NBA$Playoffs,NBA$W)

nba得分王命中率_nba命中率怎么算_nba得分命中发展趋势

从命令返回的结果中我们可以看到,第一列中,1表示球队进入季后赛,0表示球队没有进入季后赛; 第一行和第四行表示进入季后赛的次数。 可见,如果一支球队胜场数超过34场,就会逐渐有进入季后赛的趋势; 如果一支球队胜场数超过42场,那么进入季后赛的概率就很大; 如果一支球队胜场数超过42场,那么进入季后赛的机会就很大; 如果比赛场数超过48场,肯定会进入季后赛。 其实用Team、W这三个变量画出下图,我们就可以大致看出诉求趋势。

nba得分王命中率_nba命中率怎么算_nba得分命中发展趋势

在篮球比赛中,获胜的标准是得分比对手多。 根据现有的数据nba得分命中发展趋势,是否可以用分数差(己方球队的分数减去对方球队的分数)来预测获胜的场数? 你可以尝试一下。

> NBA$PTSdiff<-NBA$PTS-NBA$oppPTS  #增加一列变量
> plot(NBA$PTSdiff,NBA$W)  #看分数差异与赢球场数的关系

nba得分命中发展趋势_nba命中率怎么算_nba得分王命中率

可以发现,分差与获胜场数呈正相关,似乎可以用分差来预测获胜场数。 然后尝试建立回归模型。

> WinsReg<-lm(W~PTSdiff,data = NBA)
> summary(WinsReg)

nba得分王命中率_nba得分命中发展趋势_nba命中率怎么算

可以看出,分数差异变量很显着,R^2也很高。 这也验证了刚才的假设——分差和获胜场数之间存在良好的线性关系。 此时可得回归方程:W=41+0.0326*

我们之前了解到,如果一支球队胜场数超过42场(W),那么进入季后赛的机会就很大。 这句话对于分数差()意味着什么?

即41+0.0326*>42,我们可以得到>30.67,即要想赢下至少42场比赛,与对手的分差必须至少为31分。

下一步是建立分数阶回归方程模型。

> PointsReg<-lm(PTS~X2PA+X3PA+FTA+ORB+DRB+AST+STL+BLK+TOV,data = NBA)
> summary(PointsReg)

nba得分命中发展趋势_nba命中率怎么算_nba得分王命中率

> SSE<-sum(PointsReg$residuals^2)
> SSE
[1] 28394314

SSE很大而且很难解释。 让我们看一下 RMSE 和平均值。

> RMSE<-sqrt(SSE/nrow(NBA))
> RMSE
[1] 184.4049
> mean(NBA$PTS)
[1] 8370.24

从这一点来看,常规赛的平均得分是8370.2,误差是184.4分,看起来还可以,但是模型还可以优化,去掉一些不显着的自变量。 根据上图,我们可以去掉TOV变量,因为它的p值最大,显着的可能性也比较小。 (注:根据最大p值去除变量只是数据逻辑,实际情况不一定遵循这个规则,因为还必须考虑业务逻辑)

> PointsReg2<-lm(PTS~X2PA+X3PA+FTA+ORB+DRB+AST+STL+BLK,data = NBA)
> summary(PointsReg2)

nba得分命中发展趋势_nba得分王命中率_nba命中率怎么算

结果可以看出R^2几乎一致,因此去掉TOV变量似乎是合理的。 尝试删除下一个变量并根据p值选择DRB。

> PointsReg3<-lm(PTS~X2PA+X3PA+FTA+ORB+AST+STL+BLK,data = NBA)
> summary(PointsReg3)

nba得分王命中率_nba命中率怎么算_nba得分命中发展趋势

可以看到R^2依然没有变化,去掉DRB似乎也是合理的。 再次尝试删除 BLK。

> PointsReg4<-lm(PTS~X2PA+X3PA+FTA+ORB+AST+STL,data = NBA)
> summary(PointsReg4)

nba得分王命中率_nba命中率怎么算_nba得分命中发展趋势

现在模型中的所有变量都显着,并且模型相对简单。 R^2 仍然是 0.899。 这时候看一下SSE和RMSE,确保去掉自变量后它们不会浮动太大。

> SSE_4<-sum(PointsReg4$residuals^2)
> RMSE_4<-sqrt(SSE_4/nrow(NBA))
> SSE_4
[1] 28421465
> RMSE_4
[1] 184.493

虽然去掉自变量增加了SSE,但变化很小,RMSE基本保持不变,因此模型变得相对简单且易于解释。

事实上,最终回归模型的选择总是涉及到预测精度(模型尽可能拟合数据)和模型简单性(简单且可复制的模型)的协调。 选择“最佳”回归模型没有唯一的标准。 需要结合数据逻辑和业务逻辑来决定,因此课程中不详细解释。 在这里,我提供另外两种选择模型的方法。

方法1:使用基本安装中的anova()函数来比较两个嵌套模型的拟合优度。 所谓嵌套模型,是指它的某些项完全包含在另一个模型中。 在多元回归模型中nba得分命中发展趋势,我们发现DRB、BLK和TOV的回归系数并不显着。 这时,我们可以测试没有这三个变量的模型()是否和包含这三个变量的模型()一样好。

> anova(PointsReg,PointsReg4)

nba命中率怎么算_nba得分命中发展趋势_nba得分王命中率

这里,模型 2 嵌套在模型 1 中。 anova() 函数还测试是否应将 DRB、BLK 和 TOV 添加到线性模型中。 由于检验不显着(p=0.852),因此我们可以得出结论,无需将这三个变量添加到线性模型中,可以将它们从模型中删除。

方法二:AIC( )也可以用来比较模型,它考虑了模型的统计拟合情况和用于拟合的参数数量。 AIC值较小的模型是优选的,这表明模型使用较少的参数来获得足够的拟合程度。

> AIC(PointsReg,PointsReg4)

这里的AIC值表明没有DRB、BLK和TOV的模型更好。

以上两种方法可以简单比较两个模型。 如果模型多了,那就更复杂了。 需要采用逐步回归法和全子集回归法。 本文不会深入探讨。

借助得分回归模型,我们可以尝试预测2012-2013赛季的得分情况。 这时候就需要另一个数据集——测试数据集。

> NBA_test<-read.csv("NBA_test.csv")
> str(NBA_test)

nba命中率怎么算_nba得分王命中率_nba得分命中发展趋势

> PointsPredictions<-predict(PointsReg4,newdata = NBA_test)
> PointsPredictions

看起来预测的分数与实际数据集的分数相差不大。 使用R^2来实际计算它。 对于预测结果,我们可以计算out-of-R^2。 该指标可以衡量模型对测试数据集的预测效果。 之前,R^2=0.899 是测试模型预测训练数据集的效果。

> SSE<-sum((NBA_test$PTS-PointsPredictions)^2)
> SST<-sum((NBA_test$PTS-mean(NBA$PTS))^2)
> R2<-1-SSE/SST
> R2
[1] 0.8127142
> RMSE<-sqrt(SSE/nrow(NBA_test))
> RMSE
[1] 196.3723

此时out-of-R^2为0.812,RMSE比之前稍高,但也可以接受。

以上内容结合了MIT的《边缘》课程和I.的《R语言实践》。 整个过程下来,还有一些问题需要认真思考,主要集中在以下三点。

1、从最终的预测模型来看,进攻篮板(ORB)和抢断(STL)的系数都是负数,这意味着如果球队想要最大化预测得分,似乎就需要减少进攻篮板和抢断。 乍一看,这在球场上有点不正统。 但真正了解篮球的人应该知道,当一支球队拿到较多的进攻篮板时,很可能球队的投篮命中率并不高。 如果投篮命中率高,前场篮板就会很少,所以前场篮板系数为负值。 至于steal变量,课程中没有明确解释。 这个变量的系数是负数,似乎暗示这个变量是指对方对自己球队的抢断,这是合理的; 如果是防守抢断,通常会导致进攻得分(这在NBA中很常见),所以此时变量的系数应该为正。

2. 为什么不选择两分球命中数(X2P)、三分球命中数(X3P)、罚球命中数(FT)来预测? 因为这些变量都是实际得分,而PTS=2*X2P+3*X3P+FT,如果用这些指标进行预测,模型得到的R^2将为1,建模意义不大。 为了更好地探索常规赛得分(PTS),我们需要使用两分球、三分球和罚球数(X2PA/X3PA/FTA)进行预测。

3. 为什么不选择移动次数(FGA)作为自变量来预测? 因为FGA=X2PA+X3PA。

从以上三点思考我们可以看出,如果对篮球规则没有清晰的认识,就无法做出深入的分析和判断。 这里并不是给大家介绍篮球规则,而是想得出一个结论:在日常工作中做数据分析的时候,一定要非常清楚业务逻辑,这样才能做出合理的分析和解释。 你怎么认为?

本文标签: nba得分命中发展趋势
金义直播可以在线看直播比赛,金义直播为您提供看球吧nba在线高清免费直播,金义直播JRS直播,jrkan,jrs低调看直播nba直播,jrs免费直播cba,上金义直播看精彩比赛。
金义直播 网站地图 版权所有
联系地址:山东省济南市汉南区一多路131号