科比·布莱恩特投篮概率

根据科比过往投篮纪录,预测他的下一次投篮是否得分

Link: https://www.kaggle.com/c/kobe-bryant-shot-selection

题目描述

科比·布莱恩特于2016年4月12日在洛杉矶狂砍60分,这意味着他的NBA生涯完美地落下了帷幕。自17岁进入NBA,他的表现赢得了职业生涯的最高赞誉。

通过科比过去20年来投篮是否命中的数据,你能够预测他的每一次投篮结果吗?

数据集包含了过去二十年科比在球赛中投篮的情况,你的目标是预测此次科比的投篮是否能进。

小提示

  • 首先对数据进行一些可视化研究,分析出一些科比投篮的特征,比如投篮坐标,投篮距离及投篮区域等,将原始数据有效地结合起来
  • 选择特征,用一些较强的分类器(如random forest或svm等)进行训练,结合Kfold交叉验证,不断尝试特征组合。

先修技能

术语解释

  • Random Forest(随机森林):指的是利用多棵树对样本进行训练并预测的一种分类器。在机器学习领域,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定
  • KFold(K折交叉验证):在机器学习中,将数据集A分为训练集(training set)B和测试集(test set)C,在样本量不充足的情况下,为了充分利用数据集对算法效果进行测试,将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。

输入格式

数据分为训练数据和测试数据,分别保存在train.csv和test.csv两个文件中。

其中训练数据主要包括20557条纪录,其中投篮成功与否(shot_made_flag)是需要预测的信息,分别对应下列信息:

  1. 投篮动作(action_type)
  2. 结合投篮类型(combined_shot_type)
  3. 比赛事件id(game_event_id)
  4. 比赛场次id(game_id)
  5. 投篮经度(lat)
  6. 投篮位置x坐标(loc_x)
  7. 投篮位置y坐标(loc_y)
  8. 投篮纬度(lon)
  9. 分钟倒计时(minutes_remaining)
  10. 比赛小节(period)
  11. 是否是季后赛(playoffs)
  12. 赛季(season)
  13. 秒钟倒计时(seconds_remaining)
  14. 投篮距离(shot_distance)
  15. 投篮成功与否(shot_made_flag): 这就是需要预测的Label
  16. 投篮区类型(shot_type)
  17. 投篮区域(shot_zone_area)
  18. 基本投篮区(shot_zone_basic)
  19. 投篮区距离(shot_zone_range)
  20. 队伍id(team_id)
  21. 队伍名(team_name)
  22. 比赛日期(game_date)
  23. 比赛配对(matchup)
  24. 对手(opponent)
  25. 投篮事件id(shot_id)

测试数据主要包括5140条数据,其中不包含投篮成功与否(shot_made_flag)。

输出格式

shot_id,shot_made_flag
3,0.5
4,0.5
5,0.5
etc.

评价

对于提交的文件submission.csv,我们将使用Logarithmic Loss作为作为评价指标,公式如下:

$$ logloss = -\frac{1}{N}\sum{i=1}^{N}\sum{j=1}^{M}y{ij}logp{ij}

$$

其中N代表测试数据集中的纪录数量, $$y{ij}$$代表是否正确分类,$$logp{ij}$$代表预测出来的概率

数据

完整代码

测评配置环境

python

pip install numpy
pip install pandas
pip install scikit-learn

测评代码

import pandas as pd
from sklearn.metrics import log_loss

test = pd.read_csv("./correct_submission.csv").sort_values('shot_id')
pred = pd.read_csv("./predict_submission.csv").sort_values('shot_id')

loss = log_loss(test['shot_made_flag'], pred['shot_made_flag'])
# loss越小越好,最小为0

results matching ""

    No results matching ""