【RCWIN, XRWIN】NPB(2019)セイバーメトリクス野手指標の算出⑥
Page content
得点力指標RC, XRに、リーグ平均と比較する観点を加味した、RCAA, RCWIN, XR+, XRWINを算出する。
追加する指標
RCAA/RC+ (Runs Created Above Average)
- リーグの平均的打者と比較してどれだけ多く
RC
を稼いだか
計算式
RC−リーグRC×打席リーグ打席
RCWIN
- リーグの平均的打者と比較して何勝多く貢献したか
RCAA
をRPW
(Runs Per Win)で割ったもの
計算式
RCAARPW
RPW=10×√リーグ得点+リーグ失点リーグ投球回
XR+ (eXtrapolated Runs Plus)
- リーグの平均的打者と比較してどれだけ多く
XR
を稼いだか
※ 関係ないですが、XRAA (eXtrapolated Runs Above Average) という呼び方はしないんですかね?そう呼んでるのを見たことないです。
計算式
XR−リーグXR×打席リーグ打席
XRWIN
- リーグの平均的打者と比較して何勝多く貢献したか
XR+
をRPW
(Runs Per Win)で割ったもの
計算式
XR+RPW
RPW=10×√リーグ得点+リーグ失点リーグ投球回
RPWってなんぞ…?
RCWIN
とXRWIN
の計算式に出てきたRPW
(Runs Per Win)。
これは、1勝積み上げるのに何点必要か、を表す値。
野球のリーグ戦においては基本的に「得失点差が10積み重なると、1勝上積みされる」という考え方(つまり、RPW
=10)。ただこれはあくまで「基本的に」であって、打高投高などによって変化する。
それらを加味して、「統計学的に、該当リーグでは何点で1勝と換算するか」を表すのがRPW
で、以下の式で表される。
RPW=10×√リーグ得点+リーグ失点リーグ投球回
第二項の分数は、イニングあたりの得点と失点の合計(の平方根)、ということになる。点が入りやすいほど、1点が勝敗に与える影響は小さくなり、RPW
は大きくなる。
ここでモヤモヤしたのは、交流戦は考慮しなくていいの?という点。
ただ、交流戦を考慮しなければ、リーグ得点とリーグ失点は一致するはず。2×リーグ得点とかにはなっていないので、交流戦も含めて正直に計算していいだろう、と判断しました。
実装
def rc_xr_plus(hitter, league, rc_xr, league_rc_xr):
on_base = Decimal(hitter['打席'])
league_on_base = Decimal(league['打席'])
if not league_on_base:
return 0, Decimal('0')
rc_xr_plus = rc_xr - league_rc_xr / league_on_base * on_base
return str(rc_xr_plus), raw_rc_xr_plus
def rc_xr_win(hitter, full_league, rc_xr_plus):
league_pitcher = full_league['Pitcher'][hitter['League']]
league_hitter = full_league['Hitter'][hitter['League']]
outcounts = return_outcounts(Decimal(league_pitcher['投球回']))
if not outcounts:
return '0'
runs_per_inning = Decimal('3') * (Decimal(
league_hitter['得点']) + Decimal(league_pitcher['失点'])) / outcounts
runs_per_win = Decimal('10') * math.sqrt(runs_per_inning)
rc_xr_win = rc_xr_plus / runs_per_win
return str(rc_xr_win)
おわり
RC
系の指標とXR
系の指標って並べて使う必要あるんですかね?改良というならXR
系だけでいいような。