学校のプロジェクトでは、ランキングシステムを実装する必要があります。ただし、ランクの平均がばかげていると考えました。1人のユーザーが5つ星にランク付けした場合、188人のユーザーが4つ星にランク付けした場合よりも平均が高くなり、それはばかげています。
ですから、「スマート」ランキングのアルゴリズムの例をお持ちの方はいないでしょうか。与えられたランキングとランキングの数だけを考慮する必要があります。
ありがとう!
学校のプロジェクトでは、ランキングシステムを実装する必要があります。ただし、ランクの平均がばかげていると考えました。1人のユーザーが5つ星にランク付けした場合、188人のユーザーが4つ星にランク付けした場合よりも平均が高くなり、それはばかげています。
ですから、「スマート」ランキングのアルゴリズムの例をお持ちの方はいないでしょうか。与えられたランキングとランキングの数だけを考慮する必要があります。
ありがとう!
ベイズ確率に触発された方法を使用できます。アプローチの要点は、アイテムの真の評価について最初の信念を持ち、ユーザーの評価を使用してあなたの信念を更新することです。
このアプローチには、次の2つのパラメーターが必要です。
R
を「最初の信念」と呼んでください。W
これを、最初の信念がその価値の「価値のある」W
ユーザー評価である場合に呼び出します。パラメータR
とを使用するとW
、新しい評価の計算は簡単です。ユーザーの評価とともに価値の評価があると想定W
R
し、平均を計算します。たとえば、との場合R = 2
、W = 3
以下のさまざまなシナリオの最終スコアを計算します。
(3*2 + 100*4) / (3 + 100) = 3.94
(3*2 + 3*5 + 1*4) / (3 + 3 + 1) = 3.57
(3*2 + 10*4) / (3 + 10) = 3.54
(3*2 + 1*5) / (3 + 1) = 2.75
(3*2 + 0) / (3 + 0) = 2
(3*2 + 1*1) / (3 + 1) = 1.75
この計算では、ユーザーの評価の数とそれらの評価の値が考慮されます。結果として、最終的なスコアは、データが与えられた場合に、特定のアイテムについてどれだけ幸せであると期待できるかにほぼ対応します。
R
を選択するときはR
、評価のないアイテムに対してどのような価値を想定してもよいかを考えてください。あなたが即座にみんなにそれを評価させるとしたら、典型的な評価なしのアイテムは実際には5つのうち2.4ですか?もしそうならR = 2.4
、合理的な選択になります。
ユーザーによる評価が非常に低いアイテムは、評価のないデフォルトのアイテムよりも「悪い」結果になるため、このパラメーターの評価スケールの最小値を使用しないでください。
R
直感だけでなくデータを使用して選択する場合は、次の方法を使用できます。
R
それらのスコアの中央値になることを選択します。評価なしの項目についてもう少し楽観的または悲観的になりたい場合R
は、スコアの別のパーセンタイル、たとえば60パーセンタイル(楽観的)または40パーセンタイル(悲観的)を選択できます。
W
どちらを選択W
するかは、一般的なアイテムの評価の数と、評価の一貫性によって異なります。W
アイテムが自然に多くの評価を取得する場合は高くなる可能W
性があり、ユーザーの評価に対する信頼度が低い場合(たとえば、スパマーアクティビティが多い場合)は高くなるはずです。W
整数である必要はなく、1未満でもかまいません。
選択することW
は、選択することよりも主観的な問題ですR
。ただし、ここにいくつかのガイドラインがあります。
C
一般的なアイテムが評価を取得する場合は、W
を超えてはなりません。超えない場合、最終的なスコアは実際のユーザーの評価よりもC
依存します。R
代わりに、おそらくとの間W
の一部に近い必要があります(ノイズまたは「スパム」評価の程度によって異なります)。C
C/20
C/5
W
比較的小さくする必要があります。一方、アイテムの評価が大きく異なる場合は、W
比較的大きくする必要があります。このアルゴリズムW
は、異常に高いまたは低い評価を「吸収」し、それらの評価をより中程度の評価に変えると考えることができます。W = 0
はユーザー評価の平均のみを使用することと同じです。設定は、ユーザーの評価に関係なく、W = infinity
すべてのアイテムの真の評価がであると宣言することと同じです。R
明らかに、これらの両極端はどちらも適切ではありません。W
が大きすぎると、非常に高い評価がわずかに少ないアイテムよりも、中程度に高い評価が多いアイテムを優先する効果があります。マシンにはランキングとランキングの数しか与えられないとおっしゃっていたので、計算された重み付け方法を試みるのは怠慢かもしれないと私は主張します。
まず、十分な状況では、評価の数が少ないほど、評価の数が多い方が品質を示すのに適しているという命題を確認するための不明な点が2つあります。一例として、ランキングはどのくらいの期間与えられていますか?この同じ方法でランク付けされた異なるアイテムに等しい収集期間(等しい注意)が与えられましたか?他の人は、どの市場がこのアイテムにアクセスできたのか、そしてもちろん、誰がそれを具体的にランク付けしたのか?
次に、質問の下のコメントで、これはフロントエンドでの使用ではなく、「評価はマシンによって、マシンに対して生成される」と述べました。これは、「必ずしも統計的なものではないという私のコメントに対する回答です。1つ人は50の評価を十分に検討するかもしれませんが、それは別の人には十分ではないかもしれません。また、一部の評価者のプロファイルは、ある人にとっては別の人よりも信頼できるように見えるかもしれません。
なぜそれがマシンにとって違うのでしょうか?:)
いずれにせよ、これがマシン間のランキングに関するものである場合、さまざまなマシンがランキングを生成して使用する方法を理解するために、質問をより詳細に行う必要があります。
マシンによって生成されたランキングに欠陥がある可能性があります(より多くのランキングがそれらの「欠陥のある」ランキングを何らかの形で補う可能性があることを示唆するために?それはどういう意味ですか?それはマシンエラーですか?またはアイテムがこれに役に立たないためですか?たとえば、特定のマシンですか?マシンがランキングを生成する方法にアクセスできるかどうかなど、最初に開梱したい多くの問題があります。あるレベルでは、このアイテムがこのマシンに対して持つ可能性のある意味をすでに知っている可能性があります。集計されたランキングは不要です。
さまざまなプラットフォームで見られるのは、十分な投票がない場合の評価の空白化です。「このアイテムには十分な投票がありません」
問題は、ランキングを計算する簡単な式でそれを行うことができないことです。
最小投票数に満たないランキングを非表示にすることをお勧めしますが、インターンは移動平均を計算します。まったく異なる状況で行われる可能性のある非常に古い投票に対して前回からの投票を優先するため、私は常に合計平均よりも移動平均を好みます。
さらに、すべての投票のリストを追加する必要はありません。計算された平均があり、次の投票でこの値が変更されます。
newAverage = weight * newVoting + (1-weight) * oldAverage
最後の20個の値の優先度の重みは約0.05です。(このウェイトで実験してください)
さらに、これらの条件から始めます。
投票なし=中距離値(1〜5つ星=> 3つ星から開始)
10未満の投票が行われた場合、平均は表示されません。
単純な解決策は加重平均かもしれません:
sum(votes)/ number_of_votes
このように、3人が1つ星に投票し、1人が5つ投票すると、加重平均は(1 + 1 + 1 + 5)/ 4=2つ星になります。
シンプルで効果的、そしておそらくあなたの目的には十分です。