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番へコピー」、球団なら「スタメンへセット」のメニューが表示されます。
シミュレーションを実行するか上の結果表示を選択するとリザルト画面に切り替わります。
画面下部では試合の詳細なデータを表示。まずは単純な年単位の打撃成績。100年も回せば大体設定した成績に近いものになります。
上部のタブでモードを切り替えます。
「状況別」でその打線のアウトカウント・走者別になった場合、その回での得点期待値と得点確率を表示します。セイバーメトリクス有識者にはRE24等で馴染み深い表では。
その下には打順別に各状況の発生した割合を載せています。長いので全部閉じてあります。
この打線で2番打者はトータルではどれくらい無死走者1塁で打席が回ってくるのか?みたいなのが知りたかった人はいるんじゃないでしょうか。いないかもしれませんが。
一番右のタブはイベント別の得点期待値。要はその打順でその結果だとどれくらいそのイニングの得点に結びつくのかという数字です。
打席あたりの期待値ということでそのままだと走者の少ない状況で回ってきやすい1・2番が8・9番よりイベントの価値が低いなんてことになってしまうので、デフォでは打順補正(その打者の打席数/5番打者の打席数)をかけています。
ゲームではないんで何時間も熱中できるようなものではないですが、昔の球団のオーダーを眺めたりシミュレートしてみたりというのは結構楽しいもんです。
本来得点力を測る際はサンプルサイズ的に1000シーズン分くらいは欲しいところなんですが、いきなり1000年回してみてブラウザが固まった!ってなったらアレなんで初期値を100年に設定しています。
「打順を変えてもそんなに劇的な変化はない」というのは今までも耳にすることはあったのではないかと思われます。しかし、他人の言説やシミュ結果を見るのと実際に自分で色々組み替えてみて結果を確かめるのとではまた違った感想を抱くのではないでしょうか。
ほか、シミュを回して思ったことや考察はまた別の機会に書きます。
バントは守備や状況で変わったりするため厳密なものを作るのは困難ではあるものの、簡易的に企図率・成功率を設定すればすんなり実装できそうなので、いずれ追加したいです。
実装してほしい機能なんかがあったらコメントください。放置気味だったのでコメントの方も放置でしたが、今後は内容があるものには返信したいと思ってますんで。
上部のタブでモードを切り替えます。
「状況別」でその打線のアウトカウント・走者別になった場合、その回での得点期待値と得点確率を表示します。セイバーメトリクス有識者にはRE24等で馴染み深い表では。
その下には打順別に各状況の発生した割合を載せています。長いので全部閉じてあります。
この打線で2番打者はトータルではどれくらい無死走者1塁で打席が回ってくるのか?みたいなのが知りたかった人はいるんじゃないでしょうか。いないかもしれませんが。
一番右のタブはイベント別の得点期待値。要はその打順でその結果だとどれくらいそのイニングの得点に結びつくのかという数字です。
打席あたりの期待値ということでそのままだと走者の少ない状況で回ってきやすい1・2番が8・9番よりイベントの価値が低いなんてことになってしまうので、デフォでは打順補正(その打者の打席数/5番打者の打席数)をかけています。
おわりに
以上が簡単な使い方説明になります。ゲームではないんで何時間も熱中できるようなものではないですが、昔の球団のオーダーを眺めたりシミュレートしてみたりというのは結構楽しいもんです。
本来得点力を測る際はサンプルサイズ的に1000シーズン分くらいは欲しいところなんですが、いきなり1000年回してみてブラウザが固まった!ってなったらアレなんで初期値を100年に設定しています。
「打順を変えてもそんなに劇的な変化はない」というのは今までも耳にすることはあったのではないかと思われます。しかし、他人の言説やシミュ結果を見るのと実際に自分で色々組み替えてみて結果を確かめるのとではまた違った感想を抱くのではないでしょうか。
ほか、シミュを回して思ったことや考察はまた別の機会に書きます。
バントは守備や状況で変わったりするため厳密なものを作るのは困難ではあるものの、簡易的に企図率・成功率を設定すればすんなり実装できそうなので、いずれ追加したいです。
実装してほしい機能なんかがあったらコメントください。放置気味だったのでコメントの方も放置でしたが、今後は内容があるものには返信したいと思ってますんで。
最後に出てきたバントですが、確かに無いのは気になりました。頭から読んでて、理由があってあえてバントを除外したのかなと思ってました。
返信削除完全に思考停止してテキトーに「ぼくのかんがえたさいきょうだせん」を作ったとき、2番に"バント用"の打者を好き好んで置く人ってどれだけいるんだろう。
実際は2番=バントみたいな固定観念?がそこはかとなく根強く存在するのも事実ですし。
バントの有効性の検証は本来は作者さまの研究範囲外だったというのであれば、余計な仕事を強いることになりそうですが、バントが実装されたら面白いと思います。(実装されても使う人がいるのかが問題笑)
・バントは他のイベントと違って作戦として選択するものであり、打力や投手・試合状況によって打席結果やそもそも企図するかどうか自体が変わる(=バイアスがかかる)ため、結果だけから定量的な評価を与えるのが難しい
返信削除・例えば600打席で30犠打だったとしても、打順によってバントしやすいシチュエーションの発生する頻度が違うことから、想定した犠打数にならない場合がある
・バント自体は得点数に大きなインパクトを与えないというのが定説
などの理由から、とりあえずはシミュレーションから一切を除外して作りました(先行研究も除外されているものが多いですがおそらくは同じような理由でしょう)
しかし3つ目を証明するためにバントの得点への貢献度を測るには必要になってきますし、「バントの有用性」はこの手の研究の鉄板ではあるので、実装予定としました。
あと、恐らくですが投手が打席に入るセ・リーグは投手に代打が出ないこともあってバントの有無の影響は大きそうです。
納得したというか、「ですよねー」という感想です。
削除丁寧にご教示いただきありがとうございました。
大変楽しく拝見させていただきました.
返信削除信頼区間の計算では,負の二項分布を仮定して計算を行っているという認識でよろしいでしょうか.
ありがとうございます。
返信削除信頼区間の計算方法は二項分布のものしか知らなかったのでそれを使ってます…
打線シミュレート試してみましたが面白いです。
返信削除質問があるんですが、この打線シミュレートの併殺打の起きる確率や
無死一塁から無死二塁になる進塁打の確率、無死一塁から二塁打を放って
長躯ホームインとなる確率などはどういう数値設定になっているのでしょうか?
細かいことかもしれませんが秘密というわけでなければ全て知りたいです。
ありがとうございます。
削除進塁は現実の同イベントにおける発生確率と同様のものにしています。
多すぎて書ききれないので例を挙げると、無死1塁での打席結果が安打ではないBIPだった場合、61.8%で1死1塁に、24.7%で併殺に、10.8%で進塁打に、1.7%で無死2・3塁に、1%以下で走者が3塁に進んだり生還したり1・3塁になったりなどします。
また、無死1塁から2塁打を放った場合、29.3%で1塁走者が生還し、66.3%で走者2・3塁、2.0%で2塁塁走者が生還した上で走者3塁に、1%以下で2塁走者が刺されて打者走者が生き残ったり打者走者が刺されて2塁走者が生還したりなどします。
回答ありがとうございます。
削除やはりきちんと細かい数値設定されてるのですね。
もし更なるverアップがあった際にはそういう数値もいじれるようになってたら嬉しいです。
進塁打という概念はありますか?
返信削除二つのチームで対戦できるようにしてほしいです
削除とても素晴らしいですね
返信削除