糞糞糞ネット弁慶

読んだ論文についてメモを書きます.趣味の話は http://repose.hatenablog.com

Understanding and Combating Link Farming in the Twitter Social Network(WWW 2012) 読んだ

Understanding and Combating Link Farming in the Twitter Social Network(pdf)

概要

TwitterにおけるSPAMや,特にfollow数を稼ぐタイプのspammer(WebページのSPAMにおいてはリンクファームと呼ばれていたもの)=大量フォローおじさん/リンクファーマーについて分析し,大量フォローおじさんに関するペナルティ付きのスコアを提案.

We conjecture that the Twitter users engaging in link farming are social capitalists, whose goal is to amass social capital and promote their legitimate content on Twitter.(略) We show that social capitalists tend to reciprocate (i.e., follow back) to anyone who connects to them, to increase their social capital.

有名人が何も考えずにSpammerをfollow返ししてしまうので,Spam行為が助長されると指摘している.笑った.

データ

まずSpamアカウントのリストを用意する.特定については

  • 2009年にクロールされたアカウントを再度クロールし,http://twitter.com/suspendedにリダイレクトされるかを確認
    • これだけでは本当にSpamかわからない
  • その上でsuspendされたアカウントが投稿したbit.lyとtinyurlのアドレスを取得し,それらサービスのblacklistに入っているかをチェックする事により特定

分析

We showed evidence that these social capitalists connect with others with a similar desire to amass social capital, including each other and spammers.

  • 何も考えずにfollow返ししまくるユーザのおかげで大量フォローおじさんは大成功している
  • follower数が少ない人はspammerをfollow返ししないけど,followerが増えてくるとspammerをほぼfollow返しする人と全く返さない人で二極化される(fig 5)
  • 大量フォローおじさんはSPAMじゃない
    • トップ100000アカウントのうち,235アカウントは‘verified’アカウントである
    • トップ100000アカウントのうちランダムな100アカウントをボランティアに目視確認してもらったが86アカウントは人間であると判定された
  • 大量フォローおじさんのbioに現れやすい単語はmarket/business/internet

Having studied the characteristics of top link farmers, we now explore potential reasons for why they participate in link farming. (略) One simple and intuitive explanation is that these users have similar incentives as spammers.

とはっきりと言い切っている.

大量フォローおじさんへの対抗策: Collusionrank

有名人が何も考えずにfollow返しするから奴らがつけあがる→どうすればいいか→何も考えずにfollowする奴のスコアを下げよう!という発想のもとCollusionrankが提案される.
Rubyのコードで書くとこんな感じになる.

# graph: following/follower graph
# spammers: lists of spammer
# alpha: parameter of decay
def collusion_rank(graph, spammers, alpha)
  # initial score
  d = Hash.new{|h, k|h[k] = 0.0}
  graph.each_user do |id|
    d[id] = -1 * spammers.size if spammers.include?(id)
  end
  
  rank = d
  while !rank.converged?
    graph.each_user do |id_1|
      tmp = id_1.followings.inject(0.0){|sum, id_2| sum += rank[id_2] / id_2.followers.size}
      rank[id_1] = alpha * tmp + (1 - alpha) * d[id_1]
    end
  end
  rank
end

ノリとしては,PageRankに近くはあるがスコアの振り方がSpammerをフォローしていればいるほどそいつらからマイナスのスコアが伝播してくる.良い.

大体よく見る光景が検証されてて凄い.collusionrankを日本人ユーザで作って公開してみたい.