東方プロジェクト人気投票の統計解析 中休み
年が明けてしまいましたが、いまだ東方プロジェクト人気投票の統計解析 記述統計編 - xiangze's sparse blogの統計モデルコードのデバッグ中です。
書き忘れていた前提やモチベーションを記します。
東方人気投票の前提知識
東方人気投票のはじめかた(投票のやり方)2022年度版 | 東方我楽多叢誌 〜strange article of the outer world〜
- 選択式でキャラクター(人妖)、音楽、作品に対してそれぞれ7,10,5票入れることができ特に推しには2票入れられる。
- アンケートで年齢や地域、東方プロジェクトを知った時期、感想などを記載できる。平均年齢は約21歳から19.5歳に減少し分散が大きくなりつつある。一貫して男性比率が減少している。海外、特に東アジアからの投票が日本の一地域に匹敵する数だけ存在していてその割合は増加している。
第18回は性別でその他が選択できるがここでは表示していない。
東方Project作品は以下のように分類される
- 旧作 1996~1998年にPC98用に作られたゲーム作品で現在は入手困難だが 音楽には現在でも人気なものがある。わずかなキャラクターが以後の整数作品と重複する
- 整数作品 上海アリス幻樂団により2002年の東方紅魔郷以降に作られたWindows向けシューティングゲーム、Steamで入手できる作品もある。毎作品ステージごとのボスが新キャラとして登場し、対応する新曲があるのが通例。プレーアブルキャラクターは自機と呼ばれることが多い。
- 非整数作品 黄昏フロンティアと上海アリス幻樂団が製作した対戦格闘ゲーム、アクションゲームで準公式として扱われる。既存の整数作品のキャラクターの再登場が多いが、新キャラが登場することもある。
- 音楽CD ZUN氏作曲のものでもともと東方紅魔郷が音楽CDとして発表されるはずだった説もあるくらい音楽に力を入れている。整数、非整数作品登場曲の再録、アレンジとオリジナル曲がある。
- 書籍「東方鈴奈庵」などの書籍、漫画作品の主人公が新キャラの場合が多い
東方神霊廟(2011年12月)までの関係図
http://thwiki.info/th/kanren.png
可視化で見れること
教師なしクラスタリングのその先へ~次元削減と定量解析~
こちらのブログではプロ野球投手の試合データから試行錯誤的な次元削減、可視化から投手の特性の時間的変遷の洞察まで行っていて驚嘆しました。
個々のキャラクター、音楽の個性を把握したいというモチベーションがあります。それは次のモデリングとその意図についてで説明します。
贅沢を言えばグラフだけでなくコードも視認性が高くすることで再利用性にもしたいです。この点においてpandasはR,tidyverseに比べ特定条件の行の抽出、plotとの連携とかでわかりづらいです。
R のパッケージ {targets} にコントリビュートした話 - Sansan Tech Blog
jupyter notebookからコードを抽出して再利用もできますが、紹介されている{targets}の方が必要なところだけ再実行する機能があったりして洗練されています。pythonが優れている点はpytorchやopencvなどのライブラリの充実、そしてそれらがcolabで実行可能なところでしょうか。
R for Data Science (2nd edition) (https://r4ds.hadley.nz/intro.html)
ベイズモデリングもまたこの図のサイクルに含まれるでしょうが下記のモデリングの難しさに起因してサイクル期間が大きくなりがちです。
高次元データの2次元での表現は以前論文コーパスの次元圧縮とLDAによるトピックの関係の可視化 - xiangze's sparse blogでもチャレンジしたもののt-SNEの結果は芳しくなく、LDAによる分類、可視化の方がうまくいった経験があります。データの性質(ドメイン知識)から
モデリングとその意図について
「統計モデリングとは何なのか」をいま一度整理してみる - 渋谷駅前で働くデータサイエンティストのブログ
でも書かれているように統計モデリングをするということは何かを説明したいという意図があります。
魅力モデルはその名の通りキャラクターの魅力が何によるものなのかを説明しようとします。下に書いた将棋の分析結果では棋士個人の(年齢に寄らない)強さの推定を試みていますが人気投票ではそれは明らかです。得票をもたらした魅力が何に基づくか、登場作品、強さ(登場ステージ)、自機かどうかなどの要因に分解して理解したいです。 実際姉妹キャラクターでほとんど同じ票数、順位の場合と大きく票数の異なる場合が見られます。
トピックモデルの方はもともと投票総数の増減を正規化した投票データの観察からで見られた傾向からはわからなかった各選挙の特徴、特に投票総数の極端な増減の理由を把握したいというのが(後付けではあるが)モチベーションです。キャラクターや音楽より毎回の選挙の分類が関心事ということになります。
Cross-Corpora Comparisons of Topics and Topic Trends
ではLDAのモデル選択を情報量基準(sBIC)を使ってやっているそうで高度です。
データサイエンス×演劇 〜トピックモデルによる舞台のジャンル・特徴分け PART2〜|Yu_Se|note
新型コロナウイルスが演劇に与えた影響
推薦サービスをリリースしたそうです。
www.rcmdyasan.com
採択論文が増え続けているCVPR論文のトピックモデルによる分類と傾向 - xiangze's sparse blogをpython3で復活させたい思いもあります。
可視化結果続き
個別キャラ、作品のプロット
以下はキャラクターと音楽の得票比率のプロットですがこれでは点が重なっており、前回のサブタイトルごとに集計した結果より見た目がわかりづらいです。
回数が少ない=候補が少ないので藍色の値が大きいのは当然だが、17,18回目のU.Nオーエン、フランドール・スカーレット(右上)が突出しているということは見て取れます。
作品ごとに集計した投票結果の時系列
初出作品(妖々夢、永夜抄)が人気トップになる激しい時代
新作(風神録、地霊殿)が第二グループを形成し始めるキャラ人気はトップグループより低いが音楽人気は高い。
新作(星蓮船、神霊廟)の初出が既存の人気作品ほどではなくなる。
11回以降 新作が初回から下位グループに位置するようになり、紅魔郷の人気独走が進展している。
やや分かりづらいですが青が整数作品、赤が非整数作品、オレンジが旧作に大体対応します。0(黄色)は音楽のみ or キャラのみの投票結果の合併(分離した方がよさそう)
東方プロジェクトを知ってから2回くらい経ってから投票アンケートに到達しているように見える。そこから少しづつ減少していく。
stanによるモデリングの難しさ
魅力モデルではindexとしてmain,boss,sub(整数作品の自機、整数作品のボス、非整数作品登場キャラ)を読み込んでいますがこれは疎なデータを扱うときの手法で
stan user's guideでも説明されています。
csvから読み込んだDataframeの異なる列を読んでいた、データの型があっていない場合(そもそもpositive integerでなければいけません)でもruntime errorでしか検出できずそれもわかりづらいです。
実行以前に完全に判別するにはassersion、あるいは型ヒントを使いたいが、stanにはassertionがないのでpythonコード側、stanコードに入れる直前に
正規化された選挙データをディリクレ分布で表現しましたが
Rejecting initial value: Error evaluating the log probability at the initial value. Exception: dirichlet_lpdf: prior sample sizes[3] is 0, but must be positive!
とlpdf(log probability distribution function)の初期値が0になってしまうというエラーが出ました。これは第18回投票までの全てのキャラクター数の次元をとっているためでまだ登場していないキャラクターに関する魅力を推定しようとする奇妙なことになってしまいます。これはモデルが不自然と言われればそれまでですが、個体差の項εを導入し選挙時に未登場のキャラクターではその値が無限小になることを期待します*1。
先達の解析
テニス
ベイズモデリングで男子プロテニスの強さを分析してみた – 戦略コンサルで働くデータサイエンティストのブログ
将棋
- ベイズ統計モデリングを使って藤井聡太と全盛期の羽生善治を比べてみた② - ベストモデル
- 階層ベイズモデルで勝敗データからプロ棋士の強さを推定する - StatModeling Memorandum
- pystanによる将棋プロ棋士の実力値モデリング【先手と後手での実力差可視化】 - Qiita
フェデラー、錦織あるいは加藤一二三、藤井聡太と言ったそんなに詳しくない人にもわかる目覚ましい個人の力を推定することに成功しています。
同様に東方人気投票でも目立つキャラクターの特性をデータから見出したいです。
実は単純な比較である程度わかったりもします。
オタクだからスポーツわからないので
— にしかわ (@nishikawa_huton) 2022年12月3日
「スペインに日本勝ったの、実際どのくらいスゴイん?」って知り合いのサッカーファンに訊いたら
「FIFAランクと東方人気投票合わせるとわかるで」って言われたから画像作った
え!!!椛がレミリアに勝ったの!!???
次、椛VS射命丸文なん!!??!激アツ!!?!?!????(違う pic.twitter.com/sHb6MKgfYy
予選グループだとこう
— にしかわ (@nishikawa_huton) 2022年12月3日
椛がアリスとレミリアに勝つのはたしかに大番狂わせですね………でもその間で萃香に負けてんの意味わからな……くないな逆に正しいな妖怪の山そうだもんな……(ぐるぐる目 pic.twitter.com/Sy5CpWCVql
news.yahoo.co.jp
FIFAランクに対応するだけのアニメが同時期に放送されていることに驚きます。
自分の好きなコンテンツのデータを解析していきましょう。
*1:計算上の制約とモデルの特性が関連してるのが少し不思議に感じます