[Meisyo]ビッグデータから学ぶ試合の基礎設計4から早4か月。
「速球の上方修正してほしいな」というコメントが届きました。
すみません!
制球に比べ、速球は蔑ろにされてきたことはわかっております。
速球投手が強くなるように調整を近日中に行います。
今回は、速球の補正値を上方修正するために、速球の高低でどれくらい打率が変わるのか検証します。
目的
・速球の補正値を上方修正する。
やること
・あるべき姿を設定する
速球が上がれば打率はかなり落ちる
・現状把握
・全体データ読み込み
・分析
・解決策の提示
あるべき姿を設定する
速球が上がれば打率はかなり落ちる
→かなりってどれくらい?
3割程度の減少を見込んでいます。
→現状どうなってんの?
[Meisyo]ビッグデータから学ぶ試合の基礎設計3を見る限り、速球が上がると防御率、WHIPともに上がってる。・・・ゲーム設定大丈夫か?
→速球をどれくらい上げれば明確な差が出るの?
それはデータ見てから設定しよう。
現状把握
全体データ読み込み
SQLで必要データのみ抽出
↓
Pythonでデータクレンジングとか
分析
1. 全体の把握
直球(pc_br=0)の投球コースを把握
設計通り隅に投げ分けています。
2. 被打コースの把握
ヒット系 = 1、空振り等 = 0として計算。あとは関係ないログを削除しました。
# ヒット = 1, 打ち損じ = 0 df_test['result'] = df_test['result'].replace(['HR', '1B', '2B', '3B'], 1.0) df_test['result'] = df_test['result'].replace(['MH', 'SS', 'SF', 'DP' ,'FB'], 0.0) # 関係ない項目を削除 df_test = df_test[df_test['result'] != 'POINT'] df_test = df_test[df_test['result'] != 'BB'] df_test = df_test[df_test['result'] != 'SB'] df_test = df_test[df_test['result'] != 'SBO'] df_test = df_test[df_test['result'] != 'ER'] df_test = df_test[df_test['result'] != 'SO'] df_test = df_test[df_test['result'] != 'BN'] # 振っていない df_test = df_test[df_test['result'] != 'SN'] # 振っていない
ヒット系(赤)、打ち損じ(青)で表示しました。
うん。ほとんど違いが判らない・・・。
3. 球速ごとのヒット系、打ち損じのヒストグラム作成
4. 球速ごとのヒット系、打ち損じの各ヒストグラム作成
5. 球速ごと(5kmずつ)の被打率グラフ作成
いい感じで被打率が球速によって落ちています。
すごくきれいに線が引けそうなグラフです!
6. 回帰分析を行う
重相関 R=0.868
速度spが1km早くなると0.118% 被打率(打率ではない)が落ちる。
7. 現在の補正値を確認する
球速の補正値は以下の通り。
$rand_mt = mt_rand(0, (($G['pc_bbC'] - $G['bt']['S_b_ss']) / 10 + 1) * 1000)/1000; // 速球 vs 反応
ブレの最大値(cm)はで表される。
反応の平均値が
速球の計算値(調子、ランダム値は平均値)は
$km = floor(0.8576 * $st_sp + 83.74);
を考えると、
140km/hの場合、st_spは65.60
その場合の被打率は0.1548。
ブレの最大値(cm)はであり、
最小値0、最大値が3.551なので、ブレの平均値は1.78cm。
ブレがなくなる → sp = ssの場合(sp=40.09)は
被打率は0.2727
そのことから、
1cmのブレに対して被打率が0.06623下がるので、
140km時点の被打率を3割下げることを想定すると、
被打率は0.1086となり、ブレはさらに0.6975cm程度必要となる。
つまり、ブレの最大値を4.955cmにする必要があるので、
補正値はで表される。
解決策の提示
補正値はとする。
そうすることで速球の被打率が現行の70%になることが予想される。
速球投手がだいぶ強くなりました!
これで速球投手が報われるとよいのですが・・・。