数学
2026.05.21

BOS開発記録:直接得点から盤面前進力へ

01

打者の戦闘力を、1つの数字で見たい

野球を見ていると、いつもこういう気持ちになります。

この打者、結局どれくらいすごいんやろ

打率はわかりやすい。でも打率だけだと、四球をたくさん選ぶ打者や、ホームランで一発を狙う打者の良さが見えません。

OPSはもう少しマシです。出塁率と長打率を足したもので、打率より広い視野で打者を見ている。

ただ、OPSにはずっと引っかかっていることがありました。

なぜ出塁率と長打率をそのまま足すのか

OPSが高い選手は良い打者。これは間違いない。でも、

OPS = 出塁率 + 長打率

という形そのものに、はっきりした理由は見えません。経験的にチーム得点とよく相関するから使われている、でも「OPS .900」と言われたとき、それが野球の盤面でどういう意味なのかは説明しにくい。

そこで思いました。打者の戦闘力を1つの数字で出す指標を、自分で納得できる形で作れないだろうか。

打率の置き換えとか、OPSの改良版とかではなく、

打者がその打席で何を生み出したか

を、自分の頭でちゃんと追える形にしたい。これがBOSを作り始めた動機です。

02

v1.0:その打席で直接何点入ったかを数えてみた

最初の発想はかなり自然でした。

打者の仕事は点を取ること。だったら、その打席で実際に何点入ったかを数えればいい。

具体的にはこうです。走者なしで単打を打っても点は入りません。だから走者なしの単打は0点。一塁にランナーがいるときに二塁打を打っても、走者は普通三塁で止まるので0点。でも一・二塁にランナーがいるときに二塁打を打てば、二塁ランナーが還って1点入ります。

これを、走者の状況8通り(走者なし、一塁、二塁、三塁、一二塁、一三塁、二三塁、満塁)すべてで計算します。盤面によって出やすさは違うので、MLBの複数年データをもとにしたTom TangoのRun Expectancy Matrixで公開されている出現率で重み付けして平均を取る。

この手順で打撃結果ごとの「平均的に何点入るか」を出すと、こうなりました。

四死球 = 0.036
単打   = 0.099
二塁打 = 0.285
三塁打 = 0.611
本塁打 = 1.612

つまり、

BOS v1.0 = 0.036 × 四死球率
         + 0.099 × 単打率
         + 0.285 × 二塁打率
         + 0.611 × 三塁打率
         + 1.612 × 本塁打率

「直接得点をベースにした打者の戦闘力」。考え方としては筋が通っているし、計算もできた。最初のBOSはここに着地しました。

03

v1.0の問題:本塁打が強くなりすぎた

ところが、できあがった係数を眺めていて、すぐに違和感が出てきます。

本塁打 ≒ 単打の16倍
本塁打 ≒ 四死球の45倍

ホームランが強いのはわかります。一発で点が入るんだから、当然強いはず。

でも、45倍はやりすぎではないか。

これだけ差があると、単打や四球の価値はほとんど見えません。四球を1個選ぶより、ホームランを1本打つほうが45倍の戦闘力。そう言われると、たしかに得点だけを見ればそうかもしれないけれど、打者としての評価の感覚と合わない。

実際、2022年のパ・リーグ首位打者だった日本ハムの松本剛をv1.0で計算するとこうなります。

打率 .347、出塁率 .398、長打率 .438、OPS .836
BOS v1.0 = 0.057

2022年のNPB平均BOS v1.0は0.075。 首位打者なのに、平均以下 です。

理由ははっきりしています。松本剛は2022年に本塁打を3本しか打っていません。v1.0は「その打席で直接何点取ったか」しか見ていないので、ヒットで一塁に出てもランナーがいなければ0点、四球で出塁しても0点。直接得点に寄りすぎていて、首位打者の働きが拾えていない。

v1.0そのものは間違っているわけではありません。「打者が一発で点を取る力」を見る指標としては筋が通っている。でも、

打者単体の攻撃力全体を見る指標

としては、見ている範囲が狭すぎました。打席で起きていることのうち「最後に点が入ったかどうか」だけを評価して、「盤面を作った貢献」を完全に切り捨てている。

ヒットで一塁に出てチャンスを作る。四球でアウトを増やさずに次へつなぐ。二塁打で得点圏へ走者を進める。こういう仕事が、v1.0ではほとんどゼロ扱いになる。これでは打者の戦闘力の指標とは言えない。

04

何を見るかを、根本から変える

v1.0の問題は計算ミスではありません。設計の問題です。「直接得点」を見ようとしたこと自体が、打者の戦闘力を測るには狭すぎた。

そこで、見るものを変えることにしました。

打者の仕事は、点を取ることだけではない。アウトにならないこと、打者自身や走者を前に進めること、これも打者の大きな仕事です。点が入るかどうかは、その打席1つだけでは決まらない。後ろの打者が打てば入るし、打てなければ入らない。

なら、

直接得点ではなく、盤面をどれだけ前に進めたか

を見ればいい。打者の仕事を「最後に点が入ったか」ではなく「次のバッターにどれだけ良い盤面を渡したか」で測る。これなら、ヒットも四球も長打も、それぞれの貢献分がちゃんと数字に出るはずです。

考え方が決まりました。あとはこれをどう数式にするか。

05

v2.0:塁を座標化して、打つ前後の差分を見る

「盤面を前に進めた量」を数字にするために、塁に番号をつけます。

一塁 = 1
二塁 = 2
三塁 = 3
本塁 = 4

本塁は、一塁・二塁・三塁の次にある4番目の地点なので4。これで盤面の状態を1つの数字で表せます。走者なしなら0、一塁にランナーがいれば1、満塁なら1+2+3=6。

そして、

前進量 = 打った後の盤面価値 − 打つ前の盤面価値

で打撃結果を評価する。

例えば走者なしで単打を打つと、

打つ前:0
打った後:打者が一塁 = 1
前進量:+1

v1.0ではこれは0点でした。v2.0では+1。ちゃんと「盤面を進めた」と評価される。

走者一塁で単打なら、一塁ランナーが二塁へ、打者が一塁へ。

打つ前:一塁 = 1
打った後:一・二塁 = 1 + 2 = 3
前進量:+2

同じ単打でも、盤面によって前進量が変わる。これが大事なところです。

そして、これも8通りの盤面すべてで計算して、出現率で重み付けして平均を取る。実際の盤面ではなく平均盤面を使うのは、前後の打者や打線の影響を切るためです。同じ4番打者でも、前の3人が出塁マシンか凡退マシンかで盤面は全然違う。それを混ぜると打者本人の力が見えなくなる。

v1.0と同じ手順、でも見ている対象だけが「直接得点」から「盤面前進量」に変わった。それで計算するとこうなりました。

四死球 = 1.445
単打   = 1.612
二塁打 = 3.125
三塁打 = 4.452
本塁打 = 5.453

並べてみるとはっきりします。

v1.0:本塁打 ≒ 単打の16倍、四死球の45倍
v2.0:本塁打 ≒ 単打の3.4倍、四死球の3.8倍

ホームランは依然として一番強い。当然です、4つ全部の塁を一気に動かすんだから。でも、その差が「単打の3.4倍」くらいに収まった。これは感覚と合う。

そして、四死球も単打も、ちゃんと数字として見える大きさになった。打者が盤面を作る仕事が、ちゃんと評価される指標になった。

さっき平均以下になっていた松本剛をv2.0で計算し直すと、0.741。これなら「平均以上のかなりの好打者」と読める数字です。

06

v2.0で、BOSの形は固まった

v2.0で、BOSの設計はほぼ完成しました。

打者の戦闘力を「直接得点」ではなく「盤面前進力」で測る。塁を座標化して、打つ前後の差分を取る。8通りの盤面に出現率で重み付けして、平均盤面での前進量を係数にする。

この枠組みで、

  • ホームランタイプは高く評価される
  • 単打を量産するタイプも、ちゃんと数字に出る
  • 四球を選ぶタイプも、埋もれない
  • バランス型もそれなりに評価される

打者のタイプによらず、「盤面を動かす力が大きい打者」を上に出せる指標になった。BOSの本質はここで完成しています。

ただ、v2.0の係数を眺めていて、もうひとつ考え直すべき点が出てきました。それは計算の入力に使っている「盤面の出現率」のほうです。

07

v2.1:出現率を、意味のある粗さに丸める

v2.0の係数は、次の盤面出現率を使って計算していました。

走者なし 0.558
一塁     0.200
二塁     0.074
三塁     0.025
一二塁   0.070
一三塁   0.032
二三塁   0.018
満塁     0.024

ただ、この数字をそのまま小数第3位まで使うことには、あまり意味がありません。

そもそもこの出現率はMLB由来のデータ(Tom TangoのRun Expectancy Matrix)です。NPBでも盤面分布の大きな傾向は近いはずですが、0.558 や 0.074 という細かい桁まで同じだとは考えない方がいい。リーグも違えば、年代やイニング、出塁傾向のクセも違う。参考値としては十分使えますが、小数第3位までを「正しい数字」として扱うのは、出典データの性質に対して精密さを与えすぎです。

そして、BOSで本当に使いたいのは、細かい生の数値ではありません。

走者なしが一番多い
一塁が次に多い
二塁や一二塁がその次に来る
三塁、一三塁、二三塁、満塁は少ない

この盤面分布の大きな傾向です。打者の戦闘力を「平均的な盤面が与えられたときの前進量」で測るというBOSの目的にとって、必要なのはこの骨格であって、小数第3位の精度ではない。

実際、あとからプロ野球データパークの2025年「アウト・塁状況別の得点期待値」にある機会数ベースで確認しても、この傾向は大きく変わりませんでした。走者なしが約56.7%、一塁が約18.6%、二塁が約7.9%、一二塁が約7.1%。細かい数字は違っても、「走者なしが最も多く、一塁が次に多く、二塁・一二塁が続き、満塁や二三塁は少ない」という骨格はほぼ同じです。

ならば、細かい小数をそのまま使うより、整数%に丸めた方がBOSの設計に合っています。データの性質に過剰な精度を与えず、必要な傾向だけを残す。

走者なし 56%
一塁     20%
二塁      7%
三塁      3%
一二塁    7%
一三塁    3%
二三塁    2%
満塁      2%

合計100%。

この丸めた出現率で同じ計算をやり直すと、

四死球 = 1.43
単打   = 1.60
二塁打 = 3.10
三塁打 = 4.42
本塁打 = 5.42

式に組むとこうなります。

BOS v2.1 = 1.43 × 四死球率
         + 1.60 × 単打率
         + 3.10 × 二塁打率
         + 4.42 × 三塁打率
         + 5.42 × 本塁打率

ここで強調しておきたいのは、v2.1は v2.0を雑にしたものではない ということです。

v2.0では元データの出現率をそのまま使いました。v2.1では、その細かい桁に意味を持たせすぎず、盤面分布の傾向だけを残して丸めています。設計思想は完全に同じで、入力する出現率の粗さだけが違う。v2.0の小数第3位までの細かさは、MLBデータとしては意味のある精度ですが、NPB用のBOSにそのまま持ち込むと必要以上に精密な数字として見えてしまう、という話です。

08

v2.0とv2.1で、評価はほとんど変わらない

丸めたあとも、盤面分布の大きな傾向は変わっていません。走者なしが最も多く、一塁が次に多く、満塁や二三塁は少ない。この骨格が保たれているので、係数も大きくは変わりません。

実際の選手データで比べても、v2.0とv2.1の差はかなり小さい。例えば佐藤輝明の2025年成績で見ると、

v2.0 = 0.903
v2.1 = 0.896
差    = 0.007

小数3桁目で揺れる程度です。打者の良し悪しの評価は変わらない。

逆に言えば、出現率を少し粗くしても結果がほぼ変わらないなら、BOSで見たい大きな評価には、細かい桁よりも盤面分布の骨格の方が効いている、と考えられます。

09

最終形:BOS v2.1

開発を通して着地したのが、こちらの式です。

BOS = 1.43 × 四死球率
    + 1.60 × 単打率
    + 3.10 × 二塁打率
    + 4.42 × 三塁打率
    + 5.42 × 本塁打率

BOS v2.1は、その打席で何点入ったかを見る指標ではなく、平均的な盤面が与えられたときに、打者が1打席あたりどれだけ盤面を前に進めるかを見る指標です。