カモフラージュするスパムレビュアの発見アルゴリズム

Posted: , Modified:   Python DataMining Algorithm Qiita

本稿は Qiita 投稿記事 のバックアップです.

概要

結託したスパムレビュアを発見するアルゴリズムに引き続き, オンラインショッピングやレストランレビューサイトにおいてスパムレビュアーを発見するために, 通常のレビュアーにカモフラージュするようなスパムレビュアを発見するアルゴリズム FRAUDAR を用意した.

FRAUDAR は 2016年の ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD 2016) でベストペーパー賞を受賞したアルゴリズムで, 著者らによって実装が公開されている

今回は, スパムレビュア発見アルゴリズムの評価用データセットなどをより簡単に解析できるように 結託したスパムレビュアを発見するアルゴリズムと共通の インターフェイスを作成した.

使い方

今回作成した,FRAUDARのラッパー rgmining-fraudarPyPI に登録してあるので,pip コマンドにてインストールできる.

$ pip install --upgrade rgmining-fraudar

fraudar というパッケージが追加され,その中の fraudar.ReviewGraph がこのアルゴリズムを実装するグラフクラスである. ReviewGraph クラスのコンストラクタは,オプションで何種類のカモフラージュパターンを考えるかというパラメータと,内部で使うサブアルゴリズムを受け取るが,前者のみデータセットに合わせて与えれば良いと思う(両方デフォルトでも問題ない).

import fraudar

# 例えば 10パタンのカモフラージュを考える場合.
n = 10
graph = fraudar.ReviewGraph(n)

そして,グラフにレビュア,商品,そしてレビューを追加する. 結託したスパムレビュアを発見するアルゴリズムの例と同じ方法で追加できる.

reviewers = [graph.new_reviewer("reviewer-{0}".format(i)) for i in range(2)]
products = [graph.new_product("product-{0}".format(i)) for i in range(3)]
graph.add_review(reviewers[0], products[0], 0.2)
graph.add_review(reviewers[0], products[1], 0.9)
graph.add_review(reviewers[0], products[2], 0.6)
graph.add_review(reviewers[1], products[0], 0.1)
graph.add_review(reviewers[1], products[1], 0.7)

となる.レビュアと商品は ReviewGraphnew_reviewer, new_product メソッドを使って作成する. レビューは add_review メソッドで追加する.

アルゴリズムの実行には,update メソッドを1回だけ呼ぶ.

graph.update()

最後に,解析結果を取得する. new_reviewer メソッドが返したレビュアには anomalous_score という属性がある. この属性は,そのレビュアが特異(スパマー)と判断された場合 1 をそうでなければ 0 に設定される.

for r in graph.reviewers:
    print(r.name, r.anomalous_score)

また,new_product メソッドが返した商品オブジェクトには summary という属性がある. この値は,特異と判断されなかったレビュアーのレビューからなる平均を返す.

for p in graph.products:
    print(p.name, p.summary)

まとめ

結託したスパムレビュアーを発見する Fraud Eagle アルゴリズムに引き続き, FRAUDAR アルゴリズムのラッパーを作成した. どちらもスパムレビュア発見アルゴリズムの評価用データセットを扱えるように 共通のAPI を提供しているので,挙動を簡単に比較できると思う.