やや濃厚なソース

プログラミングやゲームについて。

SNSサイトのプロフィール分析1

好奇心にかられて調べてみました、
恋愛SNSサイトのプロフィール。
試しにクローラーを走らせてみたところ、
15400人分ほどのデータが集まったため分析開始です。

まず、各プロフィールを形態素解析にて単語に分解します。
本来の単語で重要度を計算する、TF-IDFは以下の通りですが、

重要度i,j=TF x IDF
TF_i,j = N_i,j / (Σ_k N_k,j)
IDF_i = log( [総プロフィール数] / [単語T_iを含むプロフィール数] )
i: 単語番号
j: プロフィール番号
D_j: 番号jのプロフィール
T_i: 番号iの単語
N_i,j: プロフィールjに出てくる単語T_iの個数

としたかったのですが、文章量の少ないプロフィールも多くあり、
それに引きずられないないようにするため微調整し、
以下のようにしました。

TF_i,j = N_i,j

そして、この単語の重要度から各プロフィールをベクトル化しました。
しかし、この状態のままではベクトルの次元数が多くなりすぎ15000を超えてしまいます。
そこで、出現回数が少ない単語は無視し、さらに主成分分析にて、
次元数を32にまで減らしました。


主成分分析で求められた、とある軸の各単語の寄与具合は

0.3009,友達
-0.2728,代
0.2615,彼氏
0.2586,写
0.2517,寂しい
-0.2382,ゲーム
-0.2379,読む
-0.2009,嫌い
0.2004,既婚
-0.1947,会う
0.1707,欲しい
0.1702,仲良く
-0.1689,アニメ
-0.1674,大好き
-0.1652,日記
0.1628,募集
-0.1627,LINE
0.1525,嬉しい
-0.1506,漫画
0.1446,年下
0.1443,顔
-0.1394,タイプ
.....

「彼氏」「友達」「既婚」などの単語が含まれると評価されやすく、
逆に「ゲーム」「アニメ」「漫画」などの単語が入ると評価されなくなります。
なんとなく、リア充系の軸かなという感じです。
全プロフィールをこの軸で投影した結果は下のようになり綺麗な山型となりました。
f:id:hidetobara:20180122235757p:plain


また、別の軸の各単語の寄与度は以下になりました。

-1.1027,美味しい
0.8648,共通
0.7815,*
-0.7571,もの
-0.7549,食べる
0.7321,(
0.7173,、
0.6999,)
-0.6564,いる
-0.5597,行く
0.5540,m
-0.5033,ご飯
-0.4988,私
0.4939,^
0.4871,゚
0.4452,話題
-0.4373,住む
-0.4311,カフェ
-0.4210,合える
-0.4197,一緒
0.4080,話せる
-0.4052,腕
-0.3965,料理
-0.3907,手料理
-0.3855,汗
0.3833,はじめる
0.3770,T
0.3665,過ごせる
-0.3622,喜ぶ
-0.3606,見つかる
0.3509,在住
-0.3460,仲良く
-0.3012,結構
0.2835,メッセージ
0.2752,o
0.2705,恋愛
0.2690,(_
0.2685,_)
-0.2543,マイペース
-0.2517,登録
-0.2345,はじめまして
0.2134,代
-0.2096,酒
...

形態素解析が失敗していますが、顔文字の要素が入っていると評価されやすい軸なのかな・・・という感じです。
先程と同じように、全プロフィールをこの軸で投影した結果はというと、
綺麗な山型からちょっとずれ、小さな山ができています。
f:id:hidetobara:20180123002329p:plain
サンプル数が大きくなれば、正規分布に近づくのに、こういう変なコブができるのは何かおかしいぞ。
ということで、実際に中を見てみました。
なお、1プロフィール中の改行はタブで置き換え、見やすく成形しています。
f:id:hidetobara:20180123003816p:plain
・・・遠目で見るとほとんど同じようなプロフィールが並んでいます。
よく見ると、名前や文言が一部だけ変わっており、
いわゆる、さくら業者は、テンプレートから一部だけを変えてプロフィールを作っているのか、
ということが見てわかると思います。
数にして500プロフィールくらいあり、少なくとも、15400人中の500人くらいはさくらということが分かりました。
安直にプロフィールを仕組んでしまうと、このように簡単に検出できてしまうため、
もう少し工夫した方がいいのにな、と感じました。


たぶん、続きます。