跳轉到主要內容
公司博客上

明尼蘇達雙城隊如何縮放音高的場景分析來衡量球員表現——第1部分

分享這篇文章

統計分析在棒球比賽

一個在美國職業棒球大聯盟(MLB)生成數以兆字節的數據,從瀝青球的旋轉運動打擊的行為每個棒球運動員的運動響應。你怎麼得出可行的見解從所有這些數據在遊戲和季節?學習棒球業務集團在2019年美聯中央區冠軍明尼蘇達雙城隊使用磚需要大量的傳感器數據,運行數千或數萬模擬在每個音高,然後快速生成可行的見解分析,提高運動員的競技水平,童子軍的競爭,更好地評價人才。此外,學習他們計劃進一步縮短分析周期讓這些見解教練為了優化遊戲策略基於實時行動。

在第1部分中,我們走過雙胞胎的前廳是麵臨的挑戰在他們的球場上運行成千上萬的模擬數據來改進他們的球員評價模型。我們評估權衡不同的建模方法和推斷結果R,為什麼我們選擇來進行用戶定義函數與R火花。

第2部分,我們將深入探討了用戶定義函數R的火花。我們將學習如何優化性能,使規模通過管理內R UDF的行為以及行為引發的協調執行。

背景

有幾種離散棒球統計可以用來評估一個棒球運動員的擊球率等性能或分打點,但sabermetric棒球社區發展贏得高於替代(戰爭)來估計一個球員的總貢獻團隊的成功在某種程度上,讓它更容易比較的球員。從FanGraphs.com:

你應該總是使用多個指標在評價球員,但戰爭是全包,為比較的玩家提供了一個有用的參考點。戰爭提供了一個估計回答這個問題,“如果這個球員受傷,球隊必須用免費的小盟員或AAAA從他們的板凳球員,球隊將失去多少價值?“這個值是表示在贏得格式,所以我們可以說X值+ 6.3的玩家獲勝球隊,而Y隻值+ 3.5的玩家獲勝,這意味著它很可能該玩家X比Y球員更有價值。< /p>

戰爭曆史上,比較球員在成百上千的音高是衡量相對價值的最佳方式。明尼蘇達雙城的數據超過1500萬球,不僅包括最終結果(球,罷工,基地等),但也更深層次的數據像球的速度和旋轉,出口速度,玩家定位,菲爾丁獨立投球(金),等等。然而,任何一個可以有幾個變量,batter-pitcher配對或天氣等影響遊戲的預期運行值(例如,微風拿起什麼可能是一個全壘打,而不是成為一個界外球)。但是如何糾正這些變量以得到更準確的預測未來的表現?

基於大數定律,金融服務等行業運行蒙特卡羅模擬對曆史數據來增加他們的概率模型的準確性。類似地,100倍增加場景(認為每個球場是一個場景)導致10倍戰爭更準確的估計。增加他們期望運行值的精度,這對雙胞胎尋找一個解決方案,可以生成20000模擬每一個球在他們的數據庫,或者3000億場景總(1500萬球x 20000 max場景中模擬每節= 3000億總場景)。與基地運行分析on-prem R在單個節點上,他們意識到需要近四年計算曆史數據(~ 8秒運行20 k模擬每節每年x 1500萬球/ 3.15 x107秒)。如果他們最終要使用運行值/戰爭估計優化遊戲決定,每個遊戲可以產生40000多個場景得分,他們需要:

  1. 方法快速自旋向上大量短時間和計算能力
  2. 生存模型,他們可以不斷添加新的棒球數據以改進他們的預測的準確性和近實時生成可行的見解。

這對雙胞胎轉向磚和微軟Azure,鑒於我們的經驗與大規模數據集,包括結構化和非結構化數據。接近無限的隨需應變的計算可以在雲中,這對雙胞胎不再需要擔心供應一次性使用激增的硬件分析曆史數據。之前運行40000每日模擬了44分鍾,磚在Azure他們解鎖實時評分數據生成的能力。

100 x擴展球場仿真結果

建模和推理結果R

模型給出的結果,數據科學團隊在一個訓練數據集組成的1500萬行與音高位置坐標以及季節和遊戲功能,如pitcher-batter構型,局,等等。為了捕捉音高的非線性特性結果在他們的模型中,團隊轉向了龐大的存儲庫中可用的開源包R的生態係統。

最終選擇R包這是特別有用的靈活性和可解釋性建模時非線性分布。數據科學家可以把一個複雜的模型對曆史數據和仍然理解每個指標都在球場上的確切影響的結果。自模型將用來幫助評估球員表現和團隊組成,模型的解釋能力是一個重要的考慮教練和業務。

模型中不同音高的結果,團隊然後使用R模擬x - y坐標為每個球場的聯合概率分布的數據集。這有效地生成額外的記錄,可以取得與他們的訓練模型。推斷的預期結果為每個模擬音調草圖將球員的形象表現。大數量的模擬圖像變得更清晰。

計劃是為每一個生成20000模擬的1500萬行曆史數據集。這將產生3000億個模擬球的最終數據集準備推理與非線性模型,並為組織提供的數據更準確地評估他們的球員。

這種方法的問題是,R在單線程,單個節點的執行環境。即使利用多線程包中可用的開源和CPU重雲中的虛擬機,該小組估計,這將需要幾個月的時間代碼來完成,如果完成。問題成為規模之一:如何仿真和推理邏輯擴展到3000億行,在合理的時間內完成這項工作嗎?答案在於磚統一分析平台由Apache火花。Beplay体育安卓版本

擴展R與火花

本模擬管道伸縮的第一步是重構特性工程代碼使用一個可用的兩個包在R - SparkR或sparklyr火花。幸運的是,他們所寫的邏輯使用流行的數據操作的包dplyr緊密結合sparklyr。這種集成允許使用dplyr功能上的tbl_spark當讀取數據創建的對象sparklyr。在這個例子中我們隻有轉換ifelse ()語句dplyr::變異(case_when (…)),然後他們的特征工程代碼將從單個節點規模過程大規模並行工作負載與火花!事實上,大約隻有10%的存在dplyr代碼需要重構與火花。我們現在能夠產生數十億行推理在幾分鍾內。

這dplyr魔術是如何工作的呢?要理解這一點,我們需要首先了解R火花接口的結構:

R R +火花基礎設施,大部分的代碼轉換為Scala,然後發送到JVM在司機的任務分配給每個工人節點。

大多數功能的火花+ R包包裝本土引發類- R代碼轉換為Scala,和那些命令發送到JVM在司機的任務被分配給每個工人。同樣,dplyr動詞翻譯成SQL表達式,然後評估通過SparkSQL火花。因此通常應該看到相同的性能在火花+ R包你期望在Scala中。

分布式推理與R包

工程管道引發的特性,我們的注意力轉向比例模型推理。我們考慮了三種截然不同的方法:

  • 再教育火花的非線性模型
  • 提取模型係數R和分數的火花
  • R模型嵌入在一個用戶定義函數和並行化執行與火花

讓我們簡要地研究與這些相關的可行性和權衡方法。

再教育火花的非線性模型< /p>

第一種方法是看看建模技術的實現從R存在於火花的機器學習庫(SparkML)。一般來說,如果你的模型類型可用SparkML最好選擇性能,穩定,簡單的調試。這可能需要重構代碼有些如果你來自R或Python,但提高可伸縮性可以很容易地讓它值得的。

不幸的是,團隊選擇的建模方法在SparkML不可用。在學術界已經有一些工作,但因為它涉及在火花,我們決定引入修改代碼就這種方法的選擇。的工作量需要重構和維護這段代碼使其禁止使用第一種方法。

提取模型係數< /p>

如果我們不能再培訓火花,也許我們可以用學習係數從R模型和將它們應用於火花DataFrame嗎?這裏的想法是,推理可以由一個輸入DataFrame特性乘以係數較小的DataFrame到達預期值。再次,將一些重構代碼的權衡協調係數提取從R引發為了獲得巨大的可伸縮性和性能。

對這種方法處理這種類型的非線性模型,我們需要提取一個矩陣的線性預測模型係數。由於R包所使用的性質,這個矩陣不能沒有生成新的數據通過R模型對象本身。產生一個矩陣的線性預測在R 3000億行是不可行的,所以第二種方法被廢棄。

並行R執行用戶定義函數的火花< /p>

由於缺乏原生支持這個特殊的非線性建模方法在火花和徒勞的生成一個3000億行矩陣R,我們求助於用戶定義函數(udf) SparkR sparklyr。

為了理解udf,我們需要退一步,考慮上麵所示的火花和R架構。

火花+ R UDF架構,UDF創建一個R過程在每個工人,允許用戶跨集群並行執行任意R代碼。

udf,之前的模式有所改變。udf創建一個R過程在每個工人,允許用戶跨集群並行執行任意R代碼。這些函數可以應用到一個分區集團DataFrame火花,火花DataFrame將返回結果。另一種認為是udf提供R控製台在每個工人,能夠應用R函數數據和返回結果返回給火花。

執行推理在數十億行SparkML模型類型不可用,我們模擬的數據加載到火花DataFrame和應用R函數分區使用SparkR::有斑紋的。的高水平結構函數,如下所示。

結果讓我們打破函數下來進一步每一個分區數據<>特性< />火花DataFrame我們應用一個R函數:
  • 一個R模型加載到內存中從磚文件係統(DBFS)
  • 在R中作出預測
  • 返回結果dataframe火花
  • 指定輸出模式<我>結果火花DataFrame

DBFS是安裝在集群中的每個節點的路徑指向雲存儲,並且可以從r .這使它容易加載模型工人本身,而不是通過網絡廣播作為變量與火花。最終,這第三種方法證明是富有成效的,並允許團隊規模模型訓練R為分布式推理與火花數十億行。

結論

在這篇文章中我們回顧了許多不同的方法擴展模擬和球員估值管道用R明尼蘇達雙城隊的大聯盟球隊。我們走過的推理選擇各種方法,權衡,建築核心SparkR / sparklyr函數之間的差異和用戶定義的函數。

從模型特性的工程訓練,係數提取,最後用戶定義函數很明顯,大量的選項存在延長R生態係統大數據的力量。

在下一篇文章我們將深入探討了用戶定義函數R的火花。我們將學習如何優化性能通過管理內R UDF的行為以及行為引發的協調執行。

查看第2部分的明尼蘇達雙城隊的故事:優化UDF與Apache火花和R

免費試著磚
看到所有公司博客上的帖子
Baidu
map