Virtual YouTuberの動画再生数とタイトルで使われる単語の関係を分析してみる

はじめに
======

最近、Virtual YouTuber(以降、VTueber)の人気が高まってきていますが、色々な企画をやっている方も多く、ではどういう動画が人気なんだろう、という素朴な疑問がわいてきます。
ということで、今回は特定のチャンネルの動画一覧の中から、

- 「タイトルの単語 ✕ 再生数(View数)」
- 「タイトルの単語 ✕ Like率(Like数 ÷ View数)

の関係を調べてみました。
「タイトルの単語」の代わりに「動画のタグ」を使おうと最初は思ったのですが、タグの付き方も結構バラバラな（いい加減な？）感じがあったので、タイトルでやってみました。「中身」を表すのはタグの方が近そうなので、Like率はそちらでやったほうが面白いのかも知れないです。View数などは動画サムネイル画像とかのインパクトも大きいはずですが、画像を要素分解するのは難しそうなのでおいておきます。

サンプルとしては、電脳少女シロの[Siro Channel](https://www.youtube.com/channel/UCLhUvJ_wO9hOvv_yYENu4fQ) でやってみます。選んだ理由は、動画投稿数がとても多いことと、何より個人的に好きだからです(^^。

分析方法
=======
## 概要
以下のような流れで行いました。

1.  [YouTube Data API v3](https://console.developers.google.com/apis/library/youtube.googleapis.com) を使ってチャンネルの動画一覧を取得し、さらに動画詳細からstatisticsデータ(view数やlike数など)を取得します。
2. [Yahoo テキスト解析WebAPI](https://developer.yahoo.co.jp/webapi/jlp/) を使って、タイトル文章を分解して、特定の品詞だけ残します(名詞、動詞、形容詞など）。
3. 出現頻度や意味的な重複・意味が把握しにいくい単語などを考慮して、分析に使う単語を選別します（この辺がなかなか恣意的になってしまうところですが）。
4. one-hotに展開した `"年月s"+"曜日s"+"単語s" → Target` というモデルで重回帰分析を行い、その係数を調べます。

## 実装

https://github.com/mokemokechicken/youtube_stat
においてあります。
Python環境とGoogle API Keyと YahooAPI Key があれば、たぶん簡単に実行できると思います。

分析結果
=======
## 全体の傾向

まずは、view数, like数, dislike数, comment数の分布を眺めてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11124/7c83fd61-710f-c85e-496d-322593ce5e4a.png)

view数やdislike数は、正規分布＋べき分布 みたいなWebではよくある自然な分布にみえます。like数やcomment数は2つ山がある感じですね。内容次第というところもあるということでしょうか。

今回は、`Log(view数)` と `like/view` を Target にするので、それらの分布も眺めてみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11124/388512c0-313d-9b3e-9bcb-ce8a8d5f3cb4.png)

まあ、なんとなく正規分布っぽいと言えるかな、と思います。

## Log(view数) に対する重回帰分析の結果
結果の全体は
https://github.com/mokemokechicken/youtube_stat/blob/master/notebooks/regression.ipynb
のOut[8] の辺りを見てもらえればと思います。もしくは、 localにgithubをcloneして `sample/siro/log_view_summary.html` を見てください。

`Adj. R-squared=0.460` とかなり低いのですが、やはりタイトル単語だけだと説明しきれない要素が大きいのかな、と思います（特にサムネイル画像は集客には重要だと思いますし）。

ここではPickupして書いていきます。

### 年月+曜日 の部分だけ

まず、年月と曜日の部分だけを眺めてみます。
見方としては、 `Coef` が正ならば、view数を増やす方向に働いていて、負ならば減らす方向に働いている、という感じです。 95%信頼区間が0を含むものは、正負の判断が難しいという意味合いになります。

|-|Coef.|Std.Err.|t|P>｜t｜|[0.025|0.975]|
|-----|-----|-----|-----|-----|-----|-----|
|2017-06|0.332|0.599|0.553|0.581|-0.850|1.513|
|2017-07|-0.092|0.596|-0.155|0.877|-1.267|1.083|
|2017-08|0.652|0.149|4.362|0.000|0.357|0.946|
|2017-09|-0.001|0.155|-0.007|0.994|-0.307|0.305|
|2017-10|0.544|0.139|3.922|0.000|0.270|0.817|
|2017-11|0.085|0.158|0.539|0.591|-0.227|0.397|
|2017-12|1.062|0.160|6.618|0.000|0.745|1.378|
|2018-01|1.529|0.138|11.061|0.000|1.257|1.802|
|2018-02|1.440|0.133|10.824|0.000|1.177|1.702|
|2018-03|0.954|0.131|7.287|0.000|0.696|1.212|
|2018-04|0.852|0.151|5.656|0.000|0.555|1.148|
|2018-05|0.654|0.151|4.343|0.000|0.357|0.950|
|2018-06|0.600|0.153|3.915|0.000|0.298|0.903|
|2018-07|0.556|0.142|3.914|0.000|0.276|0.835|
|2018-08|0.279|0.147|1.895|0.059|-0.011|0.569|
|Mon|1.395|0.092|15.227|0.000|1.214|1.576|
|Tue|1.267|0.085|14.870|0.000|1.099|1.435|
|Wed|1.274|0.086|14.836|0.000|1.105|1.443|
|Thr|1.221|0.086|14.185|0.000|1.051|1.390|
|Fri|1.343|0.085|15.739|0.000|1.175|1.511|
|Sat|1.495|0.083|17.992|0.000|1.331|1.659|
|Sun|1.448|0.091|15.998|0.000|1.270|1.626|

こう眺めると、

- 2018年1月,2月をピークにView数は減ってきているっぽい（なんてこったい）。
- 金土日月にUPした動画はView数が伸びやすい。特に土日。

という感じです。
まあ、これは、実際に見てみれば事実っぽいかはわかります。

----

月毎のview数をBoxplotしてみると以下のようになりました。まあ、確かにそういう傾向がありますね。最近いろいろなVTuberの方が増えていますし、まあしょうがないですかね。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11124/d0fe441b-a854-832d-5740-6abbdd415149.png)

----

曜日毎でPlotすると以下のようになりました。0が月曜日で、6が日曜日です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/11124/062d78fc-7e3b-9885-6ca8-f83c860a958a.png)

うん、よくわからん。Plotがまずいのかな。まあでも、分析結果はなんとなく直感的だし、そういうことにしておくってことでいいかな...

### 単語の部分 (`P>|t|` が 0.1以下のものだけPickup)
次に単語の部分を見てみます。数が多いので、ある程度はっきりと傾向があるのだけPickupすると以下のようになります。

|word|Coef|
|-----|-----|
|動物|-1.008|
|空間|-0.965|
|運動会|-0.938|
|制作|-0.931|
|みんな|-0.818|
|悩む|-0.804|
|台詞|-0.757|
|モノマネ|-0.744|
|ボイス|-0.715|
|誕生|-0.674|
|発表|-0.607|
|FORTNITE|-0.538|
|紹介|-0.519|
|挑戦|0.349|
|結果|0.586|
|ヤンデレ|0.602|
|最大|0.725|
|秘密|0.816|
|踊る|0.891|
|必見|0.965|
|自分|1.009|
|アカリ|1.214|
|音量|1.222|
|本気|1.492|

この結果から意味を捉えようと思うなら、多重共線性(≒出現の相関関係が高い単語同士で係数が不安定になる)がおそらく色々起こっているだろうことに注意が必要です。実際に分析をするなら、この結果を手がかりに仮説を考えて、もう少し分析を進めていくことが大事になるでしょう。

と思いつつ、今回は遊びなので、お気楽に結果を眺めていきますと、

- 挑戦、結果、最大、秘密、必見、本気、音量(注意): みたいな「ハッキリとした、過激な？」内容だと伸びやすいのかな？ シロちゃんは、まったり感の中で過激さをチラ見せするのが上手なので、みんなそのへんを期待するのかも知れない（私だけ？）
- アカリ： ミライアカリちゃんとのコラボ動画は確かに伸びた。コラボ系はview数は伸びやすいんですかね。相互の流入もあるでしょうし。
- 空間、運動会： 「バーチャル空間で運動会」的な動画２つがどうも足を引っ張ったみたいでこの結果のようです。そういうものなのかな。
- モノマネ: 負になっていますが、動画自体は結構のびていて、「本気」「挑戦」「アカリ」の寄与に割り振られていて、「モノマネ」はその反動を担わされている、という印象ですね。結果を鵜呑みにしていはいけないという好例ですね。

## Like率 に対する重回帰分析の結果
結果の全体は
https://github.com/mokemokechicken/youtube_stat/blob/master/notebooks/regression.ipynb
のOut[11] の辺りを見てもらえればと思います。もしくは、 localにgithubをcloneして `sample/siro/like_rate_summary.html` を見てください。

`Adj. R-squared=0.749` とまあまあな数字が出ています。

ここではPickupして書いていきます。

### 年月+曜日 の部分だけ
||Coef.|Std.Err.|t|P>｜t｜|[0.025|0.975]|
|-----|-----|-----|-----|-----|-----|-----|
|2017-06|-0.026|0.010|-2.650|0.009|-0.045|-0.007|
|2017-07|-0.010|0.010|-1.030|0.304|-0.029|0.009|
|2017-08|-0.011|0.002|-4.456|0.000|-0.016|-0.006|
|2017-09|-0.008|0.003|-3.143|0.002|-0.013|-0.003|
|2017-10|-0.011|0.002|-4.778|0.000|-0.015|-0.006|
|2017-11|-0.006|0.003|-2.521|0.012|-0.012|-0.001|
|2017-12|-0.011|0.003|-4.150|0.000|-0.016|-0.006|
|2018-01|-0.001|0.002|-0.481|0.631|-0.005|0.003|
|2018-02|-0.000|0.002|-0.058|0.954|-0.004|0.004|
|2018-03|0.007|0.002|3.214|0.002|0.003|0.011|
|2018-04|0.009|0.002|3.832|0.000|0.005|0.014|
|2018-05|0.017|0.002|7.065|0.000|0.012|0.022|
|2018-06|0.021|0.002|8.364|0.000|0.016|0.026|
|2018-07|0.024|0.002|10.498|0.000|0.020|0.029|
|2018-08|0.029|0.002|12.200|0.000|0.024|0.034|
|Mon|0.003|0.001|1.945|0.053|-0.000|0.006|
|Tue|0.005|0.001|3.446|0.001|0.002|0.007|
|Wed|0.005|0.001|3.408|0.001|0.002|0.007|
|Thr|0.005|0.001|3.561|0.000|0.002|0.008|
|Fri|0.005|0.001|3.760|0.000|0.002|0.008|
|Sat|0.002|0.001|1.482|0.140|-0.001|0.005|
|Sun|-0.001|0.001|-0.479|0.632|-0.004|0.002|


眺めると、

- Like率はこの数ヶ月高い傾向にある
- 土日、はやや低く、火曜日〜金曜日は高い傾向にある

という感じでしょうか。

実際にグラフにPlotしてみると以下のようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/11124/52ff345d-6b78-ac59-ef5f-3a435a8aa6bc.png)

確かに、3月以降Like率は上昇傾向にあります。
ユーザ数は減りつつ、Like率が上がっているということで、ユーザ層が固定化しつつあるのかもしれないですね。日曜日は割と色々な人が見てくれるのかもしれない。週末は万人受けするコンテンツで、平日はコア層向けのコンテンツで、みたいな配分もいいのかもしれない（まあ、それくらいは考えてますよね...）。

### 単語の部分 (`P>|t|` が 0.1以下のものだけPickup)
さて、単語を見ていくと以下のようになります。

|word|Coef|
|-----|-----|
|おまけ|-0.014|
|挑戦|-0.008|
|万|0.006|
|誕生|0.010|
|ボイス|0.011|
|リベンジ|0.011|
|体験|0.011|
|為|0.012|
|意味|0.012|
|記念|0.014|
|完全|0.016|
|再び|0.017|
|みんな|0.018|
|開催|0.019|

- 挑戦: は view数はのびたけど、likeにはやや弱い？ まあ、挑戦しているんだから仕方ないかな。
- ボイス: はview数はのびないけど、likeは伸びる？ 一定のコア層がいるのか...?
- リベンジ: シロちゃんカラーが出ている気がする
- 為: 【為になる】んだから当然ですね！

さいごに
======

[github](https://github.com/mokemokechicken/youtube_stat/tree/master/sample/kizuna_ai) の方に、 キズナアイちゃん版もサンプルでおいてあります。残念ながらHTMLファイルは、githubだと直接開けないので、興味があればcloneしてから見てみてください。

他のchannelの動画も設定を変えると実行可能ですが、ある程度投稿数がないと上手くいかないです（変数(単語)が多すぎて）。輝夜月ちゃんのチャンネルではあまり上手くいかなかった感があります。

テキスト分析っぽい練習にやってみた感じですが、もう少し手法を洗練させたいですね。