自己紹介

真壁孝嘉氏(以下、真壁):真壁です。タイトルどおり、2021年のプロ野球シーズンを振り返って、もう少しソフトバンクと西武は強かったんじゃないかということを、シミュレーションによって検証していきたいと思います。

自己紹介をします。私は沖縄県の南の島で生まれました。スポーツは昔からやっていて、小さい頃はバスケットボール、大学からはストリートダンスを始めました。決して上手なほうではありませんでしたが、周りがすごく上手で、それに引っ張られるかたちでいろいろな大会に出ていく中で、自分もがんばればできるんじゃないかという勘違いをしていました。プログラミングや勉強よりも、そちらにすごく集中していた過去があります。

現在はデータサイエンティストとして働いています。@Takayoshi_maという名前でTwitterもやっていて、たまにスポーツやデータサイエンスのことを呟いているので、よければフォローお願いします。好きなプロ野球チームは、埼玉西武ライオンズです。

分析の動機

「本分析の動機」から発表します。「ライオンズの強さはこんなものじゃないはず」と自分自身に言い聞かせるために、今回の分析をやってみました。事の発端は、ライオンズが42年ぶりに最下位になったことです。12球団の中では最下位から最も遠いチームでしたが、久しぶりにビリになってしまいました。

ライオンズの黄金期にセカンドを守っていた辻監督が「言い訳じゃないけれど、オリックスの山本由伸と宮城投手にうちだけ当たり過ぎだよ」と少し愚痴っていました。2人合わせて西武は11敗しています。あまり言いたくないけれど、けっこうきつい。

ファンの人たちのTwitterもけっこう悲惨で、「山本と宮城に当たり過ぎでしょ」と、文句というか悲痛な声も多かった。私はこれを見て「じゃあ、山本と宮城とそんなに当たらなければ、どれぐらい西武って上にいってたのかなあ」と気になったのが、今回のシミュレーションの動機です。

不均衡感が生まれる3つの理由

宮城・山本がフィーチャーされていますが、なぜそのように不均衡感が生まれるのかを考えた時に、私は日程の歪みが主要因だと考えました。対戦投手回数の不均衡は、主に3つの要因で説明できると思います。

(スライドを指して)まず、①は日程。②と③は日程とは関係ありませんが、チームによってはピッチャーの相性があるはずなので、少し登板間隔をずらしてぶつけてくる。③は②に付随しますが、やはり後半の絶対負けられない試合ではエースをぶつけてくると思うので、これら3つの要因から、対戦投手回数のずれが生じると考えられます。

私はプロ野球が好きで、相当数の試合を観ています。その中で、どう考えても①が大きいと思いました。巨人は少し違うと思いますが、今のプロ野球は、すごく若手の投手や体力のないベテランでもない限り、ピッチャーは基本的に中6日(1週間)。曜日を固定して回している印象があります。よって、①による対戦投手回数の不均衡が一番大きなファクターだったと感じています。

スケジュールから見る対戦の偏り

それを基に、まずはスケジュールがどれだけずれていたかを確認していこうと思います。今回は、シーズン前半と後半を曜日ごとに分けて、対戦チームをカウントしていきます。曜日ごとにカウントする理由は、先ほど言ったとおり、プロ野球は中6日でローテーションを回すことが多いので、特定曜日に対戦チームが偏っていれば、その分対戦投手の不均衡が生じてしまうからです。

スライドにダラダラと書いていますが、前後半に分けてカウントする理由は、自分のチームがCチームだとしたときに、このスケジュールを見ると、Aチームとは前半戦に多く当たり、Bチームとは後半戦に多く当たることになります。

このように、週末と火水木でくっきり分かれている状況が、ちょうど前・後半で逆転していた場合、シーズントータルで考えると、AチームとBチームは等しく火水木、金土日それぞれ4試合ずつ予定されていて、一見すると平等な日程に思えてきます。。

しかし、単純にそうとは言えません。プロ野球は、この前半戦と後半戦の間にけっこう大きな日程の穴があります。その場合、前半戦と後半戦で登板曜日をチェンジしてくることが可能となります。特に2021年はオリンピックのため長い休みがあったので、1ヶ月くらい空いています。なので、単純に前・後半合わせてカウントするのではなく、前半と後半に分けてカウントしようと思います。スライドに細かく書いたので、後で見てください。

(スライドを指して)その結果、けっこう偏っている印象がありました。全チームは説明できないので、主にライオンズを見ていこうと思います。ライオンズは、オリックスとの試合が週末にたくさんある。さらに楽天戦も週末に予定されている試合が多い。ソフトバンクとは、逆に週末の試合がない。

これは対戦順位だけではなく、興行的にもどうかなと。福岡に住んでいるサラリーマンのライオンズファンの中には、「ぜんぜん週末に試合を見に行けないじゃん!」という人もいるのではないか。こんな感じで全チーム偏っていたと思います。

スケジュールの偏りによる順位への影響

実際に偏りが発見できたので、次はその偏りを取った場合に、順位にどう影響が出るのかをシミュレーションによって求めていこうと思います。(スライドを指して)シミュレーションの流れを大きく2つに分けて、トライしてみました。

1つ目は、登板機会の再分配。要は、山本由伸は西武戦で投げてばかりで、日本ハム戦ではあまり投げなかった。そういうものをいったんならしてみようと思います。そうやって新しく試合のスケジュールを組んだ後、2つ目に考えるべきはその勝敗です。これはあくまでも、2021年の実績ベースで決めたい。

今回のシミュレーションの目的は、日程を変えたらどう動くかを見ることなので、点数に関してはあくまでも実績ベースで決めていこうと思います。ソースコードをKaggleのNotebookに公開したので、後で資料と一緒にURLを公開しようと思います。データは非公開ですがソースコード自体は作ったので共有します。

まず1番と2番に分けてどうやったかを説明します。(スライドを指して)1番は、2021年の先発で各投手がどれぐらいの試合数投げたかを集計します。例えば交流戦を除く1年間のパ・リーグ主催試合でオリックスの山本由伸は23試合、宮城は20試合投げています。その実績を基に、(スライドを指して)山本由伸であれば合計23試合を順にロッテ、楽天、ソフトバンク、日本ハム、ライオンズというように、各チームとの対戦回数が均等になるように振り分けます。

そうすると、2021年の実績では対西武にたくさん投げて、対ロッテにはあまり投げていなかった山本投手ですが、オリックスVSロッテで山本は5試合、宮城も5試合、と均等になると思います。5で割り切れない数の場合、僅かにズレが生じることになりますが、シミュレーションのたびに一つひとつシフトしていくので、1万回分シミュレーションすれば平等になるかと思います。

(スライドの)左で作成した連想配列を基に、両チームの対戦投手を決定します。作成した連想配列の中で、例えばオリックスがライオンズとやる時は25試合の長さの配列があると思うので、そこからランダムに1つ選びます。スライドの例ではオリックスからは山本由伸が選ばれ、ライオンズからは高橋光成が選ばれています。

また、これはランダムに選んだものを戻すのではなく、取り出して削除していく操作になるので、最終的にすべての投手がいなくなるまで選ばれることになります。上記の流れで、125試合×3(1日に3試合)の375カードすべての先発投手を決定していきたいと思います。つまり、シミュレーションでは、2日連続で山本由伸が投げる場合もあります。ただ、試合がずらされたと考えればいいだけなので、影響は少ないと考え進めていきました。

勝敗の決定に関しては、あくまでも2021年の実績を基にしたいと思います。(スライドを指して)先ほどのオリックス山本投手と西武高橋投手の例を元に、勝敗の決定方法を紹介します。例えばオリックスの山本投手ですが、2021の対西武戦でこれだけの失点がありました。なお、これはなにも山本投手の自責点だけではなく、リリーフ含めトータルでこれくらいの失点があったということです。

ライオンズの高橋投手がオリックス相手に投げたのは数試合しかありませんが、これだけの失点実績があるので、この中からランダムに失点数を決定したいと思います。これは、ランダムに決定して戻す、決定して戻すという復元抽出のようなかたちで抽出しますが、(スライドを指して)例えばここから3点、ここから3点がそれぞれ選ばれた場合、この試合は引き分けとします。

1つ補足します。ある投手と該当チームの2021年対戦実績が存在しない場合、その投手と他の対戦チーム実績からランダムに選択していこうと思います。

これは改良の余地があると思います。なお、交流戦に関してはシミュレーション対象に加えず、あくまでも2021年の実績をそのまま加点することにしました。大きな理由はありませんが、「パ・リーグの中の日程だけ変えたら」というところで、交流戦の実績はそのまま採用することとしました。

3試合の検証結果

とりあえず3シーズンだけ出してみた結果、(スライドを指して)このような感じになりました。順位変動は大きいものの、実感としてはそんなに悪くない、勝敗数やゲーム差もそんなに現実離れしていなさそうだと確認できました。実際に、2021年の順位と一番似ているのがシーズン2でした。

シーズン2だけ細かく見てみたところ、2021実績ではオリックスに大きく負け越した西武とソフトバンクが、シミュレーションの結果では勝ち越していることが分かります。

とはいえ、山本由伸はソフトバンクに4試合、西武に5試合投げて1つも勝てていない。シミュレーション上でも西武とソフトバンクは山本投手に1試合も勝てていませんでしたが、トータルでは勝ち越しました。これは、ただの感想なので全然どうでもいいです。

(スライドを指して)10,000回の結果はこうなりました。やはりソフトバンクは強かった。シミュレーションでも1位をとる回数がすごく多かった。これは意外でした。細かく見られていませんが、ソフトバンクは実績ベースで強いんだなという感想です。他は順位表とそこまで変わらず、オリックス、ロッテ、楽天、ライオンズ、ファイターズ。結果としてはこうなりました。

本当にきちんとできているのかは検証が必要だと思いますが、この方式で回してみたところ、(スライドを指して)こういうかたちになりました。感想は、もし日程が均衡だった場合、西武のクライマックスシリーズ進出確率は2割強だったということです。また、日程を利用して投手ローテーションを工夫することで、ペナントレースが大きく変わりそうだなという所見を持ちました。

では、どう最適化すればいいのか。ただローテーション崩すのもけっこうリスクがあると思うので、このあたりもチームの戦略次第だと思います。2022年のパ・リーグはまた偏った日程らしいので、そのあたりの戦い方を少し変えるだけでも違う気がします。

ペナントレースの結果はセンシティブというか、1ゲーム差、2ゲーム差なんて本当に誤差なので、その僅かな差で天国地獄がはっきりと別れます。シーズンの日程や日程に合わせた投手のローテーションもけっこう大事なのではないかということが、今回のシミュレーションをとおして自分なりに得られた結果です。以上です。

質疑応答

司会者:確かに日程の話はすごく大切というか、特にコロナ禍では不規則でしたから。2021年は特にセ・リーグもパ・リーグも最終戦までクライマックスの順位がもつれ込んでいたので、そのあたりの1勝、2勝がすごく大きいのかなと感じました。

「日程の不均衡が顕著なのは2021年だけなのでしょうか」という質問がきています。もし「他の年もやっていたら」「2021年は特に不均衡だった」など、思うところがあればコメントをお願いします。

Makabe:昨シーズン(2020年)以前は見ていません。ただ、気になって今シーズン(2022年)の日程を確認しました。パ・リーグに関しては、今シーズンも不均衡があるみたいです。どれほどあるのかはきちんと見てはいませんが、あるようです。だから、あえてそういう日程を組む理由が何かしらあるのかなと思います。

司会者:監督の采配などは、大枠で明らかに意図的に当てていると勝手に思っているので、すごく効く部分があるのかなと思いました。もう1つ質問がきています。「対戦相手による不平等を除いてシミュレーションを行うとのことでしたが、球団平均の投手を1人仮定せずに、選手個々人を残したシミュレーションにした意図があれば教えてください」。

Makabe:いろいろありますが、1つは球団平均の投手を仮定するのが難しいと思ったからです。実際にいい投手と悪い投手がいると思いますが、その平均ってなんだろうと。実際に1年間に得られた平均の中央値だけで、例えば対西武なら25試合あって、25試合全部とおすことはもちろんできると思いますが、シミュレーションしても毎試合同じ結果になる。

投手個々をぶつけていくと、もちろんシミュレーションごとにばらつきは発生するはずですが、実績値をランダムに選ぶことで、10,000回もやればけっこう平均に収束していくのではないかと。数学的に厳密に考えたわけではありませんが、感覚として10,000回もあればだいたい収束していくのではないかと仮定して、今回はこういうかたちでやりました。

司会者:私は1つのシミュレーションの方法としては妥当だと感じました。ここでMakabeさんの発表を終了します。ありがとうございました。