【バンテリンドームは投手有利?】パークファクターについて解説してみた

野球

今回はセイバーメトリクスの指標のひとつであるパークファクターについて解説します。

プロ野球を観ていて、「この球場だとホームランがよく出るな」とか「ここは投手有利だな」と感じたことはありませんか?実はそれを客観的な数値で示したのがパークファクター(Park Factor)です。

パークファクターとは?

パークファクターとは、ある球場でどれだけ得点が入りやすいか、あるいはホームランが出やすいかなど、球場ごとの特性を数値化したものです。
例えば、「バンテリンドームは投手有利」「神宮球場は打者有利」といった話も、データで裏付けることができます。

バンテリンドームはホームランが出にくいって本当?

球場ごとの広さとフェンスの高さを比較してみる

もちろん球場ごとに広さやフェンスの高さは異なります。
以下は各球場ごとに両翼、中堅、フェンスの高さを一覧化した表です。

距離が短く、フェンスの高さが低い方がホームランは出やすいというのはイメージできると思います。
神宮球場とバンテリンドームを比較してみてみると、バンテリンドームの方が両翼、中堅ともに距離が長くフェンスの高さも高いことがわかります。

では、バンテリンドームは本当にホームランが出にくい球場であることを証明するために数値で考えていきたいと思います。

2024年シーズンのホームラン数の比較

2024年シーズンのホームラン数を球場ごとに一覧化して比較していきたいと思います。

合計本塁打数に注目をすると1番ホームラン数が多いのは134本で神宮球場、1番少ないのは38本で甲子園球場でした。ホームランの数で考えるとバンテリンドームは甲子園、マツダに次ぐ3番目にホームラン数が少ない球場でした。

パークファクターで考えてみる

すでに気づいた方もいると思いますが、年間のホームラン数でホームランの出やすさについて比較することはベストとはいえません。なぜなら、その球場を本拠地としているチームの打撃能力によって球場ごとのホームラン数は左右されるからです。

上記のような各チームの打撃能力を排除して球場ごとの特性を数値化した指標がパークファクターです。2024年シーズンのホームラン数からパークファクターを求めてみたいと思います。
パークファクターの計算式は以下です。

パークファクター(PF)=その球場での1試合あたりの本塁打数 ÷ 他球場での1試合あたりの本塁打数
  • 分子:その球場の1試合あたりの本塁打数
    home_hr / home_games
  • 分母:他球場での1試合あたりの本塁打数
    (total_visitor_hr - visitor_hr) / (away_games * (len(stadiums) - 1))

この2つを割って求めるという感じです。

  • home_hr:その球場のホーム試合での本塁打数
  • home_games:その球場でのホーム試合数(仮に60)
  • visitor_hr:その球場のビジター試合での本塁打数
  • total_visitor_hr:セ・リーグ6球場すべてのビジター球場での本塁打の合計
  • away_games:他球場での試合数(仮に60)
  • len(stadiums) – 1:他の球場の数(6球場なら5)

Pythonのコードも置いておきます。

import matplotlib.pyplot as plt

# 球場ごとのデータ (ホーム球場での本塁打, ビジター球場での本塁打)
stadiums = {
    "Tokyo Dome": (37, 38),
    "Jingu Stadium": (63, 71),
    "Yokohama Stadium": (50, 36),
    "Vantelin Dome": (28, 25),
    "Koshien Stadium": (22, 16),
    "Mazda Stadium": (25, 27)
}

# ホームゲーム数・ビジターゲーム数(仮に全球場60試合ずつとする)
home_games = 60
away_games = 60

# 全球場のビジター球場での本塁打数(ホーム試合以外の球場での本塁打)
total_visitor_hr = sum([v for _, v in stadiums.values()])

# 各球場のパークファクターを計算
park_factors = {}
for stadium, (home_hr, visitor_hr) in stadiums.items():
    pf = (home_hr / home_games) / ((total_visitor_hr - visitor_hr) / (away_games * (len(stadiums) - 1)))
    park_factors[stadium] = round(pf, 2)

# グラフ作成
plt.figure(figsize=(10, 6))
plt.bar(park_factors.keys(), park_factors.values(), color='royalblue')

# グラフ装飾
plt.title('2024 Central League Home Run Park Factor', fontsize=14)
plt.xlabel('Stadium')
plt.ylabel('Park Factor')
plt.ylim(0, max(park_factors.values()) + 0.5)

# 値の表示
for i, v in enumerate(park_factors.values()):
    plt.text(i, v + 0.05, str(v), ha='center', fontsize=10)

plt.xticks(rotation=30)
plt.grid(axis='y', linestyle='--', alpha=0.7)
plt.tight_layout()

# 表示
plt.show()

数値は「セ・リーグで使用されている他球場と比べて本塁打が何倍出やすいか」を示しています。

正確なパークファクターの計算式

上で記載しているパークファクターの式は最も一般的な式ですが大きく2点の欠点があります。

①交流戦を含めていること
交流戦は18試合行われて各チームと3試合ずつ実施しますが、その3試合はホームかビジターのどちらかでしか行われません。ホームとビジターで各チームが同じ内訳でそのため、交流戦は対象から除外するのがベターという理由です。

②他球場を基準としていること
リーグ内の本拠地を横並びで比較するなら、リーグ平均(6本拠地の平均値)が基準であるべきです。
「本拠地で記録された成績」を「他球場で記録された成績」と比較するのではなく、「本拠地で記録された成績」を「6本拠地で均等に試合した時に記録されうる成績」と比較するべきです。
リーグ内の6本拠地は、その1/6が本拠地、5/6は他球場で構成されるため、「本拠地で記録された成績」を1、「他球場で記録された成績」を5と重みづけして加重平均することで「6本拠地で均等に試合した時に記録されうる成績」を推定できます。これを式の分母とすればリーグ平均を基準にすることが可能です。

より正確なバンテリンドームのパークファクター(本塁打)の計算式です。

パークファクター(本塁打)=
バンテリンドームでの中日戦の本塁打数
÷(他球場での中日戦の本塁打数×5/6 + バンテリンドームでの中日戦の本塁打数×1/6)


※交流戦や地方球場試合は計算から除外する。
※「本塁打」は両チームが打った本塁打の合計を指す。

分母は「中日が6本拠地で均等に試合した時に発生しうる本塁打」を示しています。
分子の「中日がバンテリンドームで試合した時に発生した本塁打」を「6本拠地で均等に試合した時に発生しうる本塁打」で割るため、この式の数値は「平均的な球場(6球場の平均)に対してバンテリンドームは本塁打を何倍打ちやすいか」という意味を持ちます。

まとめ

パークファクターについて解説しました。
Pythonのコードも置いておいたのでもしよければコピーして実行してみてください。
今回はホームランのパークファクターについて記載しましたが点数など他のパークファクターについても計算してみたり、正確なパークファクターの計算で結果を見てみるのも面白いかもしれませんね。

タイトルとURLをコピーしました