【大リーグとデータ】コスト効率スコアを算出して一番コスパが良い攻撃選手を分析してみる⚾
今回の【大リーグとデータ】では、次の分析フェーズとして、2024年シーズンの攻撃選手に関する費用対効果分析を行います。主な流れは以下のようになっています。
1.すでにWAR(勝利への貢献度数)と契約データ(年俸と契約年数)を取得し、それらを選手の統計データに合わせてデータを構築しました。
2.データ構造の違いから、2024年シーズン終了時点でフリーエージェント選手とフリーエージェントではない選手を分けて、それぞれ個別に分析を行います。ここまでのデータプロセスに興味がある方は、私の最新のKaggleノートブックをご覧ください。
3.ここから本題に入ります。主要な攻撃メトリックを基に包括的なパフォーマンススコアを計算し、この指標を使用して攻撃選手を評価します。さらに、選手の年齢によるリスクを考慮に入れるために、年齢調整を加えます。この年齢リスクの重みをパフォーマンス指標に組み込むことで、選手がチームにもたらす潜在的な貢献度をより正確に評価することが可能になります。
4.最後に、費用対効果スコアを計算し、選手たちが契約価値に見合った貢献をゲームで発揮できたかどうかを検証します。この分析により、コストパフォーマンスが高い選手や潜在的に埋もれてしまっている選手を特定することが期待されます。
ちなみに前回の【大リーグとデータ】ではセイバーメトリクスの基本について触れました。興味のある方はこちらからどうぞ。
包括的なパフォーマンス指標を算出する
選手ごとのパフォーマンス指標を算出するために、今回は以下の攻撃指標を使用します:
Total_WAR(総合的な勝利貢献度)
xwOBA(期待加重出塁率)
wOBA(加重出塁率)
SLG%(長打率)
Isolated Power(ISO:純粋な長打力)
Barrel Batted Rate(バレル打球率)
Sprint Speed(スプリントスピード)
まずは指標の正規化
まず、これらの指標を正規化し、すべてのデータが似たようなスケールになるように調整します。正規化を行うことで、異なる単位やスケールを持つ指標を公平に比較できる状態にすることができます。このステップは、異なる要素を組み合わせた総合的な評価を行う上で非常に重要です。
from sklearn.preprocessing import MinMaxScaler
performance_metrics = ['Total_WAR',
'xwoba',
'woba',
'slg_percent',
'isolated_power',
'barrel_batted_rate',
'sprint_speed']
scaler = MinMaxScaler()
# Apply normalization and add normalized columns
merged_data2[[f'norm_{col}' for col in performance_metrics]] = scaler.fit_transform(merged_data2[performance_metrics])
merged_data2.head()
正規化のコードステップについての簡単な説明です。
まずMinMaxScalerをインポートします。このスケーラーを使用すると、データを0から1の範囲にスケールする事が出来ます。
そして正規化する指標の設定をし、MinMaxScalerのインスタンス作成をします。それからscaler.fit_transform()メソッドを使用してデータフレーム内の指定した列を正規化します。このメソッドでは:
Fit (適合):各列の最小値と最高値を計算します。
Transform(変換):各値を最小値と最高値を用いてスケールします。
そして最後に正規化された値は新しい列としてデータに保存されます。列名は元の列名にnorm_という接頭辞を付けたもの(例: norm_Total_WAR)になります。
パフォーマンス指標のスコア計算
次のステップではいよいよパフォーマンス指標の計算に入ります。
# Define weights for each metric
weights = {
'norm_Total_WAR': 0.2,
'norm_xwoba': 0.2, # Adjusted to balance with wOBA
'norm_woba': 0.2,
'norm_slg_percent': 0.1,
'norm_isolated_power': 0.1,
'norm_barrel_batted_rate': 0.1,
'norm_sprint_speed': 0.1
}
# Calculate composite score
merged_data2['performance_index'] = (
merged_data2['norm_Total_WAR'] * weights['norm_Total_WAR'] +
merged_data2['norm_xwoba'] * weights['norm_xwoba'] +
merged_data2['norm_woba'] * weights['norm_woba'] +
merged_data2['norm_slg_percent'] * weights['norm_slg_percent'] +
merged_data2['norm_isolated_power'] * weights['norm_isolated_power'] +
merged_data2['norm_barrel_batted_rate'] * weights['norm_barrel_batted_rate'] +
merged_data2['norm_sprint_speed'] * weights['norm_sprint_speed']
)
各指標の重みは、攻撃力を評価するうえでの重要度に基づいて設定しました。WAR、wOBA、xwOBAのような主要指標には高い重み(それぞれ0.2)が与えられています。一方でパワーを表す指標や俊敏性を示す指標はそれぞれ0.1と適度な重みをもたせ、特定のスキルを過剰評価しないようバランスを保つようにしています。
年齢リスクを考慮したパフォーマンス指標の調整
パフォーマンス指標に年齢リスクの重みを組み込みます。様々なスポーツ関連の研究によると、特に30歳を超えると怪我のリスクやパフォーマンスの低下が増加する傾向があります。一般的な手法として、30歳を超えた年齢に対して毎年5〜10%のパフォーマンス低下を適用します。これは、統計分析によって年齢を重ねた選手が怪我やフィールド上での効果的なパフォーマンスの低下に直面するリスクが高まることを示しているためです。
この年齢要素をパフォーマンス指標に加えることで、高い成績を持つ選手であっても若い選手ほどの価値を提供できない可能性を把握できやすくします。この調整により、特にフリーエージェントの評価において、コストを抑えつつ大きく貢献できる選手を特定しやすくなります。また、野球におけるエイジングカーブ(加齢による身体能力の低下)を考慮し、経験の重要性を認めつつも、年齢に伴う身体的衰えを評価に反映させることができます。
age_threshold = 30
decline_rate = 0.05
merged_data2['age_adjustment'] = merged_data2['player_age'].apply(lambda x: 1 - decline_rate * (x - age_threshold) if x > age_threshold else 1)
# Update the performance index
merged_data2['performance_index'] = merged_data2['performance_index'] * merged_data2['age_adjustment']
年齢要素を加えたパフォーマンス指標をメインのデータに統合した後、その指標に基づいて選手をランキング化し、パフォーマンスが優れている順にリストを作成します。このランキングは、年齢リスクを考慮した調整済みの評価を反映しており、将来的な貢献度やコスト効率をより正確に分析するためのものです。
# Check Top 20 of Performance Index
ranked_players = merged_data2.sort_values(by='performance_index', ascending=False)
print(ranked_players[['name', 'performance_index']].head(20))
トップ5の選手は、アーロン・ジャッジ選手、大谷翔平選手、ボビー・ウィットJr選手、フアン・ソト選手、そしてガンナー・ヘンダーソン選手の順にランクインしています。
費用対効果スコア(Cost-Effectiveness Score)の計算
次に、コスト効率スコア(Cost-Effectiveness Score)を計算します。このスコアは、選手の契約価値に対する実際のパフォーマンスを評価し、チームにとっての費用対効果を測定する重要な指標です。この分析により、高い貢献度を持つ選手が、その契約金額に見合った価値を提供しているかを確認することができます。
# Calculate cost-effectiveness by dividing performance by cost metric
merged_data2['cost_effectiveness'] = merged_data2['performance_index'] / merged_data2['cost_metric']
ranked_effectiveness = merged_data2.sort_values(by='cost_effectiveness', ascending=False)
print(ranked_effectiveness[['name', 'cost_effectiveness']].head(20))
top_10 = ranked_effectiveness[['name', 'cost_effectiveness']].head(10)
plt.figure(figsize=(10, 6))
sns.barplot(data=top_10, y='name', x='cost_effectiveness', palette='viridis')
plt.title('Top 10 Cost-Effective Players')
plt.xlabel('Cost-Effectiveness Score')
plt.ylabel('Player')
plt.show()
上記のコードは選手のコスト効率スコアを計算し、可視化した手順を実行しています。(*ここではFAを除いた選手を反映させています。FAグループは次回のNoteで詳しく書く予定です。)まず、前のステップで計算したパフォーマンス指標をコスト・メトリック(この場合は各選手の年俸)で割ることでコスト効率スコアを算出します。そして算出したスコアに基づいてデータを降順にソートします。その結果、最も効率的な選手を上位に配置したランキングが作成されます。上位10人の選手を選出して簡単なバーチャートを作成します。
上記の棒グラフからわかるように、ガンナー・ヘンダーソン選手が昨シーズンのリーグで最もコスト効率の良い選手としてランクインしました。彼の契約価値に対するパフォーマンスの優秀さが際立っていると言えます。
事例分析:ロサンゼルス・エンゼルス
上で算出したパフォーマンススコアやコスト効率スコアは、選手がシーズンを通してパフォーマンスや契約価値に見合った貢献をどの程度発揮できたかを包括的に評価する指標の一つになることができます。これらの指標は、オフシーズン中の選手獲得や契約金額の交渉において、重要な判断材料として活用される可能性があります。ここでは、2024年シーズンのロサンゼルス・エンゼルスを事例として、その適用の可能性について考察してみます。
ロサンゼルス・エンゼルスは2024年、フランチャイズ史上最悪のシーズンを迎え、63勝99敗という記録で終了しました。球団のゼネラルマネージャーは、高額年俸を受け取っているスター選手マイク・トラウト選手とアンソニー・レンドン選手に奮起を促し、彼らの安定した貢献がチームに必要不可欠であることを強調しました。しかし、両選手とも複数のケガに悩まされ、影響力が限定的となり、重要選手の信頼性の問題が浮き彫りになりました。この状況は、ロースター全体で安定したパフォーマンスを維持する難しさを反映しており、来季への懸念を引き起こしています。
マイク・トラウト(ロサンゼルス・エンゼルス) - センター外野手
アンソニー・レンドン(ロサンゼルス・エンゼルス) - 三塁手
このような場合、エンゼルスはマイク・トラウト選手とアンソニー・レンドン選手のケガ問題を考慮しながら、攻守の強化を進めることが不可欠になってきます。特に、トラウト選手をトレードして多額の給与枠を解放し、複数のコスト効率の高い選手を獲得することも検討すべきです。以下のようなコストパフォーマンスに優れた選手をターゲットにすることを推奨できます:
ガンナー・ヘンダーソン:主にショートストップを務める万能な内野手で、優れたパワーと堅実な守備力を持つ。
ジャクソン・メリル:攻撃面で有望な才能を持ち、守備面でも安定感のあるセンター外野手。
ジュリクソン・プロファー(フリーエージェント):スイッチヒッターであり、外野と内野をこなせる柔軟性を持つユーティリティプレイヤー。
エリー・デ・ラ・クルーズ:高い運動能力とパワーを持つダイナミックなショートストップ。攻守ともにチームに刺激を与える存在となり得る。また、デ・ラ・クルーズ選手はリーグ最多の盗塁数を記録している。
これらの選択肢により、エンゼルスは選手層を改善し、より競争力のあるチームを構築する事が可能になると考えます。
あくまでもこれはシミュレーション例ですが、どの選手がリーグでコストパフォーマンスがどれくらい高いのかを知っておくだけでも、チームの競争力を強化のための重要な判断材料となりえる事がわかります。
次回の【大リーグとデータ】では、パフォーマンススコアとコスト効率スコアを用いて、フアン・ソト選手の歴史的大型契約について分析していきたいと思います。
ソト選手は昨年12月にニューヨーク・メッツと歴史的な15年総額7億6500万ドルの契約を結びました。この契約は、北米プロスポーツ史上最大の契約金額となります。大谷選手の歴史的な契約と比較されるこの契約は、二刀流のエリート選手としての大谷選手の前例のない価値と、ソト選手のエリート級の攻撃力を持つ選手としての役割を考慮すると、大きな議論を引き起こしています。ソト選手の潜在的な価値をより深く理解するため、彼のパフォーマンス指標をマニー・マチャドやボビー・ウィット・ジュニアといった近年のトッププレイヤーと比較し、市場動向やベンチマークを考慮しながら、7億6500万ドルが本当に見合った契約金額なのか、分析していきたいと思います。