今回は、得点と勝利の関係について
プロ野球のデータを使って、解析してみます!
参考は例によって偉大なる著書
Rによるセイバーメトリクス入門です。
得点と勝利の関係について
すべてのスポーツの目標は、試合に勝つことです。
野球において勝利とは、相手より多くの点を取ることに尽きます。
その中で、自チームが取った得点 と 自チームが取られた得点
は大きく勝敗に影響を与えると言われています。
そのあたりの解析を前回、前々回と行いました。
プロ野球データFreakからの抽出
プロ野球のデータを使用する上で、
使用するデータは
プロ野球データFreakから抽出しました。
https://baseball-data.com/team/standings.html
このようなデータがありますので
コピーして貼り付けを繰り返します。
2009年から2022年(2020年短縮シーズンは除く)のデータを
CSV形式にして保存しました。
このデータをRに取り込みます。
my_teams_npb <- read_csv("data/npb.csv")
そうすると格納されました。
head(my_teams_npb)
yearID teamID G W L D Wpct R R_ave RA RA_ave RD Ave
<dbl> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2022 YS 143 80 59 4 0.576 619 4.33 566 3.96 53 0.25
2 2022 DB 143 73 68 2 0.518 497 3.48 534 3.73 -37 0.251
3 2022 HT 143 68 71 4 0.489 489 3.42 428 2.99 61 0.243
4 2022 YG 143 68 72 3 0.486 548 3.83 589 4.12 -41 0.242
5 2022 C 143 66 74 3 0.471 552 3.86 544 3.8 8 0.257
6 2022 CD 143 66 75 2 0.468 414 2.9 495 3.46 -81 0.247
run_diff_npb <- ggplot(my_teams, aes(x = RD, y = Wpct))+
geom_point()+
scale_x_continuous("Run differential")+
scale_y_continuous("Winning percentage")
run_diff_npb
そうすると、こんなグラフができます
プロ野球 得失点差と勝率の散布図
やはり、得失点差と勝率が相関関係にあるグラフになりました!
恐るべし・・・得失点差は勝率に大きく関係してきます。
線形回帰
ではこのグラフについてモデル化します。
linfit_npb<- lm(Wpct ~ RD, data = my_teams_npb)
linfit_npb
Call:
lm(formula = Wpct ~ RD, data = my_teams_npb)
Coefficients:
(Intercept) RD
0.5000833 0.0007504
ということで、以下のようなモデルが成り立つことがわかりました。
勝率 = 0.5000833 + 0.0007504×得失点差
グラフ化するとこうなります!
美しいグラフですね。
モデルからの外れデータの解析
それでは、過去このモデルから外れたチームについて解析します。
まずは、残差について計算します。
my_team_aug_npb <- augment(linfit_npb, data=my_teams_npb)
このグラフを作成します。
base_plot_npb<- ggplot(my_team_aug_npb, aes(x = RD, y = .resid))+
geom_point(alpha = 0.3)+
geom_hline(yintercept = 0, linetype =3)+
xlab("Run differential")+ylab("Residual")
グラフはあとのお楽しみです。。。
モデルとの差分が大きい順に6チーム抽出します。
highlight_npb <- my_team_aug%>%
arrange(desc(abs(.resid)))%>%
head(6)
これをグラフにラベル付けして完成です。
base_plot_npb+
geom_point(data = highlight_npb, color=crcblue)+
geom_text_repel(data = highlight_npb, color = crcblue,
aes(label = paste(teamID, yearID)))
そうするとこのような結果になりました!!
このグラフは非常に面白いですよ!
そうすると、まず目立つのが
2012年のドラゴンズ
この年のドラゴンズは、2010年、2011年と連覇のあと
高木守道監督に交代となった年です。
得点が+18点となっていて、
モデル上では勝率0.514、勝利65勝と予測されました。
なんと、10勝近く上乗せしてしました。
ただ、巨人が強かったのかも・・・
もう一つ目立つのが、
2013年のソフトバンクホークス
得点が98点も上回っているのに、勝ち越しはおよそ4勝
なんなら楽天よりもいい成績ですが・・・
結果は4位となっています。
誤差について
データについてはある程度ばらつきがあります。
では、どこまでが誤差の範囲内なのでしょうか?
ここでは、平均二乗誤差を求めます。
(モデルとの差分を2乗して、平方根をとります)
resid_summary_npb <- my_team_aug_npb%>%
summarize(N =n(),avg = mean(.resid),
RMSE = sqrt(mean(.resid^2)))
# A tibble: 1 × 3
N avg RMSE
<int> <dbl> <dbl>
1 156 -9.47e-17 0.0275
そうすると、 RMSEが0.0275となりました。
±0.0275の間にデータの3分の2が含まれ
2×±0.0275の間に95%のデータが含まれます。
つまり、
144試合のうち±4勝ぐらいは誤差の範囲内ということになります。
なにはともあれ、
得点と失点の得失点差で大方勝率は予測できます。
ドラゴンズは 2023年6月24日現在
失点はリーグ2位の211点ですが、、、
得点はワーストの177点
そして得失点差が-34
やはり得点を増やしていくしかないですね。