物欲購入目録日誌 写真館
fc2ブログ
[ Ruby ] twitter スパム推定(判定)の新素性(ツィート類似度)
2011.10.01 (09:45) プログラミングtrackback(0)comment(0)
Twitterでつぶやく
a4967e36.jpg


先日から,twitter bot(@tachi_pic_bot)にtwitter スパム推定(判定)機能を作っていて、実際に搭載までできたのですが、もう少しtwitterのスパム推定機能について強化というか研究してみた。

このスパム推定はtwitterアカウントの情報を抽出し、それを素性としてサポートベクターマシン(SVM)で学習/推定しておきます。判定精度は90%以上を実現しているのですが、論文を読んでいると面白そうな素性があったので追加してみました。

スパム判定用に追加した素性は"ツィート類似度"というもの。「スパムアカウントはいつも同じような文言をつぶやるよね?」という想定で作った素性です。もちろん、本文中の@user_name
やURL情報は予めストップワードとして削除しきます。

以下の論文で紹介されていたのですが

DON’T FOLLOW ME: SPAM DETECTION IN TWITTER Alex Hai Wang

ちょっと分かりにくいものだったのでわかりやすく、整理してツィート類似度を以下の式で定義します。

sim.png


ここでNは取得できたツィート総数でTwiter APIを利用すると通常は直近の20ツィートが取得できますので、だいたいはN=20となります。strが1つのツィート文字列,lsdは文字列i,文字列jのレーベンシュタイン距離を算出する関数になります。

この素性はツィートしていた内容ば全て同じであれば類似度は1.0になり、ツィート内容に一致する文字列がない場合は0.0になる素性となっております。

簡単な式ですが、システムなんかにのってしまうと結構こんなんでも特許になりますよね。www

最初にこの素性の生データを確認しておきます。赤色がスパムアカウントから抽出した素性、青色が通常のアカウントから抽出した素性です。


tweet_sim_fog.png


スパムと比スパムの事例は完全には分離できていないですが、最初の目標通り、スパムアカウントの多くは同じような内容のツィートをしている傾向が強いようです。

この新しい素性を入れて3分割交差検定で評価した結果、いままでのベストパラメーターの推定結果と比較すると以下のような感じ。

# BEST
97.278 [%]

# ツィート類似度を追加
96.825 [%]

となって1[%]ほど精度が低くなってしまいました?toro_mune.gif

なんでかなぁ~と思ったので、他の素性のデータを見て見ることにします。

●Friend Count(フローしている人の数)
friend_count.png



●Followers Count(フローされている人数)
followers_count.png


これらの素性はツィッターを特徴付ける素性ですが、スパムと比スパムとの事例では差はほとんどないことがわかりますな。

●Twitter Follower-Friend Ratio(フォロワー数をフォロー数で割ったもの)
ff_ratio.png


ここまでするとかなり、それっぽくスパムと比スパムが分かれてきておりますな。このような素性を使った場合の精度は90%程度になり、もう少しな感じです。

●Listed Count(他人のリストに入っている個数)
listed_count.png


●Listed ratio(他人のリストに入っている個数をフォローさわている数で割ったもの)
listed_ratio.png


これらの素性が優秀すぎんじゃん。もうSVMとかいらないレベル!!!

これらの素性が強すぎてこれらを入れたあとに他の素性を追加するとノイズになって逆に精度が低下してるように思います。一応、listed系を抜いてからツィート類似度の素性を入れて学習すると1[%]程度は上がることはあがるので、有効性はあるといえばある、、、

今度は素性選択ができるようにしようと、、
スポンサーサイト



home