2020年4月26日日曜日

TangoによるxBABIPを利用した投手被BABIPの分解についてのメモ

TangoがBABIPの投手守備の責任範囲の分解について、xBABIP系の指標 (打球の角度/速度 + 一部では走力で推定された確率/価値) を利用してやってみる的な記事を書いてくれていました。

Tango, Splitting responsibility between pitchers and fielders, Sunday, April 05, 2020
http://tangotiger.com/index.php/site/article/splitting-responsibility-between-pitchers-and-fielders

今回はこれの議論を詳しくなぞってみます。どこから数字を出してきたのかも不明な点が多く、また近似的な計算ですが、面白いと思いました。訳ではないです (元記事より明らかに長い)。読んでわからなかった日本人向けの日本語の解説といったところ。現時点では結構問題もありうる議論のような気もしています。途中の数字は実測値かどうかは確認していません。

使っている計算自体は極めて単純な計算です。使っている統計学的な性質も
1. 二項分布の分散の公式 p * (1-p) * N
2. 分散 = SD^2
3. 独立変数の分散の加法性
だけです。(ただし、腑に落ちる、的な感覚としてはなかなか難しいものがあるのかもしれない。この辺は変数が分布であることを明示的に意識して、乱数なんかでモデル化してみるとわかりやすいと思う。)

議論の大枠としては以下のような話になります。
1. 実際に測定されたばらつき
が、
2. 選手の能力
3. 偶然で生じる影響
4. 球場ごとの性質
で構成されていると考えてみる。
1, 3, 4は実際のデータから計算、あるいは推定が可能であり、それらを使って2. 選手の能力を推定してみる。

このような方針で計算してみたときに、打者について見ると、打球が安打になったかどうか (BACON) の能力差は、打球の角度と速度から推定されたxBACONの能力差と一致する。投手について見ると、打球のうちHRにならなかったものの打率 (BABIP) は、打球の角度と速度から推定されたxBABIPの能力差と一致しない。投手で見られる乖離は、チームの守備 (Fielder+Fielding alignment) による効果とみなすことができるかもしれない。そのように仮定すればその効果の大きさは計算可能であり比較可能だ、というような流れになります。

# 打者BACONとxBACON

まず打者のBACON (batting average on contact) を分解していきましょう。
BACONは普段あまり使わない指標だと思います。似たような指標であるBABIP (Batting Average Balls in Playの略) では無視されるHRを含んでいる点に注意。Fangraphsからだいたいの数字を計算してみましょう。
https://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=0&type=c,4,6,11,12,13,21,-1,34,35,40,41,-1,23,37,38,50,61,-1,111,-1,203,199,58,7&season=2019&month=0&season1=2015&ind=0&team=0,ss&rost=0&age=0&filter=&players=0&startdate=&enddate=

HR数はシーズンによって違うが5000-6700で、Hの中での割合にすると12-15%となり、BABIPの計算ではこれらの値が分子でも分母でも除かれている。BABIPは0.3くらいなのでHRを無視しないで入れると0.35くらいになりそう (適当)。実際には、本文の後の方で0.343と答えを書いてくれているのだがそれに気づかずにFangraphsで見積もってしまったので、せっかくなのでそっちを使います (ほとんど影響はないと思います)。

二項分布に従う事象 (打球数 n=294, BACON = p = 0.35) の安打数の分散は公式を利用して以下で求まります (打球数はたぶん対象にした打者の打球数の調和平均?)。
0.35 * (1-0.35) * 294 = 66.885
ここで分散 = SD^2からSDは
sqrt(66.885) = 8.18
これを打球数あたりに戻すとだいたい0.028。
8.18/294 = 0.0278...
therefore we can establish that Random Variation would account for a spread of 28 points  

以下では同様に打球あたりのSDや分散を使っていきます。

ここで独立した2つの変数、例えばaとb、の分散には以下の関係が知られています。
Var(a+b) = Var(a) + Var(b)

実際の観測値 (Observed) が
1. 偶然で生じた結果の違い (Random Variation)
2. それ以外の要因 (とりあえずCatch-allとしましょう)
の無関係な2つの要素の足し合わせで構成されていると考えてみましょう。
上の分散の加法性から、
Var(Observed) = Var(Random Variation)+Var(Catch-all)
と表すことができそうです。

Var(Observed)が0.04だったとしましょう (たぶん実測値?)。
If we observe a 40 point spread
そして、SD(Random Variation)は上で計算した0.028です。

これらの数値と上の式からVar(Catch-all)が計算できます。
Var(Catch-all) = Var(Observed) - Var(Random Variation) = 0.04^2 -0.028^2
SDにするためにsqrtします。
sqrt(0.0016 - 0.000784) = 0.2856...
これがSD(Catch-all)となります。
Tangoによる本文では0.29となっているので以下は丸めてそちらを使います。

ここでさらにCatch-allを分解します。
Catch-allが能力差 (True Talent) と球場の効果 (Park) で表現してしましょう。これらの2つの要素は無関係であるとします。
SD(Park) = 0.013がTagoから与えられたのでその値を利用します (実測値?)。
ここで分散の加法性から以下のような関係が成立します。
Var(Catch-all) = Var(True Talent)+Var(Park)
変形すると
Var(True Talent) = Var(Catch-all) - Var(Park) = 0.029^2 - 0.013^2 = 0.000672
よってSD(True Talent) = 0.0259
In other words, the TRUE TALENT spread in BACON for batters is one standard deviation = 0.026.

次にxBACONで同じような手順でTrue Talentを計算します。
これはxBA (batting averageの略) 的な、打球角度と打球速度から求めた値だと思われます (現在ではx系の指標では、GBについては走力も入っているはず)。
同様にCatch-allがTalentとParkで構成されているとします。
独立変数の分散の加法性は変数を増やしても成立します。
Var(Observed)  = Var(True Talent) + Var(Random Variation) + Var(Park)

Tangoから
SD(Observed) = 0.031
SD(Random Variation) = 0.017
SD(Park) = 0.006
が与えられました。

xBACONではSD(Observed)もBACONより小さいのですが、SD(Random Variation) やSD(Park)も小さいのが重要です。SD(Random Variation)については、BACONの場合 0 or 1を取るので分散が大きくなりますが、xBACONの場合0-1の連続的な値を取れるので分散が小さくなる。SD(Park) については、球場の形状 (大きさや非対称性) が無視されるためばらつきが小さくなると理解できます。

上の数値からTrue Talentの分散はSDを計算します。
Var(True Talent) = Var(Observed) - Var(Random Variation) - Var(Parks)= 0.031^2 - 0.017^2- 0.006^2
SD(True Talent) = sqrt(0.000961 - 0.000289 - 0.000036) = 0.0252
本文の0.026とはわずかに一致していない気もしないでも無いですが、まあいいでしょう (寛容)。

ここまでが打者のBACONとxBACONのSD(True Talent) がほぼ一致している、というような議論の流れになります。いったん整理しましょう。
BACONとxBACONについて:
実測値 (Observed) のばらつき
偶然で生じた結果の違い (Random Variation) のばらつき
球場の影響 (Park) のばらつき
を利用してTrue Talentのばらつきが計算できました。結果をまとめてみます。

BACON
SD(Observed) = 0.04
SD(Random Variation) = 0.029
SD(Park) = 0.013
SD(True Talent) = 0.0259
xBACON
SD(Observed) = 0.031
SD(Random Variation) = 0.017
SD(Park) = 0.006
SD(True Talent) = 0.0252

観測値されたSDについて見ればそれなりに違いは大きい (0.04 vs 0.031) のですが、どちらの指標でもTrue Talentはそれよりは割合としてもかなり小さくなり誤差の範囲かな?ぐらいの違いになりました (0.0259 vs 0.0252)。

少し話がそれますが、これらの数値の解釈について説明しておきます。True Talentの計算には分散の加法性を利用しましたが、ここではSDでまとめています。分散もSDもいずれも変数のばらつきの大きさを示すような統計量です。分散は測定値と次元が一致していないので、その数値を見てもその意味を解釈することが難しいという問題があるのですが、SDを使うと測定値と次元が一致するため解釈が容易になります ( https://bellcurve.jp/statistics/course/5924.html )。上のまとめの数字が実際に正しことを仮定してみましょう。この場合、BACONについて見れば、全体平均より2 SDぶんだけ優れた選手がいればそのBACONは0.0518 (2 SD = 2 * 0.0259) だけ高くなるということです (他の影響を無視すると、あるいは他の影響が完全に平均的であるとすると)。仮にTrue Talentが正規分布であれば、正規分布の性質を利用することで平均より2 SD優れた選手は能力から上位約2.5%の選手と理解することもできます。また、BACONではSD(Random Variation) はSD(True Talent) よりも影響が大きく、平均より2 SDぶんだけ偶然に恵まれた選手は 0.058だけ高くなる、ということになります。一方、xBACONではSD(True Talent) は他の要素のSDより大きくなっています。能力が2 SD優れた選手は0.05程度の上昇がありますが、偶然の影響で2 SD恵まれても0.034にしかなりません。おそらく、x系の指標では偶然や球場の影響が小さくなっていることが上のまとめで表現されていると見ることができるでしょう。

# 投手BABIP vs xBABIP

次に、投手のBABIPとxBABIPについて見ていきます。ここではTrue Talentの推定結果がやや乖離があるという話になっていきます。個人的には打者でBACONを、投手でBABIPを使っているのはちょっと気になりますが、HR/打球は打者では大きく差がある、投手ではそれほど差が大きくない、という一般的な性質を考えれば、理解できるところです。つまり、打者でHRを無視すると意味のある情報をあえて捨てることになり、投手でHRを入れると偶然生じたノイズをわざわざ入れてしまうことになる (打球数がものすごく大きければ除けるのかな、たぶん)。

で、投手についてでした。SD(True Talent) について, BABIPから求めた値が0.017であり, xBABIPから求めた値が0.013であるとまず提示しています。これは割合としてみればそれなりに大きな差であり、打者でのBACONとxBACONで差が小さかったことと違いがあると指摘しています。この差に関連する大きな要因はチーム、特に守備だと思われます (打者は試合ごとに異る守備の影響を受けるので影響が平均化されやすいが、投手は基本的に同じ守備の影響を受け続ける)。そこで、残りの要素を守備 (守備力 (?) +守備位置) から由来したと仮定します (注)。

Var(True Talent for BABIP)  = Var(True Talent for xBABIP) + Var(Fielder+Field alignment)
なので
Var(Fielder+Field alignment) = Var(True Talent for BABIP) - Var(True Talent for xBABIP) = 0.017^2 - 0.013^2 = 0.00012
SDにすると
SD(Fielder+Field alignment) = sqrt(0.00012) = 0.011

BABIPに関してまとめると以下のような関係になります。ここでのSD(True Talent) はxBABIPから得られたもので、すでに説明したようにBABIPで得られた投手のBABIPを制御する能力 (True Talent) から守備の影響を除いたものと仮定しています。

BABIP
SD(Observed) = 0.036
SD(Random Variation) = 0.029 (250打球)
SD(Park) = 0.013
SD(True Talent) = 0.013
SD(Fielder+Field alignment) = 0.011

0.029^2 + 0.013^2 + 0.013^2 + 0.011^2 = 0.0013
sqrt(0.0013) = 0.03605551275

この結果は最近のMLBについて、ここまでの仮定を受け入れた場合に250打球が生じる程度のサンプルサイズでは、球場 (Park) 、投手の能力 (True Talent) 、そして守備に関する要素 (Fielder+Field alignment) がほぼ同じような大きさの影響があり、これらの要因の影響よりも偶然の影響がかなり大きい可能性を示しています。

このような投手BABIPの責任範囲の分解に対する別のアプローチとしては、以下のTangoが中心となったと思われる文献があります。
SOLVING DIPS By Erik Allen, Arvin Hsu, Tom/Tangotiger, et al, 2003
http://www.tangotiger.net/solvingdips.pdf
断っておくと、これについては理解していません (かなり昔読もうとして挫折した; 今なら理解できるかも?)。比較は各自やってみるといいんじゃないかな (打球数がかなり違うことに注意。Tangoがブログポストで書いているように、打球数の変化に伴うRandom variationの減少や増加がどこに分配されうるとみなすべきか、は注意が必要かもしれない)。

これらの内容を書く上では、これまでに読んだPhil Birnbaumのブログポストが大きな助けになっていると思います。多謝。とりあえず思いついたものを引用しておきます。

Finding a true talent level for an outcome distribution http://blog.philbirnbaum.com/2006/08/finding-true-talent-level-for-outcome.html
The Tango method of regression to the mean -- a proof http://blog.philbirnbaum.com/2011/08/tango-method-of-regression-to-mean-kind.html
Pete Palmer on luck vs. skill
http://blog.philbirnbaum.com/2017/05/pete-palmer-on-luck-vs-skill.html

_____________________________________________________________

説明できなかった効果を、何らかの特定の要素に割り当てるのは結構危険な行為で、この議論に関する大きな問題になりうる部分かもしれないと考えています (ここでは守備に関する要素に割り当てたわけですが)。よくあるのはピタゴラス勝率で説明できなかった部分を監督の貢献とみなす、というような仮定でしょうか。これは明らかに問題があり、例えばリリーフ投手陣が優れている/劣っているという場合にピタゴラス勝率から乖離することは当然予想できます (注2)。ここでの残り物を守備に割り当てるのは、それ以外の要素をあまり思いつかない、妥当な大きさのluckの効果を除いている、という複数の理由で、個人的にはある程度は正当化できるだろうと思います。

注2
そもそも優れた先発投手をリリーフに回せば、チームの失点は増えて僅差での勝率が上がるので、ピタゴラス勝率からの乖離ではなくチームの勝率の最適化を議論すべきだと思われますが。