CPI正式開始のお礼と現状報告

こんにちは、りせ(@rice_Place)と申します。

 

IIDX SP☆12の難易度推定サイト、CPIの運営を行っています。

cpi.makecir.com

2020年8月の正式サービス開始以降、現時点で900人以上の方がユーザー登録されています。

アンケートやSNS上で、モチベーションの維持・向上に繋がったという声を目にして、開発者冥利に尽きる気持ちです。

加えて、本記事の執筆時点で4名の方から開発者支援を頂いております。CPIの運営にはサーバー代等の費用が少なからず生じているので、このようなご支援は持続的なサービス提供において大変助けになっています。改めてお礼申し上げます。

 

今回は、正式開始から初めてのデータベース更新に合わせ、改善を繰り返してきた難易度推定手法の現状を整理していきたいと思います。

 

難易度推定手法の現状

以下にはnote等にも公開してきた情報が含まれますが、課題点を考えるにあたって前提となるよう、一から説明したいと思います。

 

レーティングシステム

CPIでは、プレイヤーの☆12クリア力をレーティングの形で表しています。チェスや将棋、その他スポーツなどで最も広く使われている、Elo ratingを採用しました。

ja.wikipedia.orgこの指標は勝率を対数変換して求められ、プレイヤー同士の相性を無視した場合にレーティング差が(レーティングの絶対値によらず)勝率と対応するように作られています。

 

CPIではプレイヤー同士の勝敗を、IIDX公式サイトの表示に従って「両プレイヤーが共にプレイしている譜面におけるクリアランプの総合勝敗」として定めました。ただし、ASSISTED CLEARについてはFAILED扱いとしています*1

 

このように定めた対戦を、ある時点で

・八段~皆伝を取得している

・プレイデータを公開している

・☆12を1譜面以上プレイしている

という3条件に全て当てはまるプレイヤー(以下データベース)全員に対して行い、求めたレーティングを☆12クリア力 = CPIとして表示しています。現時点でこのようなプレイヤーは概ね30000名前後となります。

 

データベースの抽出補正

データベースから☆12譜面の難易度推定を行うにあたって、様々なタイプのプレイヤーが存在することに注意する必要があります。

理想的には全プレイヤーが全譜面を(その時点の)全力で埋めていることが望ましいですが、現実にはそうなっていません。

詳細は後述する課題点で触れたいと思いますが、現状ではある一点のみについて条件を定めて、データベースの部分的な抽出を行っています。

 

具体的には、難易度推定のプロトタイプを作成・公表したときに指摘の多かった、「収録から日の浅い譜面の難易度がおかしくなる」という点です。

背景には、解禁が追い付いていない*2・試行回数が少ないといった理由が考えられます。

 

このような影響を抑えるために、まずはレーティングの対象とする譜面を

・解禁が不要なら収録から約1ヶ月

・解禁が必要なら収録から約2ヶ月

以上経過しているものに限りました(約と付いているのはデータ更新タイミングとの兼ね合いです)。

加えて、比較的ちゃんと新曲を埋めているプレイヤーを抽出するために、新曲全体のランプ平均と旧曲のそれとで差を取り*3、このようにして求めた”新曲の埋め度合い”が平均以下であるようなプレイヤー*4は難易度推定の標本から除くことにしました。

 

理論的にはこの抽出によって推定の標本数(プレイヤー数)は半分の15000前後となりそうですが、実際には新曲(あるいは旧曲)☆12を一切プレイしていないようなプレイヤーでは平均が未定義となって除外されるため、標本数はさらに数割ほど減る傾向があります。

このような性質も相まって、この項における抽出補正は比較的アクティブなプレイヤーを選択することになります。

以前は新曲のみで抽出補正の結果を採用したこともありましたが、旧曲(特に収録から時間の経った譜面)の難易度が過小評価される傾向を認めたので、執筆時点では全ての譜面に対して補正を適用することとしました。

 

難易度推定手法

ようやく実際に難易度を推定するパートです。

CPIでは推定手法として、ロジスティック回帰分析を選んでいます。

回帰分析とは、予測したい値(目的変数)Yと、予測のために用いる値(説明変数)X*5について、Y = f(X)となるようなfを見つけよう、というものです(この説明はめちゃくちゃに簡略化しています)。

特にYが0か1の値を取るような場合においては、ロジスティック回帰が用いられます。特定のランプが点いているか点いていないかという状況にはピッタリですね。

f:id:rice_Place:20201003134949p:plain

ロジスティック回帰の基本的なことをわかりやすくまとめてみた | シストレとkaggleの備忘録

 

これに加えて、全体の傾向に対して大きく外れた標本*6の影響を最小限に抑えるべく、ロバスト推定法を採用しました。

通常の最小二乗法では下図のように、数点の大きな誤差が含まれるだけでも、近似した直線が大きくズレてしまう場合があります。
この誤差の影響をできるだけ受けないようにしたのが、ロバスト推定法です。

f:id:rice_Place:20201003133653p:plain

ロバスト推定法(Tukey's biweight) | イメージングソリューション

引用した図は単回帰ですが、ロジスティック回帰にも適用することができます。

 

この補正によって、特に超上位譜面の難易度が高めに推定されるようになっています。このような譜面は、例えば未難◯個、未エクハ◯個という段階まで残るため、比較的全力で(背伸びして?)狙いに行くプレイヤーが多く、補正なしでは過小評価気味だったのでは無いかと推察されます*7

 

現手法のまとめ

ここまでの話を簡単にまとめると、

 ①条件に合うプレイヤーについて疑似対戦形式でレーティングを求め、

 ②新曲を平均以上に埋めているプレイヤーを抽出し、

 ③(ロバスト)ロジスティック回帰によって難易度を推定している

ということになります。

 

課題点と今後の展望

これまでに浮かび上がってきた課題点はいくつもありますが、掘り下げるとここから更に長くなってしまうので、ひとまず主要なものを箇条書きで列挙するに留めたいと思います。

・抽出補正の追加検討(LEGGENDARIA・譜面の個人差要素・プレイヤー間での特定ランプの使用頻度の違いなど)

・新曲の抽出範囲の検討(「平均以上」は適切か?)

・回帰分析のモデル選択(現状では、適正に対して比較的高CPI/低CPIのプレイヤーで予測精度が悪くなる傾向がある)

 

更に根本的な問題として、「全てのランプについて勝敗を比較する」というやり方についても検討を続けていく必要があると考えています。

この方法には、狙えるランプを全力で狙えば推定実力が上がっていくという明瞭さがある一方で、明らかに埋めていないだけの譜面が多いプレイヤーの実力を過小評価するという問題点があります。

広く使われるスコア指標のBPIでは、「1曲だけプレイしてかつそれが歴代全一(= 単曲BPIは100点)なら、総合BPIは50点」と定め、勾配を付けて加算していくことで”強い”スコアが重視される仕組みとなっています。

またGITADORAでは昔から公式がSKILLシステムを採用しており、新曲と旧曲で対象を分けることで得意譜面と苦手譜面のバランスをある程度取ることに成功している印象がありますが、SKILL計算は公式が決定した難易度に依存するため、いわゆる”稼ぎ”譜面の存在が客観性の面でネックとなってきます。

 

最近では機械学習の応用によって、プレイヤーデータに依存せずに譜面の情報だけから難易度を推定するような試みもされつつありますが、☆12内での難易度を細かく分けるレベルの精度を得るためには、まだまだ改良が必要だと見受けられます。

私自身にも(本業に近い)脳科学的な立場からのアプローチを試みたい気持ちがあるのですが、これには上記の機械学習手法よりもさらに長い長い道のりがあります。

 

音ゲーの実力とは、難易度とは……?と考えていくと、音ゲーそのものに劣らないくらいの深さと面白さがあります。

このテーマについて、一緒に考えてくれる人が少しでも増えて欲しいと思っています。

 

 

この記事についてのご意見・ご感想は冒頭のTwitterまでお願いします。

また、CPIを今後ともよろしくお願いします。

 

それでは、良き音ゲーライフを。

*1:具体的には、ある5譜面について
 プレイヤーA:{FULLCOMBO, HARD, FAILED, NO PLAY, NO PLAY}
 プレイヤーB:{EXHARD, HARD, ASSISTED, FULLCOMBO, NO PLAY}
のとき、プレイヤーAから見て{勝ち, 引き分け, 引き分け, 無対戦, 無対戦} = 総合勝利となります。

*2:特にARENAモードが追加されてからは、未解禁譜面がARENAで投げられてとりあえず途中落ちの無いゲージでプレイした、というパターンが起こり得るようになりました。

*3:例えば、新曲は全てHARD・旧曲は全てEXHARDというプレイヤーでは、平均の差はランプ1つ分ということになります。ここで新曲とはデータ取得時点における稼働作にて収録された譜面を指します(旧曲の追加レジェンダリア等もここでは新曲扱いとしています)。

*4:CPIの近い1000プレイヤー程度における平均

*5:これは複数あっても構いません。1つなら単回帰、複数なら重回帰と呼ばれます

*6:極端な例を出すと、ほぼ全譜面をフルコンしているような人が、何故かAAはイージー止まりだったりすると、そのランプは全体の傾向から大きく外れていることになります

*7:今回は詳しく触れませんが、より簡単な譜面に関しても変化の傾向はあります。