K-shoot maniaである曲をクリアできるかどうかの見込み率を統計解析で算出する試み。

KshootやSDVXで、攻略する曲の優先順位をつける際に、私はゲージ以外にも点数を見ています。900万未満なら放置推奨、920-30万なら可能性あり、950万ならクリアの可能性大といった具合です。今まではこの判断を点数とゲージ量から感覚的に行っていましたが、それを統計学的な指標にまとめて客観性を持たせられないかと思ったのがこのページを書いたきっかけです。

最終的に構築した式は統計が分からない方でも使えるよう簡易計算機を用意していますので、宜しければ最下部よりDLしてお使いください。


第1章 回帰分析の概説

このページを読んでいる人の中には、統計学をあまり知らない音ゲーマーもいると思うので、今回私が用いた回帰分析という統計手法について簡単に説明しておきます。

概説なので詳しい計算過程を知りたい人は、別のwebサイトをご参照ください。

回帰分析には様々な手法があり、一番有名なのは重回帰分析です。これは最終的に以下のような式を求める事を目的としています。

重回帰分析

yを目的変数、x1~x3を説明変数と呼びます。例えばマンションの家賃(y)を決めたいと思った時に、部屋の広さ、駅からの距離、スーパーの距離等のデータ(説明変数)を用意してソフトに読み込ませると、3つの要素から上手くyを説明できるような式を算出してくれます。式中のa,b,c,dはソフト側で勝手に算出してくれる固定値で、abcは係数でdは切片です。完成した式に対して新しい物件の3つの説明変数(x1~x3)を式に代入すれば理論上の家賃yが求められます。

重回帰分析の例から回帰分析がどういう統計手法なのか何となく分かったかと思います。では、本題です。

今回の解析ではロジスティック回帰分析という手法を使います。これは以下のような式を求める事を目標にしています。

ロジスティック回帰分析

自然対数が出てきて一気に判りにくくなりましたね。こういう式をグラフで描くとシグモイド曲線と呼ばれるものになります。今回の解析例ではxが複数あるので、実際は平面状で書き表せないのですが、xが1つの場合はシグモイド曲線になると覚えておいてください。また、yは常に0<y<1の範囲をとります。

ロジスティック回帰分析はある事象が1になる確率を求めるときに使います。例えば何かの営業で契約成立=1、契約不成立=0として、これを目的変数にします。その時に性別、年齢、年収といった説明変数から契約成立の確率を予測できるようにするのがロジスティック回帰分析です。もし良い式を構築することが出来たら、手当たり次第に営業をしなくても、性別、年齢、年収といった事前情報から契約が成立しそうな営業相手を絞り込む事が出来ますね。

今回の統計解析の目的はある譜面のクリアの見込み(クリア成否率)を求める事なので、クリア成功=1、クリア失敗=0として、これを目的変数にして解析していきます。



第2章 説明変数の設定

先程の営業の例でも挙げたように、次に説明変数を設定しなければなりません。Kshootで簡便に収集できる数値はそれほど種類が多くありませんが、ここでは以下の3つの数値を説明変数にしたいと思います。

調整得点:Kshootのスコアは最高1000万点ですが、これをこのまま用いると解析の際の桁数がとんでもない事になるので、1万で割って、1万点=1点にします。次に実際のスコアで一の位、十の位は大勢に影響がないと思われますので、小数点下三桁を四捨五入します。これを「調整得点」と定義します。例えばスコアが9365412点なら調整得点は936.54となります

ERROR率:ERRORノーツ÷全ノーツ×100 そのままですね。

GAIN:2019年9月のアップデートでひっそり追加された数値です。この数値の特性について説明する前に、Kshootのゲージの仕様を確認していきましょう。

尚、曲終了時のゲージ量もクリアの成否を判断する上で重要な要素ですが、解析の際に後述する完全分離と呼ばれる現象を起こしてしまうため不採用になりました。



第3章 Kshootのゲージ仕様とGAINの性質
※ここからしばらくGAINの概説とそれを組み込んだ統計解析について長々と書いていますが、最終的に作成したモデルにGAINは含まれておりません。結論だけ見たい方は第5章まで飛ばしてください。


Kshootのゲージ仕様は以下の通りです。基本的には本家と同じと思われます。

回復量(1ノーツ当たりの回復量をαとする)
BTショート、FXショート、直角:α%
BTロング、FXロング、つまみ、NEAR:α/4%

ダメージ量(どの譜面でも固定)
BTショート、FXショート、直角:2%
BTロング、FXロング、つまみ:0.5%

またKshootでは全てのノーツをCRITICALで繋いだ時の理論上のゲージ獲得量、TOTALを確認できます。そこから1ノーツ当たりの回復量αは

TOTAL値

の式を解く事で求めることが出来ます。

更にKshootではショート判定(BT,FXショート及び直角)とロング判定(BT,FXロング及びつまみ)のCRITICAL/NEAR/ERRORそれぞれの内訳を表示する事が出来ます。これらを用いる事で以下の数値を求める事が出来ます。

曲中に稼ぎ出したゲージ量

曲中に喪失したゲージ量

画像6


これがGAINの意味です。


では次にGAINと曲終了時のゲージ量はそれぞれどう違うのかをグラフを用いて説明していきます。下図の縦軸がゲージ量、横が時間です。IIDXのリザルトのグラフとほぼ同じものです。

3人のプレイヤーのゲージ推移

まず3人のプレイヤーのゲージ推移を確認してみます。甲は早々に100%に到達して以後曲終了時まで維持し続けています。ゲージは100%で頭打ちですが、GAINはこの後もどんどん加算されていくため、最終的にGAIN>曲終了時のゲージ量となります。

乙はゲージが一向に伸びなかったので結果的にノルマ落ちしています。ゲージは0%で底をついていますが、GAINは更に減少していくため、最終的にGAIN<曲終了時のゲージ量となります。

最後に丙ですが、増減を徐々に繰り返しながら、最終的に70%まで到達しています。GAINは増加分の合計-減少分の合計であるため、今回の丙のように曲の途中で一度も0%や100%に至らなかった場合は、GAIN=曲終了時のゲージ量とみなす事ができます。

では続いて曲終了時のゲージ量よりもGAINで評価したほうが有用な例を挙げてみます。

2人のプレイヤーのゲージ推移

甲はゲージを30%程度までゲージを伸ばした後、殆どその状態を維持して曲を終えました。この場合は先の丙の例と同じくGAIN=曲終了時のゲージ量となります。この場合は30です。

一方、乙はゲージが0%で推移し終盤で30%までゲージを伸ばしました。曲終了時のゲージ量は甲と同じですが、ゲージの推移からGAIN<曲終了時のゲージ量となります。そしてこのような場合GAINは大抵マイナスになっています。

つまり曲終了時のゲージ量が同じでも、GAINで比較すれば甲の方がまだクリアの見込みありと考えられます。これがGAINで評価するメリットです。

もし同じプレイヤーが異なる譜面を比較する場合、一方の譜面でGAINがマイナスになるようなら、多数のERRORを出している事になるので、その譜面はしばらく放置したほうが良いという考え方もできます。

さて、GAINの概説が終わったのでここから統計解析に移ります。



第4章 統計解析 実践編

今回統計解析に用いたソフトはBell Curveエクセル統計です。データは私個人の150曲(Lv16-18)の記録を用いています。

ロジスティック回帰、増減法で早速解析を行います。

準完全分離

あぼーん。

準完全分離になってしまいました。

目的変数がある説明変数だけで説明できてしまう場合、それを完全分離と呼びます。準完全分離もほぼ同じような意味です。

上述の営業の例だと、男性なら契約成立=1、女性なら契約不成立=0という傾向がデータを見ただけで説明がついてしまうという事です。これは統計解析をする以前の問題で、解析する暇があったら手当たり次第に男性に営業をかけろという事になります。

で、元データをよく見ると、GAIN 67辺りでクリアの成否がスパッと分かれてしまっています。

曲終了時のゲージ量をモデルに組み込めなかったのも、この完全分離が原因です。今回はクリア成功=1、クリア失敗=0としていますから、もし曲終了時のゲージ量を説明変数に入れると、70%を超えているかどうかだけで、1,0の判別が可能になってしまいます。

厳密には違えどGAINもゲージを扱った数値です。そのため今回のようにクリアの成否をアウトカムにするモデルの説明変数としては、GAINは準完全分離を起こすリスクを孕んだ不適切な変数だったと考えられます。

完全分離(準完全分離)が起こってしまうと、正しく計算が出来ません。これに対する対処法は2つです。

1 母数を増やす。
2 その説明変数を除外する。

1の場合、GAIN60~70程度のデータを多数収集する必要があります。GAINがこれぐらいの数値でもクリア出来るものと出来ないものが多数混在する事を示さねばなりません。

しかし、GAINが100を超えるような譜面や、マイナスになるような譜面を集めるのは容易ですが、60程度というのは自分の実力とほぼ拮抗した譜面であり、そのような譜面を1人で多数収集するのは非常に困難です。そのため、今回の統計解析ではGAINを除外して、ERROR率と調整得点のみでモデル構築を試みる事にしました。



第5章 統計解析 修正編

飛ばした方はここから読み進めてください。

という訳で再度ERROR率と調整得点を使ってロジスティック解析の増減法で解析を行います。

結果は以下のようになりました。

p値

意外にもERROR率、調整得点、定数項(切片)のp値が全て0.05を切っています。更にオッズ比の95%信頼区間は1を含んでいません。統計学的には有意な結果です。また相関係数も0.69と相関ありと判断できる数値が出ています。

判別率

肝心の判別率ですが、82%と高めです。参考情報として使えるレベルではないでしょうか。

続いてシミュレーションですが、今回はクリア成功=1、クリア失敗=0としています。オッズ比は1を超えると、確率が上がる方向に寄与するので、調整得点が1上がれば(ゲーム内では1万点)、それだけクリア成功率が上がるという事になります。逆にERROR率のオッズ比は1を下回っているので、ERROR率が上がるほどクリア成功率が下がるという結果になりました。これは直感的に考えても正しいので、このモデルはクリアの成否を説明できていると言えそうです。

という訳で最終的に以下のような式が完成しました。

完成式


※x1:ERROR率、x2:調整得点
※見やすくするために小数点5位で四捨五入して表記していますが、実際の計算は本来の値で行っています。



第6章 グラフ化

通常回帰分析によって求めた式というのは変数が多数存在するためグラフに書き表すことが出来ません。しかし、今回は変数が3つに収まっているため、例外的に3次元グラフを書き表す事が可能になります。

ただエクセルでデータに使える件数にも制約がありますので、ERROR率は0.00~10.00%、調整得点は800~1000点と1点刻みで作成しています。

立体図元データ

そうして、エクセルの等高線で作成したグラフが以下になります。

クリア成否率グラフ(3次元)

一見するとよく判らないグラフですが、よくみるとシグモイド曲線ならぬ、シグモイド平面のような図形になっている事が判ります。写真で示すとこんな感じです。

無題


今回のグラフでは横軸がERROR率、奥行きが調整得点、そして縦軸がクリア成否率です。そしてクリア成否率20%刻みで色分けが行われています。しかし、このままでは何とも評価しがたいので、このグラフを真上から見た(y軸方向から見た)、2次元のグラフに変換してみます。それが下図です。

クリア成否率グラフ(2次元)

上から見下ろしているので、横軸がERROR率、縦軸が調整得点になっています。さて、このグラフから面白い傾向が見えてきました。グラフの右下はクリア成否率0-20%の領域ですが、ここからERROR率が減れば減るほど、調整得点が増えれば増えるほど、グラフの左上の方に向かうことになります。すると、クリア成否率が20%を超えた時点で、確率が急激に上昇していくゾーン(図中の茶色、灰色、黄色部分)に突入していく事が判ります。そしてそのゾーンを超えるとクリア成否率が80%を超えて安定した領域(図中の青部分)に突入します。

ここから以下のような考察が出来ます。

ある曲でノルマ落ちしたとき、クリア成否率が20%を超えるかどうか(ゾーンに入るかどうか)で、その曲を粘着するか、放置するかを判別出来るのではないか?

勿論、この図にはゲージに関する情報が全く含まれていないため、仮にゾーンに突入していると判定されても、実際のゲージの振る舞いとは乖離が生じているかもしれません。また、ゾーン内と判定されたものが本当にゾーン圏外の曲よりも短期間でクリア出来るのかは未知数な部分があり、今後の検証が必要かと思われます。



第7章 あとがき、Q&A

リザルト等から得られる情報を全て1つの指標に落とし込み、その譜面のクリア成否率の判定をしたかったのですが、ゲージやGAINをモデルに組み込めなかったので、結局クリア成否率と曲終了時のゲージ量(GAIN)という2つの数字が残ってしまいました。

しかし得点やERROR率という何とも解釈しがたいものをクリア成否率という判りやすい数値に統合できた点に関してはある程度の成果だと考えます。

そして、グラフにすることによって、クリア成否率が急激に上昇していくゾーン(20-80%)の存在を可視化することが出来ました。勿論、実用性に関しては今後の検証が不可欠です。

また、ERROR率と得点のみを説明変数にしたことで以下のようなメリットも生まれました。

1 本家でも使える
2 他人の過去のリザルトもデータに組み込める

 今回用いたデータと解析結果はダウンロードできるようにしています(ただし3次元グラフのデータがかなり重いです)。データを追加して式を更に精度の高いモデルにしたいとか、説明変数やアウトカムを変更して違う式を構築してみたいという方は是非挑戦してみてほしいと思います。

 但し、前者の場合はいくつかの注意点があります。

つまみ譜面の扱い
 今回のモデルではつまみ譜面をなるべく入れないようにしています。つまみはゲージ減少量がショートノーツの1/4なので、つまみ譜面の場合は多数のERRORを出してもクリア出来てしまう事が多々あるからです。ショートノーツも適度に混じった通常の譜面だとERROR率3%でノルマ落ちする事もありますが、つまみ譜面の場合はERROR率10%でもクリア出来ます。そのため、つまみ譜面を入れるとデータの傾向が変わってしまう可能性があり、その扱いには注意が必要です。

SNS上にアップされたリザルトのバイアス
 Twitterなどで上がっているリザルトをデータに組み込む際の注意点ですが、一般的にネット上には良い記録しか出さないと考えられます。つまり、本当はノルマ落ちした記録もデータとしては重要なのですが、そういった記録が集まらず、モデルに歪みが生じる可能性もあります。

最後に今回の結果に対して以下のようなご指摘があるかと思います。


Q1 データが筆者自身のものしか含まれていないため、それもバイアスでは?故に、他人のデータを追加して解析すると結果が変わるのではないでしょうか?

A1  ご指摘の通りです。データの収集から解析まで全て1人で行いましたが、このモデルの更なる精度及び実用性の検証には他の方の協力も不可欠です。私一人でのデータ収集には限界がありますので、もし収集にご協力いただければ解析は引き続き行いたいと思います。

Q2 自然対数を使った複雑な式なので、いちいちゲーセンで計算する余裕が無いのでは?

A2 アップロードしたエクセルファイルで簡易的に計算できるようシートを用意してあります。自宅ではこれを用いれば問題ないかと思いますが、ゲーセンで使う場合はスマホで使えるような計算機が必要かと思われます。ただ、リザルトを撮影しておけば後で検証可能です。

Q3 ゾーンを20-80%にした根拠は何ですか?

A3 覚えやすいからです。シグモイド曲線なので、どこから急上昇を始めているかを正確に表現する事は出来ません。そのため今回は20%越えをゾーン突入と定義しました。勿論、厳しめにとって25-75%や30-70%をゾーンと定義する事も問題ありませんし、今後の検証によっては寧ろ、その方が妥当という結論が出るかもしれません。

Q4  このモデルはハードゲージやイージーゲージでも使えますか?

A4 使えません。ノーマルゲージのみです。


最後まで読んでいただきありがとうございました。私が解析で用いたファイルを添付しております。3次元グラフ用のシートが重いのでご了承ください。



この記事が気に入ったらサポートをしてみませんか?