SoGap のパラメータチューニング

先日、2ch まとめブログに関するソーシャルデータ で公開したデータを集計している最中に、 SoGapGapRating GapRating を算出する際のパラメータチューニングについてのメモを見つけたので、参考までに公開しておきます。丸 1 年ほど放置していた SoGap ですが、いろいろと微妙な所も出てきているので今年は手を入れていけると良いなと思っています。

SoGap とは

はじめに、SoGap の簡単な概要から。詳細については SoGap - SNS 間での話題性の「ギャップ」を利用したカテゴライズ&ランキング も参照下さい。

SoGap とは
SoGap は、はてなブックマーク数、Twitter のツイート数、Facebook の「いいね!」数の 「ギャップ」を利用して、それぞれのソーシャルサービス内で尖っている話題を見つけるための Web サービスです。

http://sogap.cielquis.net/

ソーシャルメディアを含めた多くのコミュニティにおいて、本格的な成長期 以降に出てくる(主に、黎明期から利用していたユーザからの)不満の一つに「話題になるものが他のコミュニティと代わり映えしなくなり、つまらなくなった」と言うものがあります。こう言った現象が発生するのは、利用しているユーザが多様化した結果とも考えられるので一概に悪いとも言えないのですが(参考:SBM の衆愚化と大衆化)、個人的にも、黎明期のコミュニティ内で盛り上がっていた「尖った(ニッチな)話題」が埋もれてしまうのは惜しいと感じます。

SoGap では、「どのコミュニティでも話題になっているものがノイズとなるなら、それらを取り除けば良いのでは?」を出発点として、それぞれのコミュニティ内でのみ話題になっているものをピックアップする事を試みた Web サービスです。

GapRating を算出するための式

SoGap において、ある記事が「尖っているかどうか」を判定するための GapRating GapRating は以下の式で導出されます。尚、簡単化のため、これ以降は基準となる値を「Twitter リツイート数」に固定します

cmp = max(Hb, Fb, α)
GR  = Tw / cmp + sqrt(max(Tw - cmp, 0))

※GR: GapRating (ランキングに使用する値) 
 Tw: Twitter リツイート数
 Hb: はてなブックマーク数
 Fb: Facebook の「いいね!」数

この式において、パラメータに当たる部分は平方根(sqrt)、および α になります。平方根については厳密にはパラメータとは呼べませんが、この辺りの採用の経緯については SoGap - SNS 間での話題性の「ギャップ」を利用したカテゴライズ&ランキング を参照下さい。

パラメータ α のチューニング

ようやく本題。まず、α の役割は「Twitter リツイート数以外の値が非常に小さい場合に GapRating GapRating が高くなりすぎる事を抑制する」ためのものになります。SoGap は、公開後しばらくの間は α のパラメータ無しで更新していたのですが、「Twitter リツイート数以外の値がゼロのものが圧倒的に有利」と言う傾向が見て取れました。これはこれで目的に沿っているような気もするのですが、実際に結果を見ると必ずしも Twitter 上でも話題になっているとは言い難いものが上位にランクインしており、やはり何らかの調整の必要性を感じて導入したパラメータとなります。

パラメータ α のチューニングを行う際に参考にしたデータを下表に示します。これは、Twitter リツイート数が 5, 10, 20, 50, 100, 200, 500 のそれぞれの場合において、α の値を変化させた時の GapRating GapRating の変化を追ったものです。

α\Tw 5 10 20 50 100 200 500
1.0 7.00 13.00 24.35 57.00 109.94 214.10 522.33
5.0 1.00 4.23 7.87 16.70 29.74 53.96 122.24
10.0 0.00 1.00 5.16 11.32 19.48 33.78 72.13
20.0 0.00 0.00 1.00 7.97 13.94 23.41 46.90
50.0 0.00 0.00 0.00 1.00 9.07 16.25 31.21

尚、簡単化のため、Twitter リツイート数以外の値は全てゼロとしています。また、上式には表れていませんが、プログラム上は Twitterリツイート数が α 以下の場合は 0 として算出しています。算出プログラムの詳細については 情報の分類・推薦アルゴリズムとクロール問題 を参照下さい。

比較対象として、Twitter リツイート数を 500 に固定し、次に高い値(便宜的に、はてなブックマーク数とする)を 490, 450, 400, 300, 200, 100, 50 と変化させた時の GapRating GapRating の値を下表に示します。尚、この領域においては GapRating GapRating は α の影響を受けません。

Tw\Hb 490 450 400 300 200 100 50
500 4.18 8.18 11.25 15.81 19.82 25.00 31.21

これらの比較についてですが……例えば、(Tw:500,Hb:100)の GapRating 25.00 を基準に見てみると、α = 1.0 の場合は(Tw:20,Hb:0)でほぼ同等のGapRating 24.35 となります。これが α = 20.0 になると、(Tw:200,Hb:0)の GapRating 23.41 まで待つ事となり(α = 1.0 よりも 1 桁多い)、Twitter リツイート数以外がゼロに近い場合、α の設定で最終的なレーティングもかなり変わってくる事が分かります。

SoGap は、現時点では α = 10.0 を採用しています。この類のパラメータについては、なかなか最終的な設定値に対する客観的な根拠を示す事は難しく SoGap においても「私の主観です」以上の事は言えないのですが、まぁまぁこんなものかなぁと言う感じです。もちろん、もっと良い方法等が見つかれば見直す可能性はあります。