はじめに
オンラインショッピングやレストランレビューサイトにおいて,
結託してレビュー結果が不当に高くまたは低くなるようにダミーレビューを投稿する
スパムレビュアーを発見したい.
今回は,2013年に AAAI Conference on Weblogs and Social Media という国際会議で発表された,Fraud Eagle アルゴリズムを実装した.
レビューデータ
Fraud Eagle では下の図のようなレビューグラフを考える.
つまり,レビューを投稿した人(レビュア)とレビューの投稿先(商品)をそれぞれ頂点とし,
レビュー関係を枝で表す.レビュー自体は文章でも星何個でも良いが,
そのレビューがポジティブなのかネガティブなのか判断できる必要がある.
今回は,レビューは 0 から 1 までの間の数値を取ることにし,0.5 以上ならばポジティブ,
そうでなければネガティブと判断することにした.
使い方
今回作成した rgmining-fraud-eagle
は PyPI からインストールできる.
pip install --upgrade rgmining-fraud-eagle
fraud_eagle というパッケージがインストールされるので,
その中からReviewGraph
クラスのインスタンスを作成する.
なお,Fraud Eagle は 0 より大きく 0.5 未満ののパラメータを一つとる.
パラメータはデータセットによって最適値が変わるが,今回は中央 0.25 を設定してみる.
import fraud_eagle as feagle
graph = feagle.ReviewGraph(0.25)
次に,グラフにレビュア,商品,そしてレビューを追加する.
上記図の通りのグラフを作成する場合,
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)
となる.レビュアと商品は ReviewGraph
の new_reviewer
, new_product
メソッドを使って作成する.
レビューは add_review
メソッドで追加する.
グラフを作成し終わったら,ReviewGraph
の update
メソッドを,更新が収束するまで実行する.
Fraud Eagle は Loopy belief propagation というアルゴリズムを使っており,
update の呼び出し一回で 1ループに対応させている.
update メソッドは,最大修正量を返すので,十分小さくなったところで終了する.
print("Start iterations.")
max_iteration = 10000
for i in range(max_iteration):
# Run one iteration.
diff = graph.update()
print("Iteration %d ends. (diff=%s)", i + 1, diff)
# 最大修正量が 10^-5 ならば収束したと思う
if diff < 10**-5:
break
最後に,解析結果を取得する.
new_reviewer
メソッドが返したレビュアには anomalous_score
という属性がある.
この属性は 0 から 1 の値を取り,そのレビュアがどの程度特異(スパマー)かを表している.
for r in graph.reviewers:
print(r.name, r.anomalous_score)
また,new_product
メソッドが返した商品オブジェクトには summary
という属性がある.
この値は,その商品に付けられたレビュースコアのレビュアの anomalous_score
による重み付き平均を返す.(anomalous_score
が大きいレビュアのレビューはあまり考慮しない平均値)
for p in graph.products:
print(p.name, p.summary)
まとめ
結託したスパムレビュアーを発見する Fraud Eagle アルゴリズムを実装した.
また,この種類のスパムレビュアー発見アルゴリズムの評価用人工データ も公開している.
人工データの使い方はスパムレビュア発見アルゴリズムの評価用データセットにまとめてある.
スパムレビュー対策に取り組んでいる人の参考になればと思う.