除了研究赛程编制,我对篮球的数据分析一直非常感兴趣。很多年前,霍林格的那个PER刚出来的时候,我还推算过公式。那个时候,我找了几本这个领域的书看,知道现在的篮球高阶数据分析,都基于一个基本的的概念:回合(possession)。
所谓回合,可以简单理解为每一次球队进攻。十多年前,我在场边看球的时候,看到有些球探记笔记,会详细的记录每一次进攻的结果。现在没有人这么干了,因为所有的数据都有详细的记录,NBA使用Second spectrum的人工智能分析系统,不仅可以知道每个回合的结果,还能记录更多的数据点。譬如,除了记录哪个球员把球投进了,还记录在什么位置投进的。
“回合”被现代数据分析发扬光大,要归功于一个人:丹-奥利弗(Dean Oliver)。丹写了一本书,详细介绍自己的分析理念,他提出的“四大因素”等理念,现在已经是NBA官网数据统计的一部分。随着江湖地位的提高,丹还在ESPN的数据分析部门做过总监,现在已经离开,去了一个棒球分析的公司。
我跟丹简单沟通过,他这个理念用在其他联赛的可能,得出的结论是,完全没有问题。不过在几年前,我的这个想法得到了质疑,主要原因是,有人觉得CBA的原始采集数据就是不准确的,基于这个做高阶数据,没什么意义。
这么多年过去,NBA的数据分析已经日新月异了。一些基本的理念,在CBA仍然不普及。过去几个夏天,我了解到CBA采用了新的数据采集系统,他们还是很专业的,数据也相对可靠。我就又萌生了做CBA高阶数据的想法。
最近几个月,我开始学习Python,做数据分析。我以前做过程序员,现在也偶尔写程序,但是毕竟不经常用,进展很慢,直到我碰到一个人。
平时如果我在克利夫兰,我会去中文学校打球,因为都是些油腻中年大叔,我还能跟得上。有一次一个小伙子跟我说,他看过我写的文章,他自己在克利夫兰医院做数据分析,业务时间也搞搞篮球的分析。我就跟他说了我的想法,他正好也在用Python,然后我们就商量好,我们开始做CBA的高阶数据分析,就先从回合做起。我哼哧哼哧要很长时间完成的代码,他几天就搞定了,执行力非常强。这个小伙,名字叫金渐,球打得不错,长得也帅,我让他发一张照片,他找了一个有伟岸背影的。
我前面提到,回合就是每次球队进攻。目前CBA还没有使用计算机图形识别来分析录像,要想知道回合数,一个可行的办法,就是用人工来计数,另外,也可以用数据来大概算出。每次球队进攻,无非有四种结果:投中得分、投丢、失误、罚球。所以,最简单算回合的公式,就是
(FGA – OR) + TO + (Y * FTA)
其中FGA是指出手,OR是指进攻篮板,TO是失误,FTA是罚球出手,Y是一个系数。
进攻球队投篮,如果球没进,然后被对方抢到篮板,统计中是防守篮板,这个回合结束,如果被自己抢到,那么这个回合还没有结束,所以要减去进攻篮板。Y这个系数,是指每次罚球不一定全是回合结束,譬如有的时候是加罚,有的时候是罚球两次,所以才会有一个系数。
奥利弗的计算公式,要比这个复杂的多,主要的原因是,篮板有时候会有团队篮板,如果要把这个因素考虑到,就复杂的很多。这也是我们计算球队回合数使用的公式:
0.5 * ((Tm FGA + 0.4 * Tm FTA - 1.07 * (Tm ORB / (Tm ORB + Opp DRB)) * (Tm FGA - Tm FG) + Tm TOV) + (Opp FGA + 0.4 * Opp FTA - 1.07 * (Opp ORB / (Opp ORB + Tm DRB)) * (Opp FGA - Opp FG) + Opp TOV)).
这个兼顾了进攻球队和防守球队的数据,基本的理念是,回合可以分成四个部分:投篮得分的回合,投篮不中的回合,罚球不中的回合,以及失误的回合。我不讲述具体的细节,感兴趣的可以私信。