
以下のリンクから実行ファイルおよびHTMLファイルをzip圧縮したファイルをダウンロードできます。
battingordersim20260619.zip
解凍しますと、npbscraper.exe , battingordersim.exe , analyzebunt.exe , viewdetailgame.html , viewlineupranking.html , viewseries.html , viewstats.htmlが出来ますので、任意のフォルダに配置してください。
npbscraper.exe : NPB.jp日本野球機構サイトの公開記録から選手データを参照してExcelファイルを自動生成します(DH制として生成します)。ただし2025年以降のみ対応。執筆時点が2026年のため、2025年および2026年のみ実行確認済です。2024年以前は非対応です。
battingordersim.exe : シミュレーションアプリ本体です。
analyzebunt.exe : バント解析に特化したシミュレーションアプリ本体です。内部的にbattingordersim.exeを実行します。
どれもWindowsのコマンドプロンプトまたはWindows Power Shellで実行できます。--helpオプションで各コマンドラインパラメータの説明が表示されます。
viewdetailgame.html : 1球ごとの詳細な結果detailgame.xmlを表示します。ゲームを行うどの実行モードでも生成されますが、高速化のために初めの1試合のみしか保存されません。全試合はおなじような全球処理は行いますが、どのような内容かを確認するためのサンプルの目的となってます。
viewlineupranking.html : --gameperlineupの打順の全パターン実行のモードで生成されるlineupranking.xmlを表示します。打順ベスト100、ワースト100が表示されます。少ない試合数ですと統計的誤差が大きいですから1打順につき2000試合はやったほうがいいです。時間がかかります。
viewseries.html : --seriesと--save-series指定での複数試合実行モードで結果series.xmlが表示できます。勝率や得失点グラフなどが表示されます。1000試合は5秒程度でシミュレーション実行できます。
viewstats.html : --series指定での複数試合実行モードでの結果stats.xmlが表示できます。viewseries.htmlにも選手スタッツは表示されますが項目数が少ないです。こちらの画面のほうが項目数が多いです。
x86系CPUのWindowsのOS上のローカル環境で動作します。コマンドプロンプトもしくはWindows Power Shellでご利用ください。
Windows Power Shellの場合は、./npbscraper.exeや./battingordersim.exeのように./と実行ファイル名の前にパス記述が必要です。
HTMLファイルの表示はOSを問いません。ブラウザで表示してご利用ください。ローカル環境で動作します。ネット上のサービスは利用しておりません。
※Windows Power Shellでは実行ファイルの前に./を付けて実行してください。
2025年の選手データをダウンロードしてエクセルファイルを作成します。
これでroster2025@作成日時.xlsxファイル(主力選手)とroster2025@作成日時others.xlsx(その他の選手)が作成されます。roster2025@作成日時.xlsxファイルのみがシミュレーションで使用する入力ファイルとなります。
各球団ごとにシートが分かれてます。順番はセリーグ、パリーグの順で、順位の順番になってます。
シーズン途中でのデータ取得の場合はその時点までのデータとなります。
このExcelファイルは必要に応じて編集していただいても結構です。本アプリでは主力選手として1チームで出場試合数の多い18人のみが選定されてます。
特に先発ピッチャーはエース級一人と平均的ピッチャー一人の2人のみが主力選手となってます。追加する場合はroster2025@作成日時others.xlsxから選手の行をコピペしてご利用ください。
選手のID番号はチームごとに連番になってます。編集する場合も重複しないようにしてください。
スターティングオーダーの打者9人の役割は”スタメン”となってます。編集する場合は”スタメン”は9人のみとしてください。”スタメン”の守備位置も重複しないようにしてください。
2025年,2026年のセリーグはDH制ではありませんが、DH制としてエクセルファイルは生成されます。
”スタメン”ではない打者は”控え”としてください。
次にシミュレーションを実行します。まずは1試合のみやってみます。対戦する2チームとしてExcelシート名の番号を2つ指定します(セリーグは1から6、パリーグは7から12。順位順となってます)。シミュレーションではDH制のみを扱います。
として実行しますと1ゲームだけの詳細な結果がdetailgame.xmlに保存されます。
シミュレーションを実行しますと各種XMLファイルが作成されます。各XMLファイルの表示ができるHTMLファイルがあります。実行モードによって生成されるXMLファイルは異なります。
ブラウザのアドレス欄にHTMLファイルをドロップして表示します。すると、ファイルドロップ枠が表示されますので、指定されたXMLファイルをドロップすると表示されます。
viewdetailgame.htmlの画面にdetailgame.xmlをドロップしますと球場表示での確認ができます。
再生ボタンなどのボタン類がありますので、押すと打者などの状態が遷移します。
スコアボードをクリックしますと任意のイニングへジャンプできます。
一番下に検索パネルがあります。ここで任意のイベントを検索できます。検索結果をクリックすることで該当打席にジャンプできます。
直近1か月のエクセルを作成する方法
2025シーズン開始からシーズン中に頻繁に複数回以下を実行しておいたとします。例えば1週間おきに定期的に実行しておいたとします。
を実行していたとしますと、html_cacheというキャッシュフォルダに2025@取得日時というフォルダが作成されていきます。今日も同様に取得したとします。また1か月前に生成したキャッシュ内サブフォルダがあるとします。
シーズン中の場合には公式記録は随時更新されていくため、試合数が増えていくごとに打席数などの数値が増えていきます。
--subに続いてhtml_cache内のサブフォルダ名を2つ指定します。
そうしますと、今日のデータから1か月前以上のデータを引き算してデータがマージされます。つまり、直近1か月のデータのみでExcelファイルが生成されます。
出力ファイル名は1つ目のサブフォルダ名_sub_2つ目のサブフォルダ名.xlsxとなります。
この例の場合は1か月でしたがキャッシュのサブフォルダの日付次第で、さまざまな期間のデータを抽出できます。
--addオプションの場合は引き算ではなく足し算を行います。--addまたは--subを指定した場合はキャッシュを利用するため、インターネット上の公式サイトにはアクセスしません。
--subや--addは1つ目に指定したデータに対して、2つ目に指定したデータで引き算/足し算を同じ選手名の行で演算します。各種率に関しては、再計算してます。
ただし、--subの場合は、データ不足となる場合があります。また先発投手や中継ぎ投手などが自動選出されない場合があります。先発投手で30イニング以上、中継ぎ投手で3ホールド以上、抑え投手で1セーブ以上が必要です。
キャッシュを消去するには、エクスプローラでhtml_cache内のサブフォルダを削除してください。
--subや--addオプション指定で、サブフォルダ名を1つのみ指定で実行しますと、キャッシュからエクセルファイルをオフラインで生成します。
1試合実行
のように実行します。11 7というのが対戦する2つのチームの番号で、これはエクセルファイルでのチームが掲載されているシート番号です。シート名に番号がありますのでそれを指定します。
はじめに指定したほうのチームが後攻となります。
複数試合実行
のように実行します。1000試合は5秒程度で実行できます。detailgame.xmlは初めの1試合のみの出力となります。
打順全パータン実行
のように実行します。デフォルトでは打順1番から6番までのスタメン6人の打順を総当たりで実行します。1パターンにつき上記では2000試合実行します。detailgame.xmlは初めの1試合のみの出力となります。
1パターンにつき2000試合の場合は6の階乗(720パターン)の2000倍の試合数となります。
1パターンにつき1000以下ですと統計的誤差が結構ありますので、あまり結果に信頼性はありません。統計的な誤差を少なくするために2000以上はほしいところです。
--exchangeオプションを使用することで任意の複数の打順番号のみをパターン対象にして計算量を劇的に少なくすることができます。--exchange 345としますと6パターンとなります。
--list : --inputで指定されたエクセルファイルからチーム名と番号を読み取りダンプします。
--pitcher-aまたは--pitcher-b : はじめ/2番目に指定したチームの先発ピッチャーを指定します。aceであればエース級、backupであれば平均的投手(デフォルト),数値であればエクセルの番号列が一致する投手の指定となります。
--perm-aまたは--perm-b : はじめ/2番目に指定したチームの打順の数値列を指定します。123456789がデフォルトです。213456789としますと、打順1番と2番が入れ替わります。--gameperlineupで全パターン実行する場合、--perm-aで指定した初期打順から全パターンが生成されます。
--exchange : --gameperlineupで全パターン実行する際に、変更対象とする打順位置を指定します。
デフォルトは123456(上位6位置)です。セイバーメトリクス的には下位打者(7,8,9番)の打順変更は得点への影響が小さいため、上位6打者のみの全パターン(6! = 720パターン)を計算することで、計算量を9全パターン(9! = 362,880パターン)から大幅に削減できます。
全パターン実行時には720パターン × ゲーム数となるため、計算時間が各段に短くなります。789と指定すると7,8,9位置のみを変更して3! = 6パターンを生成します。
--perm-aと組み合わせることで、指定した初期打順から、指定位置のみをシャッフルした全パターンを実行できます。
--seed : 番号を指定すると乱数のシード値が変わります。同じ設定で異なる内容の試合を行う場合に使用します。複数試合を自動的に行う場合は内部処理で自動的にシードの番号が連番となります。
--no-steal-aまたは--no-steal-b : はじめ/2番目に指定したチームの盗塁を禁止します。
--no-bunt-aまたは--no-bunt-b : はじめ/2番目に指定したチームのバントを禁止します。
--no-handedness : 打者の左右打ちとピッチャーの左右投げの相性で安打する確率を変更するかどうかの設定です。デフォルトでは変更します。オプション指定で無効にできます。ただし、打者やピッチャーの過去データは使用してません。一般的に右打ち打者は左投げより右投げピッチャーを不得意とする傾向があり、左打ち打者は右投げより左投げピッチャーを不得意とする傾向がありますから、平均的な調整を行ってます。実際は個人によっては逆の傾向となるのですが、本シミュレーションでは一律の調整となってます。
--pattern-limit : 通常は使用しません。--gameperlineupでの実行が時間がかかるパターン数の制限を行うデバッグ用オプションです。数値を指定するとそのパターン数以降は処理しません。
--verbose : 通常は使用しません。デバッグ用のダンプ表示用です。
--dump-order-teamおよび--sort-by : --inputでファイル指定は必要ですが、通常の実行と異なり2チームの番号指定はしません。--dump-order-teamでチーム番号を1つ指定します。--sort-byで打順の構成方法を指定すると、打順の数値列および選手名およびソートに使用した率をダンプします。--perm-aまたは--perm-bで利用できる数値列です。--sort-byには以下のキーワードが使用できます。
batting(打率順), batting-reverse(打率逆順), obp(出塁率順), obp-reverse(出塁率逆順), ops(OPS順), ops-reverse(OPS逆順), slg(長打率順), slg-reverse(長打率逆順), hr(本塁打率順), hr-reverse(本塁打率逆順),sabemetrics(従来型セイバーメトリクス理論順), sabemetrics-reverse(従来型セイバーメトリクス理論逆順)
ストライク/ボール/ファウル
四球、死球
打率、長打率、本塁打率、出塁率
防御率
平均投球回数
守備範囲(走力で判定)
エラー、パスボール、ワイルドピッチ
犠牲バント、犠牲フライ、タッチアップ
盗塁、走塁でのランナー走力
シングルヒット、2塁打、3塁打、ホームラン
ダブルプレー
打球方向、ゴロ、ライナー、フライ、ファウルフライ
ピッチャー交代。負けゲーム、勝ちゲーム、点差が離れた勝ちゲームでの交代
球数でのピッチャー交代
代打。打力が低い打者に打力の高い代打
代走。走力の低いランナーに走力の高い代走
延長戦。延長戦は常になしで実行されます。つまり9回同点の場合は引き分けとして処理されます。
球速、球種、コース
フィルダースチョイス
エラー率の個人差
ピッチャーの疲労度。1試合内での疲労度も、複数試合での連投の疲労度も考慮されません。
左右打ちと左右投げの選手ごとの相性の個人差
投手と打者の個人的相性
ピッチャーの打席。常にDH制として処理されます。
牽制球
キャッチャーの盗塁阻止率
野手の肩の強さ
カウントによるバットスイングの違い
控え選手、投手の多さ。交代の多さ。限定的な人数でシミュレーションは実行されます。
本シミュレーションにおいて、全打順パターンの検証は計算量が膨大になるという課題があります。
例えば、スタメン9人の全順列は9! = 362,880パターンです。これに各パターンで複数試合を実行すると、実行時間が非常に長くなります。
| 変更対象人数 | 変更位置 | パターン数 |
|---|---|---|
| 9人(全員) | 123456789 | 9! = 362,880 |
| 8人(上位8位) | 12345678 | 8! = 40,320 |
| 7人(上位7位) | 1234567 | 7! = 5,040 |
| 6人(上位6位) | 123456 | 6! = 720 |
| 5人(上位5位) | 12345 | 5! = 120 |
| 4人(上位4位) | 1234 | 4! = 24 |
| 3人(上位3位) | 123 | 3! = 6 |
| 2人(上位2位) | 12 | 2! = 2 |
従来型セイバーメトリクス理論によりますと、打順の下位の打者(特に7,8,9番)の打順変更は得点への影響が相対的に小さいとされています。全パターンを実行する際に--exchangeオプションで上位打順の123456や12345を指定することで計算量を劇的に減らすことが可能です。。
従来型セイバーメトリクス理論での打順(--dump-order-team --sort-by sabemetricsで得られた打順数値列を--perm-aで指定)を、上位5位置(--exchange 12345)のシャッフルで5000ゲーム実行する場合、5! = 120パターン × 5000ゲーム = 60万ゲームの検証が実現可能になります。この方法により、統計的に十分な信頼性を保ちながら、計算時間を実用的なレベルに抑えることができます。
従来のセイバーメトリクスは過去の大量の実績データを元にして、調査対象となる場面に適合するデータを抽出する統計学的調査が必要でした。
そのため過去事例が少ない場合には統計的誤差が大きくなるという問題がありました。
結局、計算シミュレーションと併用する必要がありました。
また、完全に同じ前提での過去事例を得ることが難しいことも問題です。例えば、ノーアウトランナー1塁で犠牲バントをするかどうかは、バントをしたデータとしないデータを比較する必要があります。
ところが、バントをしたデータというのはバントをしたほうがいいと判断した場面であり、バントをしなかったデータというのはバントをしないほうがいいと判断した場合のデータです。対戦チームもピッチャーも異なります。データが導出される前提が異なるのです。
本シミュレーションでは打者や投手の能力値(打率や防御率など)があれば、結果が得られるという点が異なります。バント禁止も戦略として指定できます。
また、従来のセイバーメトリクスでは特定の場面に対しての確率分布は細かく出せるものの、ゲームが進んだ後はどのような影響が出るのかといった、未来の影響まで測ることは困難でした。
本シミュレーションではゲーム全体をそのまま行いますので、ゲーム全体に及ぶ影響も結果に含まれます。
大量の試合数をこなすことにより統計的誤差を小さくすることができます。
シミュレーション結果の信頼性は試合数に大きく依存します。本シミュレーションで要求される試合数は、結果に求める精度(許容誤差)によって異なります。実際のテスト結果から以下のような関係が確認されています。
異なるシード値での複数実行により、試合数による勝率の安定性を検証。
| 試合数 | シード値 | 西武勝率 | ソフトバンク勝率 | 勝敗内訳(西武) | 平均勝率 |
|---|---|---|---|---|---|
| 10試合 | 1000001 | 12.5% | 87.5% | 1W - 7L - 2D | 12.5% |
| 100試合 | 2000001 | 33.8% | 66.2% | 26W - 51L - 23D | 33.8% |
| 1,000試合 | 3000001 | 31.3% | 68.7% | 277W - 607L - 116D | 31.3% |
| 2,000試合 | 4000001 | 32.4% | 67.6% | 569W - 1188L - 243D | 32.4% |
| 5,000試合 | 5000001 | 31.1% | 68.9% | 1365W - 3021L - 614D | 31.1% |
| 10,000試合 | 6000001 | 30.6% | 69.4% | 2673W - 6068L - 1259D | 30.6% |
上表から、試合数による勝率の推移が確認できます。10試合から10,000試合への拡大過程で、以下の特性が観察されます:
1. 標準誤差(Standard Error)の計算:
ここで:
例:n=1,000の場合
SE = √[0.306 × 0.694 / 1000] = √0.000212 = 0.0146 = ±1.46%
解釈:1,000試合での勝率観測値は、真の値(30.6%)から約±1.46%のぶれを持つ
2. 信頼区間(Confidence Interval)の計算:
ここで:
例:n=1,000、95%信頼度の場合
下限 = 0.306 - 1.96 × 0.0146 = 0.277 = 27.7%
上限 = 0.306 + 1.96 × 0.0146 = 0.335 = 33.5%
解釈:1,000試合の結果から、「真の勝率は27.7%~33.5%の範囲にある」と95%信頼度で言える
3. 必要試合数(Sample Size)の計算:
ここで:
例:95%信頼度で±2%の精度が必要な場合
n = (1.96)² × 0.306 × 0.694 / (0.02)²
n = 3.8416 × 0.212 / 0.0004 = 2,036試合
解釈:勝率を30.6% ± 2%(28.6%~32.6%)の精度で測定するには、約2,036試合が必要
| 許容誤差 | 必要試合数 | 信頼度(95%)での意味 |
|---|---|---|
| ±5% (大まかな傾向把握) | 約325試合 | 勝率 25.6% ~ 35.6% の範囲で測定可能 |
| ±3% (複数パターン間の差を検出) | 約908試合 | 勝率 27.6% ~ 33.6% の範囲で測定可能 |
| ±2% (打順パターン間の有意差を検出) | 約2,036試合 | 勝率 28.6% ~ 32.6% の範囲で測定可能 |
| ±1% (高精度な比較) | 約8,141試合 | 勝率 29.6% ~ 31.6% の範囲で測定可能 |
試合数選択ガイドライン(実測データに基づく):
統計的結論:試合数を増やすことで誤差は 1/√n に比例して減少します(nは試合数)。
オプションで --sort-by sabemetrics を指定した際、シミュレータ内部でどのように打者能力を評価し、1〜9番の初期打順数値列を出力しているかのロジック解説です。一般的なセイバーメトリクスで言われる「打席の多さ」と「得点期待値」を最大化するアルゴリズムに基づいています。
まず、対象チームのスタメン候補の中から、出塁率(OBP)および長打率(SLG)をベースとした「出塁能力と長打能力のバランス」をもとに打者を序列化します。
セイバーメトリクスにおける「打順の重要度」は、一般的に 2番 > 1番 > 4番 > 3番 > 5番 > 6番 > 7番 > 8番 > 9番(※諸説あり、本システムでの調整ベース)とされます。この重要度と性質に従って、以下のルールで自動配置を行います。
このロジックによって出力された打順(例:743852961)を基準点(--perm-a)とし、そこから --exchange で上位をシャッフルすることで、さらにそのチーム固有の「真のベスト打順」を効率的に探索できるよう設計されています。
gameperlineup 5000 で見つけたベスト打順とワースト打順、さらに従来型セイバーメトリクス理論に基づいた打順について、それぞれ series 10000 での性能を比較検証しました。
battingordersim.exe 11 7 --input roster2025@20260605114559.xlsx --perm-a 743852961 --gameperlineup 5000 --exchange 12345battingordersim.exe 11 7 --input roster2025@20260605114559.xlsx --perm-a 784532961 --series 10000 --save-series --seed 1000001/2000001/3000001battingordersim.exe 11 7 --input roster2025@20260605114559.xlsx --perm-a 743852961 --series 10000 --save-series --seed 1000001/2000001/3000001battingordersim.exe 11 7 --input roster2025@20260605114559.xlsx --perm-a 853472961 --series 10000 --save-series --seed 1000001/2000001/3000001| 打順パターン | 打順配列 | seed=1000001 | seed=2000001 | seed=3000001 | 平均勝率 | 従来型セイバーメトリクス順との差 |
|---|---|---|---|---|---|---|
| ベスト打順 | 784532961 | 32.4% | 32.4% | 32.7% | 32.5% | +0.5% |
| 従来型セイバーメトリクス理論値の打順 | 743852961 | 31.5% | 32.4% | 32.1% | 32.0% | 基準点 |
| ワースト打順 | 853472961 | 31.4% | 30.9% | 31.8% | 31.4% | -0.6% |
本実験により、以下のことが実証されました:
OPSの逆順で打順を組み、明らかに悪い戦術がどれだけの悪影響を及ぼすかを検証します。 この結果を従来型セイバーメトリクス理論値の打順および gameperlineup で発見したベスト/ワースト打順と比較することで、 打順最適化の実践的な価値を定量的に証明します。
埼玉西武ライオンズ vs 福岡ソフトバンクホークスにおいて、西武の OPS 逆順打順での勝率を30000試合で求めました。勝率は30.9%となりました。
OPS逆順はスタメン9人の最悪ケース想定であり、勝率30.9%となりました。前述の1番から5番並び替えでのワースト1での勝率が31.4%と比較して-0.5%となり、打順最適化は勝率に統計的に有意な影響を与えることが証明されました。
しかしながら、実戦で最悪ケースに近い打順を組むことは考えにくく、旧来の考え方での打順でも最適に近い打順になっているものと考えられます。打順最適化効果は限定的であることも確認できました。
本シミュレーションのように短時間でベストケースを算出できるツールは実運用でも有用であると考えられます。
gameperlineupオプションを用いた大規模シミュレーション分析により、チーム力の拮抗度が打順最適化の効果に与える影響を検証しました。実力差が大きい対戦と拮抗した対戦での差異を明らかにしています。
| パターン | 勝率(seed別平均) | 特性 |
|---|---|---|
| 最良打順 | 32.8% | gameperlineup ランク1 |
| セイバーメトリクス理論値 | 32.4% | ランク20位(中位) |
| 最悪打順 | 31.2% | gameperlineup ランク最下位 |
| 最高・最低の差:1.6% | ||
| パターン | 勝率(seed別平均) | 特性 |
|---|---|---|
| 最良打順(634792158) | 49.8% | gameperlineup ランク1 |
| セイバーメトリクス理論値(943672158) | 48.2% | 理論値 |
| 最悪打順(436792158) | 47.6% | gameperlineup ランク最下位 |
| 最高・最低の差:2.2% | ||
| 対戦 | チーム力 | 最良打順 | セイバー値 | 最悪打順 | 効果の差 |
|---|---|---|---|---|---|
| 西武 vs ソフト | 実力差大(32% vs 68%) | 32.8% | 32.4% | 31.2% | 1.6% |
| 楽天 vs ロッテ | 拮抗(~50%) | 49.8% | 48.2% | 47.6% | 2.2% |
楽天 vs ロッテの拮抗した対戦では、最良打順と最悪打順の差が2.2%。一方、西武 vs ソフトバンクの実力差が大きい対戦では、その差が1.6%に留まります。
チーム力が同等に近いほど、わずかな打順の工夫が勝率に大きく影響します。楽天 vs ロッテのような互角な対戦では、2.2%の効果差となり比較的大きな意味を持ちます。
西武 vs ソフトバンクのように実力差が大きい場合、チーム全体の実力が結果を決定する大きな要因となり、打順最適化の相対的な重要性は低下します。
打順最適化ツールの活用は、同一リーグ内の拮抗したライバルチーム対戦での競争優位を生む可能性があります。
従来型セイバーメトリクスの理論値は、瞬時に算出可能で無難です。
実力差のある対戦(西武 vs ソフトバンク)と拮抗した対戦(楽天 vs ロッテ)における、 バント禁止、盗塁禁止、での実行結果を比較分析します。 チーム力差によって戦略の効果がどのように異なるかを検証します。
基準値勝率:西武 36.7%(311-536-153)、ソフトバンク 63.3%(536-311-153)
| 戦略 | 西武勝率 | 基準値からの差 | 143試合での勝敗数差 |
|---|---|---|---|
| 📊 ソフトバンク通常投手の場合 | |||
| 基準値(ソフトバンク通常投手) | 36.7% | 基準点 | 基準点 |
| 西武:バント禁止 | 40.4% | +3.7% | 約5.3試合改善 |
| 西武:盗塁禁止 | 30.2% | -6.5% | 約9.3試合低下 |
| 🎯 ソフトバンクがエース投手の場合 | |||
| 基準値(ソフトバンク:エース投手) | 19.3% | 基準点 | 基準点 |
| 西武:バント禁止 | 22.8% | +3.5% | 約5.0試合改善 |
| 西武:盗塁禁止 | 15.2% | -4.1% | 約5.9試合低下 |
基準値勝率:ソフトバンク 66.3%(570-290-140)、西武 33.7%(290-570-140)
| 戦略 | ソフトバンク勝率 | 基準値からの差 | 143試合での勝敗数差 |
|---|---|---|---|
| 📊 西武通常投手の場合 | |||
| 基準値(西武通常投手) | 66.3% | 基準点 | 基準点 |
| ソフトバンク:バント禁止 | 71.9% | +5.6% | 約8.0試合改善 |
| ソフトバンク:盗塁禁止 | 57.3% | -9.0% | 約12.9試合低下 |
| 🎯 西武がエース投手の場合 | |||
| 基準値(西武:エース投手) | 41.6% | 基準点 | 基準点 |
| ソフトバンク:バント禁止 | 49.3% | +7.7% | 約11.0試合改善 |
| ソフトバンク:盗塁禁止 | 35.7% | -5.9% | 約8.4試合低下 |
基準値勝率:楽天 43.5%(383-498-119)、ロッテ 56.5%(498-383-119)
| 戦略 | 楽天勝率 | 基準値からの差 | 143試合での勝敗数差 |
|---|---|---|---|
| 📊 ロッテ通常投手の場合 | |||
| 基準値(ロッテ通常投手) | 43.5% | 基準点 | 基準点 |
| 楽天:バント禁止 | 50.2% | +6.7% | 約9.6試合改善 |
| 楽天:盗塁禁止 | 38.1% | -5.4% | 約7.7試合低下 |
| 🎯 ロッテがエース投手の場合 | |||
| 基準値(ロッテ:エース投手) | 27.9% | 基準点 | 基準点 |
| 楽天:バント禁止 | 34.3% | +6.4% | 約9.2試合改善 |
| 楽天:盗塁禁止 | 23.4% | -4.5% | 約6.4試合低下 |
基準値勝率:ロッテ 51.7%(461-431-108)、楽天 48.3%(431-461-108)
| 戦略 | ロッテ勝率 | 基準値からの差 | 143試合での勝敗数差 |
|---|---|---|---|
| 📊 楽天通常投手の場合 | |||
| 基準値(楽天通常投手) | 51.7% | 基準点 | 基準点 |
| ロッテ:バント禁止 | 57.9% | +6.2% | 約8.9試合改善 |
| ロッテ:盗塁禁止 | 44.5% | -7.2% | 約10.3試合低下 |
| 🎯 楽天がエース投手の場合 | |||
| 基準値(楽天:エース投手) | 31.9% | 基準点 | 基準点 |
| ロッテ:バント禁止 | 35.7% | +3.8% | 約5.4試合改善 |
| ロッテ:盗塁禁止 | 26.3% | -5.6% | 約8.0試合低下 |
盗塁禁止時の勝率低下は、逆に盗塁が使用可能な時の価値を示します。つまり、盗塁禁止で-4.9%の悪化が発生するということは、盗塁が実行可能であることで+4.9%の優位性を持つということです。
| 対戦 | チーム | 盗塁禁止時の悪化幅 | 盗塁使用可能時の相対的価値 | チーム力による影響 |
|---|---|---|---|---|
| 西武 vs ソフトバンク (実力差32.6%) |
西武 | -6.5% | 盗塁価値:+6.5% | 弱いチームにとって盗塁は必須戦術 |
| ソフトバンク | -9.0% | 盗塁価値:+9.0% | 強いチームでも盗塁は重要な選択肢 | |
| 楽天 vs ロッテ (実力差8.2%) |
楽天 | -5.4% | 盗塁価値:+5.4% | 拮抗チーム間では盗塁が重要 |
| ロッテ | -7.2% | 盗塁価値:+7.2% | 拮抗チーム間では盗塁が重要 |
ノーアウト1塁およびノーアウト1塁2塁の状況で、バント実行とバント禁止の戦略効果を定量的に検証しました。 チーム最多バント打者(西武:ID2、ソフトバンク:ID5)を対象に、エース投手対決と平均的投手対決の両シナリオで実施。
本分析は analyzebunt ツールで実施されました。このツールは、指定した走塁状況でのバント戦略の効果を詳細に検証します。 バント実行モードとバント禁止モード(--no-bunt-a オプション)の両モードを自動実行し、勝率と得点を比較します。
analyzebunt.exe は以下のように動作します:
基本的な使用方法:
オプション一覧:
| オプション | 説明 |
|---|---|
| --target-count N |
各走塁状況でのサンプル数を指定します。 デフォルト: 100 例:2000 → 2000試合分析 |
| --team-a NUM |
チームAの番号を指定します(統計対象チーム)。 デフォルト: 11(2025年ではパリーグ5位の埼玉西武ライオンズに該当) 例:7 → ソフトバンク |
| --team-b NUM |
チームBの番号を指定します(対戦相手チーム)。 デフォルト: 7(2025年ではパリーグ1位の福岡ソフトバンクホークスに該当) 例:11 → 西武 |
| --batter-id ID |
分析対象の打者IDを指定します。 指定しない場合は、すべての打者を対象にします。 例:2 → ID2の打者のみ分析 |
| --input FILE |
入力する Excel ファイルのパスを指定します。 このファイルに各チームの選手情報が含まれています。 |
| --pitcher-a ID |
チームA の先発投手を指定します。 数値(選手ID)または文字列で指定可能: • "ace" → エース級投手 • "backup" → 平均的投手 • 数値 → 特定の選手ID |
| --pitcher-b ID |
チームB の先発投手を指定します。 数値(選手ID)または文字列で指定可能: • "ace" → エース級投手 • "backup" → 平均的投手 • 数値 → 特定の選手ID |
| --help | ヘルプメッセージを表示して終了します。 |
| --version | バージョン情報を表示して終了します。 |
出力ファイル:
以下の4つのコマンドで、バント実行とバント禁止の両モードを分析しました:
結果:バント実行時 1,902点 → バント禁止時 2,261点(差分:-359点)
結果:バント実行時 2,321点 → バント禁止時 3,062点(差分:-741点)
結果:バント実行時 1,980点 → バント禁止時 2,922点(差分:-942点)
結果:バント実行時 2,890点 → バント禁止時 4,121点(差分:-1,231点)
分析に使用した打者とスタメン平均の打率は、以下の2つのコマンドで5000試合シミュレーションを実行し、 生成されたstats.xmlファイルから打率データを抽出しました。
出力ファイル:stats.xml → statsbackup.xml にリネーム
出力ファイル:stats.xml → statsace.xml にリネーム
| チーム | 打者ID | エース対決での打率 | 平均的投手対決での打率 | バント成功数 | ||
|---|---|---|---|---|---|---|
| 打者 | スタメン平均 | 打者 | スタメン平均 | (全試合) | ||
| 埼玉西武ライオンズ | 2 | .186 | .233 | .246 | .258 | 819回 |
| 福岡ソフトバンクホークス | 5 | .179 | .265 | .210 | .320 | 820回 |
| シナリオ | 西武先発投手 | 防御率 | ソフトバンク先発投手 | 防御率 |
|---|---|---|---|---|
| エース級 | ID14(エース級投手) | 1.85(5000試合先発、投球回数 35,612.3) | ID14(エース級投手) | 1.30(5000試合先発、投球回数 36,883) |
| 平均的投手 | ID15(平均的投手) | 3.32(5000試合先発、投球回数 33,204) | ID15(平均的投手) | 1.94(5000試合先発、投球回数 35,736.7) |
総試合数:西武 123,155試合 / ソフトバンク 102,594試合
| チーム | ノーアウト1塁 勝率 |
ノーアウト1塁2塁 勝率 |
バント成功 | バント失敗 | 成功率 | 得点合計 |
|---|---|---|---|---|---|---|
| 西武(ID2) | 639勝-968負-393分 31.9% |
703勝-903負-394分 35.1% |
3,323回 | 802回 | 80.6% | 1,902点 |
| ソフトバンク(ID5) | 1,121勝-506負-373分 56.0% |
1,340勝-356負-304分 67.0% |
2,372回 | 575回 | 80.5% | 1,980点 |
| チーム | ノーアウト1塁 勝率 |
ノーアウト1塁2塁 勝率 |
得点合計 |
|---|---|---|---|
| 西武(ID2) | 662勝-967負-371分 33.1% |
807勝-841負-352分 40.4% |
2,261点 |
| ソフトバンク(ID5) | 1,276勝-435負-289分 63.8% |
1,479勝-291負-230分 74.0% |
2,922点 |
総試合数:西武 96,394試合 / ソフトバンク 74,548試合
| チーム | ノーアウト1塁 勝率 |
ノーアウト1塁2塁 勝率 |
バント成功 | バント失敗 | 成功率 | 得点合計 |
|---|---|---|---|---|---|---|
| 西武(ID2) | 591勝-1,192負-217分 29.6% |
674勝-1,078負-248分 33.7% |
4,836回 | 1,138回 | 81.0% | 2,321点 |
| ソフトバンク(ID5) | 1,303勝-481負-216分 65.2% |
1,481勝-334負-185分 74.0% |
2,309回 | 585回 | 79.8% | 2,890点 |
| チーム | ノーアウト1塁 勝率 |
ノーアウト1塁2塁 勝率 |
得点合計 |
|---|---|---|---|
| 西武(ID2) | 686勝-1,087負-227分 34.3% |
795勝-945負-260分 39.8% |
3,062点 |
| ソフトバンク(ID5) | 1,420勝-376負-204分 71.0% |
1,562勝-291負-147分 78.1% |
4,121点 |
| 対戦シナリオ | チーム | 得点(実行) | 得点(禁止) | 得点差 |
|---|---|---|---|---|
| エース対決 | 西武 | 1,902 | 2,261 | -359点 |
| ソフトバンク | 1,980 | 2,922 | -942点 | |
| 平均的投手対決 | 西武 | 2,321 | 3,062 | -741点 |
| ソフトバンク | 2,890 | 4,121 | -1,231点 | |
| 全体平均 | 2,273 | 3,092 | -819点 | |
4つのシナリオすべてで、バント実行よりもバント禁止戦略が得点が多くなっています。 平均で819点の差が生じており、これはバント試行が直接的な得点獲得につながりにくいことを示唆しています。
ソフトバンクの場合、平均的投手対決でのバント禁止の優位性(-1,231点)がエース対決(-942点)よりやや大きいです。 どちらも投手の質によらずバントをする戦略はマイナス効果であることを示してます。
西武ID2は全試合でバント成功率が80.6~81.0%の高い水準を保っていますが、 バント実行による得点はバント禁止より319~741点も低くなっています。 これは「バント成功 ≠ 得点」という関係を示してます。
従来のセイバーメトリクス理論ではピッチャーがバントをするケースを論じることが多いです。
本シミュレーションはDH制を前提としているため打率の低いピッチャーがバントするケースはありません。
従来のセイバーメトリクス理論では打率が著しく低い打者がバントする場合はバントしない場合よりも得点期待値が高くなるとされてます。また1点をとる場合はバントが有利な戦術であるケースもあるとされてます。
本シミュレーションでは1点をとる場合でもバントはしないほうがいいという結果ですので、既存の理論とは結論が異なります。本シミュレーションで考慮されていない部分の影響かどうかは不明です。