Lean Baseball

No Engineering, No Baseball.

野球ファン目線での野球AI開発と実践 - 突然ですが"成績"占ってもいいですか?

日米ともに突然の加藤球投高打低時代が戻ってきて今年の野球面白すぎでは?と思ってるマンです.*1

野球をテーマにした趣味プロジェクト・個人開発を始めてから実は10年が経とうとしているのですが, つい先日「これは最高傑作なのでは!?」っていうネタが完成し, Baseball Play Study mini(BPStudy)および, datatech-jp Casual Talks #2でお披露目させていただきました.

BigQueryとPythonではじめるプロ野球選手の成績予測(もしくは成績占い) / Baseball Player Performance Prediction using BigQuery and Python - Speaker Deck

どちらも反応は上々で(ちなみにdatatech-jpの方は短縮版で資料は公開していません*2), 非常にポジティブな感想および, 私にとっても今後の指針・目標になりそうなフィードバックをたくさんいただきました.

登壇の機会をくださった, 主催者の@haru860さん(BPStudy), @syou6162さん(datatech-jp), そして何よりもお話を聞いてくださった皆様本当にありがとうございました!

このエントリーでは,

  • 発表に至るまでの背景
  • もらったフィードバック
  • その後の展開

についてサクッと残したいと思います.

スターティングメンバー

発表に至るまでの背景

発表そのものの構想は3月に社内で業務外の何か面白LTをやろう! -> そうだ, 野球や!って思いつき, プロトタイプを作りました.

それが想像以上に面白かったのと, 結果的にコロナ渦に突入した2020年から今年までの約1年半でやったことのまとめ的なネタじゃんこれ!という事に気が付き, せっかくなので長尺のネタにしようと発想し, 作成しました.

キッカケは2020年コロナ渦の空き時間

野球AIを作ったのはコロナでプロ野球もMLBも開幕が大幅に遅れた2020年に作った成績予測モデルがキッカケでした.

shinyorke.hatenablog.com

最初はオオタニサンやダルさんが将来どうなるか?をサクッと見たいなあー, というファン的なお気持ちと, 「Rによるセイバーメトリクス入門」が発売されると聞いて(ちなみにレビューに協力しています), 「野球の統計・データサイエンスももうちょい盛り上がるだろうから今のうちに作っておこう(どうせ暇だし)」というお気持ちでスタートしました.

結果は上々で,

コロナ渦で, 休日にやることが家飲みか競馬を観るかぐらいしかなかった時期で時間がたくさんあったこともあり, ここで基礎的なものが出来たのは今思えば大きかったなあって思います.

2021年「侍JAPANをAIで選出」するためプロ野球AI爆誕

前述のBaseball Play Study2020冬の感想ツイートで,

という会話を見つけ,

なんてことはない, プロ野球全選手の成績予測を機械的にやって決めればええやん!

という, 実は自分では微塵も思いつかなかったアイデアが突然降ってきました, 登壇って大事ですしフィードバックって大事ですね*3.

というわけで, 2021年春から開発をしていたのですが, この当時はそこそこインパクトある仕事*4で大忙しだった(&GW前後から少しずつ転職活動をしていた)事もあり, 開発がまあまあ難航しました.

が, 目的通りいい感じに完成, これもなんかよく読まれて盛り上がりました.

shinyorke.hatenablog.com

余談ですが, 週刊はてなさんの「わたしの偏愛」という連載にも載せてもらいました.

blog.hatenablog.com

2021年7月の時点で新庄剛志愛をメッチャ語るブログになりました(この記事を公開した4ヶ月後ぐらいに発表)が, この時は日ハムのBIG BOSSになるだなんて想像すらしていませんでした.*5

PyCon JP 2021でクラウドネイティブ化

一方, 仕事の方では前職のJX通信社, そして転職先の現職であるアクセンチュア*6で「クラウドアーキテクチャでテクニカルな課題を解決するマン」になりました.

「サーバーレスかつフルマネージドなサービスで楽をしましょう」仕事と話がメッチャ増えたのがPyCon JP 2021が開催された去年の秋ぐらいで, PyCon JPの発表もJX通信社で最後に手掛けた(かつもっともインパクトがあった)仕事である「AIワクチン接種予測」のテクニカルな話をしました.

shinyorke.hatenablog.com

発表した時点ではすでに退職した後だったので「何かネタがほしいな?」と思い*7, 有給消化中にStreamlitで「AIオオタニサン本塁打予測」というしょうもないサービスを開発, これをデモアプリとしていい感じにやりました(Streamlitで作ったアプリをCloud Runでホスティングしてデモとして披露).

データサイエンスの環境はすでにBigQueryを中心としたクラウド化が完成していたのですが, デモも含めてここでほぼ完全クラウド移行が出来たのは思ってもいなかった副産物でもありました.

2022年春, 全部マージして「成績占い」誕生

そして今年, ここまでの営みの成果&時代背景として,

  • メジャーリーグからスタートした成績予測モデルがプロ野球もいい感じにできるようになった
  • データサイエンス・アプリケーションの環境がGoogle Cloudを中心としたエコシステムで洗練化された
  • 私が野球好きになるキッカケとなった新庄さんが日ハムのBIG BOSSとなり, 日ハムファンとしても色々追いかけなきゃ!となった

色々整った結果, 「これで何かしら面白い話とプロダクト作れそうだな?」となり, 今作「突然ですが"成績"占ってもいいですか?」が爆誕しました.

2年間の個人開発・野球ネタの集大成がこれ

個人的には, 今までやってきた野球ネタ・個人開発・エンジニアリングの集大成ぐらいに満足しています.

2年間やったことのいい所取りで, 「過去ネタのサビを集めていい感じにAメロ・Bメロ作って完成」みたいな, ネタ的にもデータサイエンス・エンジニアリング・野球とバランス良くかつ, 簡単では無いが難しくもないぐらいの味付けになりました, 出来上がった時はちょっとガッツポーズしましたし.

しばらくの間はこれをベースに少しずつアップデートをしながら, 色んな所で登壇しようと思っていますので, 「聞きたい!」なんて方がいましたらぜひお声掛けいただけると嬉しいです🙏

もらったフィードバック

発表の反響でいくつかフィードバックをもらったので記録に残します.

主に, Baseball Play Study mini(BPStudy)で頂いたフィードバックです.

二軍の若手選手の将来を知りたい

これはやはり多かった.

アルゴリズムの関係上, 一軍で試合に出ていないと予測ができないという仕様になっていたため.

これはBaseball Referenceのプロ野球2軍データおよび, マイナーリーグのデータをなんとかして実現できればと思っています.

それと類似したフィードバックで「新助っ人選手の活躍予想」というのもありました, これについては「Baseball Geeksを読むといいよ」と答えたと同時に,

  • メジャーリーグの出場歴があれば今のアルゴリズムでも予測可能
  • マイナーのみであったとしたら, 二軍選手の予測の仕組みと同じ仕組みで実現できそう

という仮説を持っていますのでこれはこれで試すことが出来たらと思います.

チーム全体の予測もできる?

個人的には一番やりたいネタで,

  • 登録全選手の成績予測(3年後ぐらいまで)を行う
  • チームごとに2年後, 3年後ぐらいの「予測成績」をベースとしたOPSやRC, DIPSを元にチームのランクを決定
  • これで2〜3年後にブレークするチーム(もしくは暗黒期に突入する)チームを予測

なんてことができます.

これは, 発表の最後に触れたこちら.

最終的にやりたいこと

「選手成績の予測・チームの将来予測を公開するサイト」をいずれ作りたい(日本版Fan Graphs的なイメージ)と思っていまして, その中のコンテンツとして出せたら最高だなと思っています.

個人的にはこれを来年の開幕までになんとかして, このネタをPyCon JP 2023あたりで話せると最高かな...

いずれにせよ, フィードバックを元に次の目標ができました⚾

結び

というわけで, 登壇の備忘録も兼ねてブログを執筆しました.

野球ネタのエンジニアリング・発表をやっていて, 終始大切にしているルール・価値観があります.

私の野球ブログや登壇発表には、必ずと言っていいほど「選手・野球へのリスペクト」と「ちょっとしたお笑い」を落とし込んでいます。前者は野球の素晴らしさを教えてくれた選手や球界への恩返しで、後者は野球の楽しみ方を教えてくれた深夜ラジオやテレビ番組、インターネットへのオマージュであり感謝です。そしてなにより、「野球とデータって、こんなに面白い!」と、皆さんにどんどんお伝えしていきたいのです。

データ駆動野球観戦のすすめ - お笑いとラジオ、データ分析が野球の楽しさを教えてくれた

選手やチームには頑張ってほしいかつ, 「いつも素晴らしいプレー(とネタ提供)をありがとう」という気持ちでいますし, 一人の野球ファンとしても, 技術系のスピーカーとしても「誰も傷がつかない, ちょっと"クスッとする"笑い」は必ず入れるようにしています. ちなみにネタ作り上, 構成や雰囲気や爆笑問題さん, NON STYLEさんの漫才をメッチャ参考にしています*8.

今後もこのお気持ちを忘れずやっていきたいのと, もうちょっとスポーツ系のこういう発表ネタが世の中的に増えたら嬉しいと思っているので,

  • やったことのプログラムコードや考え方・設計の公開
  • 一緒にやる仲間を募る(≒一緒にやることで考え方や技術を継承する)

この辺も頑張っていきたいと思っています.*9

引き続き, 新しいネタ・笑いと学びのホームランをかっとばせるように頑張っていきたいので引き続きご愛顧のほどよろしくおねがいします!

*1:プロ野球だけでも, 完全試合だのノーノーだのありえないペースで起こっているのでどう考えても異常です, ちゃんと調べてはいませんが.

*2:公開してもいいのですが, BPStudy版が完全版なのでそちらをご覧いただく事を強くおすすめしたいため, 敢えて公開は控えました.

*3:登壇するにせよ, ブログに残すにせよ, アウトプットを残す醍醐味はまさにここで自分一人でやると気が付かない事がフィードバックという形でいただけるのが何よりも最高です.

*4:ワクチン接種予測のこと.

*5:ちなみに書いてあるエピソードは勿論全部本当で, 新庄を見ていなかったら私は一生野球好きになってなかったと思います.

*6:ブログで言及したのははじめてかも, 10月から働いています.

*7:登壇時点ですでに存在しないサービスであったため, 登壇中のデモとして何かアプリが欲しかったという事情があります.

*8:野球ネタは時事ネタの一つと私は思っているので時事ネタ漫才の爆笑問題は教科書にしているのと, 自分と同年代でネタ作りやお客さんの空気感の掴み方をNON STYLEをメッチャ参考にしています.

*9:私の個人開発も⚾100%ではなく, 他のテーマでやりたいことも増えてきており, この辺もそろそろチーム化できたらなっていう思いもあります.