Lean Baseball

No Engineering, No Baseball.

野球のための特徴量エンジニアリング - データサイエンスから学ぶセイバーメトリクス

新型コロナウイルスに我々はかならず勝つ!というお気持ちでずっと #StayHome している私達ですが, 野球が待ち遠しい事は変わりありません.*1

お家にいながら野球どうやってやろう :thinkingface: ...と考えた結果,

「野球データで遊ぶならずっと #StayHome なまま野球ができるじゃん⚾」

ということで,

  • 野球の統計学である「セイバーメトリクス」を「データサイエンス」の文脈で解釈しつつ
  • データサイエンスで大事な「特徴量」の事を学びながら
  • 野球をデータという切り口で楽しもう

っていうコンテンツを何回かに分けて紹介したいと思います(つまり連載です).

連載初回となるこのエントリーでは

  • 特徴量エンジニアリング
  • セイバーメトリクス
  • 野球の成績(打撃成績・投球成績)

にフォーカスした話をします.

スターティングメンバー

この連載の対象読者

  • 何かしらのデータサイエンス・データ分析を自分で考え手を動かしてやっている方. 仕事・学業・趣味問わず.
  • SpreadsheetやSQL, プログラミング言語(Python/Rなど)など何かしらの道具でデータを加工したり抽出できたりできる
  • 野球のルール・記録の意味を把握していること. レベル感的には野球に興味なくても夏の甲子園とか日本シリーズを楽しめればOK

連載としてはこの先もこの条件はブレないつもりです.*2

TL;DR

  • スポーツ, 特に野球のデータ分析をするなら記録が「自責」なのか「他責」なのかを正しく理解する所からはじめよう.
  • やるべきタスク・テーマによって, 「自責」な特徴量を使うか「他責」な特徴量を使うか分かれてくる.
  • 打者の場合はOPS(もしくは塁打)の仕組み・構造を, 投手の場合はDIPSを理解すると良いでしょう.

おさらいその1 - 特徴量エンジニアリング is 何

本題の野球の話に入る前に, 特徴量の話を少々します.

これについて名著「機械学習のための特徴量エンジニアリング」の表現が一番しっくりくるのでこちらから引用して紹介いたします.

まず特徴量の意味ですが一言で言うと,

特徴量(feature)は生データを数値として表現したものです。

※1.4「特徴量」より引用

です. 数値にすることにより, 比較したり計算したりと色々できるようになります.

...というのは簡単ですが,

生データを数値へと変換する方法はたくさんあるので、特徴量を作るために手間暇がかかることもあります。

(中略)

特徴量がモデル自体と結びついているということも忘れてはなりません。 あるモデルがある種の特徴量により適したモデルということもありますし、また、逆にあまり適していないという場合もあり得るのです。

※同じく1.4「特徴量」より引用

特徴量エンジニアリングという視点では,

  • 分析屋さん・分析マンにとって「意味がある特徴量を作る」事が重要
  • 意味がある特徴量は言い換えると「特徴量とモデルの結びつき」がバッチリなこと.
  • これらを実現するスキルとして, ドメイン知識(特徴量を作る・磨く), (分析・統計手法的な意味での)モデルを使いこなすテクニック

と言えるかなと思います(という解釈で私はいます).

なお, 「機械学習のための特徴量エンジニアリング」の特徴量についての説明はこんな感じで閉じています.

特徴量エンジニアリング(feature engineering)とは、与えられたデータ、モデル、タスクに最も適した特徴量を作り上げるプロセスなのです。

やみくもにデータを触る・作るじゃなくて, 「今あるデータとモデル, そして解きたいタスクを作り上げる」事が大事.

っていうのを抑えた上でセイバーメトリクスを見てみましょう.

おさらいその2 - セイバーメトリクス #とは

これもおさらいということで簡単に.

セイバーメトリクスは野球において発生するデータを統計学的なアプローチで分析を行い、選手の能力・チームの強さなどといった事を定量的に指標化・言語化し、チーム・選手に役立てるための手法・考え方である.

30分で理解するセイバーメトリクスの教科書 - 野球を統計的に楽しもうより引用.

ちなみに引用元はこのブログの記事です, 気になる方はぜひご一読ください.

shinyorke.hatenablog.com

野球(に限らずボールを扱うスポーツ全般)は,

  • 誰が見ても客観的に残る記録. 本塁打⚾, シュート⚽, トライ🏈などなど.
  • 見た人・プレーした人の主観・印象に残るもの. チャンスに強い/弱い, 逆境○, 的な.

見たもの・触れているものは大雑把に主観と客観で分かれると思いますが, その中でも

「記録」という客観的なモノにフォーカスして統計的に何かやるのがスポーツアナリティクスでありセイバーメトリクスであります.

なお, 記録にも「主観」に頼っているなんとも言えない罠があったりしますが...それはすぐ次の章で触れます.

野球の記録における, 特徴量の考え方

分析するテーマや使うモデルによって異なる所はありますよという前提を踏まえた上で.

スポーツデータ, 特に野球については「自責」「他責」を正しく理解することにより, 特徴量をいい感じに使いこなすことができます.

自責と他責

自責とは「自分の責任」の略で言い換えると「自分自身がコントロールできる」こと.

他責というのは「他の事に影響を受けやすい」ことで言い換えると「自分自身だけではコントロールできない」こと.

って書くと野球好きの人は,

???「自責ってアレやろ?自責点の事やろワイ知ってるやで!」

ってなると思いますが, 「自責点」の考え方とは実は違います.

「自責」「他責」をまとめるとこんな感じです(「例」がわかりやすいかも).

意味 特徴
自責 選手(チーム)の個々の実力によるイベントで決まる記録の事. パワー, スピードなど個々の能力が影響 本塁打, 三振など
他責 選手(チーム)の個々の実力だけでなく, 何かしらの外的要因やイベントが影響しやすい記録のこと. チームメイト, 審判, 球場の広さ等の変数に影響されやすい エラー, 防御率(自責点)など

「本塁打」「防御率(自責点)」をそれぞれ解説すると,

自責の例「本塁打」

  • 投手と打者のガチンコ勝負の結果である. 球場の広さがちょっと影響する程度.
  • 「フェンスを超えたら決まる」という点では, 野手の守備が上手/下手だろうが, 打者の足が速い/遅いは関係ない(=これらの変数は意味をなさない).
  • 「本塁打」というイベントは「投手」「打者」の「実力」で決まりやすい「自責の記録」と言える

ちなみにランニング本塁打は守備や球場に影響するのでこの限りではないですが, プロ野球レベルだと年に数本出るか出ないかレベルなので無視して良い範囲です.

他責の例「防御率(自責点)」

これは「防御率」の数式および, 「自責点」の成立条件を確認するとわかりやすいです.

防御率の数式は以下のとおりです.

防御率 = (自責点 * 9 * 3) / (投球回数 * 3)

防御率は, 自責点(投手の失点)に9(一試合分の投球回数)と3(野球は0, 1, 2アウトまで投げる)を掛けた数を投球回数×3アウト分の値で割ることにより, 「一試合投げきった時の自責点」という平均値です.

重要な説明変数である自責点の定義ですが,

自責点は、安打、犠飛*3、犠打*4、刺殺、四死球(故意四球*5を含む)、暴投、ボーク、野手選択*6、盗塁によって進塁した走者が得点したときに、失点とともに記録される。

※ウィキペディア「自責点」より.

これを紐解くと,

  • 自責点の成立条件である「安打. 特に長打以外のシングルヒットとか内野安打」「犠打・犠飛」「野手選択」などは, 投手(もしくは相手打者)の実力だけではなく, 後ろを守る野手に影響する.
  • 野手の守備が上手い(下手)は, 投手(もしくは対戦打者)の責任ではない. なぜなら彼らが自らやることではない(かつ, 自分たちが選ぶことができない).
  • その他の成立条件(説明変数)もかなり多く, 自責点は自責の記録とは言えない.

そんな自責点を重要な変数として採用している防御率も同様に他責の記録となります.

「自責」「他責」の特徴量を使い分ける

ここまで来るとオチは見えてると思います.

  • 分析対象の記録が「自責」なのか「他責」なのかを見極める
  • 選手やチームの実力にフォーカスするなら「自責」の特徴量を採用する(事が多い).
  • 「運」とか「流れ」みたいにふわっとしたモノにフォーカスするなら「他責」の特徴量の使い方がミソになる.

という感じで, 「やりたいテーマ・採用するモデルによって使う特徴量を変える」が基本となります.

なお先程ちょっとふれた,

記録にも「主観」に頼っているなんとも言えない罠があったりします

これは野球で言うと「エラー」の事で,

  • 数値化されてるので一見すると客観的な記録ではあるが, 記録員が「あのボールは普通の野手ならとれたハズ」っていう主観で記録が決まる
  • 記録員の力量に左右される. エラーばっかり記録する記録員(またはその逆)もいるかもしれない

という意味で罠だったりします(ので純粋な守備力評価でエラーを使うことが少ないのはそのせいです).

打撃成績の場合

打撃成績の特徴量をセイバーメトリクス的に解釈する方法は結構ありますが,

  • 実力で塁に出た回数である「塁打」にフォーカスする. 具体的には「長打率」「OPS」などに着目する.
  • 打者のプレー(安打, 四球, 三振etc...)をチームが稼ぐ得点に置き換えて評価する.

方法によっていい感じになります.

特にOPSは筋が良いかつ直感的なのでおすすめです, 野球データをSQLにまとめられるならこんな感じでいけます.

f:id:shinyorke:20200420215814p:plain
【例】BigQueryでOPSを算出

OPSの解説はOPS (野球) - Wikipediaにもありますが, 次回改めて紹介します.

投球成績の場合

先ほど触れたとおり, 投手成績でよく使う「防御率」は(重要な変数である自責点の)説明変数が多すぎるので, 統計・データサイエンス的な解釈には向いていません.

代わりに, DIPS (野球) - Wikipediaという概念・評価手法を元に成績の分析を行うことが多いです.

この考え方はシンプルで,

  • 投手の成績を「投手自身でコントロールできる部門」と「投手自身ではコントロールできない部門」に分ける
  • たとえば, 「奪三振」「与四球」「被本塁打」は投手の自己努力で改善ができる(=コントロールができる)*7
  • たとえば, 「エラー」「内野安打」「野手選択」って投手自身の努力ではどうにもならない部分が多いよね(=コントロールができない)

DIPS自体が, 野球における重要な特徴量エンジニアリングの思想と言っても過言ではありません.(ので私はこの考え方が大好物です*8

守備・走塁は?

守備および走塁は記録されるものが少ないかつ, 「エラー」のように怪しい記録もあるため評価が最も難しいテーマです.

ので,

  • 正規なスコアではなく, 打球の記録であるBatted Ballを用いる.*9
  • 最近ではトラッキングデータ*10を用いる.

ことにより実現する例が多いです.

結び&次回予告

色々好き勝手書きましたが, 言いたいこととしては,

  • 新型コロナウイルスに打ち勝った後の野球の楽しみ方として, 「数字」にフォーカスすると面白いと思うよ?
  • 記録の意味・特徴量的な解釈を知ると野球・スポーツの違う一面が見える
  • 機械学習とかデータサイエンスやりたいマン的には題材的にもちょうどいいぜ!

ってことです. 野球の試合無いなら数字でニヤニヤしようぜっていう.

そんな楽しい連載になるよう頑張りたいと思います.

次回は最もデータが揃っていてわかりやすい「打者の成績」にフォーカスして解説します.

GW中に出せればいいかな...がんばります.

【Appendix】今回の参考資料&予習するなら

このエントリーの参考資料です, どれもオススメ(手前味噌含む)です, GWの時間つぶしになると嬉しいです!

特徴量エンジニアリングの強い本.

セイバーメトリクス入門  脱常識で野球を科学する

セイバーメトリクス入門  脱常識で野球を科学する

  • 作者:蛭川 皓平
  • 発売日: 2019/11/20
  • メディア: 単行本(ソフトカバー)

最近出た野球本の中でも一番セイバーメトリクスにガッツリ取り組んでいる本.

DIPSの件の説明はマネーボールがわかりやすいかも, チャド・ブラッドフォードの件あたりがそう.

shinyorke.hatenablog.com

手前味噌ですがセイバーメトリクスの30分要約です.

*1:待ち遠しいので野球ユニフォームという「正装」を自宅で着用しながらこのブログ書いてます

*2:なので選手とかチームとかその辺のファン心理・ドメイン知識は不要です.

*3:犠牲フライ

*4:犠牲バント

*5:いわゆる敬遠です

*6:フィルダースチョイス

*7:もちろん, 捕手の影響もあります. 捕手のフレーミング(平たく言うとストライクを取る能力)能力によって影響する所もありますが, 捕手がどんなによくても球速が上がったり変化球がより曲がるとかないですよね?そういうことやぞ.

*8:真面目な話, 自分はDIPSそしてこれの原点であるLWTSが好きになってセイバーメトリクスにハマりました

*9:打球がゴロなのかフライなのかライナーなのか, 速度と角度はどれぐらいか?などを記録するものです. 昔は人力でつけることが多いですが今は後述するトラッキングデータに置き換わりつつあります(その方がある意味正しい).

*10:いわゆるトラックマン, ラプソードといったレーダーやカメラで計測した座標情報です.