日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于用户评价的评分模型

發布時間:2025/3/21 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于用户评价的评分模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、場景

  豆瓣圖書、時光電影等索引類站點的不考慮時間因素的產品評分,其核心是通過用戶的評價計算出可量化的分數來衡量產品的受歡迎程度。使用威爾遜區間法進行評分,并使用貝葉斯平均法修正評分。

二、威爾遜區間法

  威爾遜區間法是基于二項分布的一種計算方法,其結果與好評率和評價次數相關。其假設只有“喜歡”和“不喜歡”兩個可選項,使其符合二項分布,并根據置信水平得到結果。

  計算公式如下:

  其中Smax是最大評分,pmin是威爾遜區間下限值,p是好評率(通常為平均值/總分值),n是評價總數,K是統計量常數(表示某個置信水平下z的統計量,在90%的置信水平下,值為1.64,在95%的置信水平下,值為1.96,在99%的置信水平下,值為2.58)。
  以豆瓣的評分機制為例,其評價選項為一星至五星,評分十分制。若存在產品ABCD,其評價如下表所示,那么其在95%置信水平下的評分為:

產品

一星

二星

三星

四星

五星

平均值

評分

A

32

32

32

32

32

5.00

4.23

B

50

25

10

25

50

5.00

4.23

C

320

320

320

320

320

5.00

4.76

D

500

250

100

250

500

5.00

4.76

  可以看出,相對于常用的平均值法,威爾遜區間法更準確的反映除了評價差異。

三、貝葉斯平均法

  嚴格來說,貝葉斯平均法并不是一個評分模型,而是平衡模型。其核心是為冷門題目提供一個補償值使其不至于因為少量評價而產生不可靠的評分,而在評價數量多后減小補償值的比例,最終使得隨著評價數量的增加而評分逐漸逼近實際值。
  計算公式如下:

  其中C是補償評價數,M是補償評分,n是評價數量,s是已計算評分。通常C、M應為常量,使最終評分只與評價數量和已計算評分相關。
  以豆瓣的評分機制為例,其評價選項為一星至五星,評分十分制。若存在產品EFGH,其評價如下表所示,那么其在95%置信水平,C=64、M=4.0368的補償條件下的修正評分為:

產品

一星

二星

三星

四星

五星

平均值

評分

修正

E

0

0

1

0

0

5.00

0.55

3.98

F

10

0

5

0

10

5.00

3.18

3.79

G

10

10

10

10

10

5.00

3.66

3.87

H

100

50

20

50

100

5.00

4.46

4.39

  顯然,對評價數量少的產品評分進行了大幅修正。

四、總結

  需要明確威爾遜區間法用于對單個產品評分,貝葉斯平均法用于對多個產品平衡評分。對于威爾遜區間法,需要確保好評率的正確性及選擇合適的置信水平。對于貝葉斯平均法,需要使補償評價數和補償評分為常量,以使得單個產品的評分僅與自身的評價相關。

五、更多

  更為細致的評分,需要考慮評分的用戶的權重性(資深用戶和普通用戶)、傾向性評分(用戶的評分習慣),二者都可以在上述方法上擴充修改。

參考

  阮一峰,《基于用戶投票的排名算法(五):威爾遜區間》
  阮一峰,《基于用戶投票的排名算法(六):貝葉斯平均》

實現代碼-Python

import sysdef Avg(data,scoreMap):totalScore = float(sum(map(lambda t:t[0]*t[1], map(None,data,scoreMap))))totalN = sum(data)return totalScore / totalNdef Wilson(p, n, maxScore):p = float(p)K = 1.96 # 95% confidence level_K2_div_n = (K ** 2) / npmin = (p + _K2_div_n / 2.0 - K*((p*(1-p)/n + _K2_div_n/n/4.0)**0.5)) / (1 + _K2_div_n)return pmin * maxScoredef WilsonAvgP(n):totalP = 0.0; totalN = 0p = 0.01while True:totalP += Wilson(p, n, 1); totalN += 1p += 0.01if p >= 1: breakreturn totalP / totalNdef Bayesian(C, M, n, s):return (C*M + n*s) / (n + C)DATA = {"A" : (32,32,32,32,32),"B" : (50,25,10,25,50),"C" : (320,320,320,320,320),"D" : (500,250,100,250,500),"E" : (0,0,1,0,0),"F" : (10,0,5,0,10),"G" : (10,10,10,10,10),"H" : (100,50,20,50,100),} SCORE_MAP = (0,2.5,5,7.5,10) MAX_SCORE = 10result = {} # key : avgScore, wilsonScore, wilsonRank C = 64; M = WilsonAvgP(C) * MAX_SCORE for k,v in DATA.items():n = sum(v)avgScore = Avg(v,SCORE_MAP)wilsonScore = Wilson(avgScore / MAX_SCORE, n, MAX_SCORE)wilsonRank = Bayesian(C, M, n, wilsonScore)result[k] = (avgScore, wilsonScore, wilsonRank) for k in sorted(result.keys()):v = result[k]print k,":","%.2f" % v[0]," ","%.2f" % v[1]," ","%.2f" % v[2]

?

轉載于:https://www.cnblogs.com/kui2/archive/2013/03/15/2961778.html

總結

以上是生活随笔為你收集整理的基于用户评价的评分模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。