Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Predict Salary of Baseball Player
Search
Dan.Namba
March 27, 2019
0
2.6k
Predict Salary of Baseball Player
Dan.Namba
March 27, 2019
Tweet
Share
More Decks by Dan.Namba
See All by Dan.Namba
ホームランでしか点が入らないルールなら優勝するのDeNA説
dannamba
3
1.7k
I thought seriously about typing
dannamba
0
62
Featured
See All Featured
Writing Fast Ruby
sferik
628
61k
Fireside Chat
paigeccino
34
3.1k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Scaling GitHub
holman
458
140k
Code Review Best Practice
trishagee
65
17k
A Philosophy of Restraint
colly
203
16k
GitHub's CSS Performance
jonrohan
1030
460k
4 Signs Your Business is Dying
shpigford
181
21k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.3k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.9k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
Site-Speed That Sticks
csswizardry
2
190
Transcript
昔々あるところに、 ポンコツな記者しかいない新聞社がありました。
ポンコツ記者は、取材の仕方もポンコツです。 球場に足を運ぶこともほとんどないし、 NPBの仕組みもよくわからないまま、 なんとなく、勘で記事を書いていました。
すごいなぁ。どの新聞社も、選手の年俸を推定している。 しかもみんな、ピッタリ同じ金額だ。 一体どうやって推定しているんだろう? ある日のことです。 他紙を読んでいたポンコツ記者は言いました。
そうです。 ポンコツ記者は、 契約更改の後に、記者会見が開かれていることを 知りませんでした。
うちの記事にも、推定年俸を載せたいなぁ。 そうだ! ポンコツ記者は閃きました。 うーん・・・
ロボットを買ってきて、 選手の年俸を予測してもらおう!
ポンコツ記者は、早速安いロボットを買ってきました。 「この選手は今年、こんな成績だったんだ。来年の年俸はいくらになるかな?」 ところが、中古の安いロボットだったので、推定もポンコツです。 松坂の年俸を4億円と推定したりしました。 最初は、菅野の年俸を1600万円と推定したり、
これは、そんなポンコツロボットが、少しずつ賢くなっていくお話です。 キンガクハスイテイデス
やったこと * * 機械学習を用いて選手の年俸を予測しました。 2015年~2017年の選手成績及び年俸のデータを使って 機械学習のモデルを作成し、 2018年の年俸をどれくらい当てられるかチャレンジです。 2015年 2016年 2017年
2018年 ここのデータを使って ここを予測します ※体力の都合上、野手のみ
* * ⚫ プロ野球に興味を持ったきっかけが「グラゼニ」とい う年俸をテーマにした野球漫画だったので、自身も取 り扱ってみたかった。 ⚫ 機械学習の練習がしたかった。 なぜそんなことをしたのか
* * DELTA社が運営する神サイト 1.02 Essence of Baseball(https://1point02.jp) ↑ 年俸予測 ↑
実際 ↑ 去年 取り組みの目標
* * ↑ 年俸予測 ↑ 実際 ↑ 去年 取り組みの目標 この年俸予測の精度を上回ること
* * 1. RMSE(RootMeanSquareError) 大きいエラー(予測と実測の誤差)を重要視する指標 2. MAE (MeanAbsoluteError) 誤差の幅を等しく扱う指標 予測精度の評価方法
* * どちらも「誤差」を表現しているので... 小さい方が勝ち! 予測精度の評価方法 DELTA社の2018年予測精度 RMSE 2846.68075657 MAE 1229.07017544
* * なんかややこしいしピンと来ないかもしれないので 馴染みのある借金貯金方式でも測る 予測精度の評価方法 <例> 選手名 実際の年俸 DELTA予測 私の予測
勝敗 柳田 悠岐 57,000万円 60,000万円 47,000万円 負け 菊池 涼介 24,000万円 18,000万円 19,000万円 勝ち N・ソト 9,500万円 11,000万円 10,000万円 勝ち 岡本 和真 8,000万円 5,000万円 6,000万円 勝ち 陽川 尚将 2,000万円 1,800万円 2,300万円 負け ※ 今回対象となる野手の総数は285名 (この表の数字はダミー) 3勝2敗(+1)
それでは、やってみよう!
* * まずはどんな指標が年俸を決めるのに役に立ちそうか考える。 そのためにデータを眺めたりセイバーメトリクスを勉強したりする。 結果決めたのが下の項目。 やったこと① データを決める ⚫ 基本情報 年齢
前季年俸 所属チーム 出場試合数 助っ人 ⚫ 打撃成績 打席数 安打数 塁打数 HR数 打点 四球 故意四球 死球 ⚫ 走塁成績 UBR wSB ⚫ 守備成績 Defense <注釈メモ> 本当はモデルの調整プロセスでこれらの項目も何 度も見直すべき。今回はこれらの項目で据え置い た。(時間・体力の制約上。)
* * ⚫ 工夫ポイント やったこと① データを決める ➢ 打率等、少ない打席数では価値が測れないものは含めない。 規定打席に到達していない選手も年俸はもらうので。 ➢
守備指標については、一般的に知られるUZRではなく、ポジションの重要 さが考慮されるDefenseを採用した。(年俸における守備の価値には、ポ ジションの重要さも反映されていると思ったので。) ➢ wighted系の指標は「得点価値」をベースに重みが決まるが、今回は各数 字を「年俸」をベースに重みづけしたい。よって今回は極力入力変数と して扱わないものとした。 ➢ 走塁については、走塁企画数を考慮する方法に苦慮。盗塁成功率は打率 と同様の理由で入れることが出来ない。やむなくwSBを用いることとした。 また、盗塁以外の走塁を考慮するために、UBRも加えた。(間違ったこと 言っている気がするので有識者に相談したい・・・。)
* * ⚫ スクレイピング やったこと② データを揃える整える ➢ データをWEBサイトからいい感じに取得。今回は1.02Essence of Baseballから拝借。
➢ ログインが必要だったのでSeleniumを使用。 ➢ 2015年~2018年までの欲しい項目一式をCSV形式で手に入れる。 ⚫ データクリーニング ➢ 翌年契約していない選手のデータは答え合わせが出来ないので、 一律除外。 ➢ チームをOne-hot表現(次スライドで説明)に変更。 ➢ 名前にカタカナが含まれるかどうかを基準に、助っ人フラグを立 てる。 <余談:名前にカタカナが含まれたから個別に修正した日本人選手> オコエ 瑠偉・サブロー・三ツ俣 大樹
* * ⚫ One-hot表現とは? やったこと② データを揃える整える これを こう! 面倒くさそうに見えるが、Pythonのライブラリを使うと非常に簡単。
* * やったこと③ モデルを作る アルゴリズム 選定 学習 パラメータ 調整
* * やったこと③ モデルを作る 1. 2015年~2017年データを訓練データと検証データに分割。 2. 様々なアルゴリズムで簡易的に学習を行い、ある程度の精度が見込める アルゴリズムを選定する。 <今回試行したアルゴリズム>
重回帰・RandomForest・NeuralNetwork・決定木・SVR・Ridge・ExtraTree・ GradientBoosting・XGBoost・KNeighbors 個々のアルゴリズムの特性や、そもそものバリエーションを体系的に理 解していないため、もっと知識が欲しいポイント。 3. 見込みがあるアルゴリズムについて、それぞれハイパーパラメータ調整。 調整にはGridSearchCVと、過学習を抑制するための人手調整も。 4. それらアルゴリズムをEnsemble。正しく行うコツを知らないため、こちら ももう少し勉強が必要。
できた!
* * なんやかやあって出来た構成 XGBoost ExtraTree Gradient Boosting XGBoost XGBoost ExtraTree
Gradient Boosting x14 x1 x2 x3 x5 x7 x9 x11 x4 x6 x8 x10 x12 x16 x13 x15 予測年俸 入力 Layer1 Layer2 Layer3 出力
2018年で試してみよう! DELTAは2018年の契約更改前から予測を公開していたんじゃないかと思うので、私も一発勝負です。
* * 結果発表 DELTA社 私のロボ RMSE MAE 2 8 4
6 2 8 6 4 1 2 2 9 1 0 5 6 勝ち! 負け!
* * 結果発表 借金貯金方式 167勝 118負 (+49)
* * 結果考察1 ➢ RMSEは誤差が大きいほど重要なエラーとして捉える。今回のケースで言えば、 大きな年俸をもらっている選手の予測を大きく外したのが私のモデルである と言える。 ➢ モデルの数式の都合(と、思われる)で、切りの悪い数字になるケースが沢 山ある。ウィーラーに1億9999万円(1万円ダウン)提示等。年俸の多寡に応
じた適切な桁で丸める後処理を加えるだけで、ピタリ賞はグッと増えるはず。
* * 結果考察2 ➢ 予測と実際の誤差をプロット。縦軸が0に近い方が精度が出ている。ぱっと み比較すると、DELTA社の方がバラツキが小さく、安定感があるように見え る。 <私の予測誤差> <DELTA社の予測誤差>
* * 結果考察3 ➢ プロ野球選手の年俸は成績以外の様々な要因で変化する。そういう意味では、 私のモデルとDELTA社のモデルが両方共大きく成績を外している選手には、 なんらかの「その他の要因」が作用している可能性が高いと言えるかもしれ ない。順位こそ違えど、TOP4に入った4人は全く一緒だった。 <私の予測(外し幅大きい順)> <DELTA社の予測(外し幅大きい順)>
ではお話の続きを。
「やったぁ!精度が上がったぞ!」 記者とロボットは大喜び。 来年の契約更改を心待ちに過ごしていました。 「これで他所の新聞社みたいに、推定年俸を記事にできるぞ!」
ところがある日
ロボットは、契約更改直後の記者会見の様子を、 テレビでみてしまいます。
「そうか、プロ野球選手は、自分の年俸を教えてくれるんだ」 「そうだったのか、僕は要らない存在なんだ」 「そうか・・・」 肩を落とし、新聞社を去ろうとするロボットに、 ポンコツ記者は言いました。
「そうだ、君が学習したプロセスを、みんなに発表しよう!」 「確かにそうかもしれないけど、君が学習したプロセスは、 きっと野球エンジニアのみんなの役に立つよ。」
そうして発表をきいた野球エンジニアの皆さんは、 最後に大きな拍手を送りましたとさ。 おしまい。
* * 自己紹介 プロスピやってます。 フレンドを募集しています。 ←ID 趣味 ベイスターズとゲームと漫画 野球歴 小学校の頃に3ヶ月と社会人草野球2試合。
キャッチャー。 ベイスターズ 歴 ラミレス監督就任後、応援しはじめる。 (ニワカですが、見逃して下さい!) ゲーム 主に格闘ゲームをやっています。ラスベガス 開催の世界大会でました。(エントリーすれば 誰でも出れるやつです。) 仕事 ITの会社で、今は事業企画の仕事をしていま す。 最近は機械学習の勉強を頑張っています。 お酒も好きです。仲良くして下さい。 よろしくおねがいします! 難波 大輔(31歳、横浜出身)