先制点における勝率の二項ロジスティック回帰モデル
はじめに
今回初めてAdvent calendarに参加しました学部3年の齋藤です。今回は実際のデータから作成した野球の統計モデルを紹介していきたいと思います。
狙い
- 過去の先制点に着目した勝率から傾向を見つけて今後の試合展開に役立てる(ための第一歩)。
- 身近な興味のあるものをモデリングしてみよう(とするための第一歩)。
モデル詳細
今回、試合終盤に先制した方が勝率が高くなると仮説を立て、かつ勝率が0~1で収まるためロジスティック回帰モデルを採用しました。
ロジスティック回帰とは
応答変数が2値で表す場合に用いるモデルであり,関係式はロジスティック方程式(シグモイド関数)となり数式で表すと
Pr(Y|X)=\frac{1}{1+e^{-(b_0+b_1x_1+…+b_nx_n)} }
と表せる。数式におけるb_1,b_2...を回帰係数、b_0を定数項と呼ぶ。
今回、説明変数xを先制した得点x_1(Score)とイニングx_2(Inning)、応答変数Prを勝敗Pr(1:勝ち0:負け)(Result)とした。また、各説明変数の係数は推定の事後平均値を算出用いて以下のようになった。
b_0 | b_1 | b_2 |
---|---|---|
-0.02651897 | 0.74092991 | 0.03217324 |
データ
六大学準硬式野球過去10年分のデータ(取れるだけ全部)
参照サイト(以下)をcsvファイルとして作成した。
Score | Inning | Result |
---|---|---|
3 | 1 | 1 |
4 | 1 | 1 |
2 | 1 | 1 |
2 | 1 | 1 |
1 | 1 | 1 |
・ | ・ | ・ |
・ | ・ | ・ |
・ | ・ | ・ |
サンプルコード
library(rstan)
d <- read.csv(file='NLab.csv')
data <- list(N=nrow(d), S=d$score, I=d$inning, R=d$result)
fit <- stan(file='NLab.stan', data=data, seed=1234)
plot(fit)
data{
int N;
int<lower=0> S[N];
int<lower=0> I[N];
int<lower=0, upper=1> R[N];
}
parameters {
real b[3];
}
transformed parameters {
real q[N];
for (n in 1:N)
q[n] = inv_logit(b[1] + b[2]*S[n] + b[3]*I[n]);
}
model{
for (n in 1:N)
R[n] ~ bernoulli(q[n]);
}
結果
横軸をイニング、縦軸を勝率とし数値化、可視化した結果以下のようになった。
横軸を得点にしたものも作成したが線形になったため割愛させていただきます。。
先制した得点数が1点の時の勝率 | 先制した得点数が3点の時の勝率 | 先制した得点数が5点以上の時の勝率 |
---|---|---|
[1,] 0.6702522 | [1,] 0.6667553 | [1,] 0.6548684 |
[2,] 0.8104221 | [2,] 0.8075978 | [2,] 0.7992219 |
[3,] 0.8999064 | [3,] 0.8980191 | [3,] 0.8930583 |
[4,] 0.9497703 | [4,] 0.9486481 | [4,] 0.9460020 |
[5,] 0.9754705 | [5,] 0.9748461 | [5,] 0.9735122 |
[6,] 0.9881847 | [6,] 0.9878499 | [6,] 0.9871966 |
[7,] 0.9943470 | [7,] 0.9941714 | [7,] 0.9938558 |
[8,] 0.9973041 | [8,] 0.9972132 | [8,] 0.9970618 |
[9,] 0.9987163 | [9,] 0.9986697 | [9,] 0.9985973 |
先制した得点数が1点の時の勝率
先制した得点数が3点の時の勝率
先制した得点数が5点以上の時の勝率
さらに各イニングのオッズ比を比較すると以下のようになった。
表の読み方として、右上の赤縁の数字を用いて説明させていただくと9回に先制して勝つ確率は1回に先制して勝つ確率の382.7708倍であることを表している。
考察&まとめ
仮説通り終盤のイニングで先制した方が勝率が高くなった。
ただし多く得点しても勝率にあまり変化はなかった。
→先制得点が少ない時は投手戦(少ない点で勝敗が決まる試合)であり、先制得点が多い時は乱打戦(得点をたくさん取り合う試合)になっていると考えたため。
謝辞
だいぶ偏った内容となりましたが最後までお読みいただきありがとうございました。
参考文献
StanとRでベイズ統計モデリング 共立出版 松浦健太郎著書
Author And Source
この問題について(先制点における勝率の二項ロジスティック回帰モデル), 我々は、より多くの情報をここで見つけました https://qiita.com/89_fruit/items/35c50db4d7697764b9c3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .