【Streamlit×MLB】NL西地区スタメン成績を可視化・予測するアプリを作ってみた

# 🎯 はじめに
2025年、ドジャース打線が異次元すぎる。

そんな彼らと同地区のライバルたちはどれだけ差があるのか？  
**OPS・WAR** などの指標を使って、NL西地区5チームを**データで比較・可視化・予測**まで行いました。

> 💥 補強選手の加入によってチームはどれだけ強化されたのか？
> 🧠 チーム別に成績の“平均”を出すと？  
> 🤖 Streamlitでどう可視化したの？
> 🔮 成績予測と開幕現実の比較など

本記事では、これらの観点を総合的に解説します⚾


# 📌 使用ライブラリ
- **Streamlit**：データ可視化アプリのUI構築
- **pandas**：CSV読み込み・データ整形
- **matplotlib**：棒グラフの描画
- **seaborn**：ヒートマップの描画

# 🧪 使用データ＆手法

- 分析対象：NL西地区の5チーム（Dodgers / Padres / Giants / DBacks / Rockies）
- 指標：OPS / WAR / AVG / HR
- 選手：2025年スタメン想定（Fangraphsなどを参考に選出）
- 補強選手：`New=True` でフラグ付け
- データソース：Fangraphs + Baseball Savant
- チームごとの傾向を視覚的に把握できるよう、平均線も描画しています



# 🖥 Streamlitで作ったアプリUI

選手別に指標を比較したり、補強選手だけを抽出することも可能です。  
**平均線・チーム別色分け・ヒートマップ**なども対応済み。

### 📊 棒グラフ画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4024841/4a605728-b2ad-4a20-9e43-1ffeac7b3a4e.png)

### 🔥 ヒートマップ画面
![heatmap](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4024841/5740e453-bee4-4b3d-aa81-86fd9863c3f8.png)
🔗 アプリはこちらから試せます！  
https://dodgers-war-analysis-n2ayxkwwwkftewh7crwyv4.streamlit.app/


# 🧠 中身のコード紹介（棒グラフ）

```python
fig, ax = plt.subplots(figsize=(10, 6))
bars = ax.bar(df_selected["Label"], df_selected[metric], color=colors)

# 平均線をチームごとに表示
for team in teams:
    team_df = df_selected[df_selected["Team"] == team]
    avg_value = team_df[metric].mean()
    ax.axhline(
        y=avg_value,
        linestyle='--',
        linewidth=1.2,
        color=team_colors[team],
        alpha=0.6,
        label=f"{team} Mean"
    )
```
## 🤖 成績予測と開幕現実の比較

簡易的なHR予測モデルを使って、補強選手や注目打者が「どれくらい活躍するのか？」を事前にスコア化してみました。

- 使用モデル：**LightGBM**
- 目的：2025年HR数を事前に回帰予測（前年度の打撃成績や傾向から）

---

### 🔮 予測 vs 現実：印象的だったケース（2025年4月22日時点）

以下は、開幕前の主な選手のHR予測と2025年4月22日現在の実際のHR数を比較した表です。
※予測はLightGBMによる回帰モデルを用いて算出

| 選手               | 予測HR | 実際（4/22時点） | コメント |
|--------------------|----------------|------------------|----------|
| 大谷翔平（LAD）    | 44.2           | 6本              | やや控えめな滑り出しだが、波に乗ると爆発の可能性あり。 |
| フリーマン（LAD）  | 28.5           | 4本              | 予測通りの安定感。 |
| ベッツ（LAD）      | 31.0           | 4本              | 小柄ながらHRも多く、勝負強さが光る。 |
| コンフォート（LAD）| 16.0           | 2本              | 想定以上のスタート、復活の気配。 |
| エドマン（LAD）    | 8.7            | 7本              | 予測を大きく上回る活躍。 |
| タティスJr.（SD）  | 35.0           | 8本              | 攻撃の中核。すでに存在感が際立つ。 |
| マチャド（SD）     | 27.0           | 2本              | ややスロースタートだが、巻き返しに期待。 |
| テオスカー（LAD）  | 25.0           | 5本              | パワー全開。打線の中軸で活躍中。 |


> 予測と実際の成績を照合することで、モデルの想定と現実のギャップが可視化され、予測精度の課題を定量的に把握できました。

---

## 🔬 モデルと特徴量

今回のHR予測は、**LightGBM** という機械学習モデルを用いて、以下のような特徴量をもとに回帰予測を行いました：

- OPS、AVG（打率）、ISO（長打力）
- 打球速度（Exit Velocity）
- 打席数（PA）、フライ率（FB%）
- 過去3年のHR数 など

---

### 🧠 予測精度と今後の課題

トミー・エドマン選手のHR予測は「8.7本」でしたが、  
2024年には20本近くのHRを記録し、2025年もすでに7本と絶好調。

モデルは「過去の平均傾向」に強く引っ張られ、  
**現在のフォームやスタイルの変化**までは捉えきれなかったことがわかります。

大谷に関しても去年は打者に専念したことによって、2024年にはHR54本を記録しており、今季も50本近く打つポテンシャルがあると推測されます。しかし、予測では44.2本と低く見積もられています。

こうしたズレはモデル改善の出発点でもあり、  
「**どの選手で外れやすいか**」を分析するヒントになります。

> 今後は、より直近の傾向や球場要因、打順、フォーム改造や起用法の変化も視野に入れた予測モデルを目指します。

---

## 📈 今後の展望

- **WARやOPSの予測精度検証**
- **補強選手の“成功・失敗スコア”の数値化**
- **「予測 vs 実績」の可視化・分析**
- **月別成績・トレンド要素の導入**

---

## 📝 補足：補強フラグの意味

- `New=True` フラグは **2024年以降での新加入選手**に付けています。
- 厳密な加入日ではなく、**今季2025年にチームへ与える影響**を可視化するためのラベルです。

---

## 🚀 実行方法（ローカル）

以下の手順で、ローカル環境でも簡単にStreamlitアプリを起動できます：

```bash
pip install -r requirements.txt
streamlit run streamlit.py
```
GitHub: https://github.com/flopsy212/dodgers-war-analysis