IMDB.COMランキングアルゴリズム(ベイズ式)とRedditコメントランキングアルゴリズム

3550 ワード

ブログの移行:時空アリhttp://cui.zhbor.com/
最近、万維ブランドの口コミのプロジェクトをするため、口コミを比較する必要があります.今、ライブラリの中にも一部のデータがあります.多くのブランドの採点が同じです.これはライブラリの中の本当のデータです.もし私が簡単に平均点で評価すれば、あまり公平ではありません.多くのコメントが多いからですが、少ないものもあります.
だから私はいくつかのアルゴリズムを研究しました
最初はIMDB.COMランキングアルゴリズムを引用しました.彼は主にtop 250をランキングし、採点人数に一定の制限がありますが、私たちのブランドライブラリでは対応するブランドを露出させないわけにはいきません.そのため、ブランドライブラリのランキングにベイズ式を使用するアルゴリズムは適切ではなく、意味がありません.彼はいくつかのコメントを超えたデータのランキングを対象にしているため、コメント数が最低の有効採点人数を超えていない場合には機会がありません.ベイズにはもう一つの欠点があります.主な問題は、ユーザーの投票が正規分布であると仮定することです.例えば、映画Aには10人の観客が採点され、5人は5星、5人は1星である.映画Bも10人の観客が採点し、三星に与えた.この2本の平均得点(算術平均でもベイズ平均でも)は三星だが、映画Aは映画Bよりも見応えがあるかもしれない. 
IMDB.COMランキングアルゴリズムの公式を共有します.
WR = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C
具体的な意味:
R =  単発映画の平均得点v=単発映画の有効採点人数(for this top 250,only votes from regular voters are considered.)ファンの票集め防止
m =  トップ250入りに必要最低限の有効採点数C=全映画平均
-------------------------------
IMDB.COMランキングアルゴリズムは使用できないので、私はredditコメントランキングアルゴリズムに転戦しました.彼はここでウィルソン信頼区間を設計し、信頼区間の幅に基づいてより人間的なランキングを計算することができます.具体的な計算方法は次のとおりです.
  • コメントごとの「好評率」
  • を計算
  • は、各「評価率」の信頼区間(95%の確率で)を計算する.
  • は、信頼区間の下限値に基づいて順位付けを行う.この値が大きいほど、順位が高くなります.

  • 私自身は少し複雑な感じがしますが、PHPで以下のように書きます.
    1 function willson($ups=10, $downs=1){
    2         $n = $ups + $downs; //    
    3         if($n==0) return 0;
    4         $z = 1.0;
    5         $phat = (float)$ups/$n;
    6         return ($phat+$z*$z/(2*$n)-$z*sqrt(($phat*(1-$phat)+$z*$z/(4*$n))/$n))/(1+$z*$z/$n);
    7     }

    次のようになります.
    $ups好評数
    $downs評価数 
    $z ある信頼レベルに対応するz統計量を表し、これは定数であり、ルックアップテーブルによって得ることができる.一般的に、95%の信頼レベルでは、z統計量の値は1.96である.
    この式を使うのも問題があります.ブランドの採点は5つの等級で採点されていますが、この式は善し悪しの採点しかないので、私は信頼区間の違いを利用して等級ランキングを行います.最后の结果はとても満足して、ランキングはとても人间的で、自分の望む効果を达成することができます.自分が平均値でランキングを計算していると、少し恥ずかしいです.
     
     
    参照先:http://www.biaodianfu.com/imdb-rank.html
    参照先:http://www.biaodianfu.com/reddit-comment-sorting-algorithms.html
    転載先:https://www.cnblogs.com/hongbo819/p/3956824.html