2018年12月31日月曜日

Analyzing Baseball Data with R 2版読んだ + ついでにデータ収集関連の話

タイトルの通りの内容です。読んだといっても、初版からあまり変わってない部分のテキストは流し読みですが。

Analyzing Baseball Data with R
https://www.crcpress.com/Analyzing-Baseball-Data-with-R-Second-Edition/Marchi-Albert-Baumer/p/book/9780815353515

初版はMax MarchiとJim Albertが著者でしたが、2版ではNYMで以前なにがしかのポジションを持っていたらしいBenjamin Baumerが加わっています。 BaumerはopenWARパッケージの開発者でもあります。

Introduction to openWAR
https://baseballwithr.wordpress.com/2014/03/17/introduction-to-openwar/

コードに関しては全体的に書き直されており、tidyverse系の関数が使われるようになっています。Baumerは同じCRC pressのデータサイエンス系の教科書を書いたりしているようで、おそらく彼がメインでコードのアップデートをしたのではないかと (注1)。
https://www.crcpress.com/Modern-Data-Science-with-R/Baumer-Kaplan-Horton/p/book/9781498724487

例えばデータの選択や取り出しは、select/filter/pullなどが使われて、[ ]とか$的なもので取り出す操作はほとんどなくなったとか、繰り返し系はmapが使われたりなど。以前はdplyrで処理されていた、データが重くなると時間がかかるものもかなり早くなっていると思います。

高水準作図はggplotで統一 。初版はlatticeと併用だったので、覚えることが減りました。ggplotの図も全体的に見やすくなったと思います。

内容に関しては、新たに以下の章が加えられています。

  1. 捕手のフレーミング
  2. Statcastデータを使った打球データ
捕手のフレーミングの効果は混合モデルを使って推定していますが、混合モデルは初版では使われていなかったような気がします。

データの収集に関しては、BaumerがRetrosheetとStatcastのデータを集めてデータベースを作るためのRパッケージを作っているらしく、 それらが新たに紹介されています。
https://github.com/beanumber/retro
https://github.com/beanumber/statcastr
この辺は特に困ってないので自分で動かしてみていないです。

baseballrの関数だとBaseballsavantの行数の制限がそのまま残っているのでそれに対応しないといけないのですが、beanumber/statcastrはそれを考えなくて良いようです。まあ、野球のデータはそれほど重くないですし、単に繰り返し用のloopか関数を書いてまとめて保存してしまえばいいだけだと思うのですが。下はstatsbylopezによるloopでのデータ取得例。
https://github.com/statsbylopez/mlb-shirking/blob/master/Code/scraping.R

注意点らしきものも一つ。教科書ではPITCHf/x、というかMLB Gamedayデータは、pitchR/Xを使ってデータを集めていますが、MLB Gamedayの仕様変更に対応していないらしく、最近のデータはエラーが出るようになっているようです。
少なくとも
start = "2018-01-01", end = "2018-12-01"
ではErrorになります。
githubのissueでもいろいろ出ているようですが手が回らないようです。
https://github.com/cpsievert/pitchRx/issues?q=is%3Aopen
日付の条件次第で落とせたり落とせなかったりするかもしれません。

同じGamedayをまとめて落とせるものとしてはkeberweinによるmlbgamedayがあり、これはstart = "2018-01-01", end = "2018-12-01"でも落とせているようです。
https://github.com/keberwein/mlbgameday
ただし補足的なテーブルが含まれておらず、以下のテーブルだけになるようです。
"action" "atbat"  "pitch"  "po"     "runner"
umpireはenhancementに入れているようなので、いずれ他のテーブルも対応してくれるかもしれません。

実際のところは、Gamedayデータがいるのかどうかがそもそも微妙かもしれません。メインの要素はStatcastで手に入りますし、Gameday特有のデータも主要なものはBill PettiがStatcastと組み合わせやすい形のcsvで置いてくれています。
https://billpetti.github.io/baseball_tools_home/

<引用>
baseballsavant
https://baseballsavant.mlb.com/statcast_search
________________________________________________________________

注1.
Baumerは野球に関連した本も書いています。
Benjamin Baumer and Andrew Zimbalist
The Sabermetric Revolution: Assessing the Growth of Analytics in Baseball, University of Pennsylvania Press, 2015
https://www.amazon.co.jp/Sabermetric-Revolution-Assessing-Analytics-Baseball/dp/081222339X

いろいろと考えさせる部分があって個人的にはいい本だと思いますが、ややテクニカルで、また少しコメントに困る本です。本文に書くべきかもしれませんが、こちらにこっそり書いておきます。

主な目的としては、2002のA'sをLewisはストーリーとして描いたわけですが、いい加減すぎるのでもっとちゃんと見てみよう的なことが掲げられています。例えば1章のタイトルが"Rivisiting Moneyball "で、書籍や映画について、選手や関係者の移籍のタイミングなどにおける事実とは異なる描写 (おそらくはストーリーの辻褄を合わせるために必要だった) や、セイバーメトリクス的な観点からの細かい問題点を指摘していきます。

大部分は打撃、投球、守備、走塁などの基本的なセイバーメトリクスの概念のレビュー的な内容で、レベルとしては基礎的ですが歴史的な経緯をある程度説明してくれており、それらについての文献をある程度引用してくれているので、文献調査としても貴重だと思います。また最後の章では、セイバーメトリクス的な指標にどれだけ傾倒したかを示すチームレベルでの指標を導入し、それが勝敗やコストとどう関連があったか検討しています (個人的には回帰分析の使い方に引っかかる感じがなくはない)。

もちろんMoneyball がデータ分析を広めた部分についても触れています。それに関連して、2015年当時MLBでどれぐらい分析が広がっているか、あるいは他のスポーツでの統計分析についてもそれぞれ一つの章を割り当てています。

Moneyball への批判だけでなく、セイバーメトリクスの指標への問題点の指摘も多く、全体的に批判精神に溢れており個人的には好ましいと思いますが、批判がやや強引と思える部分もあります。またセイバーメトリクスの指標に関する批判のうち多くは結果の不確実性の記載や見積もりが無いことや、データやコードがクローズドであることからくる再現可能性的な問題が挙げられており、いわゆるセイバーメトリシャンの視点、というよりはアカデミシャン的な視点が濃いことを感じます (BaumerはmathのPhDで大学教員なので当たり前といえば当たり前かもしれませんが)。また、そのあたりの問題意識がopenWARの開発に繋がったと思われます。(個人的にもこのへんは問題だと思うんですが、それを割り引いてもクローズドなものを使うほうがマシなことが多いだろうということも認めざるを得ない、という感じ。程度の問題ですね。)

不確実性の記載については、BPのJonathan Judgeは、フレーミングにおける誤差範囲の推定手法自体についての記事をコードも公開して出していたりとか、他の指標でも使っていたりとか、いずれこの辺も示すのが当たり前に変わっていくのかもしれません。
Jonathan Judge, BP, 2018
Bayesian Bagging to Generate Uncertainty Intervals: A Catcher Framing Story
https://www.baseballprospectus.com/news/article/38289/bayesian-bagging-generate-uncertainty-intervals-catcher-framing-story/

もはやあまり関連が無いですが上の共著者のZimbalistは、オリンピックの経済への悪影響に関する記事なんかで非常によく出てくる人で、訳本も結構出ています。
https://www.amazon.co.jp/本-アンドリュー-ジンバリスト/s?ie=UTF8&page=1&rh=n%3A465392%2Cp_27%3Aアンドリュー%20ジンバリスト
60億を投資できるMLBのからくり
サッカーで燃える国 野球で儲ける国―スポーツ文化の経済史
オリンピック経済幻想論 ~2020年東京五輪で日本が失うもの~
は読みましたが、わりと面白いです。内容は完全に門外漢なので評価できませんが。

2 件のコメント:

  1. こんにちは。本書を読んでいてわからないことがあるので質問させてください。CSVファイルの所在がわかりません。2章に出てくる"data/spahn.csv"や"data/NLbatting.csv"はどこからダウンロードしなければならないのでしょうか。基本的で失礼かもしれませんが、回答していただけると幸いです。よろしくお願いいたします。

    返信削除
    返信
    1. 匿名さま

      返事が遅くなって申し訳ありません。このブログ作ったときは真面目に続ける気が無かったので、普段見ないメールアカウントに紐付けしておりまして... 修正しないとですね。

      本題です。
      dataについてはprefaceのxviiのところに記載されている、Ben Baumerのgithubアカウントのbaseball_Rレポジトリ内にあります。具体的には以下のアドレスになります。
      https://github.com/beanumber/baseball_R/tree/master/data
      どこかの章で使っているstatcastデータだかPITCHf/xデータだかは置いてなかったような気がしないでもないですが...

      良い本だと思いますし、著者でもなんでもありませんが、日本でも読む人が増えてくれると嬉しいです。また何かあれば聞いてください。できる範囲でお答えさせていただきます。

      削除