贝叶斯公式sql:带权重的评级系统

bayesan formula sql: rating system with weight

今天我发布了 a question if bayesan 对我来说是一个很好的方法来进行评级系统权重。因为我没有得到答案,所以我尝试自己实现。

在我的数据库中,用户可以为每个组添加 1 到 5 星的投票。然后我必须通过这些选票显示排行榜。到目前为止,我一直在做的是在没有权重的情况下按平均票数对它们进行排序。这不太好,因为一个拥有 5.0 票和 20 票的小组排在平均 4.9 票和 10000 票的小组之前。

这是我的 table:

CREATE TABLE IF NOT EXISTS votes(
user_id BIGINT,
group_id BIGINT,
vote SMALLINT,
vote_date timestamp,
PRIMARY KEY (user_id, group_id)

这是我尝试进行的查询,它似乎有效:

SELECT 
    v.group_id,
    s_ref.title, 
    s_ref.username, 
    COUNT(vote) AS amount, 
    ROUND(AVG(vote), 1)::float AS average,
    -- (WR) = (v ÷ (v+m)) × R + (m ÷ (v+m)) × C 
    (  (COUNT(vote)::float / (COUNT(vote)+10)) * AVG(vote)::float + (10::float / (COUNT(vote)+10)) * 4 ) AS bayesan,
    RANK() OVER (PARTITION BY s.lang  ORDER BY(  (COUNT(vote)::float / (COUNT(vote)+10)) * AVG(vote)::float + (10::float / (COUNT(vote)+10)) * 4 ) DESC)
FROM votes AS v
LEFT OUTER JOIN supergroups_ref AS s_ref
ON s_ref.group_id = v.group_id
LEFT OUTER JOIN supergroups AS s
ON s.group_id = v.group_id
GROUP BY v.group_id, s_ref.title, s_ref.username, s.nsfw, s.banned_until, s.lang, s.category, s.bot_inside
HAVING 
    (s.banned_until IS NULL OR s.banned_until < now()) 
    AND COUNT(vote) >= 10 
    AND s.bot_inside IS TRUE;

但我只遗漏了一件事(我希望):查询中贝叶斯公式中的 4 只是一个假值,因为读到这里我还没有理解 what is mean with 'C'。你能告诉我应该在 c 中添加什么吗?

在 Google'ing 贝叶斯估计之后,转到维基百科页面,阅读一点,然后转到名为 "Practical example of Bayes estimators" 的部分,它指出

where W is the weighted rating and C is the average rating of all films

所以这很可能对您来说意味着它是一个平均值 vote/rating,无论组别如何。