RのWeb制作

Webサービス制作のための技術情報を。データ分析(Python、機械学習コンペ他)や自作野球ゲームMeisyoのこと中心。

Web制作 Meisyo

[Meisyo]速球の地位向上

投稿日:2019年3月22日 更新日:

[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. 回帰分析を行う

p = sp * -0.00118 + 0.32
重相関 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)は((sp - ss) / 10 + 1)で表される。

反応の平均値がAVG(BTss) = 40.09

速球の計算値(調子、ランダム値は平均値)は

$km = floor(0.8576 * $st_sp + 83.74);

を考えると、

140km/hの場合、st_spは65.60
その場合の被打率は0.1548。
ブレの最大値(cm)は((sp - ss) / 10 + 1) = 25.51 / 10 + 1 = 3.551であり、
最小値0、最大値が3.551なので、ブレの平均値は1.78cm。

ブレがなくなる → sp = ssの場合(sp=40.09)は
被打率は0.2727

そのことから、(0.2727 - 0.1548) / 1.78 = 0.06623
1cmのブレに対して被打率が0.06623下がるので、

140km時点の被打率を3割下げることを想定すると、
被打率は0.1086となり、ブレはさらに0.6975cm程度必要となる。

つまり、ブレの最大値を4.955cmにする必要があるので、
補正値は((sp - ss) / 6.45 + 1)で表される。

解決策の提示

補正値は((sp - ss) / 6.45 + 1)とする。

そうすることで速球の被打率が現行の70%になることが予想される。

速球投手がだいぶ強くなりました!
これで速球投手が報われるとよいのですが・・・。

-Web制作, Meisyo

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

[Meisyo]練習に実施例を追加

練習がさらにわかりやすくなりました。 赤枠の「ミニゲーム実施例」をクリックすると・・・ その練習のミニゲームを実際に行った動画を見ることができます。 「こんな感じでやるのか~」と目標になるのかな?と思 …

手書き数字診断士(機械学習)ver 0.0

手書き数字診断士、まずは動くようにしました。 ただ、初っ端から間違えています・・・! 動画 http://webmaking.rei-farms.jp/wp-content/uploads/2018/ …

オープンβテストを開始する(かも)

オープンβテスト用の機能作成が終わりました。 meisyo3_alpha(ざっくり試合機能)から、丸2か月ですか・・・なかなか掛かりました;つД`) イメージ図を記事の後ろの方に載せているので、興味が …

Meisyo作者がサービスを作るにあたっての考え方

私は、以下の考え方に違和感を覚えている。 いかにそのサービスに、ゲームに集中、執着させるか。 ゲームであれば、毎日何時間も時間を使わせて、注目させて、お金を支払うように仕向けるべきである。 無課金ユー …

[Meisyo]投手交代アルゴリズムの変更

要望 投手起用と代打について現状自分は投手起用をこんな感じにしていて 代打は6回以降にしたいのですが投手の数の関係で9回以降に代打を起用された場合に野手が登板することになり困っています。代打起用を何回 …