5つ星の評価でソートする良い方法は何ですか?
質問
私は、5つ星システムを使用して、顧客の評価によって製品の束を並べ替えようとしています。私がこれを設定しているサイトは、多くの評価を持っておらず、新しい製品を追加し続けているので、通常、評価の数が少ないいくつかの製品を持っています。
平均星評価を使ってみましたが、評価の数が少ないと、このアルゴリズムは失敗します。
例:5つ星の評価が3つある製品は、5つ星の評価が100つあり、2つ星の評価が2つある製品よりもよく表示されるでしょう。
2番目の製品の方が、評価数が多いため、統計的に信頼性が高く、上位に表示されるはずでは?
どのように解決するのですか?
2015 年以前は、インターネット ムービー データベース (IMDb) は、ランキングに使用する数式を公示していました。 トップ 250 の映画リストを公開していました。引用すると
Top Rated 250 Titles の計算式では、以下のようになります。 真のベイズ推定値 :
weighted rating (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C
のところ。
- R = 映画の平均(平均値)
- v = 映画の投票数
- m = トップ250に掲載されるために必要な最低投票数(現在は25000票)
- C = レポート全体の平均得票数 (現在は 7.0)
上位250位までは、一般投票者からの投票のみが考慮されます。
そんなに難しいことではありません。計算式は
rating = (v / (v + m)) * R +
(m / (v + m)) * C;
というように数学的に単純化することができます。
rating = (R * v + C * m) / (v + m);
変数は
-
R - アイテム自身の評価です。R はアイテムの投票数の平均値です。(例えば、あるアイテムに投票がない場合、そのRは0です。誰かがそれに5つの星をつけた場合、Rは5になります。他の誰かが星を1つ付けたら、R は 3 になり、その平均は
[1, 5]
. といった具合です)。 -
C - 平均的なアイテムの評価です。現在のものを含む、データベース内のすべてのアイテムの R を見つけて、それらの平均を取ります; これが C です。 (データベース内に 4 つのアイテムがあり、それらの評価が
[2, 3, 5, 5]
. C はそれらの数値の平均である 3.75 となります)。 - v - ある項目に対する投票数です。(別の例を挙げると、5人がある項目に投票した場合、vは5です)。
- m - 調整可能なパラメータです。レーティングに適用される "smoothing" の量は、m に関連する投票数 (v) に基づいています。また、IMDb の m の説明を "リストに載せるために必要な最小の投票数" として誤解しないでください - このシステムは m より少ない投票数のアイテムをランキングすることが完全に可能です。
この式が行うことは、平均を計算する前に、それぞれ C の値を持つ m 個の架空の票を追加することだけです。最初のうちは、データが十分でない (すなわち、投票数が m よりも劇的に少ない) ので、空白は平均的なデータで埋められることになります。しかし、投票が蓄積されると、やがて架空の票は本物の票にかき消されるようになります。
このシステムでは、投票によって評価が乱高下することはありません。むしろ、ある方向に少し揺さぶられるだけなのです。
投票がゼロのときは、虚数票だけが存在し、そのすべてがCである。したがって、各項目の評価はCで始まる。
こちらもご覧ください。
関連
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] List<T>をオブジェクトのプロパティでソートする方法
-
[解決済み] データフレームの行を複数の列でソート(並び替え)する。
-
[解決済み] 多次元配列の値によるソート方法
-
[解決済み] カスタムオブジェクトを含むNSMutableArrayをソートするにはどうすればよいですか?
-
[解決済み] 辞書をキーでソートするにはどうしたらいいですか?
-
[解決済み] カスタムオブジェクトのArrayListをプロパティでソートする
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み] ElasticSearchでソートするためのフィールドのマッピングが見つかりません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Elasticsearchがフィルタにないフィールドの値で注文する。
-
[解決済み] 負の整数の基数ソート
-
[解決済み] サイズnとmの2つのソートされた配列をマージする際の時間複雑度
-
[解決済み] Scalaで配列を並べ替えるには?
-
[解決済み] Haskellでは、どのように私はペア(タプル)のリストを並べ替えるために組み込みのsortBy関数を使用することができますか?
-
[解決済み] 構造体の配列を(任意の)フィールド名で単純にソートする最短の方法は何ですか?
-
[解決済み] ElasticSearchでソートするためのフィールドのマッピングが見つかりません。
-
[解決済み] なぜHaskellのクイックソートは "真の "クイックソートではないのか?
-
[解決済み] Map[string]intを値で並べ替えるには?
-
[解決済み] Sublime text 2 - 単語のリストをアルファベット順に並べる方法 (DESC / ASC)