Run Valueを用いて有効なボール(球速・変化量)を探る
剛速球、キレのあるボール、大きく曲がる変化球……どのような球質のボールが有効かについて色々な説が巷では溢れているが本当に有効なボールとは何だろうか。ここで一度試合の目的を振り返ってみる。試合の目的は勝利であり勝利には得失点が深くかかわっていることから投球の場合は失点をどれだけ防いだかという観点が重要である。よってどのような球質のボールが有効かを判断するには防いだ失点を基準にするのがベターだと思われる。
今回は2017-2020MLBを対象にstatcastのデータとRun Value(得点価値)を用いどのようなボールが有効かを探る。
検証方法
投打の左右に分けたうえで球速を5km/h、ボール変化量を縦横7.5cmで刻みグループ化し各グループのRun Valueの平均をとった。球種という枠組みにとらわれることなく純粋に球速とボール変化量のみで分類をしている。
Run Valueは各年度ごとにbaseballrパッケージを用い算出した1球単位のRun Valueを用いる。値が低いほど失点を防いでいることを意味する。(例えばRun Value/100が-0.50なら100球当たり0.5点失点を防いだことを意味する。)
右投手対右打者
右投手対右打者で見ていくと失点を防ぐうえで有効なボールは
1.自由落下(0cm)よりスライド方向に変化する球。
2.シュート方向への変化が45cmを超える球。
2.速球(150km/h以上)の場合は45cm以上ホップする球。
逆に効果のないボールは
1.低速(135km/h)以下で自由落下(0cm)より沈む球。
2.MLB平均以上の球速(150km/h)と縦変化(45cm)がない状態でシュート変化が45cm未満の球。
が挙げられる。
右投手対左打者
右投手対左打者で見た場合失点を防ぐうえで有効なボールは
1.150km/h以上出て45cm以上ホップする球。
2.140km/h以上出て7.5㎝以上スライド方向へ変化する球。
3.145km/h以上出て自由落下よりスライド方向へ変化する球。
逆を言えばこれ以外の球速・変化量でこれといった有効なボールは見つからない。一般的に同じ利き腕同士の対戦と比べるとそうでない対戦は投手不利だが球質で見てみてもそのような傾向にあるようだ。
1は平均以上の球速かつノビのある速球、2,3は高速で動くカットボールといった感じだがこれらの球種を持っていない右投手は対左打者で苦労しそうだ。
個人的に反対側の利き腕の投手はチェンジアップやスプリットといったオフスピードボールが有効なイメージを持っていたがこの2球種で明確に有効となる球速や変化量の組み合わせは見つからなかった。
左投手対右打者
左投手対右打者の場合も右投手対左打者と同様に失点を防ぐうえで有効なボールは
1.150km/h以上出て37.5cm以上ホップする球。
2.140km/h以上出て7.5㎝以上スライド方向へ変化する球。
3.145km/h以上出て自由落下よりスライド方向へ変化する球。
以上のようなボールである。
左投手対左打者
左投手対左打者の場合は
1.自由落下よりスライド方向へ変化する球。
がとにかく有効なようだ。特に変化が大きいと効果が大きいようだ。
以下、今回分析に用いたRのコード。
#dfには2017-2020のMLBデータが入っている。
#必要な列に絞る。
#re24は年度ごとにbaseballrで計算したRE288の入った列。
#最新版のstatcastのcsvにはdelta_run_expが入っているのでそれでも代用可と思われる。
df <- df %>%
select(pitch_type,pfx_x,pfx_z,type,release_speed,game_year,p_throws,stand,
woba_value,woba_denom,estimated_woba_using_speedangle,re24)
#単位をメートル法に直す
df <- df %>% mutate(pfx_z_cm = 30.48*(pfx_z),
pfx_x_cm = 30.48 * (pfx_x),
velocity = 1.609*(release_speed))
#球速を5km/h、変化量を7.5cmで刻む
Group<- seq(100,170,5)
Group_2<- seq(-75,75,7.5)
df$velocity_bin <- with(df, cut(velocity, Group))
df$pfx_x_bin <- with(df, cut(pfx_x_cm, Group_2))
df$pfx_z_bin <- with(df, cut(pfx_z_cm, Group_2))
#投打の左右、球速、変化量ごとにグルーピングする。
#re24はdelta_run_expでも代用可と思われる。
Run_Value <- df %>%
group_by(p_throws,stand,velocity_bin,pfx_z_bin,pfx_x_bin) %>%
dplyr::summarise(N = n(),
RV_100 = mean(re24, na.rm = TRUE)*100)
write_csv(Run_Value,"球種_Run Value.csv")
この記事が気に入ったらサポートをしてみませんか?