@CrazyHenry
2018-03-26T21:02:05.000000Z
字数 3713
阅读 2351
bbbb北邮科研竞赛作业
- Author:李英民 | Henry
- E-mail: li
_
yingmin@
outlookdot
com- Home: https://liyingmin.wixsite.com/henry
快速了解我: About Me
转载请保留上述引用内容,谢谢配合!
项目Github地址:https://github.com/Li-Yingmin/nba_prediction
在百度搜索NBA预测
关键字,出现如下搜索结果:
其中,80%
以上的搜索结果都是关于预测彩票的。而且,关于NBA预测彩票的市场已经非常成熟,并且有非常多的专家参与到彩票预测中来:
因此,NBA预测彩票市场的特点如下:
通过如上的市场分析,我们可以从以下几个需求入手:
考虑到专家和用户之间的利益关系,我们可以设计以下应用场景:
开发环境
运行环境
所有能安装virtualenv
的操作系统,包括但是不限于:
以上三种平台都经过测试运行成功。
目前只能手动修改训练集和预测集文件,没有提供一键式接口。
修改预测数据:
修改以下目录的17-18Schedule.csv
文件即可:
目录/nba_prediction/nba_pre_demo/proj/data/17-18Schedule.csv
如不需要修改,可以保留原文件,原文件中存储的是12月份和1月份的比赛日程。
使用python命令执行以下可执行文件:
$ python 目录/nba_prediction/nba_pre_demo/proj/prediction.py
执行结束之后会在prediction.py
所在目录生成17-18Result.csv
采用Basketball Reference.com中的统计数据。在这个网站中,你可以看到不同球员、队伍、赛季和联盟比赛的基本统计数据,如得分,犯规次数等情况,胜负次数等情况。
数据名 | 含义 |
---|---|
Rk -- Rank | 排名 |
G -- Games | 参与的比赛场数(都为82场) |
MP -- Minutes Played | 平均每场比赛进行的时间 |
FG--Field Goals | 投球命中次数 |
FGA--Field Goal Attempts | 投射次数 |
FG%--Field Goal Percentage | 投球命中次数 |
3P--3-Point Field Goals | 三分球命中次数 |
3PA--3-Point Field Goal Attempts | 三分球投射次数 |
3P%--3-Point Field Goal Percentage | 三分球命中率 |
2P--2-Point Field Goals | 二分球命中次数 |
2PA--2-point Field Goal Attempts | 二分球投射次数 |
2P%--2-Point Field Goal Percentage | 二分球命中率 |
FT--Free Throws | 罚球命中次数 |
FTA--Free Throw Attempts | 罚球投射次数 |
FT%--Free Throw Percentage | 罚球命中率 |
ORB--Offensive Rebounds | 进攻篮板球 |
DRB--Defensive Rebounds | 防守篮板球 |
TRB--Total Rebounds | 篮板球总数 |
AST--Assists | 助攻 |
STL--Steals | 抢断 |
BLK -- Blocks | 封盖 |
TOV -- Turnovers | 失误 |
PF -- Personal Fouls | 个犯 |
PTS -- Points | 得分 |
Opponent Per Game Stats:所遇到的对手平均每场比赛的统计信息,所包含的统计数据与Team Per Game Stats中的一致,只是代表的该球队对应的对手的
Miscellaneous Stats:综合统计数据
数据项 | 数据含义 |
---|---|
Rk (Rank) | 排名 |
Age | 队员的平均年龄 |
W (Wins) | 胜利次数 |
L (Losses) | 失败次数 |
PW (Pythagorean wins) | 基于毕达哥拉斯理论计算的赢的概率 |
PL (Pythagorean losses) | 基于毕达哥拉斯理论计算的输的概率 |
MOV (Margin of Victory) | 赢球次数的平均间隔 |
SOS (Strength of Schedule) | 用以评判对手选择与其球队或是其他球队的难易程度对比,0为平均线,可以为正负数 |
SRS (Simple Rating System) | 3 |
ORtg (Offensive Rating) | 每100个比赛回合中的进攻比例 |
DRtg (Defensive Rating) | 每100个比赛回合中的防守比例 |
Pace (Pace Factor) | 每48分钟内大概会进行多少个回合 |
FTr (Free Throw Attempt Rate) | 罚球次数所占投射次数的比例 |
3PAr (3-Point Attempt Rate) | 三分球投射占投射次数的比例 |
TS% (True Shooting Percentage) | 二分球、三分球和罚球的总共命中率 |
eFG% (Effective Field Goal Percentage) | 有效的投射百分比(含二分球、三分球) |
TOV% (Turnover Percentage) | 每100场比赛中失误的比例 |
ORB% (Offensive Rebound Percentage) | 球队中平均每个人的进攻篮板的比例 |
FT/FGA | 罚球所占投射的比例 |
eFG% (Opponent Effective Field Goal Percentage) | 对手投射命中比例 |
TOV% (Opponent Turnover Percentage) | 对手的失误比例 |
DRB% (Defensive Rebound Percentage) | 球队平均每个球员的防守篮板比例 |
FT/FGA (Opponent Free Throws Per Field Goal Attempt) | 对手的罚球次数占投射次数的比例 |
数据项 | 数据含义 |
---|---|
Date | 比赛日期 |
Start (ET) | 比赛开始时间 |
Visitor/Neutral | 客场作战队伍 |
PTS | 客场队伍最后得分 |
Home/Neutral | 主场队伍 |
PTS | 主场队伍最后得分 |
Notes | 备注,表明是否为加时赛等 |
编程语言选择Python
,因为python
的很多库中实现了机器学习和统计学习的算法,不用重复造轮子。比如本软件使用的numpy
和sklearn
库。
ELO等级分制度是由匈牙利裔美国物理学家Elo创建的一个衡量各类对弈活动选手水平的评分方法,是当今对弈水平评估的公认的权威方法。被广泛应用于国际象棋、围棋、足球等运动,以及很多网游与电子竞技产业。游戏界比较著名的应用有: WOW(魔兽世界)、DOTA、LOL。
ELO计算方法:
Ra:A玩家当前的积分
Rb:B玩家当前的积分
Sa:实际胜负值,胜=1,平=0.5,负=0
Ea:预期A选手的胜负值,Ea=1/(1+10^[(Rb-Ra)/400])
Eb:预期B选手的胜负值,Eb=1/(1+10^[(Ra-Rb)/400])
因为E值也为预估,则Ea+ Eb=1
R’a=Ra+K(Sa-Ea)
R’a:A玩家进行了一场比赛之后的积分
其中 K 值是一个常量系数,按照国际象棋里的标准, K 值对于大师选手为16,对于一般选手是32。K值的大小直接关系到一局游戏结束,根据胜负关系计算出的积分变化值。
关于逻辑回归可以参考这个教程:
逻辑回归--简明教程
网络上关于预测模型的建立有非常多的案例,也不乏NBA比赛的预测模型。但是,软件工程的关键不在于实现的结果,而更重要的是实现的过程,并且,注重用户对软件的使用。
因此,我在设计该软件的过程中,坚持用最先进的代码管理机制与有效的可移植性:
这样,不论是开发者还是用户,对软件开发过程中的版本控制和运行平台都不用过多的担心!