推しVtuberのじゃんけんを分析してみたかった
この記事はもなふわすい~とる~む Advent Calendar 2021
18日目の記事です。
昨日の担当は、まめおさんの記事となります。
今回、若干機械学習的なお話をしますが、
学術的な話や技術説明をほとんどしないので、
そういう目的の方はブラウザバック!!
そもそも『もなふわすい~とる~む Advent Calender』とはなんぞ?
という話ですが、
AdventCalenderは12月1日~12月25日にかけて技術的なブログをリレー形式で書き続ける企画で、ソフトウェアエンジニアさん達の恒例行事みたいなものです。
そしてそれをVtuber 巻乃もなかさんのリスナー達がやっている感じです。
多分。
折角なので、巻乃もなかさんの人となりとか魅力とかの紹介したいと思いましたが、
それだけで記事が2つは書けるんじゃないかな?って思うので今回は省略します。
他の方の記事とかも読めば少しは魅力が伝わるかと思うので是非。
先日、3周年迎えて素敵なオリ曲も公開したのでツイートを紹介します。
本題に入ろうじゃないか
時は今年の1月頃でしょうか。
昨年度のAdventCalenderを拝見した時にこう思ったのです。
「おつもなじゃんけんでデータ解析した面白いのではないか?」
※ おつもなじゃんけん:巻乃さんが配信終わりに行うじゃんけん(恒例行事)
なぜ、このような発想になったかと言いますと、
某日曜日に放送されている国民的アニメで行われるじゃんけんを元に
「次に出す手を予測してみた!」という機械学習アルゴリズム記事を拝見したことがあったからです。
カツオをたたくサザエの図
という事で、
「次の配信で巻乃さんが出す手を機械学習の力で予測しよう!」
っていうのが今回のテーマとなります。
チョキ
データ集めをしよう
さて、「機械学習でじゃんけんを予測」と言ってもかなり沼が深いです。
まずは、データ集めです。
「おつもなじゃんけんを行った日における、じゃんけんの手」というデータを集計していきたいと思います。
これに関しては、ありがたいことに今年の2月からリスナーの一人kioさんがTwitterにて「#おつもなじゃんけん」のハッシュタグでログを残してくださっています。
また、kioさんも今回のAdventCalenderに一昨日の記事にて参加されています。
なお、巻乃さんはYouTube以外にもSHOWROOMと言ったアーカイブの残らないプラットフォームで配信をしている都合、kioさんも人間ですので全てのじゃんけん結果を残しているわけではない、という関係から、大体2月から11月までのじゃんけんデータは2割くらいは欠落しています。
それでも8割も残してくださって頂いた結果、約250件近いデータが集まりました。
機械学習に経験がある方からすると既に雲行きが怪しくなってきましたね。
これを見て純粋な集計結果として、
「巻乃さんは44%の確率でパーを出すんやな!!」
と予測することも可能です。
本記事では、この44%を超える精度で巻乃さんの手を予測が目標です。
特徴量
専門的なお話はしないと言いましたが、これだけは必要かなぁ...
「特徴量」というのは機械学習、広義的に言うAIが判断を行うための知識というような感じです。
例えば、馬とシマウマを識別する時に、「白黒のシマシマがあるのがシマウマ」と人間は判断できると思います。
特徴量は「白黒のシマシマあり」or「白黒のシマシマ無し」というような特徴量をどんどん積み重ねて行き、
そして、よりAIが判断しやすいような特徴量を考えるのが機械学習エンジニアの腕の見せ所の一つだと思います。(諸説あり)
では、「じゃんけんの特徴量」と言いますと何が考えられますでしょうか...
10分くらい簡単にじゃんけんに関する論文を調べた感じ、
「まあ多分、その人の性格・感情による影響があるんやろうな」って仮説を立てました。
じゃあ、その仮説を元に、
「巻乃さんの感情に影響しそうな要素」を検討しました。
・その日の曜日
・その日の天候や気温
・前回のじゃんけんの手
・前々回のじゃんけんの手
・前々々回のじゃんけんの手
・この配信が本日の複数行動目か否か
・前回の配信から一定日数空いている
・配信プラットフォーム
・告知や発表のある配信
・トーク内容
・SHOWROOMのガチイベ参加中
・巻乃さんの服装 (巻乃は色々な衣装を着替えて配信しています)
などなど...
そして、「#おつもなじゃんけん」ツイートから得られる情報は
・その日の曜日
・前回のじゃんけんの手
・前々回のじゃんけんの手
・前々々回のじゃんけんの手
・この配信が本日の複数行動目か否か
・前回の配信から何日空いているか
となります。
これらの特徴量を用いて機械学習していきます。
アルゴリズム
本記事では各種ソースコードは省略します。
Pythonのscikit-learnで色々とやりました。
グリッドサーチで簡単にSVMのパラメータ設定した後に、
先述の特徴量組み合わせで色々と組み合わせました。
そして、データ数が不足しているので
クロスバリデーションという方法で実験を行いました。
クロスバリデーションの簡単な説明です。
機械学習のうち「教師あり学習」というものは、
教師データでAIを勉強させて、テストデータで精度を試す実験をします。
しかし、十分なデータが無いと教師データ・テストデータそれぞれ用意出来ません...
そこで使うのがクロスバリデーションというアルゴリズムです。
たとえば、上のような「A」「B」「C」という3つのデータがあるとします
・教師データを赤○
・テストデータを青○
という風に、1個ずつ交代で教師担当を交代すれば、実験3回できますね?
そういう感じで少ないデータ数で実験を行うための手法の一つです。
(超ざっくりな説明)
巻乃さん vs サポートベクターマシン
今回使った機械学習アルゴリズムはSVM(サポートベクターマシン)です。
SVMは割りかし説明が簡単な手法ですが、
技術的なブログではないのでどういう仕組みとかは省略します。
引き伸ばしまくっていましたが、結果です。
n_split はクロスバリデーションで何等分させるか、
score は予測精度の点数です
集計したときのパーの確率と変わらない、
とても残念な結果となってしまいました。
どういう予測を行っていたか気になったので見てみました
0: グー、1: パー、2: チョキ となります。
SVMの予測では「とりあえずパー出すっしょwww」という解釈になってしまっています。
う~ん...
若干予想はできていた結果ではありますが悔しいので、
命題を変えてみます
検証2
「グー・チョキ・パーの3値分類が難しすぎた」と仮定を立て、
「パーか、それ以外かの2値分類」に問題設定を変えてみました。
もう一回回してみました
・・・
56%....
100 - 44(パーの数) = 56(グーとチョキの数)...
なるほどなぁ...
・・・
ワ、ワンチャン予測値を見れば...
0: グーorチョキ、1: パー
・・・
草。
結果について
いかがだったでしょうか。
今回の記事の結果としては、
「巻乃もなか様の思考をデータで読み取るなんておこがましい、
そんな事ができるわけないだろ」
ということが判明しました。
真面目な話をするならば、
某サ○エさんのデータ数は数千件あるのに対して、こちらは数百件。
特徴量の設定が良くなかった。
というような背景が大きすぎるなぁ...とは痛感してます。
また、
「来年もやれば、その時は倍のデータあるね!!」
って意見もあるかと思いますが、やりません。(断定)
おわりに
という感じで、
巻乃さんの「おつもなじゃんけん」を使って遊んでみました。
失敗という結果で終わりましたが、人生はそんなもんよ(?)
巻乃もなかさんは本当に可愛くて癒やしな感じのVtuberさんなので、
是非足を運んでみてください。
明日の記事は、ダリアさんが担当いたします!!
ほなの!!
この記事が気に入ったらサポートをしてみませんか?