標籤:

ESPN的明星數據RPM到底是怎麼算的?

RPM作為ESPN最近幾年的明星數據,基本上可能永遠也不會公布具體演算法。但是,這並不意味著我們每次談論到RPM時都只能兩手一攤,說一句「演算法沒公布」,很多對數據一知半解的球迷可能還以為RPM是和PER一樣通過簡單的乘上幾個係數再加加減減就能獲得的。實際上RPM是Jeremias Engelmann根據他的RAPM(正則化修正正負值)發展而來的,兩者的區別在於,RPM在其中加入了Boxscore,也就是我們平常常說的基礎數據,而RAPM則純粹基於球員在場上產生的比賽效果,也就是比賽凈勝分的結果,它的演算法思路是完全公開的。我們會在接下來的內容里介紹一下正負值類數據的特色,它們的核心思路,以及過去兩周利用我們已知信息所做的實踐性探索的成果

什麼是正負值數據?

最近幾年ESPN在評價一個球員時開始由早年的「球員在場上做了什麼」轉向「球員在場上產生了什麼樣的效果」。這是一個重要的思路轉變,在過去,我們談論數據的缺陷時,時常會說,球員在場上的作用不是幾個助攻幾個籃板就能體現的,有很多「數據不能體現」的作用。而正負值類數據出現的目的就是為了解決這個「無法體現」的問題。一次成功的延阻,一次正確的站位,一次為隊友拉開得分空間的跑動,一次高質量的掩護,這些東西從我們傳統的計數型數據確實無法體現,因為計數型數據總是需要完整而明確的定義一個籃球動作,模糊的概念使得技術統計無從下手,這也使得「數據無用論者」始終對傳統的計數型數據抱有懷疑甚至反對的態度。而正負值類數據則是一種描述型數據,它不會告訴你這名球員做了什麼,這名球員能力如何,只會告訴你當這名球員上場時,效果如何。這將使得那些在球場無形的作用被數據表達出來——只要你的行為對比賽結果產生了實質性影響。

正負值數據是如何計算的?

RAPM又是如何計算的呢?為了方便理解,我們先舉一個簡單的例子,我們假設有兩支5人球隊打3對3比賽。比賽的流程可能是這樣的。

  • A1, A2, A3 vs. B1, B2, B3 15個回合 11-5
  • A1, A2, A3 vs. B1, B2, B4 8個回合 2-4 比分 13 – 9
  • A1, A4, A5 vs. B1, B4, B5 10個回合 7-1 比分 20 – 10
  • A1, A4, A5 vs. B3, B4, B5 17個回合 6-6 比分 26 – 16
  • A2, A3, A4 vs. B2, B3, B4 10個回合 4-7 比分 30 – 23
  • A2, A3, A5 vs. B2, B3, B5 16個回合 5-7 比分 35 – 30
  • A1, A2, A3 vs. B2, B4, B5 8個回合 4-5 比分 39 – 35
  • A1, A2, A3 vs. B1, B4, B5 10個回合 4-7 比分 43 – 42
  • A3, A4, A5 vs. B1, B4, B5 8個回合 4-0 比分 47 – 42
  • A1, A3, A4 vs. B1, B2, B3 10個回合 5-2 比分 52 – 44
  • A1, A4, A5 vs. B2, B3, B4 14個回合 2-9 比分 54 – 53

像上面這樣的數據,我們已經可以從NBA官網的Play-by-Play數據里獲得每場比賽的完整信息。如果我們看最初是的正負值數據,就可以算出來:

  • A1 2
  • A2 -5
  • A3 2
  • A4 3
  • A5 1
  • B1 -14
  • B2 6
  • B3 3
  • B4 6
  • B5 -4

這個結果就能說明B4是這個例子里最好的球員么?經常關注正負值數據的球迷肯定知道,誰沒個躺贏的時候呢,有可能B4什麼事都沒幹,就只是運氣好被carry了一下而已。我們需要去進一步去看看每個球員在其中到底貢獻了多少。我們可以把每組對陣的結果列成下面這樣一個式子。

我們再把每組對陣都換算成百回合數據,可以把這組式子改寫成下面這樣的一個方程組。球隊A的都為正數,球隊B的則為負數,在一組對陣中沒上場球員就從式子中划去。

這樣只要我們解出這個方程就能知道每個球員的真實貢獻了。但是.....這個方程毫無疑問是沒有一個唯一解的,我們只能去求一個近似的值。最常見的辦法就是最小二乘法,但根據最小二乘法求得的結果,我們會發現部分球員的pm值超出了正常的範圍。顯然,數據中的雜訊會最終結果非常不可靠。RAPM的思路便是尋找一種能獲得對最後結果進行一定約束的解法, Engelmann在他的RAPM模型里選擇了嶺回歸來求解,這是一種正則化方法,以增加一些最小二乘誤差為代價,獲取更接近實際的結果,也是這個演算法如此命名的原因。

講到這裡,大家應該能明白了,所謂的正負值類數據,RPM也好,RAPM也好,他們的核心思路就是把每一組對陣中的陣容和結果寫成一個方程,而每場比賽都會產生大量相同形式的方程,把這些由成千上萬組對陣結果組成的方程組求出一個誤差盡量小的解,就是每個球員在比賽中的貢獻。而這個結果,已經考慮隊友,替補,對手的水平,只要樣本足夠大,它的結果就能真實的反映球員的場上作用,體現出那些「數據不能體現」的作用。

這種PM模型存在缺陷么?

從它的理念上來講,這種數據突破了PER這種數據的天花板,反映球員在場上的真實作用,再也不用去糾結數據統計是否遺漏了場上難以準確描述的細節,只是單純的去談結果。我們經常通過數據來談球員能力的時候,其實經常默認一個條件——「表現約等於能力」,實際上這樣的假設並不總是可靠,一個球員在不同環境下,並不是總能把能力兌現成表現,而PM模型的核心理念也蘊含著這樣的觀點——我描述的並不是球員的能力,而是描述他在目前環境下所展現的球場作用。這樣的理念也催生了很多喜歡數據的球迷對正負值模型的信任:如果只能用一個數據來評價球員,就應該用正負值類數據。

然而,正負值類數據所存在的問題也正是它非凡的核心理念造成的。既然一個球員在不同環境下有著不同的表現,那麼又怎麼能把一個球員在這些方程組裡的任意一個位置時的值默認為恆定不變的呢?RAPM中有一個非常強的假設,即認為球員在場的每一分鐘的表現都是恆定不變的。這樣的假設如果擁有足夠大的樣本,是有可能在計算中彌補的,因為一個球員即便表現不穩定,樣本足夠大時也會處在一個大體可靠的區間里,但RAPM的演算法恰恰無法得到足夠大的樣本。因為一支球隊內,一個五人組在一起打球,確實會有足夠多的回合數來用於計算,但RAPM的演算法需要考慮對手,事實上也應該考慮對手,許多球隊相互之間交鋒一年不過兩場,一場比賽中輪換紛繁複雜,使得很多對陣的回合數少之又少。在我們對上賽季比賽的數據進行計算的時候發現,如果去掉10回合以下的對陣,會讓樣本數直接減少一半。

可能正是這樣的缺陷,讓ESPN在做RPM的時候在RAPM原有的基礎上加入了Boxscore的修正,放大那些球場上做了更多事情的球員的作用。

我們做了哪些探索?

圈三在過去的兩周里花費了大量時間精力,我們的目標自然不僅止於了解RAPM的演算法並對其進行復現,重要的是建立一個我們認為可靠的獨有的PM模型。

由於嶺回歸在這裡的實際應用中對參數非常敏感,儘管 Engelmann公開了他的思路,但涉及到具體實踐細節並沒有太多可參考的資料,其中的悲催過程只有圈三自己體會了(笑。

我們主要針對RAPM的缺陷做了一些嘗試性的調整。

首先,由於存在很多回合數過小的對陣,完全忽視他們的存在會失去大量樣本信息,並不會讓結果變得更好,我們按照回合數的多少進行了加權計算,讓一些偶然性較大的小樣本數據在其中占更小的比重,這就能讓那些樣本過小的對陣不再帶來額外的誤差。

其次,為了避免前面提到的RAPM的基礎假設所帶來的強大影響,我們考慮將每個球員的場上貢獻拆分成兩部分——個人固有的貢獻值+和特定隊友一起上場時的貢獻值增幅。這樣計算的好處就是不再假設一名球員在任意陣容中都保持恆定水準,而是受到隊友影響,表現會有浮動。這樣計算的結果會顯著的降低誤差。但也帶來了一個負面影響,當兩名球員之間產生互相的積極影響的時候,我們並不知道是誰在Carry誰,誰應該獲得這個Buff中的更多分數。如果按兩人平分這部分Buff計算,就會造成明星球員的數據下降,角色球員的數據上升的情況。我們在這之中還無法分辨這是我們的演算法不對,還是明星球員的作用本來就被我們高估了,角色球員的貢獻比想像的要更大。

此外,Engelmann曾表示,評價一名球員的時候這名球員在場上的效果,比他不在場時的效果更重要。這聽起來很有道理,比如一名球員本身略有手段,他在在場時球隊中規中矩,但他下場時球隊打的很差,這可能未必是他真的太厲害,而是他不在場時頂替他的隊友實在打的太爛。但我們在實際操作中並沒有太好的辦法來刻意突出在場效果和淡化不在場效果。

我們做出來結果怎麼樣?

老實講,問題還有很多,這份RimZero Plus-Minus目前版本號恐怕還是v0.05。

我們把目前的結果和 Engelmann版的RAPM進行的對比,大體趨勢還是接近的,存在一些差異,但也談不上不如RAPM或者說比它更合理,有太多無法解釋的問題存在。

而如果和RPM進行對比,RPM加入Boxscore的修正所帶來的影響就太明顯了,儘管整體還是正相關的,但R值卻非常低,存在很多特例。由於普通球迷更多的接觸Boxscore,RPM的結論也顯然更接近球迷的觀點。

結語

儘管目前我們的模型還不能作為非常可靠的依據公開,還需要很多進一步工作,但不得不說,這對我們來說是一個里程碑。當我們剛開始接觸數據的時候,我們的目標是儘可能多的了解那些公開的數據源,很快我們就幾乎了解了所有的數據網站和個人數據博客,後來我們希望能得到官方shotlog數據,製作自己的投籃熱區圖,現在已經能做到每日更新。再後來我們希望能得到更詳細的synergy數據,我們幾乎是國內第一批擁有synergy付費數據賬戶的人,這賽季很多寫手都有了。再再後來,我們希望能有全部play-by-play數據做更多細節的第一手數據,休賽期大家也都看到了,那些自投自搶,助板,蓋帽回收,搶斷蓋帽多大仇系列的數據都是這麼來的。這賽季開賽前,我們希望能深入了解PM模型的演算法,擁有自己的PM評價模型,現在也正在實現中。有時候我們會喜歡寫這樣的文章,又長又沒話題性,充斥著枯燥的數據方法論,有時候在虎撲發出去就立刻沉掉,就像很多我們在虎撲發出去就立刻沉掉的文章一樣,我想看到這裡的人可能已經不多了。但到目前為止我們還是決定繼續做這樣的事情,這正是我們喜歡的,想做的,並會堅持探索下去的事情。

最後附上我們截至12月9日比賽的計算結果,再強調一遍,這只是v0.05,並不可靠,槽點甚多。有興趣的可以戳鏈接

RimZero Plus-Minus v0.05

最後照例打個廣告咯,喜歡數據的話歡迎關注微博@籃圈即是原點 寫長文的時間實在很少,主要還是整理整理數據,做些好玩的圖。


推薦閱讀:

詹姆斯回到騎士打球,是對「決定」的救贖,還是再一次的背棄?
如何評價現在簽約帕金斯後的騎士陣容?
場均失分115分,步行者的防守困境能找到出路么?
如何評價詹姆斯球迷向NBA中國舉報柯凡種族歧視?
西部神壕們:不是針對誰,我是說所有在座的NBA東部球隊...

TAG:NBA |