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

2017年2月1日水曜日

デザイン変更

月初めなので進行報告をば。
画面が大きくなったので情報量が増え、UIも扱いやすいように変更しています。
レイアウト変えるだけならそんな時間かからないですが、
そっちの面でかなり頑張ってるので 1ヶ月で進捗3割くらい。
具体的には、今までは開きたい画面にたどり着くまでに深い階層に潜っていかないといけない場面があり
(例えば歴代タイトル受賞者を眺めたいときは成績→歴代→歴代表彰タイトル→タイトル選択といった具合)、
構造を把握しにくい問題がありましたが、今回はそれぞれのページへのアクセスを直感的かつ簡単に行えるようにしました。
表示しているリーグやチームで色が変わるのは能力画面と同様。
全体的にフラットデザインっぽい感じにはしてますが、
昔ちょっとやろうとしてたなんちゃってとは違い結構見やすさを意識しているので、
以前よりは全体的に見やすくなっているのではないかと思います。

 それから、一軍・二軍の昇降はプロスピのようにオーダー設定や投手配置画面と統合。
ただ選手をずらっと並べて入れ替えするより、その選手のオーダーでの位置を考えながら昇降するほうがずっと使いやすく合理的だなあと思っていたので。






あと、試しに選手の顔写真データを読み込んで使用するシステムを実装。
これがあるのとないのとではやっぱり全然違うんじゃないでしょうか。
架空選手をどうするかは今のところ考えてないです。
真っ先に思い浮かぶのは顔のパーツ画像をたくさん用意して生成時にランダムに組み合わせるみたいな感じですが、
それはそれで面倒なうえ、実在選手と混じったときに二次元・三次元の差で違和感が生まれるという問題も。