【論文解説】Using multi-class classification methods to predict baseball pitch types

# はじめに
## 扱う論文について
私が今回解説する論文は[**Using multi-class classification methods to predict baseball pitch types**](https://content.iospress.com/articles/journal-of-sports-analytics/jsa171)です。
論文が閲覧できるサイトの方を置いておきます。また著作権に詳しくないため引用・転載はしません。そのためこちらから適宜ご覧ください。

## アイスブレイク
いまやAIという言葉が世に広く伝わりその存在も珍しくなくなったかなと思います。
その活躍は実に多岐にわたります。

農業では適切な農薬を選択したり、一方工場ではヒューマンエラーを減らせらるように人間に変わり検品作業を行っている場合もあります。
また最近ではAIによるイラストの生成なんかは記憶に新しいのではないでしょうか。
(2022.10.26執筆)

今回はAIとスポーツのコラボです。
日本でもAIを導入し勝利を収めた事例が存在します。その話は今回扱う球種予測ではないので割愛しますが、もし興味があればぜひ調べてみてください。
それでは本題に移ります。

# もくじ
[0.はじめに](#はじめに)
[1.研究背景](#研究背景)
[2.目的](#目的)
[3.方法](#方法)
[4.結果](#結果)
[5.今後の課題](#今後の課題)

# 研究背景

研究背景を箇条書きにすると以下のようなものが挙げられます。

- 球種を予測する研究は数が少なかった
- 初期の球種の予測精度はストレートor変化球を予測するものであった（2値分類）
- SVMを用いた研究は2値分類ではあったものの予測精度が8％ほど上昇した
- その後分類できる球種タイプは４つになり、その予測精度は61%弱であった
- 先行研究で用いたデータセットは限られたものであり、選手もワールドシリーズの14人のみであった
- またそのモデルの精度を確かめる際に投手は2人しか用意されておらず信頼性に乏しい

このように先行研究の段階ではまだまだ不安な要素があったため今回このような研究に取りかかったと考えられます。

## Fig.1 Legue-wide Batting Average and ERA over the past dacade
この図に注目するとERA(防御率)とBA(打率)が確認できると思います。
ここから2006-2015の間は1度もBA(打率）がERA(防御率）を超えることはなく、ERA(防御率）をBA(打率）が上回ることは難しいことだと言えます。

そこで仮設が立ちます。
もし次に投手が投げる球種の予測を立てることができたのなら、打者の手助けをすることとなりBA(打率）がERA(防御率）を超すこともできるのではないか。

次に今回の目的を整理しました。


# 目的
それではこちらも箇条書きにするので御覧ください。

- 最も高いパフォーマンスを発揮できる手法を見つけその精度を打ち出す
- 予測精度と投手の成績指標は相関関係があるのか考える
- 実験に費やす時間を増やし機械学習に適応させるデータセットを増やす
- 球種の判別に対して重要な変数の抽出を行う
- リアルタイムでの球種の予測を行う

球種を予測し打者の後押しをすることが今回の大筋の目的と言えるのではないでしょうか。


# 方法
## 使用する手法
今回使用する手法は下記のとおりです。
- LDA
- SVM
- ランダムフォレスト

それぞれについて簡単に解説した記事を過去に書いているので良かったらご覧ください。

- [LDAについて簡単にまとめてみた](https://qiita.com/rikuProgramer/items/e76e5b21e5ca9fcd09b5)
- [SVMとランダムフォレストについて簡単にまとめてみた](https://qiita.com/rikuProgramer/items/dd5877711c96a2e9508a)

## データ
### PITCHf/xについて
今回はPITCHf/xという投手の投球速度や投球軌道を追跡するスピード測定器システムを採用します。
こちらは60Hzでの測定が可能でパブリックに公開されているので気になる方はぜひご覧ください。
[PITCHf/x公式からデータを見る](https://www.brooksbaseball.net/)

### 今回扱う投手データについて
今回2014年と2015年の両方で少なくとも５００球投げた投手飲みに絞り学習を行っています。すると投手は287人に絞ることとなりました。
287人の全投手の投げた平均の数は4682球となり、最も多く投げた投手は10343球投げていたことがわかりました。
また少なくとも1108球は投げていたこともわかりました。

また投手によって投げた回数が違うためデータセットのサイズは異なっています。
最大で103個の特徴量を持ち、最小で63、平均で81個の特徴量を持っていることがわかりました。

# 結果

## 結果を見る前に
### naive guessについての注釈
論文では3つの手法の精度はnaive guessとして比較しております。naive guessとは**その投手の中で最も投球割合が高い球種と予測**したものを指します。
### 例えば。。
Jake Arriettaが最も投げた投球はシンカーであった。またその確率はトレーニングデータで26.31%であった。テストデータでの投球割合は34.03%であった。すなわちこの場合のArriettaに関してのnaive guessの精度は34.03%である。

テストデータとは未学習のデータのことを指します。すなわち未知のデータに対して34.03%とう精度が求められたことになります。
そのためnaive guessの精度はテストデータに対しての精度である34.03%という値が採用されることとなりました。

ちなみに全投手287人のnaive guessの平均は54.38%でした。

## 結果を詳しく見てみる
### Table2 100CT pitch-specific model predictions for Odrisamer Despaigne, overall accuracy 53.30%

まずはTable2を見やすくするために振り分けられた７つの球種について少し整理してみます。すると下記の様になります。
#### 表にあるカテゴリ
| pitch categories | 球種カテゴリ |
|:-:|:-:|
| FF  | ストレート  |
| CT  |  カッター |
| SI  | シンカー  |
| SL  | スライダー  |
| CU  | カーブ  |
| CH  | チェンジアップ  |
| KN  | ナックルボール  |

#### この表が示すもの
Odrisamer Despaigneという選手の投球予測をランダムフォレストで行った結果が示してあります。

またWoodward(2014)の先行研究とは詳細な部分が異なるため今回は単純な比較ができないといったことが論文に書かれてます。

Table2の%TrownはOdirsamer Despaigne選手の投げた投球の割合が記されています。
$Each Correctはそれぞれの投球の予測精度が記されています。

例えば一番上のFFの行に注目します。
FFが投げられると予測したときにFFが実際に投げられた回数は330球であるとわかると思います。
するとFFを投げた割合は28.60%であるとわかり、FFの予測精度に関しては76.21%だとわかりました。

### Table3 Agerage values to compare support vector machines(SVM), random forests of 100 classification trees (100CT), and linear discriminant analysis(LDA), with average naive accuracy 54.38%.

#### 最も予測精度の高いモデル

| モデル | 予測精度 |
|:-:|:-:|
| LDA  | 65.08%  |
| SVM  | 64.49%  |
| 100CT  | 66.62%  |

Table３のprediction Accuracy(%)の行に注目したとき、上記のようなデータが見て取れると思います。

%of Predictions > Naiveというnaive guessを上回った場合の予測に限定した場合は100CTは98.26%という非常に高い数値を叩き出していることがわかりました。

### Table4 Average Prediction accuracy for each pitch count for the Classification Tree method. Picher favored counts are shown in bold, batter-favored counts in italics.

こちらはカウントと予測精度に注目した表になります。
またモデルは100CTに絞っていますのでその点ご注意ください。

#### Table4からわかること
Table4は感覚的に理解しやすいデータになっていると思います。

投手有利の場合（表のカウントの列が太字になっている行）は予測精度が低いことがわかります。
ここから**投手が有利の場合（表のカウントの列がイタリックになっている行）より強気に様々な球種を使えるため予測精度が高くなった**と考えることができます。
一方、**打者に有利な場合ミスができないためストライクゾーンにボールを収めるためストレートなどシンプルな投球が多くなり予測精度が高くなった**と考えることができます。

### Table5 Linear regression R^2 values, slopes, intercepts, p-values, and t-statics for the given random forest model accuracy(Acc) and improvment (Imp) values and standard statics

**苦戦中。。。**

### Table6 Variable Importance for Permuted Variable Delta Error for all pitchers. 1 means hightes importance, 29 means lowest importance

PVDEという値が小さいほど投球予測において重要な変数になります。

Table6を見るとPitch Number(投球数)が１を示しており、次にStrikes(ストライク)、Balls(ボール)がそれぞれ２，　３を示しています。

投球数から投手の疲労度を考えることができるため投球予測に影響を与えたのではないかと考えられます。

ストライク、ボールに関してもこれらが投球予測において重要であることは前述したTable4から想像に容易いのではないでしょうか。

### Python live pitch predictions for September 1st through October 2nd, 2016, with overall accuracy 59.07%

いよいよリアルタイムの投球予測についての結果が示された表を見ていきます。

表の見方はTable2と同様です。こちらでも同じ注釈を差し込んでおきます。

#### 表にあるカテゴリ
| pitch categories | 球種カテゴリ |
|:-:|:-:|
| FF  | ストレート  |
| CT  |  カッター |
| SI  | シンカー  |
| SL  | スライダー  |
| CU  | カーブ  |
| CH  | チェンジアップ  |
| KN  | ナックルボール  |

これまでは予測は過去のデータを集めたものでしたが、リアルタイム予測では常にモデルを更新できるためデータが集まるほど予測精度が向上することが期待されます。

データは2016年の9月と１０月のレギュラーシーズンを調査し各選手に対してモデルを構築しました。

全体の予測精度は59.07%という結果が出ました。
また選手別にそれぞれモデルを作成した場合は1%ほど精度が上昇し60.69%という結果になりました。

# 今後の課題
- Hoang(2015)が使用した特徴選択法を使用してどの入力が予測にとって重要であるかを見つける必要がある
- マルチクラス問題の構築によりFスコアやROC曲線分析などの前処理を実装するには有向非巡回グラフを使用した分類の導入が必要になる

これらの問題を解決できるとさらにリアルタイム予測の改善に繋がると考えられています。

ところどころ解読できていない部分があるため理解でき次第追記していこうと思います。

ここまでご覧頂きありがとうございました。