MyAnimeListのデータをディープラーニングしてアニメのHENTAIなインサイトを見つける


##TL;DR
* AIはアニメタイトルや説明文、内容を一切読ませなくてもレビューの点数から**HENTAIアニメ**を分類できる
![anime_03.png](https://qiita-image-store.s3.amazonaws.com/0/232088/cfdc7beb-2cad-7e03-19a2-b052b949fb9f.png)
* AIは「Tiger&Bunny - Free + けいおん」＝「まどマギ」という計算ができる（長くなってしまったので次回やります）

## もうちょっと補足
海外のアニメコミュニティーサイトに「[MyAnimeList](https://myanimelist.net/)」というのがあります。ここのAPIは充実していて、海外のアニメオタクのレビューデータを取得することができます。[KaggleにあるMyAnimeList](https://www.kaggle.com/CooperUnion/anime-recommendations-database)のレコメンドデータを用いて、ニューラルネットワークで協調フィルタリング（NCF）[^1][^2]を行い、ユーザーごとの特徴量、アニメ単位の特徴量の分解を行いました。本来、NCFはレコメンド（レーティングの予測）をするためのものですが、中間層のアニメ単位の特徴量を取ります。Word2Vecの「王+女-男=女王」のような作品単位での加減を可能にし、クラスタリングの手法を用いることでレーティングのデータのみから作品のジャンルを推定することが可能となりました。

既存の手法として、特異値分解（SVD）や主成分分析（PCA）や非負値行列因子分解（NMF）による行列分解[^3]（Matrix Factorization）でも同様のことは可能ですが、ニューラルネットワークを用いることで非線形の特徴量が検出可能となり、より馴染みやすい形での結果となるはずです。

……と言っても、これで理解できた方は機械学習マニアですので、もう少しアバウトに説明します。**結果だけ見たい方は結果までスキップしてOK**。ついでにマサカリも歓迎。

[^1]: 拙作ですが、もっと簡単な例でNCFを用いたポケモンのレコメンデーションはこちら。　https://qiita.com/koshian2/items/a6c7d37332e8a35cddd8
[^2]: 元ネタの論文：Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, Tat-Seng Chua, Neural Collaborative Filtering, 2017　https://arxiv.org/pdf/1708.05031.pdf
[^3]: 拙作ですが、ポケモンの例をNMF,PCAを使ってやったのがこちら。　https://qiita.com/koshian2/items/401f50d0717983696fef

## 結局なにやってるの？
使っているのはユーザーレビュー（10段階）のデータです。各アニメに対してユーザーが1点～10点の点数をつけています。簡略化して書くとこんなデータです。?はその作品を見ていません。

**・データA**

|          作品          | Aさん | Bさん | Cさん |
|:----------------------:|------:|------:|------:|
| 君の名は               |    10 |     6 |     ? |
| 千と千尋の神隠し       |     ? |     ? |     3 |
| ご注文はうさぎですか？ |     4 |     8 |     ? |
| けいおん               |     ? |    10 |     4 |
| School Days            |     ? |     ? |    10 |
| まどか☆マギカ          |     5 |     5 |     ? |

今やりたいのは、このレビューデータから作品単位の特徴量を抽出したいのです。特徴量というとピンとこないかもしれませんが、「ゆるふわ系」「シリアス系」「学園モノ」といったアニメ単位の「要素」のパラメーターをもっともらしく求めることです。例えばこんな感じです。

**・データB**

|          作品          | 大作系 | ゆるふわ系 | シリアス系 | 学園モノ |
|:----------------------:|-------:|-----------:|-----------:|---------:|
| 君の名は               | 1      | 0.5        | 0.2        | 0.5      |
| 千と千尋の神隠し       | 1      | 0.2        | 0.4        | 0        |
| ご注文はうさぎですか？ | 0      | 1          | 0          | 0.5      |
| けいおん               | 0.2    | 1          | 0          | 1        |
| School Days            | 0      | 0          | 1          | 1        |
| まどか☆マギカ          | 0.2    | 0.2        | 0.6        | 0.8      |

あくまで説明のためのパラメーター設定でこれが正しいとは主張する気はありませんが、0～1で各要素の強さを表します。これは**データからは直接はわかりません**。この表（行列）を求めます。ちなみに協調フィルタリングとは同様にユーザー単位の行列を作り、ユーザーのレーティングを推定するアルゴリズムです。ユーザー単位での表とは、

**・データC**

| ユーザー | 大作系 | ゆるふわ系 | シリアス系 | 学園系 |
|:--------:|-------:|-----------:|-----------:|-------:|
| Aさん    | 1      | 0.2        | 0          | 0.5    |
| Bさん    | 0.2    | 1          | 0          | 0.8    |
| Cさん    | 0      | 0          | 1          | 0.5    |

**このデータCも入力データからは直接はわかりません**。勘の鋭い方なら「あっこれBとCの行列の内積を取ればレーティングを推定できる」と思ったかもしれません。そのとおりで、協調フィルタリングもMFもこのアプローチを使っています。より直感的には、

* Aさん「千と千尋の神隠し見たこと無いんだけどどう？」
* AI「君の名は面白かったんですよね？ならこれもアニメ史に残るぐらい売れたし結構おすすめですよ」
* Bさん「School Days見たこと無いんだけどどう？」
* AI「まどマギが微妙だったらやめておいたほうがいいですよ。あれより全然シリアスなので」

という感じです（もちろんこのアルゴリズムだけでは、AIが理由を説明することは難しいですが）。発想は人間的に馴染みやすく、NetflixやAmazonのおすすめアルゴリズムもこのようなアプローチです[^4][^5]。

[^4]: Amazonのほうは2003年の論文に『Amazon.com recommendations: item-to-item collaborative filtering』というのがあります　https://ieeexplore.ieee.org/document/1167344/
[^5]: NetflixはNetflix Prizeという賞金コンテストの中で、ブログ投稿されたアイディアが論文でとても引用されています　http://sifter.org/~simon/journal/20061211.html

## ニューラルネットワーク
以下のようなニューラルネットワークを作りました。

![anime_01.png](https://qiita-image-store.s3.amazonaws.com/0/232088/d9a63a5c-bc0a-4ea8-48b8-150e10ed138d.png)

推定レーティングの誤差の最小化を目的（レコメンドのアルゴリズムと一緒）としていますが、設計上、作品単位、ユーザー単位での特徴量を抽出できるのが楽しいモデルです。

設計理由の8割ぐらいは計算リソースです。全結合層のニューロンの数や隠れ層の数を増やせば処理コストは増えます。実はデータだいぶ（レーティングベースで2/3、行列のサイズベースで1/6ぐらいに）削って、5172anime×19949user≒1億要素の行列にしました。全てのデータでやるとメモリがあふれる上に、CPUで訓練して1epochが5日とか出たので。これで1epochがCPUで4～5時間です。計算コストが重いのがちょっと難点ですね[^6]。

残りの2割は潜在特徴量の活性化関数をtanhにしましたのと、特徴量同士を[Dotレイヤー](https://keras.io/ja/layers/merge/#dot)で内積結合しました。tanhは特徴量の区間が-1～1に限定されていると分析するとき便利です。

計算は[iKoula](https://www.ikoula.com/en)という**フランスの物理サーバー**を借りてやりました。今キャンペーンやっていて、E3-1220v5＋GeForce GT 710の物理サーバーが最初の1ヶ月or3ヶ月に限り、月15ユーロで借りられます。計算しないときは仮想通貨でも掘ってればいいので（専用サーバーだからCPUフルに回しても怒られない！）。CPUで5日ぐらい（25epoch）回しました。

![anime_02.png](https://qiita-image-store.s3.amazonaws.com/0/232088/94dc0d81-dbe0-cf9e-ddd9-7d6c0a4a5638.png)

スペースの関係で詳細な実装は[github](https://github.com/koshian2/MyAnimeList_NCF/)のコードに譲ります。**preprocess.py→MyANimeList_NCF.py→MyAnimeList_predict.py→analyze_cluster.py**の順で実行します。
https://github.com/koshian2/MyAnimeList_NCF/

[^6]: SVDとかでやれば割と常識的な時間（分とかそういう単位）で計算できると思います。ただ、欠損値が反映されなかったり、必ず同じ結果になったりモデルに発展性がないといったデメリットもあります。

##注意点
前置きが長くなって申し訳ありませんが、「AIが分析したからこれは絶対的に正しい」「ディープラーニングでやったから人間よりも精度がいい[^7]」なんて誤解されると残念なので少し注意書きを書いておきます。

* **今回出てきたモデルや結果は、ニューラルネットワークの性質上、エポック数、モデル設定、学習率や活性化関数などたくさんのハイパーパラメータの設定の中の1つにすぎません**。なので、これらの値が変われば（最悪初期値の乱数次第）結果が大きく変わるおそれがあります。
* 結果は人間の目から見て大まかにあっているところもあれば、感覚的に結構おかしいところもあります。**盲目的に信頼せず、こういう結果もあるんだ、ここはすごいけどここはダメだな**ぐらいの感じで見てください。

次はこのモデルに対する注意点です。

* 繰り返しになりますが、**データとして与えているのは、どのユーザーがどのアニメに対して点数（1～10）で評価したかという情報だけ**です。アニメのタイトルや説明文、キャプチャ画像、ジャンル（マスターデータにはありますが使っていません）、口コミ文章などは一切与えていません。
* 先程は説明のために、アニメ単位の特徴量を「ゆるふわ系」「シリアス系」など人間にわかりやすい形で表現しましたが、**このモデルで実際に計算される特徴量はこのようにわかりやすい形で表現できません**。できたとしても出てきた値を後付けで解釈するだけです。このモデルで保証できるのは、与えられたレーティングに対して、「作品単位での特徴量とユーザー単位での特徴量に分解でき、作品単位での特徴量を中間出力として取り出すことができる」ということだけです。

[^7]: AlphaGOやPonanzaのように、ディープラーニングのAIが人間のエキスパートを越えたという例もありますが、そういったアプリケーションはそこに至るまで気が遠くなるぐらいのチューニングと学習を行っています。なので、ディープラーニングが保証しているのはそういうこともあるという可能性であって、ディープラーニングでしたからといって即人間を凌駕するような完成度の高いモデルができるわけではありません。

## クラスタリングでアニメを10個のグループに分類する
前置きが長くなってしまいましたが、いよいよ分析してみます。出てきたアニメ単位の特徴量をk-Meansで10個のグループに分類してみます。「**クラスタリング**」という手法を使えばグループ分けはできます。

sklearn.cluster.Kmeanのデフォルト設定を用い、10回異なる重心でk-Meansを計算し、最も誤差の少ないものを選択します。k-Meansはクラスタリングの結果が初期値に依存するアルゴリズムなので何回かやることが大事です。各グループ300～800作品で構成されます。

グループごとにレビュー数が多い（≒有名な）作品のトップ10を列挙します。

### グループ1～3
| No / グループ |            グループ1           |               グループ2              |                    グループ3                   |
|:-------------:|:------------------------------:|:------------------------------------:|:----------------------------------------------:|
| 1             | デスノート                     | ヴァンパイア騎士                     | カードキャプターさくら                         |
| 2             | 進撃の巨人                     | ヴァンパイア騎士 Guilty              | 美少女戦士セーラームーン                       |
| 3             | Angel Beats!                   | 新妹魔王の契約者                     | ヘタリア Axis Powers                           |
| 4             | コードギアス　反逆のルルーシュ | アブソリュート・デュオ               | ファイナルファンタジーVII アドベントチルドレン |
| 5             | 未来日記（TV）                 | 学戦都市アスタリスク                 | ツバサ・クロニクル                             |
| 6             | とらドラ！                     | IS:インフィニット・ストラトス2       | らんま1/2                                      |
| 7             | BLEACH                         | ネトゲの嫁は女の子じゃないと思った？ | 犬夜叉 完結編                                  |
| 8             | 東京喰種　トーキョーグール     | AMNESIA（アムネシア）                | 借りぐらしのアリエッティ                       |
| 9             | ノーゲーム・ノーライフ         | 悪魔のリドル                         | 鋼の錬金術師 嘆きの丘の聖なる星                |
| 10            | 鋼の錬金術師（2003年版）       | Blood-C                              | テニスの王子様                                 |
| 作品数        | 656                            | 448                                  | 593                                            |

グループ1は有名所が多いもののいろいろまぜこぜで基準が不明。他には、「Clannad」「ソードアート・オンラインII」「Another」「キルラキル」「あの花」「ギルティクラウン」などがあります。

**グループ2はラノベ出身のアニメが多い**です。他には「対魔導学園35試験小隊」「聖剣使いの禁呪詠唱」「空戦魔導士候補生の教官」「星刻の竜騎士」などいわゆる[石鹸枠](http://dic.nicovideo.jp/a/%E7%9F%B3%E9%B9%B8%E6%9E%A0)が検出可能でした。「魔法戦争」もここです。ラノベ出身以外にも「アルカナ・ファミリア」「ウィッチクラフトワークス」「グラスリップ」などがありました。

グループ2,3あたりはわかりやすいですが、グループ1は基準がイマイチわからないので、「どのグループに所属したから○○はこういうアニメだ」「このグループに所属しなかったから○○は実力派ではない」とまでは断言できないと思います（差が微妙なところがあると、同一作品でもシリーズが変わると別なグループに分類されることがあります）。アニメ好事家に好評の作品がグループ2に多く分類されていました。偶然かはわかりません。

**グループ3はCLAMP作品や少女マンガ出身がよく見られます**。ただ、グループ3は10位以下をよく見ていくと、「北斗の拳」や「頭文字D」が入ってたりするので登場人物に男が多い作品にも反応しているのかもしれません。他には「スラムダンク」「アイシールド21」「星を追う子ども」「聖闘士星矢」「カレイドスター」などがありました。

###グループ4～6

| No / グループ | グループ4                      | グループ5                                | グループ6                                  |
|---------------|--------------------------------|------------------------------------------|--------------------------------------------|
| 1             | ぼくのぴこ                     | 彼女と彼女の猫                           | 男子高校生の日常                           |
| 2             | Bible Black                    | 黒塚 KUROZUKA                            | 私がモテないのはどう考えてもお前らが悪い！ |
| 3             | ぴことちこ                     | 機動戦士ガンダム                         | 日常                                       |
| 4             | ぴこ×CoCo×ちこ                 | ブギーポップは笑わない Boogiepop Phantom | この素晴らしい世界に祝福を！               |
| 5             | 鬼父                           | ペイル・コクーン                         | 血界戦線                                   |
| 6             | えろげー！ Hもゲームも開発三昧 | メトロポリス                             | 坂本ですが？                               |
| 7             | ふたりエッチ                   | アニマトリックス                         | 瀬戸の花嫁                                 |
| 8             | AIKa                           | DEAD LEAVES                              | パンティ&ストッキングwithガーターベルト    |
| 9             | DISCIPLINE                     | Hellsing: The Dawn                       | 電波女と青春男                             |
| 10            | 鬼父 Re-birth                  | 天使のたまご                             | ゆるゆり                                   |
| 作品数        | 413                            | 390                                      | 801                                        |

**グループ4だけ異色を放っています**。「ぼくのぴこ」「Bible Black」「鬼父」「えろげー！ Hもゲームも開発三昧」とどう見ても**HENTAI**な作品が分類されています。ここで注意すべきはモデルに与えたのはユーザーの評価点数だけです。このアニメはR-18、このアニメは健全とかそういう情報は一切与えていません。それどころかアニメのタイトルすら訓練には与えていません。結果的には、**AIはレビューの点数だけでスケベなアニメを分類できる**ということになります。
![anime_03.png](https://qiita-image-store.s3.amazonaws.com/0/232088/cfdc7beb-2cad-7e03-19a2-b052b949fb9f.png)

上の図はグループ4をもう少し下位まで見たものです。圧巻の図で、ほぼスケベなアニメしか出てきませんでした（デルトラクエスト、愛天使伝説ウェディングピーチはおそらく誤分類）。他のグループは誤分類多いのにここだけやたら少ない。**HENTAIってすごい**。

グループ4とは対極的に、**グループ5は実力派といわれる作品や、独特な雰囲気を持つアニメが多い**ですね。なぜここに初代ガンダムが入っているのかはよくわかりませんが、もう少し下まで見ると「ルパン三世」「平成狸合戦ぽんぽこ」「Ghost in the Shell」「聖☆おにいさん」「ニンジャスレイヤー」「海がきこえる」などがあります。

**グループ6は深夜アニメごちゃまぜ**という感じですね。日常系が多いですが、男子高校生の日常、日常、坂本ですが？あたりが入っているのでシュールギャグ路線もここです。このグループが一番多いです。「New Game！」「ご注文はうさぎですか？」「きんいろモザイク」「キルミーベイベー」といったきらら系はだいたいここ、「のんのんびより」「ガルパン」「ゆるゆり」「みなみけ」などもここです。

###グループ7～10
| No / グループ |         グループ7        |         グループ8        |                        グループ9                        |
|:-------------:|:------------------------:|:------------------------:|:-------------------------------------------------------:|
| 1             | 鋼の錬金術師（2009年版） | ソードアート・オンライン | NARUTO-ナルト-                                          |
| 2             | STEINS;GATE              | エルフェンリート         | ドラゴンボールZ                                         |
| 3             | 天元突破グレンラガン     | FAIRY TAIL               | ドラゴンボール                                          |
| 4             | デュラララ!!             | ハイスクールD×D          | 犬夜叉                                                  |
| 5             | ワンパンマン             | 会長はメイド様！         | ポケモン                                                |
| 6             | PSYCHO-PASS サイコパス   | ゼロの使い魔             | ドラゴンボールGT                                        |
| 7             | カウボーイビバップ       | 僕は友達が少ない         | デジモンアドベンチャー                                  |
| 8             | 化物語                   | アクセル・ワールド       | シャーマンキング                                        |
| 9             | 千と千尋の神隠し         | らき☆すた                | 劇場版BLEACH MEMORIES OF NOBODY                         |
| 10            | 魔法少女まどか☆マギカ    | デート・ア・ライブ       | 劇場版BLEACH The DiamondDust Rebellion もう一つの氷輪丸 |
| 作品数        | 555                      | 534                      | 308                                                     |

**グループ7,8も基準が微妙**で、特にグループ7はなんとなく言いたいことはわかるけど上手く表現できないような感触を受けました。もう少し詳しく見ると、「Fate/Zero」「新世紀エヴァンゲリオン」「もののけ姫」「ハイキュー!!」「銀魂」「Black Lagoon」「NHKにようこそ！」「時をかける少女」「となりのトトロ」など。傾向が掴みづらいですが、グループ5に近い感じはします。

グループ8はラノベ出身が多いですが、グループ2との違いは何だと言われると難しいですね。ラノベ出身ではないですが、「エルフェンリート」や「School Days」「ヨスガノソラ」といったちょっと過激な作品もこのグループ8に分類されています。「ToLoveる」「Highschool DxD」といったお色気路線もある一方で、「ゼロの使い魔」「灼眼のシャナ」「らき☆すた」「ラブひな」「這いよれ！ニャル子さん」などもあります。基準が難しいですね。

**グループ9はわかりやすくて、「ドラゴンボール」「NARUTO」「ポケモン」といったファミリーアニメ**で、HENTAIとは対極にあるような存在です。もう少し下を見ても、「デジモン」や「遊戯王」など子供向けアニメが多いです。

グループ判定が微妙なところがあるという点について補足しておきましょう。「鋼の錬金術師」は2003年版だとグループ1、劇場版の「嘆きの丘の聖なる星」だとグループ3、2009年版だとグループ7と分類されています。このようにグループが近いとグループをまたいで判定されることがよくあります。

| No / グループ |                          グループ10                          |
|:-------------:|:------------------------------------------------------------:|
| 1             | 涼宮ハルヒの憂鬱(2009)                                       |
| 2             | ブブキ・ブランキ                                             |
| 3             | シャングリ・ラ                                               |
| 4             | エンドライド                                                 |
| 5             | コードギアス　反逆のルルーシュ　ナナリーイン・ワンダーランド |
| 6             | 無限の住人                                                   |
| 7             | 神のみぞ知るセカイ: Flag 0                                   |
| 8             | ビキニ・ウォリアーズ                                         |
| 9             | るろうに剣心 -明治剣客浪漫譚- 維新志士への鎮魂歌             |
| 10            | 屍者の帝国                                                   |
| 作品数        | 474                                                          |

**最後にグループ10ですが、これも基準がよくわからない**気がします。他のグループに入っていた別シリーズがここに分類されているのを見るので、分類できなかったその他扱いでしょうか。他に列挙すると「White Album 2」「夜ノヤッターマン」「機動戦士ガンダムZZ」「アイドルマスターシンデレラガールズ2ndシーズン」など。自分はいまいち傾向が読めませんでした。

### グループまとめ
比較的分類基準がわかりやすいグループをまとめます。

* グループ3：少女漫画、登場人物に男が多い漫画
* グループ4：HENTAIアニメ
* グループ6：日常系深夜アニメ
* グループ9：ファミリーアニメ

他のグループやこの分類自体境界が曖昧なので、グループ内での傾向はあるもののイコール**「そのグループにある作品はこうだ」までは言えない**です。例えば、グループ5は実力派と言われる作品が多いですが、だからといってグループ5以外は実力派ではないとは言えません（そう断言できるほど精度が良くない）。ただ、**HENTAIアニメだけはやたら精度よく分類できます**。これが本当に不思議です。

## クラスタリングのグラフ
特徴量は16次元なので簡単に可視化はできませんが、主成分分析により2次元に投射するとこのようになります。
![anime_04.png](https://qiita-image-store.s3.amazonaws.com/0/232088/a0e1c930-7ee0-7ec6-169a-473aed17db98.png)
ここからHentaiアニメの軸がどこらへんにあるか探してみます。

その前にグループ4の評価制度について一度確認しておきます。

### グループの評価精度・エラー分析
訓練時には使っていませんでしたが、anime.csvにはジャンルというデータがあり、スケベなアニメはジャンルが「Hentai」となっています。レビューデータを削って使ったので全てではありませんが、訓練時に使用したアニメのうち**Hentaiジャンルは397作品**ありました。うち**グループ4に分類されたのが369作品**ありました。Hentaiジャンルのうち93%近くがグループ4にあります。

ここで、「グループ4である」→「Hentaiジャンルと推定される」、「訓練時に使っていないジャンルデータにHentaiが含まれる」→「真にHentaiジャンル」であると読み替えると、教師あり学習の評価尺度[^8]で測定することができます。

|       ＼       | Hentai | Hentaiではない |  計  |
|:--------------:|-------:|---------------:|-----:|
| Group4         | 369    | 44             | 413  |
| Group4ではない | 28     | 4731           | 4759 |
| 計             | 397    | 4775           | 5172 |

> Accuracy	98.61%
> Precision	89.35%
> Recall		92.95%
> F値		91.11%

[^8]: 本当にHentaiアニメだけ見つけたいのだったら、特徴量からロジスティック回帰など教師あり学習でやるのが普通ですが、ジャンルデータがないケースも考えると、教師なし学習のクラスタリングをしてからやるほうが汎用性があると考えられます。協調フィルタリングもレーティングの回帰問題という教師あり学習から、隠れ層の値を取って教師なし学習で分類して、教師あり学習としてスライドさせているので、教師のあり・なしを行ったり来たりしています。協調フィルタリングも半教師あり学習と言われることもあるので、教師あり・なしどちらのアプローチからも行ける面白い問題です。

ジャンルデータがNAのケースは「Hentaiではない」としました。この点が少しF値等を悪くしているのかもしれません。しかしF値ベースで9割以上もHentaiアニメを分類できているグループ4はかなりすごいです。さて、グループ4ではあるが、Hentaiジャンル設定ではない（ミス分類されてしまった）アニメをエラー分析していきます。

|                      作品名                      |               作品名               |            作品名            |                   作品名                   |
|:------------------------------------------------:|:----------------------------------:|:----------------------------:|:------------------------------------------:|
| ふたりエッチ                                     | AIKa                               | 愛天使伝説ウェディングピーチ | デルトラクエスト                           |
| 爆丸バトルブローラーズ                           | 菜々子解体診書                     | テガミバチ学園               | ひめチェン!おとぎちっくアイドル リルぷりっ |
| スーパーロボット大戦OG -ジ・インスペクター       | 炎のらびりんす                     | ななか6/17                   | pico ～ぼくの小さな夏物語～                |
| ふたりはプリキュア Splash☆Star                   | YEBISUセレブリティーズ             | 黒と金の開かない鍵           | 魁!!男塾                                   |
| ウサビッチ                                       | まほろまてぃっく2 年末スペシャル   | ジュエルペットてぃんくる☆    | 万能文化猫娘（1998）                       |
| ぶっとび!!CPU                                    | 魔法少女猫たると                   | 百日の薔薇                   | ふたりエッチ（2014）                       |
| 万能文化猫娘 DASH!!                              | キディ・グレイド Ignition          | マッド☆ブル34                | ぱにょぱにょデ・ジ・キャラット             |
| アーケードゲーマーふぶき                         | まじかるカナン                     | OH! スーパーミルクチャン     | ぷぎゅる                                   |
| おねがい☆ティーチャー Reminiscence               | がぁーでぃあんHearts ぱわ〜あっぷ! | 忍者龍剣伝                   | HEN                                        |
| あばしり一家                                     | ヴァリアブル・ジオ                 | ストラトス・フォーA 完結編   | エルフ版 下級生 あなただけを見つめて…      |
| PIAキャロットへようこそ!劇場版～さやかの恋物語～ | こいこい7スペシャル                | BIGWARS -神撃つ朱き荒野に-   | 大好き!ハローキティ                        |

これがミスラベルされてしまった44アニメ全てです。一部完全にミス分類とはいえないのもありますが（Hentaiジャンル設定はされてないがかなり際どい内容）、「ふたりはプリキュア Splash☆Star」「ジュエルペットてぃんくる☆」「大好き！ハローキティ」といったのは完全にミスです。申し訳ありませんでいた。これらの女児向けアニメはとても健全な内容です。ミス分類されやすいのには次のような傾向があると思われます。

* 古い作品、OVAのようにレビューデータが少ない場合。分類の精度が悪くなっている
* 女児向けアニメがHentai分類されてしまったのは、もしかするとデータの一部を取捨選択したことによるかもしれない。データ数を減らすためにレビュー数が100以上のユーザーデータのみを選択したので、**いわゆる「大きいお友達」の声が大きく反映されてしまって**、大きいお友達がHentaiアニメを見ていたために、女児向けアニメもHentaiとして誤分類されてしまった可能性はある[^9]。

[^9]: 協調フィルタリングはユーザーのレビュー点数を完全に信頼する、ざっくり言うと性善説のモデルなので、内容を見ないで判断するとこういうリスクはあります。他にも「点数工作に弱い」といった問題はあります。

### Hentaiアニメの可視化
先程の16次元→2次元のプロットに、ジャンルがHentaiのアニメのみ黒く塗りつぶしてみました。

![anime_05.png](https://qiita-image-store.s3.amazonaws.com/0/232088/6da1af56-34ab-cab2-934a-6bb948d34098.png)

黒く塗りつぶしたのがジャンル＝Hentaiの作品です。主に図の右上に寄っていることがわかります。ここでグループ9がポケモン、NARUTOといったファミリーアニメであったことを思い出すと、この黒く塗りつぶした部分と、グループ9の間に（おそらく奥行き方向）Hentaiかどうかの軸があると思われます（後で距離を取ってもう少し詳細に見ます）。16次元→2次元に圧縮したときに潰れてしまったのだと思います。

## グループ別Hentai距離
さて、グループ別にどの程度Hentaiアニメから遠いかというのを示すために「Hentai距離」というのを定義します。今i番目のジャンルを$e^{(i)}$とします。ここで、$e^{(i)}\in H$を「ジャンルがHentaiのアニメ」、$e^{(i)}\notin H$を「ジャンルがHentaiではないアニメ」とします。同時にi番目のアニメの特徴量を$f_j^{(i)}(j=1, \cdots, 16)$とします。ここで$f^{(i)}=\left[\begin{array}{c} f_1^{(i)} & \cdots & f_{16}^{(i)}\end{array}\right]$というベクトルです。

今、ジャンルがHentaiのアニメの特徴量の平均をh。hもベクトルです。数式で書くと、

$$h = \frac{1}{m_H} \sum_{e^{(i)}\in H}f^{(i)} $$

$m_H$はジャンルがHentaiのアニメの総数です。ここから、作品別の**Hentai距離**を次のコサイン類似度で定義します。

$$d(h, f^{(i)})=\frac{h\cdot f^{(i)}}{|h||f^{(i)}|} $$

とします。ここで$-1\leq d(h, f^{(i)})\leq 1$で、Hentai距離が1に近いほど、そのアニメがよりHentaiアニメに近いということがわかります。グループ別で見たい場合は、アニメ単位のHentai距離をグループ単位で集計すればいいです。グループ別の基本統計量は以下の通りです。

| hentai_dis | count |  mean |  std  |   min  |  25%  |  50%  |  75%  |  max  |
|------------|-------|-------|-------|--------|-------|-------|-------|-------|
| group_id   |       |       |       |        |       |       |       |       |
| 1          | 656   | 0.476 | 0.091 | 0.173  | 0.419 | 0.476 | 0.532 | 0.774 |
| 2          | 448   | 0.617 | 0.111 | 0.291  | 0.539 | 0.608 | 0.701 | 0.886 |
| 3          | 593   | 0.496 | 0.133 | 0.147  | 0.393 | 0.498 | 0.609 | 0.830 |
| 4          | 413   | 0.871 | 0.095 | 0.301  | 0.836 | 0.896 | 0.930 | 0.980 |
| 5          | 390   | 0.391 | 0.148 | -0.019 | 0.285 | 0.391 | 0.497 | 0.790 |
| 6          | 801   | 0.609 | 0.103 | 0.284  | 0.536 | 0.606 | 0.676 | 0.923 |
| 7          | 555   | 0.359 | 0.113 | -0.006 | 0.287 | 0.361 | 0.421 | 0.824 |
| 8          | 534   | 0.647 | 0.089 | 0.411  | 0.584 | 0.636 | 0.707 | 0.879 |
| 9          | 308   | 0.527 | 0.121 | 0.198  | 0.427 | 0.541 | 0.613 | 0.806 |
| 10         | 474   | 0.494 | 0.132 | 0.048  | 0.409 | 0.501 | 0.581 | 0.833 |

グループ4が文字通りHentaiアニメが多数含まれているグループなので、これの平均が0.871と最も高いです。他に高いのはグループ2の0.617、グループ8の0.647です。この2つはラノベアニメが多いので確かに理解しやすいです。他に高いのはグループ6、これは日常系深夜アニメが多いグループですね。グループ6と8を合わせると日常系以外、ラノベ以外の深夜アニメもかなり入ります。**グループ4のHentaiアニメは一番Hentaiだが、ラノベアニメや（日常系）深夜アニメもHentai要素が高い**というのは個人的にはかなりしっくりくると思いました。

グループ9のファミリーアニメだからといってHentai距離が低いかというとそうでもないようです。誤分類もあるので一概には言えないのですが、Hentaiベクトル$h$と最も差があるのがグループ5と7でした。グループ5と7はよく似ていて、どちらも硬派や実力派と言われるアニメや独特な雰囲気が多いアニメでした。ジブリアニメもこの5と7によく見られます。わかりやすいのでジブリアニメということにしますが、**Hentaiアニメの対極はポケモンやNARUTOといったファミリーアニメではなく、ジブリアニメのようなものではないか**ということが示唆されます。

16次元→2次元に圧縮したので正確な図ではないですが、これらの情報をもとに漠然と書くと次のようなHentai軸を引けることになります。

![anime_06.png](https://qiita-image-store.s3.amazonaws.com/0/232088/696bc96c-27c1-2ba1-4ffb-d261d4528457.png)

2次元で引いているので結構無理のある図になってしまいましたが、実際はもっと奥行きのある軸になります。他の縦方面の軸がどういう内容かというのが見当がつきません。アニメの特徴量を見る上において、**「エロいかどうか」というのはかなり大きい要素を占めるのではないか**という仮設を提唱できます。

## まとめ
* AIはユーザーのレーティングデータのみから、アイテム単位の潜在的な特徴量を通じて、アニメのタイトル、内容、スクショなどの情報を一切与えなくても「Hentai」なアニメを分類することができる
* 日本のアニメにおいて「Hentaiかどうか」はかなり大きい要素を占めるのではないか
* **Hentaiってすごい！Hentaiで世界と繋がろう（意味深）**

これを通じて1人でも多くの方が「機械学習やディープラーニングって面白いな」って感じていただければ幸いです。次回はアニメの足し算引き算をやる予定です。

**（追記）次回はこちらに書きました：**
**ニューラル協調フィルタリングで特徴量抽出して、アニメ同士の足し算・引き算をやってみる**
https://blog.shikoan.com/ncf-myanimelist-add/