2007/09/29

Player Valuation for Fantasy Baseball (完)

這系列已經拖超過一個禮拜了,還好這個blog沒什麼人在看,所以也沒人催稿。 XD

趕快來把它做個結尾,季賽結束後還有不少題材可以講。

最後我們來討論一個問題:假設我們採用喊價的方式分配球員,12支球隊各有100M的總資金,必須選C,1B,2B,3B,SS,OF*3,UT,P*7,Bench*5,每個球員的最低薪資為1M。其他設定都和Public League相同,那我們要如何判斷每個球員的價值?

由於21個球員至少要各花1M,所以每隊的可運用資金事實上是79M,整場喊價會上流通的資金總額是79M*12=948M,而不是1200M。將這個數字除以所有VORP>=0的球員(恰好是先發的球員人數)的VORP總和,就可以求得每分VORP的價值,然後將球員的VORP乘上這個參數,最後將1M加回去,就能算出球員的應有身價。

也因此,Jose Reyes的VORP雖然是Michael Young的三倍多,但算出來的價錢卻不足三倍,不過如果我們計算他們的DORP的比例(Dollar Over Replacement Player, 減去薪資下限後的薪水),那就和VORP的結果相同了。

以12人public league的設定來說,總VORP大約在1550上下,換言之,每分VORP價值約0.612M。因為以下是154場的數據,所以我們將參數調整成0.644M並將表格更新如下:

PlayerRHRRBISBAVGHABValueVORPDollar Value
Alex Rodriguez13452142240.31317054437.8125.6117.50M
Jose Reyes1101050780.28918062228.8816.6811.75M
Ryan Braun783083140.32312940023.1210.928.03M
Michael Young75884120.31218759917.315.114.29M
Barry Bonds75286650.2799433716.524.323.78M
Freddy Sanchez76117800.30917857614.932.732.76M
Casey Blake74177230.26714955812.20.001.00M
Bengie Molina38198000.28513346711.984.353.80M
Josh Hamilton52194730.2928729811.96-0.240.85M
Julio Lugo66670300.23912853511.58-0.620.60M
Yuniesky Betancourt6796440.28714851511.51-0.690.56M
Joe Mauer5965570.29011138310.412.782.79M

PlayerIPWSVKERAWHIPERH+BBValueVORPDollar Value
Jake Peavy203.01802252.391.045421137.1517.9112.54M
C.C. Sabathia227.01701983.211.158126131.7610.297.63M
Johan Santana209.01502203.141.067322231.4311.638.49M
Erik Bedard182.01302213.161.096419827.9710.687.88M
Daisuke Matsuzaka190.01401864.411.349325521.833.803.45M
Jeff Francis194.21501424.351.399427120.732.262.46M
Ben Sheets140.11201063.781.235917319.155.734.69M
Yovani Gallardo98.190873.661.314012914.134.613.97M
Bronson Arroyo197.2901534.371.419627913.23-5.52-2.56M
J.J. Putz66.0438721.360.67104416.189.677.23M
Trevor Hoffman52.0438372.601.02155311.776.565.23M
Joe Borowski58.2440525.221.4734869.083.253.09M
Heath Bell84.062892.251.00218414.005.814.74M
Rafael Betancourt73.051691.480.75125513.526.365.10M

這樣算是將這個系列告一個段落了,在這三篇中使用的參數都是粗略的估計值,像剛剛就發現RP的Replacement Level應該要再高一點。等今年比賽完全結束後我可能會將整個系統仔細點的重算一次,不過目前就先這樣吧。

後記 原本想要做個簡介,沒想到還是寫得很繁瑣,以後要多練習寫作的能力,另外徵求此系列文章的高速摘要,意者請寄到我信箱。 XD

繼續閱讀

2007/09/24

Google Toolbar Buttons

Baseball-Reference Baseball Prospectus First Inning Fan Graphs Rotoworld

如果有裝Google Toolbar的網友可以點以上的連結安裝快速搜尋鍵到工具列上。

使用方式: 在搜尋框輸入球員姓名(Rotoworld只能用Last Name,其餘四個網站都支援全名輸入),等右方按鈕出現放大鏡圖案後按下按鈕,便會自動跳到查詢頁面。

如果游標不在搜尋框裡,按鈕就不會出現放大鏡圖案,此時按下按鈕會移至該網站首頁。

自己生產搜尋按鈕的方法:

在網站的搜尋框按下右鍵,選擇產生自訂搜尋然後照著對話框指示做即可。

這個方式適用於使用GET方式的查詢,Rotoworld和Fan Graph的網站需要自己編輯xml檔。

繼續閱讀

2007/09/22

Player Valuation for Fantasy Baseball (續)

上一回我們提到如何計算球員在FB裡的Raw Value,到目前為止還只是和空氣做比較而已,今天要來看如何利用Replacement Player的觀念計算球員的價值。 因為兩篇之間差了三天,所以數據上沒辦法完全同步(orz),這點請大家見諒。

Replacement Player,顧名思義是用來取代先發球員的選手,當你陣中的球員受傷或是低潮時,能夠快速的從FA補強的球員就是Replacement Player,這可以分成三個層面來討論。

守備位置的調整 Raw Value的計算結果,Joe Mauer(C,Value=10.41)固然是不如Freddy Sanchez(2B/3B/SS,Value=14.93),但是如果我們能從FA得到最好的C和2B/SS分別是Johnny Estrada(Value=7.63)Aaron Hill(Value=13.41)的話,那麼Mauer+Hill反而比Sanchez+Estrada高出1.26分,這時Mauer的價值是比較高的,在選秀時我們應該先選擇Mauer。

至於Casey Blake和Yuniesky Betancourt就更不用說,在大多數的公開聯盟中他們本身就是Replacement Player(or below)了。

上場時間的調整 我們看到J.J. Putz(66IP Value=16.18)的Raw Value比Jeff Francis(194.2IP Value=20.73)來得低,然而由於Yahoo!的Public League有局數上限,如果我們用Jason Marquis(183.1IP Value=17.41 V/100IP=9.5)來補上Putz少投的128.2局,Putz+Marquis組的Value將會變成28.4,遠勝過Francis。(事實上在Mixed Public League,Francis已經差不多就是Replacement SP了)

人數不等時的比較Jose Reyes(SS,Value=28.88)Michael Young(SS,Value=17.31)+Freddy Sanchez(2B/3B/SS,Value=14.93)為例,光看Raw Value的話,好像後面那一組(32.24)比較有利,事實上Reyes加上Aaron Hill(2b/SS,Value=13.41)的Raw Value高達42.29,遠遠勝過Young+Sanchez。

從以上幾點來看,應該可以瞭解為何要將球員的價值定義為與Replacment Player的差距。至於如何在選秀前找出各位置的Replacement Player,以Yahoo Public League的設定來說,首先依照C,SS,2B,3B,OF,1B的順序,挑出各位置Raw Value的前12名(OF為前36名),同一個球員只能佔他最優先的那個守位,比方Lance Berkman(1B/OF)佔了OF的一個缺,挑1B時就不計算他。然後不分守位挑出剩餘打者的前42名(以平均每隊2.5個板凳打者來算),這42名打者包含的守位都使用同一個Replacement Level。一般而言只有捕手需要使用獨立的Replacement Level,再在其餘打者中挑出126名,只要確定這126名中SS和2B都有12人以上即可。捕手的Replacement Level取第12名捕手,其餘的取第126名打者。投手方面,原則上按照Value/IP選66名SP和48名RP,儘可能讓每隊平均局數接近1250局。

打者有場數上限,所以實際價值理論上是平均每場Raw Value減去Replacement Player的平均Value後,再乘上出場數。但是出場數的紀錄取得較為麻煩,尤其當用預測成績計算球員價值時,大部份的預測都沒有附出場數的數據;其次要補上不足的野手出場數較為麻煩,特別是捕手。因此簡單的作法就是直接拿總Raw Value去減,出賽時間真的差很多的球員再調整。 今年捕手的Replacement Level大約是7.63(Johnny Estrada),其餘打者的是12.20左右。

投球局數要補足就容易多了,我們可以幾乎隨時隨地從FA裡頭找到Replacement等級的投手來幫我們投一場球,然後馬上丟掉換下一個SP,所以選手的Value/IP是比較重要的。但如果單純照V/IP來挑選先發球員,就會選到太多RP導致湊不滿1250局,因此才要用66SP+48RP的比例挑選。如此Replacement Level應該訂在第66名的SP較為合理,然而問題出現了,這樣VORP大於0的RP將會超過48個(因為第48名的RP的V/IP通常比第66名的SP高)。我們希望VORP>0的選手人數恰好等於應選的人數,在這裡採用的統一標準是所有投手的Value先減去Replacement RP的V/IP * 70,將Replacement SP(儘可能找180~200局的SP)減完後的Value除上(IP-70),得到SP的Replacement Level。換言之,70局以內的部份,要減掉RP的Replacement Level,超過70局的部份則是和SP的Replacement Level比較。

以今年RP的Replacement Player差不多是C.J. Wilson這個等級,他平均100局的Raw Value是9.87,由於季賽大概還有5%的比賽還沒進行,所以我們將RP的Replacement Level定為0.0987*66.5=6.56。Replacement SP大約落在Jason Marquis(183.1IP Value=17.41)一帶,因此SP的Replacement V/IP為(17.41-6.56)/(183.33-66.5)=0.0929。我們根據以上的數字來算Putz和Francis的VORP。

Putz:16.18-6.56-[(66-66.5)*0.0929]=9.67 (更正:Putz不足的0.5局可以用Replacement SP來補) Francis:20.73-6.56-[(194.67-66.5)*0.0929]=2.26

因此Putz在Public League的價值約是Francis的4.25倍。

算出VORP後最好按VORP排序好再次挑選Replacement Player重複以上動作至少一次。

我們把前一張表格加上VORP來看看:

PlayerRHRRBISBAVGHABValueVORP
Alex Rodriguez13452142240.31317054437.8125.61
Jose Reyes1101050780.28918062228.8816.68
Ryan Braun783083140.32312940023.1110.91
Michael Young75884120.31218759917.315.11
Barry Bonds75286650.2799433716.514.32
Freddy Sanchez76117800.30917857614.932.73
Casey Blake74177230.26714955812.200.00
Bengie Molina38198000.28513346711.984.35
Josh Hamilton52194730.2928729811.96-0.24
Julio Lugo66670300.23912853511.58-0.62
Yuniesky Betancourt6796440.28714851511.51-0.69
Joe Mauer5965570.29011138310.412.78

PlayerIPWSVKERAWHIPERH+BBValueVORP
Jake Peavy203.01802252.391.045421137.1517.91
C.C. Sabathia227.01701983.211.158126131.7610.29
Johan Santana209.01502203.141.067322231.4311.64
Erik Bedard182.01302213.161.096419827.9710.68
Daisuke Matsuzaka190.01401864.411.349325521.833.80
Jeff Francis194.21501424.351.399427120.732.26
Ben Sheets140.11201063.781.235917319.155.73
Yovani Gallardo98.190873.661.314012914.134.61
Bronson Arroyo197.2901534.371.419627913.23-5.51
J.J. Putz66.0438721.360.67104416.189.67
Trevor Hoffman52.0438372.601.02155311.776.56
Joe Borowski58.2440525.221.4734869.083.25
Heath Bell84.062892.251.00218414.005.81
Rafael Betancourt73.051691.480.75125513.526.36

野手的部份因為沒有加入出場數校正所以還不太準,Josh Hamilton事實上並不是個Below Replacement Player,Ben Molina也沒有比Barry Bonds好(不過相差不遠,畢竟你很難掌握Bonds的上場時間),但是我們可以看出Joe Mauer仍然比Freddy Sanchez來得有價值,三個Michael Young加起來還是勝不過一個Jose Reyes。

投手的部份變化比較大,C.C. Sabathia的227局對Tribe的貢獻很大,但在一個可以隨手撿到Marquis的世界裡,他的價值還落後少投了45局的Erik Bedard一點。J.J. Putz勝過絕大多數的SP,松阪大輔的價值事實上比不上Ben Sheets和Yovani Gallardo,也比不上Heath Bell和Rafael Betancourt,Bronson Arroyo則是完全沒價值的選手。

下一回是喊價制FB的價錢計算和結論。(汗 還有啊)

相關文章
  • Player Valuation for Fantasy Baseball
  • Player Valuation for Fantasy Baseball (完)
  • 繼續閱讀

    2007/09/19

    Player Valuation for Fantasy Baseball

    我想玩過一段時間Fantasy Baseball的人都清楚,一個球員的FB價值和他的實際價值不見得是相等的,如以下的兩個球員:

    PlayerABH2B3BHRRRBISBAVGOBPSLG
    Jose Stealer60018020510957550.300.360.400
    Freddy Doubleman60018050510957520.300.360.450

    在現實生活中,Doubleman的價值顯然比Stealer要高出一截,但在標準5x5 FB中,二壘打並不計分,Stealer靠著盜壘壓倒性的勝出。

    在上面的例子中,由於其他四項的成績都相同,我們可以很輕易的判斷何者的FB價值較高,但是當兩名球員各擅勝場時,又該如何評估哪一個是較好的FB球員呢?即使我們可以選出較好的球員,但是在喊價制的FB中,兩名球員的價錢又應該差多少才算合理?底下就是我採用的球員FB價值評估方法:

    首先有一個重要觀念,在FB和現實生活中都是共通的,那就是VORP - Value Over Replacement Player

    Fantasy Baseball是體會VORP的好地方,只要下場實際操縱幾年FB,就能很清楚地瞭解什麼叫Replacement Player(那些躺在FA的都是),以及為什麼一個只出賽半季的好球員會比一個全勤的Replacement Player,或是兩個略高於Replacement的球員更有價值。比讀Baseball Prospectus的文章100篇還有效。

    我們的評價流程也如VORP的計算一樣,先計算球員每場或每局能貢獻的Fantasy Value,找出Replacement Player後,將球員的平均Value減去Replacement Level,然後乘上他的上場時間,就可以得到該球員的FB價值了。

    和現實生活比起來,在標準5x5 Roto制FB要計算球員的Raw Value是相對容易的,因為所有球員都只有五個變因,我們只要能訂好各項目的權重,用簡單的加權平均就可以搞定。

    那麼問題就在於各項目的權重應該設多少才合理?幾個打點可以換一支全壘打?多少三振可以補上一個SV的差距?甚至,ERA降0.05和AVG升0.001,哪個比較有價值?這些問題的答案應該都看一個東西-這個聯盟各項目的隊間差距,換言之,平均來說要多少全壘打(打點、得分、勝投.....)才能讓球隊前進一名,這個項目的權重就是這數字的倒數。

    每隊的人數和聯盟深度會影響這個值,以Yahoo的Public Mixed League的設定來說,大約15R/17RBI/4HR/5SB/0.001AVG/0.8W/10SV/27K/0.08ERA/0.01WHIP就會差一分(事實上還是因聯盟而異),所以大概要多得30分才能補上10次盜壘的差距,而一個能幫ERA降0.08的投手和讓AVG升0.001的打者價值相等。

    平均項目上需要進一步的計算,Public League每支球隊一年的投球局數是1250局,因此1分ER會讓全隊ERA上升0.0072,也就是說多丟11分ER就會讓球隊在ERA上下降一名;平均來說全隊ERA大約是3.8,因此多投一局可以讓ERA下降0.003,相當於1/26分。在WHIP上,每12.5次上壘相當於一分,每局相當於0.1分;而在AVG項目上,5.5支安打/19.3AB相當於一分。

    因此我們將各項目的權重設成下表:

    CategoryRRBIHRSBHABWSVKERH+BBIP
    V/1006.675.8825.020.018.0-5.1812510.03.70-9.10-8.0013.85
    而在計分制的FB(如TSN)中,球員的每場價值就等於他的平均每場得分,夠簡單吧。

    根據以上的權重,我們來算幾個球員今年的raw value:

    PlayerRHRRBISBAVGHABValue
    Alex Rodriguez13452142240.31317054437.81
    Jose Reyes1101050780.28918062228.88
    Ryan Braun783083140.32312940023.12
    Michael Young75884120.31218759917.31
    Barry Bonds75286650.2799433716.52
    Freddy Sanchez76117800.30917857614.93
    Casey Blake74177230.26714955812.20
    Bengie Molina38198000.28513346711.98
    Josh Hamilton52194730.2928729811.96
    Julio Lugo66670300.23912853511.58
    Yuniesky Betancourt6796440.28714851511.51
    Joe Mauer5965570.29011138310.41

    PlayerIPWSVKERAWHIPERH+BBValue
    Jake Peavy203.01802252.391.045421137.15
    C.C. Sabathia227.01701983.211.158126131.76
    Johan Santana209.01502203.141.067322231.43
    Erik Bedard182.01302213.161.096419827.97
    Daisuke Matsuzaka190.01401864.411.349325521.83
    Jeff Francis194.21501424.351.399427120.73
    Ben Sheets140.11201063.781.235917319.15
    Yovani Gallardo98.190873.661.314012914.13
    Bronson Arroyo197.2901534.371.419627913.23
    J.J. Putz66.0438721.360.67104416.18
    Trevor Hoffman52.0438372.601.02155311.77
    Joe Borowski58.2440525.221.4734869.08
    Heath Bell84.062892.251.00218414.00
    Rafael Betancourt73.051691.480.75125513.52
    和想像的有點不太一樣?別急,我們還沒做與Replacement Player的比較呢。投球局數比較少的RP在累積成績上自然要吃虧,做為一個打者,Joe Mauer的貢獻也還比不上Casey Blake。但是將SP多花費的局數,以及捕手和3B/OF的比較基準考慮等等進去後,將會產生不一樣的結果。

    不過,因為今天已經寫很多了,所以Replacement Player的部份就留到下次再提吧。 XD

    相關文章

  • Player Valuation for Fantasy Baseball (續)
  • Player Valuation for Fantasy Baseball (完)
  • 繼續閱讀

    2007/09/14

    Crystal Ball - 生涯成績占卜

    如果之前的Lineup Otimizer還是有人很認真看待的話,現在這個應該不會有了。 XD

    只要在這個網頁上任意輸入姓名,程式就會自動產生一份生涯成績。如果不希望真名被列在排行榜上的話,只要不勾選「允許寫入排行榜」,就不會被紀錄在榜上。

    在設計上已經讓整個生涯曲線儘量地合乎常理,但是還是請不要拿這個結果去說王建民的打擊比松阪大輔好。 XD

    如果有人玩出有趣的姓名和成績,請務必在留言板留個言,謝謝。 :p

    繼續閱讀

    2007/09/12

    Hu hit a home run?

    Who hit the homerun?

    Yahoo!應該很快會發現他們在9/11 SD vs LAD的Boxscore中的錯誤,還是存個檔比較保險。

    胡金龍在這場比賽的九局下半代打Eric Hull,擊出台灣野手在MLB第一發全壘打,Yahoo卻出包了。我可以想到一堆關於Hu hit the home runHu'll hit a home run的笑話。 XD

    來試著寫寫看:

    Oh! Hull hit a home run.
    Hu hit the home run.
    Hull hit that.
    No! He didn't. Hu hit that home run.

    You mean that Hull didn't hit the home run?
    He didn't.
    And you don't know who hit that?
    I know that.
    Who?
    Right.
    Wright hit that home run?
    No!
    Then who hit that home run?
    Yes, he did.

    (pause)

    OK, Someone hit the home run but you don't know who?
    I know Hu. He is a player from Taiwan.
    You say, Hong-Chih Kuo?
    No! That is his teammate.
    Chin-Hui Tsao hit the home run?
    No! Hu hit that.
    hmm....Chin-Feng Chen is the man hit the home run?
    NO! Hu is that guy!
    You don't know who is Chin-Feng Chen? He was the top prospect of Dodgers.....
    I know Chen!
    But you just say "who?".
    Yes! Hu hit the home run!

    (pause)

    I don't get it.
    OK, Hull is at bat in bottom 9th.
    Then?
    Hu hit for him.
    I don't know.
    Now you know.
    Know what?
    Hu hit for him.
    I still don't get it. Who hit for Hull?
    Right.
    Wright hit for Hull?
    No. Hu hit for Hull.

    (pause)

    OK, then what happen?
    Hu hit a home run.
    I don't know who.
    He is a player from Taiwan.
    Chien-Ming Wang?
    No! He is a Yankee.
    Chin-Feng Chen?
    No! It's Hu!
    Chin-Feng Chen is the former top prospect......
    I know who Chen is! He didn't hit the home run!
    Then who hit that?
    Yes! Hu did!

    (pause)

    So you know who hit the home run?
    Yes.
    But you just don't remember his name?
    His name is HU! "H-U" HU!
    "H-U" Hu is a player name?
    You finally know that.

    So Hull didn't hit this home run.
    No.
    And Hu'll hit a home run?
    He hit it tonight! (/‵Д′)/︵ ┴─┴


    Hu hit the home run. Congratulations!

    (圖片擷取自Dodgers官網影片)

    繼續閱讀

    2007/09/10

    Lineup Optimizer - 原理

    相關文章
  • Lineup Optimizer 在講解程式原理之前,先來講一下我對棒次安排的看法。 一個好的棒次應該儘可能的符合幾點原則: 越好的打者應該擺在越前面的棒次 這不僅讓較好的打者可以得到較多的打擊機會,也可以提高全隊的上壘率,使得全隊的打席數提高,較高的打席數可以帶來較多的分數。 較好的打者應該儘可能地集中,較差的打者也應該儘可能地集中 鄰近打者的能力有相乘作用,將一名優秀打者放在其他好打者之間可以使他的價值最大化,將最弱的打者放在其他較差的打者附近,可以讓對球隊的傷害降到最低。詳細一點的說法是:推壘能力好的打者前方應該儘可能放上上壘能力好的打者,反之亦然。

    這兩個原則事實上會有某個程度的牴觸,根據原則一,我們排出來的棒次應該會類似下圖: 如此全隊最佳的打者會接在最差的打者後面,這使得他的推壘能力被浪費掉了。

    如果根據原則二,我們可以排出如下的棒次: 當然這個棒次是可以平移的,我們將所有球員往前移一棒 除了一二棒倒過來外,這個棒次相當接近傳統棒次的安排,最強打者放四棒,然後依序是三、五棒,最弱的打者則是擺在第八棒。

    如果再往前移一個棒次,並且調整一下後段棒次使其在不違背原則二的前提下更接近原則一,就會變成如下的狀況: 這個棒次安排在數學上來講應該是最好的排法之一。

    以上壘能力和推壘能力來看,大致如下圖所示: 當然,實際上的最佳棒次需要看實際的球員組合而定,我觀察我的程式模擬結果,並沒有發現能循序挑出各棒次最佳球員的規則。

    那麼,在我的程式中,是如何決定最佳棒次的呢? 直覺的解法是利用一套公式計算每種可能棒次的得分期望值,然後在9!=362880種棒次當中選出得分期望值最高的一組棒次。然而這種方法相當的耗費時間,所以我利用演化計算(EC)中(1+1)-EP的方式來改進。系統先選取一組棒次做為起始值(一般是隨機選取即可,在系統則是以OPS降冪為起始值),每次變動一些產生一組新的棒次來和目前的棒次比較,留下較好的一組,如此重複運算一定數量的世代後,最後留下來的棒次就是答案。

    在以上的架構中,還有兩個問題尚待解決,首先我們必需能分辨兩組棒次的優劣,另外必需訂定產生新棒次的規則。

    先談後者,使用EC有個前提,就是好棒次產生的棒次中必需多數也是好的,否則使用EC就和隨機選取意義相同了。在排棒問題上,我們只要使用簡單的突變方式就能達到這個目標。系統採用的突變方式有三種,首先是swap(交換),簡單的將兩個棒次的球員對調(例: A-B-C-D-E-F-G-H-I swap(C,G)-> A-B-G-D-E-F-C-H-I);其次是shift(平移),將一個球員移到某個棒次,之間的球員全部平移一棒(例: A-B-C-D-E-F-G-H-I shift(C,7)-> A-B-D-E-F-G-C-H-I);最後是replace(取代),將先發球員換成板凳球員,和swap不同的地方僅在於必須考慮守位而已。

    至於比較兩組棒次的好壞部份,以演化計算的精神來說,其實並不需要算出確實的得分,只需要能分辨高下即可,甚至比較的準確率不需要是100%,但是我們還是用一套公式為各棒次計算出它的得分期望值。這個計算公式的原理是球隊的總得分=所有打者個人得分的總和,而打者的個人得分可以用打者本身和之後棒次的打擊資料算出來。運算過程如下:

    • 根據每個球員的上壘率,計算一場比賽中每個球員在不同出局數的打席期望值。
    • 根據一個球員的打擊資料,我們可以算出他打完一個打席後出局的機率,全壘打的機率,以及停在一、二、三壘的機率。
    • 再根據這個球員之後棒次的球員打擊資料,我們可以算出該球員在各出局數時被推回來得分的機率。
    • 將這個機率乘上打席期望值並加總,就可以求出球員一場比賽的得分期望值。
    • 將九棒的得分期望值加起來,就是球隊一場比賽的得分期望值。

    這個系統已經有做的修正包括:

    • 跑者可能靠著一壘安打推進兩個壘包,或是二壘安打推進三個壘包。
    • 跑者可能靠著野手選擇進壘。
    • 打者可能會因為失誤上壘,跑者也會因為失誤進壘。
    • 跑者有可能會盜壘,也會被阻殺。
    • 打者可能會擊出雙殺打。
    然而,跑者的腳程造成額外進壘的機率差異並沒有實作出來。跑者與打者能力對失誤和雙殺打的影響也都被忽略。

    這個系統的另一個問題在於,如果一個打者的成績是在三棒打出來的,這名打者換到一棒是否還能維持一樣的成績?棒球的打擊大概是團隊運動中受隊友影響最少的項目之一,我們並不要求球員因為棒次變動而改變打擊型態,假設球員們的心理狀況也沒有受到影響(或是不會影響打擊成績),但是如果後一棒從Barry Bonds換成Dave Roberts的話,相信打擊成績還是出現一定程度的變化。

    話說回來,反正這個東西本來就只是個小玩具,同樣九個人組成的棒次,運算出來最好的結果和平均值的差距大約也只有一場比賽0.1分而已,而實際會被教練和球迷排出來的棒次,彼此之間的差距恐怕不會超過每場0.05分,這不過能讓勝率提高半個百分點而已,所以大家還是玩玩就好,不需要太認真。 :D
    繼續閱讀
  • 2007/09/08

    Lineup Optimizer

    這個小玩具是我在修演化計算時做的期末專題,可以根據輸入的球員資料自動產生最有得分效率的棒次。

    以下就以Yankees為例子說明這工具的使用方法:

    首先進入首頁,可以看到各隊球員的姓名、守位和Rototimes在2007年初預測的打擊成績。球員是先照球隊再依OPS排序的,所以同隊的球員都會排在一起,我們找到Yankees的球員們,將9名打者選取起來,然後拉到頁尾按下送出鍵。如果不打算使用2007年的MLB球員資料,也可以不選任何球員直接送出,到下個頁面再手動輸入資料,或是先選擇相似的球員再做修正。

    在接下來的頁面可以調整球員的資料,我們在此將Yankees季初預定的先發一壘手Doug Mientkiewicz加進去,在下方排好預設棒次,然後按下送出。 系統會自動檢查守備陣容。如果球員名單當中有投手的話,就代表不使用DH,反之則代表允許使用DH。

    過一下結果就會顯示在網頁上,左邊是我們在前一頁排的棒次,右邊是系統算出來的最佳棒次。因為演化計算演算法和server對php的時間限制因素,跑出來的結果並不保證每次都一樣,覺得結果很怪的話可以多試一兩次。

    運算的方法留待下次說明,等不及的人可以先看首頁上的How this program works,不過請注意,因為修課規定的關係,這份報告是英文的。 XD

    相關文章

  • Lineup Optimizer - 原理
  • 繼續閱讀
    Powered By Blogger