私の質問はもっと数学的なものです。サイトに投稿があります。ユーザーはそれを好きでも嫌いでもかまいません。投稿の下には、たとえば、-5 嫌い、+23 いいねなどと書かれています。これらの値に基づいて、0 ~ 10 または (-10 ~ 0 および 0 ~ 10) の範囲で評価を行いたいと考えています。正しく作る方法は?
3 に答える
[-10,10] の間の評価が必要なため、これはあなたの質問に答えないかもしれませんが、このブログ投稿では、肯定的な評価と否定的な評価 (あなたの場合は好き嫌い) があるアイテムにスコアを与える最良の方法について説明しています。
のような簡単な方法
- (肯定的な評価) - (否定的な評価)、または
- (肯定的な評価) / (合計評価)
最適な結果は得られません。
代わりに、二項比率信頼区間と呼ばれる方法を使用します。
ブログ投稿の関連部分を以下にコピーします。
正解: スコア = ベルヌーイ パラメーターのウィルソン スコア信頼区間の下限
言いたいこと: 肯定的な評価の割合と少数の観察による不確実性とのバランスを取る必要があります。幸いなことに、この計算は 1927 年に Edwin B. Wilson によって解決されました。私たちが聞きたいのは、私が持っている評価を考えると、肯定的な評価の「本当の」部分が少なくとも何パーセントである可能性が 95% あるということですか? ウィルソンが答えます。肯定的な評価と否定的な評価 (つまり、5 つ星評価ではない) のみを考慮すると、肯定的な評価の割合の下限は次のようになります。
(ソース: evanmiller.org )
(下限を計算するには、プラス/マイナスを示す場合はマイナスを使用します。) ここで、p は肯定的な評価の観測された割合、zα/2 は標準正規分布の (1-α/2) 分位点、n は合計です。評価数。
これは、Ruby で実装されたもので、ブログ投稿からのものです。
require 'statistics2'
def ci_lower_bound(pos, n, confidence)
if n == 0
return 0
end
z = Statistics2.pnormaldist(1-(1-confidence)/2)
phat = 1.0*pos/n
(phat + z*z/(2*n) - z * Math.sqrt((phat*(1-phat)+z*z/(4*n))/n))/(1+z*z/n)
end
これはシェパードの答えの拡張です。
total_votes = num_likes + num_dislikes;
rating = round(10*num_likes/total_votes);
アプリへの訪問者数によって異なります。約 100 人のユーザーがアプリを評価するとします。最初のユーザーが低評価をクリックすると、上記のアプローチに基づいて 0 と評価されます。しかし、これは論理的に正しくありません..サンプルが非常に小さいため、ゼロにすることができません。ポジティブな点が 1 つだけあるのと同じ - アプリの評価は 10 です。
より良い方法は、分子と分母に定数値を追加することです。アプリに 100 人の訪問者がいる場合、10 回のアップダウンが発生するまでは、極端な値 (0 評価でも 10 評価でもない) にならないと想定しても安全です。だから、それぞれの好き嫌いに5を足すだけです。
num_likes = num_likes + 5;
num_dislikes = num_dislikes + 5;
total_votes = num_likes + num_dislikes;
rating = round(10*(num_likes)/(total_votes));
あなたが望むのは、基本的に好き/嫌いの割合のようです。混乱を招く可能性があるため、-10 から 10 ではなく、0 から 10 にします。したがって、0 から 10 のスケールでは、0 は「すべて嫌い」、10 は「すべて好き」になります。
total_votes = num_likes + num_dislikes;
rating = round(10*num_likes/total_votes);
そして、それは基本的にそれです。