【what is this】MLB(メジャーリーグ)の主審(アンパイア)によるストライク/ボールの判定結果が公開されています。これを学習させれば、MLBの平均的な主審と同じ能力を持つ判定ロボットが作れそうです。実際、5,000投球のデータを学習させた結果、人間の主審と比べて、約95%は同じ判定をするニューラルネットワークができました。これは、多次元データの2値分類問題ですので、技術的には特に新鮮味は無いのですが、MLBの実際のデータを使った結果なので現実感があります。
■ ストライクゾーンと投球の判定
ストライクゾーンについて、筆者が調べた結果は、図1右側に示したとおりです。ストライクゾーンは、ホームプレートを底面とする5角柱の立体です。ただし、高さ方向の範囲は、図のとおり、打者(とその構え)で変化します。つまり、プロット図の中の緑の長方形の枠は、平均的な打者のストライクゾーンを示したものであり、打者によって異なります。
図1のプロット図は、主審が判定した、ストライク(オレンジ色)とボール(青色)を示しています。投球された球が僅かでもストライクゾーンに触れた場合はストライクです。球の直径はMLBの場合約7.5cmですから、ストライクゾーンの外でもストライクの場合が多いようです。中には、正面からはストライクゾーンに触れなくても、球筋が変化して、立体のゾーンの側面や底面に触れてストライクになる場合もあります。もちろん、誤審でストライクにした場合も含まれるでしょう。
■ 投球データを利用した学習
上記で用いた投球データは、図2に示すように、5つの特性値からなっています。すなわち、球がストライクゾーンの正面の面を無限に拡大したと考えた場合に、その面に触れた時点のx座標値とy座標値、さらに、打者に依存するストライクゾーンの縦方向の上限値と下限値、そして、左打者か右打者かのフラグです。
この機械学習は、参考文献[1][2]で行われていることを参考にして実行しました。具体的なニューラルネットワークの構成は以下のとおりです。2つの隠れ層をもち、それぞれの隠れ層の後にdropout層を挿入しています。
■ 学習の結果
学習用のデータは、上に示したように、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 件のコメント:
コメントを投稿