担当は予測できるのか？ ~THE IDOL M@STER 担当推薦器作成記~

<a id="anchor1"></a>
# 概要
本ブログは、アイドルマスター4シリーズ（本家はミリオンに含むものとする。理由は後述）において、ある特定1つのシリーズの担当をほかのシリーズの担当から推測し、プロデューサーに対してアイドルを推薦するシステムを考案・データ収集・実装した記録です。
結論から申し上げると、各シリーズの推薦システムの正答率は以下のようになりました。

- シャイニーカラーズ：**80%**
- SideM：**49%**
- ミリオンライブ：**55%**
- シンデレラ：**37%**

本ブログにて、データの構造、用いた手法、結果に対する考察を述べていきます。よろしくお願いします。
また、本ブログでは各シリーズを以下のように略記しております。

- シャイニーカラーズ：シャニ
- シンデレラガールズ：デレ
- ミリオンライブ　　：ミリ

~~正直もうちょっと精度の良いものができると思ってた~~

# 目次
1. [概要](#anchor1)
1. [背景](#anchor2)
1. [前提](#anchor3)
2. [データ](#anchor4)
2. [手法](#anchor4-2)
3. [実験結果](#anchor5)
4. [考察](#anchor6)
5. [まとめ](#anchor7)

<a id="anchor2"></a>
# 背景
### そもそもなんでこんなこと考えたのか
twitterで同じ担当のPや絵師の方をフォローしていますが、その人たちがリツイートする他のシリーズでの絵・漫画に傾向があると思ったのがきっかけですね。自分はデレでは高森藍子、シャニでは桑山千雪を担当しております。同じ担当のPをフォローしていると、ミリオンの歌織の絵や漫画がよく流れてきたり。

なので、**各シリーズでの担当傾向は似かよるんじゃないか？** という仮説が自分の中にありました。

![担当ごとに傾向が出るのでは？.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/8598eedd-8051-fa6a-9f00-2b44fb9b72e9.png)


### ゆくゆくは他シリーズのPを引き込むきっかけに
僕は元々シンデレラのプロデューサーだったんですが、最近他のシリーズにも手をだすようになりました。その時に、どのキャラをとっかかりとするか知れたら嬉しいなあ、と思ったので、このようなシステムを作ってみようかと。大々的にデータ集めて分析すれば、ミリオンの担当情報だけからシャニの担当をレコメンドできるんじゃないかと。そのキャラきっかけで他シリーズに触り始められるんじゃないかと。自分の好きなものを布教したい方々にとって、布教のきっかけができるのは心強いのではないかと。

![レコメンデーションイメージ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/2295b6d7-1f95-99b0-e8ee-9b9769b412de.png)


そんな風に思って、本案件に取り組み始めました。

<a id="anchor3"></a>
# 前提
### アンケート集計数 7,425件
データは google フォームのアンケートで集計しました。
告知方法はtwitterのみでしたが、**計 7,425件もの回答をいただきました。**
ご協力いただいた皆様、誠にありがとうございました。

現在も集計はしてるので、まだ答えていなければぜひご協力ください。
https://docs.google.com/forms/d/e/1FAIpQLSfPuQskKK6y1QGH8rgA1TzjVy6nQApgwC_JM3E5OBfNxJWKJQ/viewform?usp=sf_link


### 各シリーズごとに、担当アイドル全員とそのうち一人を選ぶならだれか、担当するきっかけになったのは何かを質問
質問項目は以下の通りです。

1. あなたの性別を教えてください。
2. あなたの年代を教えてください。

以下、各シリーズごとに、

1. 本シリーズにおいて、自身が担当するアイドルはいらっしゃいますか？
2. あなたが初めて本シリーズのアイドルを担当してから、どのくらい経ちましたか？
3. **本シリーズのアイドルのうち、あなたの担当アイドルは誰ですか？（複数選択可能）**
4. **3.で選択したアイドルのうち、一人だけ担当を選ぶとしたら、誰ですか？**
5. 4.で選択した担当アイドルについてお聞きします。その担当アイドルを担当するにいたった、一番のきっかけはなんでしたか？

大事なのは 3,4 ですね。
「担当」という言葉の定義は人それぞれなので、「1人しか担当しません」という方もいれば「たくさん担当います」という方もいらっしゃいます。
なので、特に制約は定めず複数選択可能にし、その中でも1人選ぶならだれか、という質問形式にしました。

また、以下で3.で選択した担当アイドルと4.で選択した担当アイドルを区別するため、3.で選択された担当アイドルを「**複数担当**」、4.で選択された担当アイドルを「**単一担当**」と呼ぶことにします。

きっかけについても、同じきっかけでキャラを好きになったのならば類似性が生まれると思い追加しました。
きっかけに関する項目は以下の通りです。

1. （キャラクターの）声
2. （キャラクターの）容姿
3. （キャラクターの）性格
4. （声優さんの）ライブパフォーマンス
5. （声優さんの）演技
6. 好きな声優さんだった
7. 持ち歌
8. 二次創作
9. よくわからない
10. 覚えていない
11. その他（自由記述）


### 対象は音ゲー版に出演済のアイドルのみ（シャニは原作、ストレイライトまで）
今回は、デレの韓国組、876プロのアイドル、およびシャニのノクチルは選択肢から外させていただきました。担当プロデューサーの方にはご不快な思いをさせてしまいます、申し訳ありません。理由は以下の通りです。

**韓国組**
『スターライトステージ』に未出演のため、サンプルに偏りが出る可能性を含む。

**876プロ**
3人のうち1人が担当だとわかったとして、そこから最低46人（SideM の315プロメンバー）のうちの1人を予測することは不可能に近いと考えたため。

**ノクチル**
アンケートを集計開始したのが2019年9月のため、対象とすることができなかった。
（初出から1年未満のストレイライトやデレ新規7人はサンプルに偏り出るんじゃないか、という話はややグレーな気がしますが...）

### 本家のアイドルはミリオンのメンバーとしてカウント
本家やミリオンについてあまり詳しくないのですが、本家の765メンバーとミリでのASメンバーとではおそらく異なるものだと判断しました。
本家での「如月千早」と、ミリでの「如月千早」ではおそらく性質が異なるのではないかと。
結果、本家から担当してきたPとミリオンから入って担当し始めたPとで、同じ千早の担当なのに性質が異なることが考えられました。
ならば一つにまとめてしまったほうが賢明かと判断し、上記のように扱いました。


<a id="anchor4"></a>
# データ
### 本当に傾向はあるのか調べてみた
![本当にできるのか？.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/b4dc2c3a-8cce-f426-6abe-7e08e5ac9480.png)

上でレコメンドできそうとか語っていますが、本当にできるのでしょうか。
そもそも本当に他シリーズの担当に傾向がなければ難しいです。
という訳で、データを確認してみます。

まずはシリーズ単体。
人数の少ないシャニで、きっかけの分布の違いなどを見ていきます。
![シャニ_全体画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/7d6e88f4-6d69-d466-e528-b71479b92730.jpeg)

ちなみに、アンケート7,000件超のうち、シャニに担当がいると答えた方が66%, 約4,900人でした。
十分な数字が取れていると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/fed67bfa-ab37-0204-f865-f1196d63dd06.png)

次にシリーズごとの組み合わせ。
こちらは人数の少ないシャニと、私が一番最初に触れたデレの組み合わせで、票数の分布を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/c8ee96b5-688f-be11-d24a-ab30a52ca828.png)


### シャニ単体での傾向：実際ありそう
#### 単一担当Pの数
4.で選択されたアイドルの数が以下の通りです。
誰が何票なのかについてはセンシティブなので、特記事項が無ければ明記いたしません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/67fc5f23-9836-b87c-e1ff-dfcce1f2b50d.png)

一番表を集めたのが三峰でした。その数450程度。2位と100票ほど切り離しての1位ですね。

![シャニ_三峰.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/3ea86535-ab39-014a-5b06-50fe0c1cd7c7.jpeg)


#### 複数担当Pの数
3.で選択されたアイドルの数が以下の通りです。
単一担当同様、上位3人についてのみ明記します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/c1539e8f-ebe6-5887-ebe1-69648a2133d6.png)

一番人気だったのが三峰、次いで甜花、凛世でした。票数にして800程度。
こちらは単一担当ほどぶっちぎってはいませんでした。
正直、票数を確認するだけでも結構面白いですね。

#### 担当になったきっかけ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/ad06df06-1439-1653-28e4-e2e42443d8ec.png)

こちらは、きっかけごとの各アイドルの票数分布を表示しております。
縦軸は、各アイドルが集めた単一担当の票のうち、何%がそのきっかけで担当になったか、を表しています。
かなり分布に違いがあることが見てとれるかと思います。
中でも、以下が特徴的に感じられました。

- 真乃の「声」がきっかけで担当になるPがぶっちぎりで多い
- 「性格」で担当になったPが多いのは夏葉と冬優子
- 果穂は「演技」「ライブパフォーマンス」で惹かれた人が他に比べ多い
- 「ライブパフォーマンス」についてはあさひも同様
- 愛依に「好きな声優」で惹かれた人が他に比べぶっちぎり（北原紗弥香さん、元ハロプロメンバー）

#### ユニットごとの担当
どのユニットの担当ですか、という質問は集計しませんでしたが、せっかくなので疑似的に算出したいと思います。
ユニットメンバーの過半数を複数担当に選んだP（イルミネ、ストレイ、アルストロメリアは2人以上、放クラ、アンティーカは3人以上を複数担当として選んだP）をユニットへの1票として、票数を集計した結果が以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/826865ce-7418-5209-0041-0cb154e2c603.png)

横軸のアルファベットは各ユニットの頭文字からとっています。アルストロメリア（A）がぶっちぎりで高いですね。算出方法的に双子の両方に投票すればユニットへの投票になるので、双子への投票が多いんですかね。と思って、また調べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/77696680-9958-1510-2fa0-3dac426528e7.png)

票の各要素がユニットへの票数です。「全体」行の値が上記のグラフの元になってます。
注目していただきたいのが「A」列（アルストロメリアへの票）です。「千雪含む」が桑山千雪を含めてアルストロメリアのメンバーの2人以上を複数担当にしたPの数、「千雪含む（双子含まない）」が千雪と双子の片方を複数担当として選んだ結果、アルストロメリアへの票になったPの数、「千雪含まない（双子のみ）」が、双子のみを複数担当として選んだ結果、アルストロメリアへの票になったPの数を表しています。

アルストロメリアへの387票のうち、249票が千雪を含めたアルストロメリアへの票、138票が双子両方への票なので、**双子「だけ」への投票が多い結果アルストロメリアへの票が多くなった、というわけではなさそう**ですね。

以上から、きっかけだけでもある程度傾向が出ているんじゃないかと思われます。

### シャニとデレの組み合わせ：こちらも傾向はありそう。
次に組み合わせ。デレとシャニで、単一担当の票数、きっかけの票数の分布を比較します。
とは言え、シャニの19人ならまだしも、デレは190人以上いますので、1:1の傾向なんて見ようとしていたら日が暮れてしまいます。
なので、関係性をみるアイドルを以下の3人に厳選しました。

- 速水奏
- 大槻唯
- 小日向美穂

丁度3属性そろい、かつ傾向が異なるアイドルかなと思います。
~~あと知り合いの担当だったので若干ひいきしました。~~

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/4e9fa7c8-2724-a03e-aed0-de0534844b4e.png)

#### 複数担当同士の傾向
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/6db20aa7-0b19-0e21-7972-c8fabd5d1d2f.png)

デレの3人を縦軸、シャニの19人を横軸にとり、両方を複数担当に選んだPの数が上記のヒートマップで表されています。
色が黒から白へ明るくなっているほど、票数が多いといえます。
名前が隠れてしまって見えづらいですが、以下の傾向が読み取れます。

- 奏と一緒に担当されている傾向にあるシャニアイドル　：凛世、夏葉
- 唯と一緒に担当されている傾向にあるシャニアイドル　：甘奈、甜花、三峰
- 美穂と一緒に担当されている傾向にあるシャニアイドル：甘奈、甜花

こっひと唯では双子が被りましたが、奏と唯で比較すると違いがあることが見て取れるかと思います。

#### きっかけと複数担当の関係
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/f509b307-b20f-b2b2-7aca-38e521a9820b.png)
デレの3人と主要な3つのきっかけを縦軸、シャニの19人を横軸にとり、両方を複数担当に選んだPの数が上記のヒートマップで表されています。
読み取れるのは以下の通りです。

- 奏の容姿をきっかけに担当したPが担当傾向にあるシャニアイドル　：咲耶、凛世
- 唯の性格をきっかけに担当したPが担当傾向にあるシャニアイドル　：甘奈
- 美穂の容姿をきっかけに担当したPが担当傾向にあるシャニアイドル：甜花
- 美穂の性格をきっかけに担当したPが担当傾向にあるシャニアイドル：真乃、恋鐘

以上から、傾向が異なると言っていいのではないでしょうか。

<a id="anchor4-2"></a>
# 手法
データを眺めるだけでも面白いので長くなってしまいましたが、「担当アイドルに傾向はある」ということがわかりましたので、ようやく本題に入ります。
**どのようにレコメンドを実装するか**についてです。

![どのように実装するか.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/a5f0b6fe-559f-4fc9-24b2-15dbea9ad27e.png)

### 用いたのはベーシックな協調フィルタリング
今回用いたのは以下の2つの協調フィルタリング（以下 CFと略します）です。

1. ユーザーベースCF
2. アイテムベースCF

以下、各手法の簡単な説明を入れておきます。ご存知の方は[実験結果](#anchor5)まで飛んで大丈夫です。

#### ユーザーベースCF
![user_based_CF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/cd0afc51-10a4-8cb9-a2ee-ba6aaedd9868.png)

ユーザーベースCFは簡単に言うと、「同じアイドルを好きなPならば似ているだろう」という考えによるレコメンドです。
上記の例で言えば、「蘭子を担当しているA,Bは似ているから、Aが担当しているアスランをBも担当するのではないか」ということで、Bにアスランをレコメンドします。

![user_based_computation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/084a85c9-d4d3-3993-ad4f-b8f2f82010ce.png)

学習とテストの計算方法については上記の画像の通りです。テストを行う際は、テストの対象となるシリーズ以外のデータを取ってきて学習データとの類似度を計算し、類似度から得られたテスト対象シリーズの推定値を実際の値と比較します。

#### アイテムベースCF
![item_based_CF.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/8e80ad41-b74d-6538-640a-e9991a84098f.png)

アイテムベースCFは簡単に言うと、「同じPから好かれているアイドルならば似ているだろう」という考えによるレコメンドです。
上記の例で言えば、「蘭子とアスランは同じAに担当されているので、蘭子とアスランは似ているはず。Bは蘭子を担当しているから、Bは蘭子と似ているアスランも担当するのではないか」ということで、Bにアスランをレコメンドします。

![item_based_computation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/53db95b3-0bae-937b-ed1c-b84f5f2d3d34.png)

学習とテストの計算方法については上記の画像の通りです。ユーザーベースと大きく異なるのは、学習データから既に類似度が算出されているので、新しくテストを行う際に類似度を計算する必要がなく、計算時間が少なく済む点です。


<a id="anchor5"></a>
# 実験結果
ではお待ちかね、実験結果について...の前に、評価の方法について言及いたします。

### 順位3位以内にレコメンドされていれば正解とする
![比較方法：正解.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/2bc5b7f1-299b-d92b-7d89-3501430af7ca.png)
![比較方法：不正解.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/a2f0b27d-084a-76aa-39dd-4a3e30f322ee.png)

レコメンドの結果は「お勧め度合い」といった数値で返されるので、その数値が上位3位以内に担当アイドルが存在すれば正解としました。
上記の例では、デレでの担当が未央、SideMでの担当が翼、シャニでの担当がめぐるのPに対して、「デレでは未央、SideMでは翼が担当だよ」という情報をレコメンドシステムに与えてシャニのアイドルをレコメンドしてもらった結果、上位3位までのレコメンドにめぐるが入っていれば正解、そうでなければ不正解、ということになります。

#### 自分の担当データでやると、上位3人には入らないが、上位5人には入る
では、一番卑近な例として自分のデータでテストしてみます。

![自分の担当.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/ae2d8da2-34e8-48e4-0554-b5b6392e9d5d.png)

上記の画像に自分の担当データをまとめました。
ここで注意していただきたいのは、私のデータでシャニの担当をレコメンドしてもらう場合、**デレの担当情報のみから予測する**ということです。「千雪が担当」という答えを知っていたらわざわざレコメンドしてもらう必要がないためです。同様に、デレの担当をレコメンドしてもらう場合、**シャニの担当情報のみから予測**します。千雪を性格きっかけで担当している、という情報だけで190人超の中から担当を予測するので難しそうであることがわかるかと思います。

以下、結果です。

![自分の結果_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/b343f691-ff5f-9b20-7577-793153b24094.png)

**当たりませんでしたね**...。
興味深いのは、「シャニでの担当が千雪のみで、性格きっかけ」の場合はユーザーベースでもアイテムベースでも三船さんが一番担当すると思うよ、とレコメンドすることですね。
個人的には納得感がありました。
一応、5位までを確認した結果だと、当たっていることがわかりました。

![自分の結果_5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/687a3fd8-52cd-0519-840e-ae195ca34c35.png)

#### 自分の担当がいないシリーズでやると、1位にレコメンドされる
では、担当はいないけれど他のシリーズでテストしてみたらどうだろうか、ということで、ミリ、SideMでも計算してみました。

![自分の気になる.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/6ad25d51-f8d0-44bf-f1f2-1cdfe6c77ef3.png)

上記の通り、担当がいない他シリーズで気になっているアイドルを暫定の正解として設定しました。
先ほどとは異なり、入力としてデレとシャニの担当情報を入れることができています。
結果は以下の通りです。

![自分の気になる_結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/f403ccbc-ed20-b6ea-d779-95c565b3caaf.png)

**ユーザー、アイテム両方で1位に正解が来ました**。
「気になる」程度なのであまり正確な結果ではありませんが、入力情報が多いと精度もあがりますね。

#### テストデータによる精度は[概要](#anchor1)通り
では、実際のデータを用いて精度を評価してみます。

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/a82024e6-5a62-e614-df5e-36cb9d96f282.png)

上記のようにアンケートデータを分割し、30%のテストデータで正解率を判定しました。
その結果が以下の通りです。

![test結果_precision.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/589477/a0881c92-634f-14d3-4326-ec6b3b108724.png)

[概要](#anchor1)に載せた結果はユーザーベースのものです。
母数が大きくなるほど正解率が下がっているのは当然としても、**デレで40%満たないかぁ...**というのが第一印象でした。

<a id="anchor6"></a>
# 考察
### うまくいかなかったのは、人気に引っ張られる、手法が単純、データが足りないから？
以上の結果を踏まえて、もっと精度を上げるにはどうしたらいいか（特にデレ）を考えてみます。
原因は大きく3つあると思います。

1. 人気に引っ張られてしまう
2. 手法が単純
3. データが足りない

以下、それぞれ解説していきます。

#### 人気に引っ張られる
[データを確認した際](#anchor4)にも見ましたが、シャニでさえ担当数に差があるんですよね。本ブログでは説明しなかったんですが、デレでの担当数は顕著で、複数担当で一番多い投票数が496人だったのに対して、一番少ない投票数が3人でした（ちなみに一番多く複数担当に投票されたのは志希でした）。
担当数に差があると何が問題かというと、**投票数の多かったアイドルをレコメンドしておけば大体当たるだろう**とシステムが考えてしまうんですよね。結果、レコメンドから多様性が失われてしまいます。
デレの担当は多様性に富んでいるので、デレでのレコメンドの正解率が低いのも、その多様性を考慮できなかったことが原因の一つかと考えられます。

### 手法が単純
今回はベーシックな協調フィルタリングのみ実装したので、正直単純すぎると思います。
ただ、この件に関しては弁明がありまして。

lightfm という、python のレコメンドシステム用のパッケージがあります。
https://making.lyst.com/lightfm/docs/home.html
こちら、一応使ってみたのですが、今回紹介した計算結果ほどの精度を出せませんでした。

おそらく lightfm が扱うデータの意味合いが問題で、「担当でない」0を考慮すると、0に意味があると判断して、「同じレートつけてるから似てるやろ！」となってしまうようです。結果、大体みな同じ類似度になり、レコメンドも皆同じアイドルになってしまいます。
かといって0のデータを入れなければ、正しい類似度を測れなくなります。（0のデータを入れないと担当でないアイドルは「未観測のデータ」と扱われてしまうため、1人だけ担当のPと複数人担当がいてそのうちの1人がかぶったPが類似度1になる）

担当でない情報も加味しつつ、担当である情報をもとに推薦したかったので、それが可能だったのが協調フィルタリングでした。
ただ、それでも単純すぎるとは思います。

#### データが足りない
知り合いのPに計算結果を伝えたところ、「楽曲の好みも学習に含めたらいいんじゃない？」とアドバイスをいただきました。
確かにデータをいくらでも取れればそれも可能なのですが、「アンケート」という体裁でデータを集めるには、なるべく「答えやすく数分で終わる」ようにしなければならない、と思っていました。正確なデータが取れても、答えるのが面倒くさくなればデータ数が集まらなくなります。精度評価の観点で見ればデータ数が減ることは避けたかったので、今回は担当についてだけアンケートを取りました。

ただ、知り合いが言っていることももっともで、さらにデータがあれば精度を上げられると思います。公式でもなんでもない一介のPが収集できる情報としては、以下が挙げられるでしょうか。

- アイドルの画像
- アイドルのテキスト

これは...データ集めがとんでもなく~~面倒くさい~~大変だ...。
アイマスのテキストを集めるのに適したサイトやwebクローラーはないものでしょうか。


<a id="anchor7"></a>
# まとめ
### アンケートにご協力いただいた皆様、本当にありがとうございました
レコメンドシステムに関する~~研究~~結果は以上となります。
冗長な文章にお付き合いいただきありがとうございました。
そして、アンケートにご協力くださった全Pの皆さまに、改めて格別の感謝を。本当にありがとうございました。

せっかく集計したデータですので、より精度を上げられたらまた報告させてください。
ご意見・ご感想あれば、本記事か以下のtwitterアカウントまでお願いします。

@pp_vca_a