コンピュータシミュレーションで野球を分析
 
1.野球とシミュレーション
 野球というスポーツはかなりシミュレーションと相性が良い……というと奇妙かもしれませんが、打席ごとに試合が止まり各状況が離散的に説明できるという特性により非常にモデル化がしやすく、以前からコンピュータ上でシミュレーションを行ったり数理的に確率モデルを作成し分析を行うということがそこそこ活発に行われてきているようです。
 6面ダイスを使い、5と6が出た場合はヒット、それ以外はアウトとして野球ゲームをすることを考えてみましょう。走者がいるときにヒットがでた場合の進塁の仕方などもあらかじめ決めておくとします。するとこれは、実際に行うのはなかなか手間がかかりますが、一種のシミュレーションと言えます。コンピュータシミュレーションはサイコロを振る作業をコンピュータにやらせることであり、数理モデルはサイコロを振らずに確率を用いて複雑な計算を行い帰結を導くことです。

 私も一時期プログラムを利用したコンピュータシミュレーションにハマっており、ブログで連作記事を投稿していました。それについてこのサイトのほうにもまとめておきたいという気持ちがあり、またブログに書いた以外でやりたい試みもあり、そのためにプログラムをゼロから再構築する作業も完了したので、ここで今一度シミュレータを使ってごちゃごちゃ書いてみようと思います。

 使用するシミュレータがどういうものかというと、実のところ原理としてはサイコロの例えのまんまで、設定を実際に沿うようにできるだけ細かくしたもの、というところです。
 まず、打数・安打・二塁打・三塁打・本塁打・四死球・三振等のデータを入力します。すると、打席のうちそれぞれのことが起こる確率が計算されます。あとは乱数を発生させ確率に応じてランダム的にヒットを打ったりアウトになったり、勝手に試合をします。いかなる場合でもシミュレーション上の打者の実力(打率や出塁率・長打率)は変わりません。走塁なども全て事前に入力した確率に応じて結果が決定します。細かい設定はページの末尾※1に置いておきますが、シングルヒットのとき一塁走者が三塁へ進む確率は20%、など。併殺打は考慮していません。盗塁や犠打もなし。
 勝手に試合をするといってもよくできた野球ゲームのように両軍がせめぎあって投手が交代したり色々するわけではなくただ単に確率に応じた攻撃イニングを繰り返すだけなので(裏を返せば守備でもあるわけですが)ブログにおいてはこのシミュレータを「打線シミュレータ」と呼んでいました。内容からいってその呼び方には問題がないと考えているので、ここでも「打線シミュレータ」でいきましょう。
 シミュレーションの意義というのは、現実の細かい諸条件を排した理論上の結果を明らかにすることによって野球の構造からして何が必然で、逆に現実の結果の何が特別なのかがわかる、といったところでしょうか。


 
2.平均得点と得点のばらつき
 シミュレーションにあたっては、以下のような能力の打者を起用します。

打数安打二塁打三塁打本塁打四球三振打率長打率出塁率 OPS
500 131 23 2 14 52 98 .263 .403.331.734

 これは1992〜2008のNPB平均で、だいたい近年の平均的な成績を利用するのはこれからシミュレータを動かしデータを得る際にその結果を汎用性のあるものにするためです。安打などの生値は500打数あたりで表示していますが、これはただイメージしやすくするため。簡略化して小数点以下を省いていますから率の計算と合いませんが正しいのは打率・長打率・出塁率・OPSのほうです。
 シミュレーションの中ではこの打者が1番から9番まで並ぶと考えて下さい。

 シミュレータの説明と設定についてはここまでで、やっとシミュレータを走らせます。
 まずは1試合(27アウト)でどれだけ得点を上げられるのかを測ります。試行数100万試合。

 結果:
 平均得点 4.579
 得点確率 93.9%
 標準偏差 3.168

 平均得点は4.579となりました。実際の推計27アウトあたり得点は4.31ですからシミュレーション結果は少し高いもので、これは併殺打や走塁死、あるいは犠打や盗塁など得点期待値的に好ましくないイベントが考慮されていないためです。
 それでも単純な設定で案外実際の平均得点と近い値が出てしまうということがわかるのですが、それ以上に標準偏差にも注目して欲しいと思います。
 標準偏差3.168というのは、試合ごとの得点数が標準的に平均から3点ほどブレるということを意味しています。これはシミュレーションであり、試合ごとに相手投手が変わったり打線の調子が変動したりすることは一切ないのに、です。また得点確率は試合で少なくとも1点取る確率であり、これが93.9%ということは完封が6%はあったということです。
 シミュレーションのひとつ非常に面白いところは、こういう確率的に当然起こり得る運のブレを計れるところです。たまたまヒットが出なかったり、たまたまヒットが集中せずばらけたり、たまたま四球と本塁打の順序が逆で効率良く点が入らなかったり……そういったことだけで得点数はこれだけ変動します。現実の世界では7点取った翌日に1点止まりだったりすると「打線が大振りになった」とか因果の説明がつくかもしれませんが、確率的には単なる偶然でも不思議はありません(ただし「偶然である」と証明するものではありません)。

 ちなみにこの標準偏差はシミュレーションだから起こるものかというとそうではなく、実際のプロ野球チームの試合毎得点の標準偏差もやはり3程度を示しています。現実の結果のほうは様々な要因が折り重なって出力されたものであり現実もシミュレーションも同じだということになりませんが、これはOPSと得点との相関の高さなどと合わせて「思い通りに上手く点を取る技術」のようなものに疑問を呈するには十分です。ここぞというときに上手く打撃イベントを繋げる技術があるなら、単なる打撃イベントの総量であるOPSやXRで得点数がよく説明できるのはおかしいからです。
 「打線の繋がり」やら何やらを思い通りに操り都合の良い得点数を導くような技術は基本的にはないと考えていいでしょう。打者はいつも打ちたいものです。けれど思い通り打てはしないから、打率は普通3割にも満たないんです。そもそも狙って点が取れるなら、先制されてそのまま負けというような試合はあり得ないでしょう。逆転に次ぐ逆転で物凄いスコアのゲームばかりになるはずです。また打つほうがプロなら抑えるほうもプロですから、どちらもここぞというときに力を発揮しようとはするはずです。結局、全力のせめぎあいが均衡しちょっとした巡り合わせでヒットになったりアウトになったりする、その様子はかなりランダム的になる、ということと思われます。
 私は勝負強さとか打線を繋げる技術とかいったものを完全に否定したいわけではありません。もちろん、打席では何も考えずに打てばいいなどとも思いません。しかし、過去の野球の言説はあまりにもそれらを重視しすぎており、野球のあらゆることについて実際には思い通りにすることなどできる根拠もないのに思い通りになるかのような説明をしすぎている、とは言いたいです。
 ちょっと細かいところで話を掘り下げすぎましたが、そんなこんなで単なる確率モデルであるシミュレータと実際の結果は結構一致するというわけです。

 あ、そうだ、まだ細かいところを掘り下げましょう。
 戦術等以外で平均得点に対する標準偏差を変動させる要因に関して、以前なんだかんだとデータを検証しているうちに「出塁率/長打率」の比率が重要だということがわかりました。
 これについてはブログでかなり細かく書いたのですが、結論を簡単に言うと、同じ平均得点でも長打力に依存して得点を上げている打線と出塁能力に依存して得点を上げている打線では後者のほうが標準偏差が大きくなるんです。つまり、例えば打率や出塁率が低くても二塁打や本塁打が多い打線と、長打力はないけれども単打と四球でコツコツ点を取っていく打線では、コツコツ打線のほうが試合ごとの得点はばらつきます。
 イメージとしてはコツコツと出塁していくほうがいつもそれなりに点を取れそうですし、世間的には本塁打はたまにしか出るものではなく長打力に頼るのは危険だという意見も結構聞きます。しかしシミュレーション上は逆。実際にもそういう傾向があることはある程度確認もしています。
 何故そうなるかは、野球は3アウトを奪われるまでに得点を上げるスポーツなので、仮に出塁が全て本塁打で1打席ごとに打つとしてもイニング3点が限界というように長打力依存では確実に点は入る代わりに大量得点は起こりにくいというような原理です。大量得点をするにはアウトにならないこと、すなわち出塁率が重要です。長打力がなく出塁率が高い打線は時折一気に出塁が集中して大量得点を奪える半面、少ない出塁では進塁が足りず得点に至らないという理由で、点が入らなかったり大量得点を奪ったりということが多くなり、結果標準偏差が大きくなります。
 もっともこの違いは非常に小さなものです。しかし平均得点が平均失点を上回るならば普通は得点の標準偏差が小さいほうが勝率は上がるわけで、「長打力に頼るのは博打」といった意見を疑問を投げかけるには足るのではないかなと思います。


 というわけでシミュレーション結果を見ると現実の野球の言説についてあれこれ疑問が出たりするのですが、話を少しスッキリした線に戻しましょう。
 調子の変動や対戦相手の影響なども一切ない理論上、平均的な打線の試合ごとの得点は運のみで標準的に3点程度ばらつくということがわかりました。このことからさらに、シミュレーション上で平均的な2チームが戦う場合、多くの試行数を経た後の勝敗数は無論一対一になるのですが、試合ごとの得点差は標準的に4.5点程度出る、ということもわかります。
 4点差や5点差で勝ったり負けたりしていて、でも実力も調子も全く同じということがシミュレーション上では起こるのです。運を不思議とみなすなら「勝ちに不思議の勝ちあり、負けに不思議の負けあり」です。


 
3.理論上の得点期待値
 今度は、打線シミュレータを使って理論上の得点期待値を導き出すということをやりたいと思います。
 得点期待値とは「特定の状況から残されたイニングで平均何得点が期待されるか」で、過去のMLBの得点期待値表を基本的な考え方に掲載していますので、改めてこちらにも載せます。

得点期待値表・MLB
アウト\走者走者無し一塁二塁三塁一・二塁一・三塁二・三塁満塁
無死0.46 0.81 1.19 1.39 1.47 1.94 1.96 2.22
一死0.24 0.50 0.67 0.98 0.94 1.12 1.56 1.64
二死0.10 0.22 0.30 0.36 0.40 0.53 0.69 0.82

 得点期待値は、例えば無死一塁と一死一塁の期待値を比較して送りバントをするのがいいかそれともヒッティングがいいかといったことを考えるのに使用されますが、現実の得点期待値はさまざまな選択の影響を受けます。そもそも無死一塁の期待値には送って一死二塁にしたケースなども含まれているでしょう。この場合、単純にヒッティングの場合の期待値がどうなるかといったことは明確ではなくなります。
 そういう現実の影響をどけてしまって、単純にただただ打ったらどうなるか。シミュレータならそれを計算できます。走者・アウト状況別に各100万回試行した結果は以下。

得点期待値表・シミュレーション
アウト\走者走者無し一塁二塁三塁一・二塁一・三塁二・三塁満塁
無死0.508 0.921 1.087 1.348 1.535 1.763 1.916 2.401
一死0.270 0.533 0.676 0.925 0.970 1.195 1.336 1.685
二死0.100 0.219 0.328 0.361 0.458 0.486 0.596 0.790

 MLBのものより全体的に値が大きめなのは単純に得点レベルの違いです。どの局面で点が入りやすいかの傾向に関してはかなり似る、ということがわかります。
 次に当該の局面から残りのイニングに少なくとも一点入る確率である得点確率の表。

得点確率表・シミュレーション
アウト\走者走者無し一塁二塁三塁一・二塁一・三塁二・三塁満塁
無死0.268 0.417 0.581 0.840 0.630 0.846 0.847 0.880
一死0.159 0.265 0.407 0.655 0.444 0.663 0.664 0.717
二死0.067 0.119 0.228 0.261 0.240 0.267 0.267 0.332

 シミュレーション上は一塁から二塁へ送る犠打は得点期待値的にも得点確率的にも無死であれ一死であれ損だというようなことがわかります。

 最後に、全体の打席に対する各局面の出現確率も含めて「メジャーリーグの数理科学」の形式を少し真似てひとつの表にしてみました。そして「Baseball Times」46号より、今回のシミュレーションと得点率が近い2005年NPBの得点期待値・得点確率を引用して併記します。実際とシミュレーションのどこが違うかがわかるのではないかと。


シミュレーション得点期待値・得点確率・出現確率
走者アウト得点期待値得点確率出現確率得点期待値(NPB)得点確率(NPB)
なし0 0.508 0.268 23.18% 0.49 26.4%
なし1 0.270 0.159 16.41% 0.28 15.8%
なし2 0.100 0.067 11.94% 0.10 6.8%
一塁0 0.921 0.417 6.12% 0.86 40.7%
一塁1 0.533 0.265 8.56% 0.56 27.5%
一塁2 0.219 0.119 9.30% 0.24 13.0%
二塁0 1.087 0.581 1.05% 1.15 59.3%
二塁1 0.676 0.407 1.70% 0.75 41.7%
二塁2 0.328 0.228 2.24% 0.32 21.7%
三塁0 1.348 0.840 0.13% 1.63 86.5%
三塁1 0.925 0.655 0.34% 0.95 61.7%
三塁2 0.361 0.261 0.51% 0.35 26.1%
一・二塁0 1.535 0.630 1.63% 1.45 59.4%
一・二塁1 0.970 0.444 3.54% 1.00 42.6%
一・二塁2 0.458 0.240 5.40% 0.47 23.3%
一・三塁0 1.763 0.846 0.41% 1.87 85.8%
一・三塁1 1.195 0.663 1.01% 1.21 67.2%
一・三塁2 0.486 0.267 1.60% 0.52 28.0%
二・三塁0 1.916 0.847 0.30% 2.28 84.3%
二・三塁1 1.336 0.664 0.58% 1.41 64.5%
二・三塁2 0.596 0.267 0.64% 0.64 29.3%
満塁0 2.401 0.880 0.52% 2.40 84.5%
満塁1 1.685 0.717 1.21% 1.64 66.5%
満塁2 0.790 0.332 1.69% 0.78 32.9%

 実際のプロ野球の得点期待値表と比較してみると傾向はとても似ていることがよくわかり、局面の力というのは単純な確率モデルを動かした場合とそう変わらず現実においても影響を持っているらしいということはこれだけでも確認できます。


 そしてシミュレータの設定・上記の得点期待値及び出現確率を利用すると、打撃イベントそれぞれについて得点期待値への平均的な影響(得点価値)を導き出すこともできます。例えば単打を打ったとき平均してチームに何点分の得点増をもたらすのか、ということの理論上の値です。

  Theoretical Batting Runs(理論上の打撃得点)
  0.474×(安打−二塁打−三塁打−本塁打)+0.759×二塁打+1.162×三塁打+1.489×本塁打
  +0.374+(四球+死球)−0.278×(打数+犠飛−安打−三振)−0.295×三振

 TBRは現実的なさまざまな条件を排して計算された結果ですから現実の成績に当てはめて得点とよく相関するようなものではありませんが、逆に現実の統計からTBRを導くことは難しいため、これはこれで面白いものと思います。

 
4.まとめ
 以上にシミュレータのデータから確率的な結果の変動についてある程度具体的な数字を出し、そこから野球の言説について軽く物申し、理論上の得点期待値の数字及び局面の影響は現実でもシミュレーションでも似通っていることなんかを示し、最後にはピート・パルマーが辿った道筋を真似てBatting Runsもどきを作ってみました。
 今回はわりと単純に「シミュレーションしてみたらこうなります」というのを示すこと自体が目的なので、機会があればここで示したデータを参考にして頂ければと思います。
 シミュレーションはそれほど特別なものでもないですが、実験の道具としてはなかなか面白いと考えています。今後も気が向けば何かの分析をシミュレータで検証することがあるかもしれません。またシミュレーションに興味を持てたという方はブログの打線シミュレータカテゴリーもよろしければ見てみて下さい。我ながら粗いですが頑張って色々書いてはいます。

 ところで野球の分析でシミュレータを使うといえば多くが「最適打順の追求」なのですが、ここでは一切打順の議論をしていません。個人的には打順の議論にそれほど魅力を感じていないからですが、これまでにいくらかの実験はしています。経験則的には、得点率を高めるために最も重要なのは優れた打者を集中的に配置することであり、第二にその集合を上位に配置することのようです。







 ・打線シミュレータの進塁設定
 以下に特記してある以外は、安打なら打者が獲得する塁打分進塁し、四球なら塁が詰まっているときだけ進塁します。

0アウト1アウト2アウト
一塁走者が単打で三塁へ進む確率0.20 0.20 0.20
二塁走者が単打で生還する確率0.30 0.50 0.75
一塁走者が二塁打で生還する確率0.15 0.25 0.50
一塁走者が凡打で二塁へ進む確率0.05 0.05 ----
二塁走者が凡打で三塁へ進む確率0.25 0.25 ----
三塁走者が凡打で生還する確率0.50 0.50 ----

上記の設定はTangotigerによるモデルを参考にしています。
本稿で試みた得点期待値の算出など一瞬で行える非常に優れたモデルですので、是非お試しになることをお勧めします。




トップ > 四方山話 > コンピュータシミュレーションで野球を分析

inserted by FC2 system