打線シミュレーターv1.0

2020年3月27日金曜日

セイバーメトリクス 製作物

t f B! P L
URLはこちら。
https://nannj.github.io/simgame/

初回読み込みはそこそこ重いので、単に成績設定してシミュ回したいだけであれば軽量版をどうぞ。
https://nannj.github.io/simgamel/

打線を再現するシミュレーターです。
現実の野球の進塁確率を用いて入力した打線の得点力やスコアを算出します。
足の速さ・投手・守備は全て平均的なもので固定。代打や代走も出しません。1試合は8.92イニング(92%で9イニング、8%で8イニングになる)。

他の方がやっているものにこれとかこれがあったり。
というかシミュレータならばgithubで公開されているものがあるので、単に打線組んで試合回したいだけならプログラミングの知識がある人ならすぐにでも求める数字が出せると思います。
ただやはりそれは敷居がやや高いというのと、選手の成績をいちいち手入力するのは面倒、そして何より面白くないということで、jsに書き直してwebアプリという形で公開することにしました。


ベースの部分は短期間でできていたのですが色々増やしたい機能があり、レスポンシブデザインを意識したりで迷走し続けて時間がかかりました。結局後者に関してはスマホで表を扱うのがそもそも不向きであることや、経験上無理にスマホに合わせるよりPCサイトを拡大するほうが見やすいと思っていることから割り切りました。

使い方

ページを開くと「RunSimulation」 「BattingOrder」「SeachAchievements」の3つに分かれているのがわかるかと思います。一つずつ説明していきます。

RunSimlationで試合数と年数を指定してシミュレーションを実行。上限は設定していませんが試合数を増やすとその分だけ実行時間が長くなることに注意。
オーダーには読み込み時に最近20年のいずれかの球団の打線をランダムで入れるようにしてるので、いきなりこれを選んでも問題ないです。

 BattingOrderで打線の編集を行えます。

 名前欄をドラッグ、またはUp・Dnボタンで打順入れ替え。Editボタンで選手情報エディット。Delで選手情報削除って感じです。


イベントは単打・二塁打・三塁打・本塁打・四球・死球・三振・凡打のみで、併殺と犠飛は凡打に含んでいるため、入力する際は打数には犠飛をカウントしたものにしてください。

左下のバーはその打者の長打力(IsoP) と出塁力(OBP)を視覚的にわかりやすくするために載せてます。


そして画面右側、SeachAchievementsは成績検索。


カテゴリ・球団・年度を選んで対象を絞り込み。 1950年以降かつ現存する12球団+近鉄のスタメンデータを内蔵しており、該当する年なら右の「スタメンをセット」を押すとオーダーにその年のスタメンデータをコピーします(データ元はhttps://entamedata.web.fc2.com/sports3/npb_top.html様より)。フィルタ機能でより詳細な条件も設定できます。


 選手データは1936年以降のNPBのリーグ・球団・シーズン10打席以上立った野手を収録。名前欄をドラッグするとオーダーにコピーします。また、右のActionボタンを押すと「控えに追加」と「1~9番へコピー」、球団なら「スタメンへセット」のメニューが表示されます。


シミュレーションを実行するか上の結果表示を選択するとリザルト画面に切り替わります。

 画面上部は得点のデータ。試合得点というのは1試合ごとの得点、年間得点は1年ごとの得点ですね(見たらわかる)。



画面下部では試合の詳細なデータを表示。まずは単純な年単位の打撃成績。100年も回せば大体設定した成績に近いものになります。



上部のタブでモードを切り替えます。



「状況別」でその打線のアウトカウント・走者別になった場合、その回での得点期待値と得点確率を表示します。セイバーメトリクス有識者にはRE24等で馴染み深い表では。

その下には打順別に各状況の発生した割合を載せています。長いので全部閉じてあります。
この打線で2番打者はトータルではどれくらい無死走者1塁で打席が回ってくるのか?みたいなのが知りたかった人はいるんじゃないでしょうか。いないかもしれませんが。


一番右のタブはイベント別の得点期待値。要はその打順でその結果だとどれくらいそのイニングの得点に結びつくのかという数字です。

 打席あたりの期待値ということでそのままだと走者の少ない状況で回ってきやすい1・2番が8・9番よりイベントの価値が低いなんてことになってしまうので、デフォでは打順補正(その打者の打席数/5番打者の打席数)をかけています。



おわりに

 以上が簡単な使い方説明になります。
 ゲームではないんで何時間も熱中できるようなものではないですが、昔の球団のオーダーを眺めたりシミュレートしてみたりというのは結構楽しいもんです。

 本来得点力を測る際はサンプルサイズ的に1000シーズン分くらいは欲しいところなんですが、いきなり1000年回してみてブラウザが固まった!ってなったらアレなんで初期値を100年に設定しています。

 「打順を変えてもそんなに劇的な変化はない」というのは今までも耳にすることはあったのではないかと思われます。しかし、他人の言説やシミュ結果を見るのと実際に自分で色々組み替えてみて結果を確かめるのとではまた違った感想を抱くのではないでしょうか。
ほか、シミュを回して思ったことや考察はまた別の機会に書きます。

バントは守備や状況で変わったりするため厳密なものを作るのは困難ではあるものの、簡易的に企図率・成功率を設定すればすんなり実装できそうなので、いずれ追加したいです。
実装してほしい機能なんかがあったらコメントください。放置気味だったのでコメントの方も放置でしたが、今後は内容があるものには返信したいと思ってますんで。

このブログを検索

Twitter

QooQ