ユースケース: オブジェクトの評価が 1 ~ 5 つ星であると仮定します。平均評価4.1ですでに50票です。ユーザーが投票 (1 ~ 5 スター) を行うと、評価を再計算する必要があります。
そのロジックを実装する方法は?問題は、すべての投票の価値がわからず、現在の評価と合計投票数だけがわからないことです。
newRating = (oldRating * oldCount + currentVote) / (oldCount + 1)
仮定:
f = (1+2+3)/3 = 6/3 = 2
= (2+2+2)/3 = 6/3 = 2
f=g であることがわかっています。現在の評価が 2 で、総投票数が 3 であることがわかっている場合、すべての投票の合計として 2*3=6 になります。次のように、平均値に 4 を追加します。
f = 6/3
f' = (6+4)/4 = 2.5
基本的な算術演算から、(50 * 4.1 + newvote) / 51 はすべての投票の平均と同じであることがわかります。繰り返し行うと四捨五入エラーが発生し、一定数の投票の後、1 票で平均化することに煩わされる価値さえありませんが、基本的な公式は適切です。