正確なデレステボーダー予測モデルを作ってみる

アイドルマスターシンデレラガールズ スターライトステージのイベントで目標順位に到達するために、ボーダー予想が色々なところで行われています。

どのように算出しているかは不明ですが、仮に過去のデータを見て経験則で求めているのなら、統計学を用いればもっと正確に出せる気がします。

スポンサーリンク

重回帰モデル構築

最終的に独立変数をイベントの特徴に沿って入力し、ボーダーラインのスコアを算出するモデルを構築することを目指します。

今回は Live Groove のスコアを用います。分析したときにはまだ 10 回しか開催されてないので、データが少なすぎて不安ですが…

手順 (予定)

  1. 一般化ドラフツマン表示(散布図行列)
  2. 調整済み散布図
  3. Cp 基準による最適なモデルの評価
  4. 残差の分布と正規分布の比較
  5. 残差の分布の不均一性

環境

  • Windows
  • R (フリーソフト)

データの準備

解析するデータを用意します。Excel で作ると楽です、たぶん。

Live Groove なので、その過去のデータを拾ってきます。 (実は、うっかりアタポンイベのデータを拾ってきてしまって二度手間だった…)

考えてみると、Live Groove って Visual, Vocal, Dance Burst の 3 種類あるんですね。元々データが少ないので、今回はすべて一緒にします。

拾ってきたデータ

  • 各順位のボーダースコア
  • プレイ可能時間
  • 土日・祝日の日数
  • イベント楽曲 MASTER, MASTER+ の Lv.
  • 報酬となるアイドルのランキング…

問題は最後のランキングで、人気投票の結果が全然活用できません!

その理由は、デレステ本体の人気投票のデータがない、というか人気投票やったっけ?とか、モバマスの人気投票を利用しても報酬アイドルの半分がランキング外で泣ける。

仕方がないので、一位が某アイドルのランキングを使います。

Excel で作成したデータは csv 形式で出力します。

データの読み込み

csv ファイルを適切な位置に置いて、R でコマンドを入力して読み込みます。

> data <- read.csv("data.csv")

各変数の準備

> border2001 <- data[,1]
> border10001 <- data[,2]
> border20001 <- data[,3]
> hour <- data[,4]
 ...(省略)
> rank <- data[,7]

求めるボーダースコアはとりあえず 2,001 位、10,001 位、20,001 位にしました。

また、ボーダースコアの数値の差はかなり激しいので、常用対数をとっておきます。

> log.border2001 <- log(border2001)
 ...(以下略)

散布図行列

一般化ドラフツマン表示というのはどうも一般的ではないらしく、Web ページの多くでは散布図行列もしくはプロット行列なんて呼ばれているみたいですね。

> vars <- cbind(log.border2001, log.border10001, ...(省略)... , rank)
> pairs(vars)

 

データが少なかったり、まあ色々と問題があるので、相関が見られるような感じが全然しません。

楽曲Lv. やプレイ可能時間は目盛りが 2, 3 個しかなく点同士が被るのもあるので、ジタリングするといいです。

#例
> master.jittered <- master+runif(10, min=-0.3, max=0.3)

10 の部分はデータ数です。

散布図行列を書くことで、相関がありそうな変数の抽出と疑似相関が発生する可能性を一目で確認できます。

この結果から絶望的に相関がないことがわかりましたが、わざわざデータを用意したのでもう少しやります…

調整済み散布図

独立変数間に何らかの関係がある場合、従属変数と独立変数から他の独立変数の影響を取り除いて散布図を描くと、従属変数と一つの独立変数の相関があるかわかります。

今回は、独立変数間に相関がありそうにない…というのも、MASTER+ の Lv. と報酬アイドルの人気投票結果とか、土日・祝日の日数とプレイ可能時間とか、関係なさそうです。

別に MASTER+ が難しいときは報酬アイドルが人気の高いアイドルだとか、土日が多いとプレイ期間が延びるとかはないわけですから。

描き方

今、独立変数 X1, X2 と従属変数 Y があるとします。

Y と X1 の間、Y と X2 の間だけでなく、X1 と X2 の間にも相関がある場合、Y と X1 の相関は調整済み散布図を用いなければわかりません。

X1 と Y の調整済み散布図は、x 軸に独立変数 X1 から他の独立変数 X2, X3 の影響を取り除いた値、y 軸に従属変数 Y と他の独立変数 X2, X3 の影響を取り除いた値をとります。

影響を取り除いた値とは、残差です。

残差の求め方

Y と X2, X1 と X2 のそれぞれで単回帰を行い、その残差同士をプロットすると調整済み散布図を描くことができます。

#例
> X1.res <- lsfit(cbind(X2),X1)$res
> Y.res <- lsfit(cbind(X2),Y)$res
> plot(X1.res, Y.res)

t値の求め方

調整済み散布図で一つ一つ独立変数を加えていき、加えるたびに t 値も確認する必要があります。t値の絶対値が小さければ、今求めた相関は信用できないということになるからです。

t 値の絶対値が 2 以上であれば、重回帰モデルに組み込んでも問題なさげです。

#係数
> c <- lsfit(cbind(独立変数1,独立変数2,...),従属変数)$coef
#標準偏差
> s <- ls.diag(lsfit(cbind(独立変数1,独立変数2,...),従属変数))$std.err
#t値
> t <- c / s

重回帰分析

やる気喪失しながらも、いよいよここまで来ました。

調整済み散布図を使ってモデルに組み込めると判断した独立変数で、回帰モデルを作ります。

今回は調整済み散布図を使わなかったので、直接重回帰分析を行います。(それだけなら Excel でもできる…)

重回帰分析は次のソースコードで実行できます。

> lsfit(cbind(独立変数1,独立変数2,...),従属変数)

しかし、他にも t 値や調整済み決定係数など、いろいろ求めるのが大変なので近道します。

> data2 <- lm(log.border20001~hours+holidays+master+master.plus+reward.rank+pt.rank)
> summary(data2)

とりあえず全部を独立変数として重回帰分析した結果がこちら。

Call:
lm(formula = log.border20001 ~ hours + holidays + master + master.plus +
reward.rank + pt.rank)

Residuals:
         1          2          3          4          5          6         7         8         9        10
-0.1051925 -0.0005065 -0.0161311 -0.1315444 -0.0209933 -0.0092077 0.0706397 0.0184153 0.1218302 0.0726903

Coefficients:
            Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.6910845 3.5971399   2.416   0.0945 .
hours      -0.0008462 0.0060137  -0.141   0.8970
holidays    0.0292646 0.0470248   0.622   0.5778
master      0.0351992 0.1621129   0.217   0.8420
master.plus 0.0221456 0.1471173   0.151   0.8899
reward.rank 0.0005361 0.0047612   0.113   0.9175
pt.rank     0.0005289 0.0036923   0.143   0.8952
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.1349 on 3 degrees of freedom
Multiple R-squared: 0.3567, Adjusted R-squared: -0.93
F-statistic: 0.2772 on 6 and 3 DF, p-value: 0.9151

モデルの p 値が 0.91 って何なんだ…酷すぎる…

散布図行列の結果を見た時点で無理は承知でしたが、結論は重回帰分析による Live Groove イベントのボーダー予測は不可能に近い。(泣)

本来ならこの後、Cp 基準による回帰モデルの比較・評価をして最も良いものを持ってきます。そのモデルで、残差が正規分布に従っているかどうか、分散が偏っていないかを確かめてモデル構築完了です。

最後に

人気の高いキャラクターが報酬だったり、ゴールデンウィークを挟んだりすると、ボーダーが上がると予想されますが、単に重回帰分析したところでは何もわかりませんでした。私の腕不足の可能性も…

まあ、これはこれで一つの答えということで、意味のあるモデルを示すことができずに大変残念な思いですが、ここまでお付き合い頂いたことをとても嬉しく思います。

タイトルとURLをコピーしました