2017年2月18日土曜日

NPB成績予測システムPESpTA(β改)

以前ツイッターでデータ分割の目的が2つあると言いました。
一つは選手データを大きく取ることで引退選手を記録できるようになること。
一応普通にプレイしてれば50年程度は残るであろう5000〜6000人くらいを保存上限にし、それを超えると古い選手から削除されるように。
これでドラフト履歴や監督コーチ設定などを使えるようになりますが、このへんは他にも作り直したい部分はあり時間がかかるかも。

そしてもうひとつはと言うと、ずばり過去のNPBデータを読み込めるということ。
これを活かして引退した実在選手を監督コーチに出したり、過去の時代を再現ごにょごにょ。
とは言え二軍成績やUZR、BattedBallはもちろんのこと、守備イニングすら残っていないので厳しい面もあったり。

それで、自分がやりたかったのは、成績予測システムを導入して選手の成長を左右させるという感じのもの。
こうすれば主観で「成長や劣化が早すぎる(遅すぎる)」と感じるような部分がなくなる。
自分でプレイしてても、2年目でもFIP2点台後半だったのに年々良くなっていって8年目くらいでFIP1点台連発するスターターがいたりするのを見てると、
もうちょっと成績や能力に変動があってもいいんじゃないかと思うので。

そこで2リーグ制以降に一軍出場した全ての選手(6000人弱)の成績をかき集め、類似選手から成績を推測するPECOTAのようなものを組み上げました。
身長体重のデータが手に入らなかったのがかなり痛く、今のところPF補正がかかっていませんが、それ以外は本家に近いシステムになっています。
本家にない要素もあり、そもそも元データがNPBということもあって似て非なるシステム、PESpTA(読めない…)といったところ。
文章だけではピンとこないと思うので記事の最後に2016年に一軍出場機会のあった選手の2017年成績予測を置いておきます(球界を去った選手も含む)。
ゲーム内でテスト用にやってみただけですし、精度を上げるための調整なども全然です。
ツッコミどころなど満載ですが勘弁してください。
(あくまでゲーム内で主観を排除した成長アルゴリズムを作るためのシステムだから精度はそれほど気にしていないという言い訳を使いつつも、いざ的中するとドヤ顔できる神スタンス)
それで一回試した感じだと、やはり12球団分の成績予測をするとなるとかなり重い。10秒ほど固まります。
でも一年に一回やるだけなので、開幕前の「しばらくお待ちください…」の間でまとめてこなせばいいかな。
重くなるのは確かなのでゲーム内に導入できるかどうか絶妙なライン。
一応別の成績予測システムの構想もありますしこれからです。
ただこのへんばかり作り込んでいると「NPB成績予測サイト PennantSpirits」みたいになっちゃうんで控えめにしておきますが。

重いといえば、昔のバージョンを回すとびっくりするくらい軽いので、
変なところでたくさん余計な処理している可能性があります。
そこらへんも時間があれば改善したいです。

(2/21 出場機会の考慮が低すぎた問題などを改善して再度計算したものを掲載)
打率ランキング(100打席以上)



防御率ランキング(50イニング以上)


全選手(CSV)
http://ux.getuploader.com/pennantspirits/download/160/PeSpTA.csv

4 件のコメント:

  1. 東浜の成績すごいことになっててワロタw

    返信削除
  2. 最近は忙しくて遊べていませんが、ツイッターでの発言について一つ質問させてください。
    全選手の守備イニングデータが欲しいと発言されていますが、そのデータはどのように利用するお考えなのでしょうか。
    例えば、ある選手が9回から途中出場し、ライトを守りましたが、一度も打球がこずに試合が終了しました。
    その時この選手は、守備成績でいうと試合数と守備イニングは増えましたが、守備機会は増えていません。
    私には、試合数や守備機会では不十分で、守備イニングが必要になる理由が想像できませんでした。

    返信削除
  3. 簡単に言えば守備能力を機械的に割り出すためです。
    守備機会で割り出せるのは失策率までで、出場している間にどのくらい守備機会があったかまでがわかりません。
    例えば同じ補殺10・刺殺10の遊撃でもそれが10イニングと20イニングとでは評価は違ってきます。
    試合数でも同じで、適当な数字を掛ければ守備イニングらしきものは出てきますが守備固めなどイニングが短い選手には不利になってしまいます。
    もちろん、投手の利き腕など補正をどれだけ行ったところで、UZRと違いどうしても本人の能力の及ばない部分で有利不利が出ることは免れませんが、
    それなりにしっかりした守備の評価が行えるはずです。
    何故守備評価をしたいかと言うと、実名選手の査定の補助というのもありますが、
    過去の選手の成績データをインポートしたので、大昔は無理でも例えば20年前のNPB程度なら自動で再現できるかもと思っているからです。
    FAとか年俸とかのデータは無いんで、できても単年の再現になりそうですが。

    返信削除
    返信
    1. 返信ありがとうございます。
      守備イニングに対する守備機会の割合についてですが、選手の守備能力をはかるには、外部要因が多すぎるような気がします。

      例えば、奪三振率の高い投手が登板すれば守備イニングの割に守備機会は減るでしょうし、ゴロピッチャーであれば、逆に増えるでしょう。
      でもそれは、その選手の守備能力とは関係ないように思うのですが、どうなんでしょうかね。
      また、打席の左右や打球方向の割合によっても守備機会は増減するので、データとしては扱いづらいように思います。

      それよりは、もしBOXデータをデジタルの形で持っているのであれば、各守備位置の、安打と凡打の割合を出した方が望みの結果が得られるのではないでしょうか。
      たとえば遊撃手の補殺数とショート内野安打数の割合を比較すれば、守備イニングとの比較よりかは守備能力との関連性が高そうな気がします。
      打撃結果の内容が細かければ、三遊間ヒットや二遊間ヒットとの比較も可能になります。

      また、もしBOXデータを加工できる形で持ってないならば、非常に手間はかかりますが、自分で集計するのも手です。

      例えば、プロ野球のデータサイトとして有名な「プロ野球ヌルデータ置き場」さんのところの全打席成績のページ。
      ここには日付、対戦チーム、先発出場か途中出場か、守備位置、誰に代わって出場したか&退場したか、そして各打撃結果が載っています。

      なのでこれらのデータをローカルに保存し、プログラムで読めるようにすれば、途中交代したタイミングこそ分からないものの、試合ごとの打席数や追加で投手のイニング数も読み込んで、ある程度の精度で守備機会と安打数を出せますし、守備イニングも大雑把ですが出せると思います。

      あとこれは余談ですが、どうしても完璧な守備イニングのデータが欲しい時は、YahooのSportsnaviにあるテキスト速報のページ、これを全試合分ローカルに保存すれば、全選手の守備イニングをプログラムにカウントさせられます。
      過去のデータは閲覧できないので、手動で今シーズンの全試合を保存しなければなりませんが、最後の手段として、未来のデータに限り、一応入手は可能だと言っておきます。
      あるいは、過去のhtmlファイルを持ってる人がいたら、個人的に送ってもらうというのもアリかと。

      長文失礼しました。

      削除