*この記事は𝓞𝓾𝓬𝓱𝓲 𝓞𝓽𝓸𝓰𝓪𝓶𝓮 𝓐𝓭𝓿𝓮𝓷𝓽 𝓒𝓪𝓵𝓮𝓷𝓭𝓪𝓻 2024 12/6 に寄稿したものです。
←12/5 Ment Mento Men!/おれ by あんでぃ
https://note.com/andyjones/n/n2dedabb0453f
12/7 自称、音楽愛好家【MASTER13】を語る by じゃり→
https://note.com/2y4r1_hel55/n/nb78296a0aaf4
↓他記事も興味深いものばかりですので、是非チェックしてみてください。*
https://ouchiotogame.com/advent/2024
どうも、hydです。
ブログの記事にしても学校等の課題にしても、やはりその執筆速度というものはどうしても自身の興味に左右されてしまうもので、他の書かなきゃいかん記事の編集に疲れて今この記事を書いています。まあ物書きモチベが存在するだけ良いことなのでこれからもぼちぼち続けていければいいなと思う次第です。だから時間食い虫であるところの研究さんよ、なんとかなってくれよ
さて、話を戻すと、昨年自分はB4UTの方のアドカレに2本記事を寄稿しました。その内の1本が、こちらの記事でした↓
こちらは自分が制作したユメステ諸ツールをまとめたスプレッドシートに関しての軽い紹介記事でした。
この記事を出してからほぼ1年、ユメステも2年目を迎え、よりツールの方も開拓が出来てきたように感じるので今回は折角なのでこのスプシの主な共有先である𝓞𝓾𝓬𝓱𝓲 𝓞𝓽𝓸𝓰𝓪𝓶𝓮鯖(以下お咎め鯖)のアドカレに舞台を移して、この1年このスプシをどれくらい開拓/改良したかを簡単に振り返っておこうかなと思います。
※なお、実装の仕方や見た目が雑極まりないため、昨年同様、今回取りあげるスプシについては現状身内以外で共有の予定はありません。予めご了承ください。外部の方に関しましては、あくまでアイデアの共有みたいな感じでお楽しみいただければと思います。
去年の記事で紹介したもの
多くのツールは特段変わってないので画像もなしでかるーく。詳しく見たい方は少し戻ってurl踏んで前回の記事をチェックしてみてください。
①公演スターランクミッション管理
前回記事公開後ツールの中身/見た目共に全く変わっていません。まあ特にいじる必要ないし…
あれからかなり新アクター/ポスターが増えた分、公演を要求される可能性が高まるLv11キーミッション以降に到達しやすくなっていると思うので当時に比べて多少腐りづらくなって需要は高まったかなあと言ったところ。
②レート理論値/星章計算機
ここに関しては結構色々改装しました。
まずレート理論値の方は当然ながら対象曲のレベルが26~29ではなく27~30にマイナーチェンジされています。そして27の核地雷も増えたことを受けて27で枠に入れる必要のない余剰の曲数も書いておきました。まあそれくらいか。
そして星章の方ですが自分はもう完全に全身OLIVIER人間になったので色々盛りました。こればっかりは言葉だけじゃ説明足らず不可避だし画像をポン。
左4列は前回記事の時点で存在してましたね。表記をちゃんとローマ数字にしてたりⅩが増えたりとマイナーチェンジした点こそありますが大きくは変わりません。
残りは新規実装。まず真ん中辺りには難易度別の星章取得%と平均個数を書くことに。次列はここを編集してるちょうどのタイミングで思いついて実装した難易度別失点。これ用意しなきゃいけないのインフレだなあ…
そして残りの右5列。こちらは自分が定期的(大体20曲追加される毎)にお咎め鯖で行っている星章分布調査をベースに特定%での星章適正値の近似値を求めてやろうという試みから誕生した適正値計算機です。最上段右らへんの%に見たい数値を入力すると各難易度で適正値っぽそうなものを計算してくれます。右から2列目が正だと不足で負だと過剰。この画像(自分)だとⅧ以上は97%適正値をも上回る、逆にⅤとⅦはこのまま97%になったら下手寄り扱いになると評価されているよということ。
調査対象人数は各回15~20人ほどと統計学的には間違いなく不十分であったり、調査対象が音ゲーの素養がありすぎる人ばっかりで精度面が上手すぎだったり、自分のような精度不可能上位ぶっ壊し型というこの母集団においては逆張りなタイプが混入してる影響で近似が上手くいってそうな難易度がⅥ,Ⅶくらいしかなかったりと、まあとんだ不完全ではありますが、ある程度ざっくりとした目標作りとして利用されており、好評を頂いています。母集団全体のインフレがあんまりにも激しすぎて計算式更新の度にいつまで上手く使えるか不安もありつつ今後も時々調査して式は更新しようかなと。
あ、ちなみに自分は統計ガチ勢でもなんでもなくただ数字を分析して色々適当にいじくってるのが好きなだけの一般人なので母集団の方にアドバイスをもらったりもしますが完璧なメソッドを使っているわけではないことをご理解いただきたいと思います。
③アルバムレベル
こっちもアルバムのページ数が増えたくらいで特に極端な変更はなし。アルバム効果の%を自動で計算できるようにしたくらい。
個人フォトをガン積みして毎週リーグごとに変えるガチ勢とかだとあんまり使えないかもしれませんが特に☆フォトやアルバム効果の%の合計値を管理できるというのは「あると便利」というまさに「The・非公式ツール」って感じの存在。
④Etoile(N)オールミス編成チェッカー
今やシリウス劇団ポスターの所持者増加やフューチャーダイスターシリウスという第二のバケモンポスター登場によりそんなにチェックする必要は無くなりましたが、そこらへん未所持の頃から公演スターランクやるというすごい人に対して、未だにピーキーな需要が存在します。
ちなみに前回記事出した後ライフ減少の仕様が変わったためにライフ減少値の再計算を余儀なくされた挙句、ただでさえセンス発動タイミングが終わってるせいでなかなか使われなかったオーディションバージョンは未だに再計算すらしていない始末。まあ1年経ったら1つくらいは化石も生じるか。
あとはセンスのCTが間に合わない編成の場合も考慮に入れられるようになりました。通常版だけでも使えりゃええ。
新規実装
ここまで書いて思ったけど星章周りの要素の定期的更新をガチりすぎて実はそんなに新規ツールの実装してないな?????でも書くものは書く。
⑤非公式Olivier定数表
こちらも星章分布調査と同様に、お咎め鯖のユメステ民に対して調査を行って非公式に制作した定数表となっております。星章分布調査とは異なり全曲埋めきっていない人でも定数投票は可能であるためよりオープンな調査になっています。評価基準は人によりけり、星理やAPに始まり難易度によってはSくらいまでと非常に広範囲な尺度でゆるーく決めています。
最初の内は最終判断をフィーリングで行っていましたが、最近になって自分の感覚尺度を頑張って数式に落とし込んだことで当社比ではより正確に判定が出来るようになりました。数式面でも様々にアドバイスを与えてくださったお咎め鯖民に感涙が止まらない…!
てな訳でⅤ~Ⅶ(とⅣ最上位)に関してはかなり大規模に総査定し、なんとなくポップンwiki感ある表記で上画像のようにまとめることが出来ました。これまた統計的には不十分な母数ではありますが結構な人に参考にしてもらっています。一人←のなんとなくの趣味に付き合っていただき、感謝。
まあ問題があるとすれば、母集団が上手くなりすぎてⅢ,Ⅳ辺りの難易度をもう正常に判断できなくなっているということ…インフレやばすぎ〜
ちなみにLong版も仮で置いてありますがあまりに投票数が少ないためあまり機能していません。かなしいね。
⑥イベントポイント計算機
更新としては最直近、先月制作したツールになります。
イベントガチ勢の方から「スコアインフレしすぎて昔の早見表もう使えないよ〜(泣)」という依頼を受け、仕様を教えてもらいつつ大急ぎで作った次第でございます。正直こんなベタなアイデアなのに大々的に配布してる先駆者おらへんのかい!という気持ちが先行する。でもこういうのがあるからこそやめらんねえんだよな。
あと世間に転がってる仕様情報に普通にミスが混ざってた時は狂いそうになった。結果こそ分かりやすかったから耐えたものの検証からやらなきゃいけなかったの普通に沼寸前の事案で危なかった。
その後追加の依頼で調整用の部分を作ったり、自分の興味で稽古用を作ったり。雑実装したばっかりにまだ検算用の表示も存在していますが自信ないんだからしょうがないよねえ。既に結構な回数修正したけどまだ絶対気づいてないバグが残っていると思ってるし、なんならここを書いている最中にふと気づいて修正した要素もあるというね。今後も色々修正が入ることでしょう。
とりあえず今後もこういう依頼を受けたら雑実装でもいいから作れるようになっていきたいですね。
実は新規実装は以上2つだけ。他にもスプシそのものにはランダム練習譜面だとかスターアクト乱発場所だとかのメモがあったり便利なリンクを貼ったようなシートも増やしていきましたが、それはあくまで共有先の皆さんの集合知であってツールではないので本記事での説明は省かせていただきます。
結論:星章周りを頑張りすぎて文章に起こしてみたら開拓量はそうでもなかった
まあ身内向けのニッチな需要と自分の趣味だからこんなもんかって感じ。
おまけ:個人の感覚的な尺度をどう数式に落とし込むか
おまけとしてちょっとしたデータ分析の話を。計算の話なので長引きますがご容赦を。先に言っておくと全体の半分くらいこの章です、こっちが本編か?
※再度になりますが、筆者は統計ガチ勢でもなんでもなくただ数字を分析して色々適当にいじくってるのが好きなだけの一般人なので、ここに書くやり方が正解と言っているわけではありません。また、議論も結構曖昧です。あくまで個人の一考察としてお楽しみください。
さて、今回紹介したツールには2ヶ所ほどデータ分析の元で作られたものがありました。星章適正値と定数です。
この内星章適正値に関しては星章分布を調査して近似曲線の式を確認すればいいだけという至って簡単なやり方です。難易度に応じて線形近似にするか指数近似にするかだけ個人の感覚的な問題にはありますが基本的に決定係数がより大きい方を採用すれば間違いはなく、ここに個人の感覚が介入することはほぼないと言えます。
問題は譜面定数の方です。ただ投票集めて平均を取りゃいいってもんではありません。結局お咎め鯖で調査をかけるということは足がかりとする地力を得た機種が違うトンガリ者が集結した母集団になりますし、星章個数みたいに特定の値がバッチリ出るものではないため各投票には個人の思想が多かれ少なかれ存在します。なので普通のⅥに8.n評価とか4.n評価とかする人も一定数居るわけです。それが無視できるようなレベルならまだいいのですが、いかんせんここの調査は母数が少ないため無視する訳にはいかず、そうやって平均を大きくズラされるとどうしても狂った評価になってしまうので、ある程度補正を入れる必要が出てくる訳です。え?公式鯖行って母数増やせって?うーんそれはそれで全員が全員信頼出来る投票してくれるかと言われてもねえ…ってなるし…個人的にはこういう小規模の方が処理の楽さ加減も含めてイイと思っています。
個人的にはこの補正って2種類存在すると考えていて、それが「個人差点」と「過剰評価対策点」になります。前者はどのゲームにもよくある、個人差の強い譜面に対する対処です。ほとんどのゲームではこれはある程度の定数加算になっています。後者は先ほど少し話した常識的な範囲を外れた投票に対する対処で、投票制特有の上が上げすぎないしは下が下げすぎといったことに対するカウンターとなる補正になります。
さて、後はこの2つをいかに数式に落とし込んで感覚の側面を排除するかのフェーズに入っていきます。
まず個人差点は簡単な話で標準偏差を元に補正値を決定します。正直感覚的には極端なやつほど咎めたいので分散を使いたいところですが、今回の場合は補正値を平均に加算するというやり方をとっている以上、元の平均値に足し引きしても問題にならない偏差をベースにした方が尺度として正確と言えるでしょう。
そして次の過剰評価対策点に関して。こちらは学校で習うようないい感じの指標というものは存在しません。標準偏差みたいな指標を自分で生やす必要が出てくるという訳ですが、自分はここで"符号付き偏差"というものを作ってみることにしました。
どういうものかを説明するにはまず"符号付き2乗"を定義する必要があります。これは説明がまだ楽で、各元データに対して(元データ)-(平均)の2乗を計算するのですが、元データが平均を下回っている場合は2乗の計算後マイナスを付します。符号を保持したまま中身を2乗するとでも言えばいいでしょうか。そのようにして各元データの上げすぎ/下げすぎ度を求めるのが符号付き2乗のざっくりとした説明です。
問題なのがこれをどのように(分散/)偏差に落とし込むかで、とりあえず思いつくやり口としては、普通に分散/標準偏差と同じ要領で、符号付き2乗を全て足した後に和の符号を保持しながら全体の偏差を取る操作を行うという方法です。これがまあ普通に考えれば最もスタンダードで一番丸いのですが、試しているうちに見た目明らかに偏ってるのに何故か綺麗に相殺し合っていて補正がほぼゼロになってしまうというパターンが出てきてしまいました。こういう判断こそ自分の感覚なので本当はよろしくないのですが、この状況を打破する、より自分の感覚に近い別のアプローチを模索することに。
そして思いついたのが、符号付き2乗和を正と負に分けてそれぞれで偏差とってそれを足し合わせて全体の偏差とする方法になります。これにより、平均値と比べて上か下かの票数に差が生じた場合に前述の相殺を避けれるようになるという算段です。現在はこちらのアプローチで"符号付き偏差"を計上してそこから過剰評価対策点の補正値を計算しています。符号付き偏差がマイナスであれば下が下げすぎなのでプラスの補正を、逆に符号付き偏差がプラスであれば上が上げすぎなのでマイナスの補正を入れるという訳です。
なお、このアプローチにも弱点が存在し、平均値ジャストの票の扱いに困ったり、平均値がちょうど票の密集している数値の前後をうろつかれるだけで一気に補正値が変わってしまったりという問題点が挙げられます。現状は平均値ジャストを正負両方の票数に算入する曖昧な解釈を取る、そもそもの投票数を多めにすることで一気に数票算入サイドが変わっても影響を少なくさせるなどして対処と言い張っていますが、いつか自分の感覚が相殺を赦せるようになっていたら普通に最初のアプローチに戻っているかもしれません。場合によっては補正が強くなりすぎてあまりにも高すぎる評価の存在が逆に算出定数を下げるのような矛盾もあるアプローチなので、とてもじゃないですが完璧とは言えません。まあここにもまだ開拓の余地があるよということで。
ここまで補正の内容、算出のベースとする偏差パラメータについて説明しましたが、最終的な補正値を決める上で重要になってくるのが「平均と補正のウェイトのバランス」です。
確かに平均にウェイトを置きすぎるとぶっ壊れた評価に対応が出来ずに終わってしまいますが、先述の通り補正を強くしすぎても超極端な評価が補正に押し負けて逆方向に定数を動かすという異常な事態を招きます。色々悩んだ結果、自分はある程度平均のウェイト重めという意識で設定をしています。
この補正計算を作った当初、自分はサボって元パラメータの偏差と補正値の関係を線形にするという雑な式構築をしていました。どうせこれでも耐えるだろうとばかり思っていました。しかし、ユメステにはただ1譜面のみ、本当にとんでもない標準偏差&符号偏差を引っ提げて自分の甘い見積りを破壊する譜面が存在していたのです。
Etoile、またお前か!
何においても困らせてくる大問題譜面Etoileがここでも登場。苦手な人からすれば6.7くらいまでは跳ねてくる難関譜面ですが、あろうことか4下位の投票が絶対に無視できないレベルで居た大大大大問題の事態になってしまい、補正がありえないくらい跳ねてしまいました。どれくらい異常だったかというと、あまりにも分かりやすく下画像で1点だけ外れ値が存在してるレベル。普通にこの画像の中にはシリウスとかウィシュアポとか他にもヤバい譜面のデータ入りまくってんのにこれだからもう本当に参った。
ということでEtoileのためだけに式を練り直す羽目になり、ここでやっと補正を全体的にマイルドにすべく元パラメータのlogを取ってなんとかする方針に切り替えて今に至ります。これによって異常な評価はほぼ無くなったように思います。本当にここら辺のバランスってどうしても感覚依存せざるを得ないから難しい。
とても長くなってしまいましたが、最後に現在の補正の計算式だけ載っけておきます。このやり方だと母数が6~20程度だから成り立ってるだけとかそういう可能性はありますのでご了承。
個人差点
=MAX(LN(SD+1)/2.2-0.1,-0.01) (SDは標準偏差)
過剰評価対策点
=IF(SD'>0,-LOG(SD'+1,2.5)/2.5,LOG(ABS(SD')+1,4)/4) (SD'は符号つき偏差)
この2つを平均に加算して定数とする
かなり完成してきた感じがあるので、今後修正があるとすれば符号偏差そのものの計算方法と個人差が無さすぎる場合の補正値の最低値の調整くらいになるかなーと思います。
FAQになりそうなとこだけ説明しておくと、基本的に線形で計算していた際の傾きに近くなるようにlogの底等の補正係数は指定してあります。そして過剰評価対策点において符号付き偏差の正負によって補正のかかり方が異なるのは、個人差が過剰だった場合に個人差点の補正は加算になるため、下が下げすぎの加算とカブると大抵の場合過剰補正になってしまうためです。本当はこれも妥協対応になりますが浅学な人←からするとこれ以上どうしろとって感じ。本当にここら辺のバランスってどうしても感覚依存せざるを得ないから難しい。(大事なことなので2回)
残りは感覚の問題でしかないので挙動の画像だけ置いといておきます。
終わりに
8000字近く書いたのに本当に休憩がてらって感じの時間で書き終わっちゃったよ。モチベって怖えな。
結局のところやっぱスプレッドシートって便利なんですよね〜、プログラミングよりもスパゲッティにはなりがちですが、個人的には直感的に実装出来るのがありがたいです。皆さんも是非色々活用してみませんか?というお話でした。痒いところに手が届くツール作りって思ったより楽しいですよ。
ではでは。