いいね!を使った Facebook ユーザーの人気度

ユーザーの人気度を測るために,Facebook のいいね!を調べるということは誰でも思いつくことだが,実際にどう使うかについては,いろいろな方法が考えられる.ここでは,いいね!を使って人気度を表す簡単な指標をいくつか考えてみたいと思う.

記号の定義

議論を進めるために,ここでデータについていくつかの記号を導入しておく.

ユーザー i \in {\cal N} = \{1, \dots, N\} の投稿の集合を {\cal P}(i) とし,投稿 p \in {\cal P}(i) に対して,ユーザー j がいいね!したかどうかを L(p, j) \in \{0, 1\} で表すとする.また,ユーザー ij から受け取ったいいね!の総数を L(i, j) = \sum_{p \in {\cal P}(i)} L(p, j) で表し,ユーザー i が受け取ったいいね!の総数を L(i) = \sum_{j \in {\cal N}} L(i, j) とする.

なんだかごちゃごちゃしてしまったが,この後では L(i), L(i, j), そしてユーザー i の投稿の総数 \#{\cal P}(i) だけを使うので,そこだけ確認してもらえれば OK.

いいね!の総数を人気度として使う

もっとも簡単な人気度の定義は,ユーザーの投稿についたいいね!の合計をそのまま使うことだ.

(1)   \begin{eqnarray*} \text{Pop1}(i) = L(i)  \end{eqnarray*}

この指標は i の投稿数が大きければそれだけ伸びやすいという欠点があるが,実際にやってみるとそれほど悪くない.つまり,たくさん投稿して「数撃ちゃ当たる」で稼いだいいね!よりも,一発のインパクトのある投稿に対するいいね!の方が,トータルではずっと大きいということだ.

ただし,投稿すれば必ずある程度のいいね!が期待できる,いわば「固定ファン」がいるユーザーが強調されるのは確かである.

いいね!の投稿あたり平均を人気度として使う

投稿数の影響を排除したければ,いいね!の総数を投稿数で割って,投稿ごとの平均をとってやればよいというのが,自然な発想である.

(2)   \begin{eqnarray*} \text{Pop2}(i) = L(i) / \#{\cal P}(i) \end{eqnarray*}

これを使うと,Pop1 とはかなり異なった結果が得られる.まず,Pop1 で高得点を得られていたユーザーのほとんどが,かなり小さい値(手元で見た感じだと 1 前後)に落とされる.逆に,Pop2 が大きくなるユーザーには,投稿数が極端に少ない(1, 2 回)ものが目立つようになる.

Pop2 は Pop1 よりも「投稿の質」をよく表しているといえるが,投稿数の少ないユーザーは次の 1 投稿でスコアを大きく変える可能性があり,この影響を受けるという意味では,Pop2 は少し不安定であるともいえる.

いいね!する側を考慮する

Pop2 はそこそこいいスコアとして使えるが,いいね!を押す側の影響を考えると,もう少し改善できる.Pop2 では,いいね!を大量に押しまくる人と,1 回しか押したことのない人がいれば,1 回しか押したことのない人はスコアにほとんど影響を与えないことになるが,このような影響力の差を取り除いたほうが,ユーザーの人気度としては妥当性があるように思える.

このアイディアを具体的に表すために,ここでは次のようなシナリオを考える.まず,ユーザー全員が 1 回ずつ投稿を行う.そして,それらの投稿に対して,各ユーザーが 1 票だけ,だれかの投稿にいいね!するとする.このときに受け取るいいね!の数が,そのユーザーの人気度を表している,と考えることができる.このシナリオでは,各ユーザーが等しく 1 回ずついいね!を押すので,いいね!を押した回数によるユーザーごとの影響力の違いを排除することができる.

この方法の一番のポイントは,ユーザーがそれぞれ誰に投票するかを決めることにある.MASW の Voting スコアでは,あるユーザーがあるユーザーに投票する確率が,投稿に対するいいね!の頻度に比例すると仮定して計算を行った.式でいえば,ユーザー ji に投票するかどうかを確率変数 X_{ij} \in \{0, 1\} として,次のようにして決めている.C_j は標準化定数.

(3)   \begin{eqnarray*} p_{kj} = L(k, j) / \#{\cal P}(k) \hspace{1em} (k \in {\cal N}) \\ X_{1j}, \dots, X_{Nj} \sim {\rm Mn}(1; C_j p_{1j}, \dots, C_j p_{Nj})  \end{eqnarray*}

人気度を得票数の期待値で定義すれば,これは次のように求められる.

(4)   \begin{eqnarray*} \text{Pop3}(i)  = E\left[\sum_{j \in {\cal N}} X_{ij}\right] = \sum_{j \in {\cal N}} \frac{p_{ij}}{\sum_{k \in {\cal N}} p_{kj}} \end{eqnarray*}

このようにして求めた Pop3 は,ユーザーごとのいいね!数の差を考慮しているといえるが,実はもうひとつ利点がある.もしいいね!のネットワークが独立したいくつかのクラスタに分かれている場合,クラスタ内のユーザーの Pop3 の合計は,クラスタ内のユーザー数と一致する.したがって,各クラスタの中心人物がクラスタサイズによらず高々1, 2人しかいないとすれば,Pop3 の値を上から見ていくだけで,クラスタごとの中心人物を列挙することができる上に,その順序はクラスタサイズを表すので,クラスタの階層構造まで追うことができる.このことは友達ネットワーク上でとくに有効で,実際に MASW を動かしてみると,クラスタごとに大きいノードがひとつふたつ現れるのがわかる.

もっとも,Pop3 では投稿数だけでなくいいね!数についても標準化していることになるので,Pop2 の不安定さに加えて,いいね!をほとんど押していないユーザーが与える不安定さも含むことになる.したがって,いいね!がほとんど押されないクラスタがあると,意外な人が人気者としてピックアップされる場合がある.また,Pop3 は値の解釈が難しいという欠点もある.このあたりは改良できるといえばできるかもしれない.

And so on…

とりあえず簡単なところで 3 つほど指標を作ってみたが,このほかにもいろいろな指標が考えられると思う.そもそも人気度とは何なのか,というのが難しいが,この問題はマーケティングに非常に役立つし,重み付き有向グラフ全般に適用できる問題なので,考えてみる価値はありそうだ.

コメントを残す

メールアドレスが公開されることはありません。