2021年11月12日金曜日

MLB(メジャーリーグ)主審の判定結果を学習してストライク判定(1)

【what is this】MLB(メジャーリーグ)の主審(アンパイア)によるストライク/ボールの判定結果が公開されています。これを学習させれば、MLBの平均的な主審と同じ能力を持つ判定ロボットが作れそうです。実際、5,000投球のデータを学習させた結果、人間の主審と比べて、約95%は同じ判定をするニューラルネットワークができました。これは、多次元データの2値分類問題ですので、技術的には特に新鮮味は無いのですが、MLBの実際のデータを使った結果なので現実感があります。

続編(2)はこちらです。

■ ストライクゾーンと投球の判定
 ストライクゾーンについて、筆者が調べた結果は、図1右側に示したとおりです。ストライクゾーンは、ホームプレートを底面とする5角柱の立体です。ただし、高さ方向の範囲は、図のとおり、打者(とその構え)で変化します。つまり、プロット図の中の緑の長方形の枠は、平均的な打者のストライクゾーンを示したものであり、打者によって異なります。

 図1のプロット図は、主審が判定した、ストライク(オレンジ色)とボール(青色)を示しています。投球された球が僅かでもストライクゾーンに触れた場合はストライクです。球の直径はMLBの場合約7.5cmですから、ストライクゾーンの外でもストライクの場合が多いようです。中には、正面からはストライクゾーンに触れなくても、球筋が変化して、立体のゾーンの側面や底面に触れてストライクになる場合もあります。もちろん、誤審でストライクにした場合も含まれるでしょう。


 ここで確認ですが、上のプロット図の緑枠のストライクゾーンは、機械測定によるものであり、主審が判断したストライクゾーンとは必ずしも一致しません!

■ 
投球データを利用した学習
 上記で用いた投球データは、図2に示すように、5つの特性値からなっています。すなわち、球がストライクゾーンの正面の面を無限に拡大したと考えた場合に、その面に触れた時点のx座標値とy座標値、さらに、打者に依存するストライクゾーンの縦方向の上限値と下限値、そして、左打者か右打者かのフラグです。
 この5つの特性を持つ個々の投球を、主審の判定による2値ラベル(ストライクかボールか)に対応づけてあります。これを、機械学習させるわけです。


■ ニューラルネットワークの構成
 この機械学習は、参考文献[1][2]で行われていることを参考にして実行しました。具体的なニューラルネットワークの構成は以下のとおりです。2つの隠れ層をもち、それぞれの隠れ層の後にdropout層を挿入しています。
___________________________________________
 Layer (type)                 Output shape    Param #   
 ====================================================
 dense_Dense1 (Dense)         [null, 24]      144       
 ____________________________________________________
 dropout_Dropout1 (Dropout)   [null, 24]      0         
 ____________________________________________________
 dense_Dense2 (Dense)         [null, 16]      400       
 ____________________________________________________
 dropout_Dropout2 (Dropout)   [null, 16]      0         
 ____________________________________________________
 dense_Dense3 (Dense)         [null, 2]       34      
 ====================================================
 Total params: 578
 Trainable params: 578
 Non-trainable params: 0

■ 学習の結果
 学習用のデータは、上に示したように、5,000個です。評価用にも、これと同じデータセットを用いました。10エポックの学習(毎回ランダムに構成したバッチサイズ50のミニバッチを100個を学習)結果、正解率0.959が得られました。すなわち、このニューラルネットワークは、MLBの標準的な主審の判定結果と約95%合致(学習条件により若干変動)する結果を与えるものとなりました。つまり、投球のストライク/ボールの判定に関しては、理論上、MLB主審を努められそうな結果です!
epoch 1 ,  steps= 100 , loss= 0.339  ,acc= 0.879
epoch 2 ,  steps= 100 , loss= 0.281  ,acc= 0.839
epoch 3 ,  steps= 100 , loss= 0.332  ,acc= 0.859
 . . .

epoch 8 ,  steps= 100 , loss= 0.235  ,acc= 0.899
epoch 9 ,  steps= 100 , loss= 0.206  ,acc= 0.879
epoch 10 , steps= 100 , loss= 0.129  ,acc= 0.959
baseball.js:95 training done !

■ 感想
 プロ野球に限らず、他のスポーツでも、判定や採点の機械化の方向があるようです。しかし、プロ野球の場合、機械あるいはAIが主審の代役となることが望ましいのでしょうか。スポーツの人間味っぽいところが好きな人も多いはずです。投手、打者、審判とも、一瞬にして見極める技術を向上させているはず。また、観客も、「あれ、誤審じゃないの」とか、「あの主審は低めに厳しいよなあ」などと言い合いながら観戦するのも捨てがたい気もします。もちろん、判定で揉めた場合のリクエスト(現在でも実施されていますが)に対応するための、最新測定機器やAIの出番はもちろん増えるでしょうが。

参考文献
[1]
Nick Kreeger, Visualizing ML training using TensorFlow.js and Baseball data
https://observablehq.com/@nkreeger/visualizing-ml-training-using-tensorflow-js-and-baseball-d

[2] Predicting balls and strikes using TensorFlow.js
https://medium.com/tensorflow/predicting-balls-and-strikes-using-tensorflow-js-2acf1d7a447c

0 件のコメント:

コメントを投稿