デレステイベントアタポン形式 2001位ボーダー推定 -Pystanを使った状態空間モデル-

## 概要

* 本でStanを使った状態空間モデルによる分析方法を勉強したから、実際のデータで練習してみたもの
* 今回はとりあえず以下のモデルで動かしてみた
  * ローカルレベルモデル
  * 平滑化トレンドモデル
  * ローカル線形トレンドモデル
  * 時変係数モデル（説明変数はイベント期間の長さのみ）
* 結果としては、まだ全然うまくフィットできてない
  * トレンドとイベントの長さのみでは説明しきれないため
  * 他に特徴量作って時変係数モデルでの分析は、追々やりたい
* 今回作った[スクリプトたちはココ](https://github.com/kzy611/qiita/tree/master/dereste_analysis/dereste_event_point_ranking_border/%E3%82%A2%E3%82%BF%E3%83%9D%E3%83%B3_2001/script)のc1~c4。

## Pystan使う前の準備

* pystanインストール

`pip install pystan`

* 少しハマったところ
  * `pystan - Unable to find vcvarsall.bat`というエラーが出てバタバタした
  * 解決方法
     * [ココ](http://y-okamoto-psy1949.la.coocan.jp/Python/PyStanWinLinux/)の通り、Visual StadioのC++をインストールした

## 使うデータ

[ココ](https://qiita.com/kazuya_minakuchi/items/04a1fcfc896f64c1e010)で取得したデータを、形式がアタポンのものだけ抽出したもの

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/960823d7-4d78-38f7-5e7a-b764d85314d3.png)

## ローカルレベルモデル

* 「状態がランダムウォークに従い、その状態にノイズが加わって出力が出てくる」と考えるモデル
* 数式とかは[ココ](https://qiita.com/kazuya_minakuchi/items/09b010927688b322df9d#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%AC%E3%83%99%E3%83%AB%E3%83%A2%E3%83%87%E3%83%AB)参照

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/f8362a7a-c750-69f9-553b-672154b97e8f.png)

所感

* 全然5%-95%の範囲に入っていないが、とりあえず中心あたりは通ってて、全体の傾向は見えている気がする
* 2018年後半あたりがピークで、少しずつ下がってる？

## 平滑化トレンドモデル

* 「状態の変化量がランダムウォークに従い、その状態にノイズが加わって出力が出てくる」と考えるモデル
  * 状態の変化量：１つ前の状態から今の状態への変化量
* 数式とかは[ココ](https://qiita.com/kazuya_minakuchi/items/09b010927688b322df9d#%E5%B9%B3%E6%BB%91%E5%8C%96%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89%E3%83%A2%E3%83%87%E3%83%AB)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/8c86fba4-5481-19be-683a-944e4c402773.png)

所感

* こちらも全然5%-95%の範囲に入っていないが、やはりスムーズにはなってる
* 2018年末あたりにピークが来ている？

## ローカル線形トレンドモデル

* ローカルレベルモデルに「時間によって変化するドリフト成分」を追加したもの
  * ローカルレベルモデルと、平滑化トレンドモデルのあわせ技のようなもの
  * 水準成分の変化がほぼ0の場合、平滑化トレンドモデルと同じになる
* 数式とかは[ココ](https://qiita.com/kazuya_minakuchi/items/09b010927688b322df9d#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%B7%9A%E5%BD%A2%E3%83%88%E3%83%AC%E3%83%B3%E3%83%89%E3%83%A2%E3%83%87%E3%83%AB)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/9ed9893f-1d58-2302-141c-3466d7efa319.png)

所感

* こちらも、全然5%-95%の範囲に入っていない。
* 平滑化トレンドの滑らかさとローカルトレンドのガタガタの中間くらいになっている。

## 時変係数モデル

* 目的変数に影響しそうな説明変数を加えたもの。説明変数の係数も時系列で変化することを想定する。
* 数式とかは[ココ](https://qiita.com/kazuya_minakuchi/items/09b010927688b322df9d#%E6%99%82%E5%A4%89%E4%BF%82%E6%95%B0%E3%83%A2%E3%83%87%E3%83%AB)

### ローカルレベル+時系変数モデル

* 実際のデータと予測値プロット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/03723ca8-f07d-6f44-d70c-0bc7e44402d2.png)

* 係数プロット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/2f300f41-e9c3-1833-0e7a-8ab49e2c4748.png)

### ローカル線形トレンド+時系変数モデル

* 実際のデータと予測値プロット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/f83e2e0b-211f-a825-18f2-4bc40be28c95.png)

* 係数プロット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/734013cc-e5f9-4ba1-674d-476cfce7d6a6.png)

所感

* まだ、全然5%-95%の範囲に入っていない。
* 期間の係数がマイナス寄りになっている
  * 普通に考えて、実際はそんなことはないはず（「期間が短いほどポイントが稼げる」とは思えない）
  * 他の要因による変化に引っ張られていると思われる

## ズレの確認

ローカル線形トレンドモデルのときの、実測と予測の差分をとってみる

* ヒストグラム
  * 平均は+、中央値は-となっており左右非対称
  * うまく説明できていれば、正規分布に近いかたちになるはずなので、やはり説明が足りていない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/21b5f453-7e91-8817-b1bf-56d683b74c1c.png)

* 時系列

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/19cd108a-ab5e-62d2-e9c3-cdae74f340bc.png)

* 散布図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563901/8b14b0cd-8869-23f6-23c8-b8d5a3318939.png)

* 差が大きい順TOP10
  * 絶対値はとっていないので、実測がトレンドより大きいものTOP10
  * ニュージェネレーションズの３人が入ったユニット（PCS、TP、PP）のイベントが入っており、イベントの盛り上がり具合（報酬アイドルやユニットによる）が関係しそう

|	日付	|	イベント	|	期間	|	2001位	|	トレンド	|	差	|	比	|
|	:--	|	:--	|	--:	|	--:	|	--:	|	--:	|	--:	|
|	2018/9/19	|	Pretty Liar	|	198	|	224697	|	116547	|	108150	|	1.93	|
|	2017/11/19	|	Trinity Field	|	174	|	193847	|	106468	|	87379	|	1.82	|
|	2020/5/19	|	不埒なCANVAS	|	198	|	188652	|	104595	|	84057	|	1.80	|
|	2019/1/21	|	スパイスパラダイス	|	174	|	179632	|	114280	|	65352	|	1.57	|
|	2019/11/20	|	Secret Daybreak	|	175	|	169639	|	108815	|	60824	|	1.56	|
|	2017/8/21	|	双翼の独奏歌	|	150	|	156206	|	101001	|	55205	|	1.55	|
|	2018/8/19	|	クレイジークレイジー	|	198	|	163641	|	114877	|	48764	|	1.42	|
|	2016/9/20	|	ラブレター	|	150	|	121303	|	74138	|	47165	|	1.64	|
|	2019/7/22	|	バベル	|	157	|	151703	|	109155	|	42548	|	1.39	|
|	2018/11/19	|	Sunshine See May	|	198	|	156519	|	115536	|	40983	|	1.35	|

## まとめ

* まだうまくフィットしていない
  * ボーダーに影響する要素が十分に反映しきれていないため
* 関係しそうな要素として思い浮かんだもの羅列
  * イベントごとの要素
     * イベントの盛り上がり具合 ≒ ランキング報酬となっているアイドルの人気**（コレ目的でみんな2000位以内を目指すので、一番影響が強そう）**
  * トレンドに含まれそうな要素（徐々に変化するもの、突然変化するものが混ざってるので、ローカル線形トレンド使うのが良さそう）
     * ゲームの人気の変化に伴う、アクティブユーザ数の変化
     * キャラが増えたことで放置編成組める人の増加
     * グランドライブ実装での時間効率UP
* 予想する値として2001位を選んだけど、1位のほうが予想するの簡単そうｗ（[やっぱり1位のほうが簡単だった](https://qiita.com/kazuya_minakuchi/items/a0683170a3ad7ceba209)）
  * 1位は、時間を目一杯使って人間の限界に挑戦した場合の値になりそう
  * ただ、2001位がイベント最高報酬のボーダーだから、需要としてはコッチのほうがあるはず（イベントちゃんと走ったことないけど、自分も知りたい）