引申問題
在選擇電影時,如果熱門電影A有 10000
人觀眾打分,冷門電影B有 100
個人打分,他們的豆瓣評分都是 8.0
分,怎么比較兩部電影的好壞?平時我們都有一種感覺,很多人去評價,這個東西就更可信,只有一兩個人說好,可能是托,那么感覺上是電影A更好。
再例如《漫威》系列電影中,距離《復仇者聯盟4》上映一周,豆瓣分都是 8.1
分的《鋼鐵俠》和《復仇者聯盟3》,《鋼鐵俠》有 353695
人評價打分,《復仇者聯盟3》有 557491
人評價打分,這兩部電影是否一樣好看?
貝葉斯平均
截止至 2019/4/27
,漫威系列 21
部電影按照豆瓣評分如下排序:
排名第一的是預售票房破7億《復仇者聯盟4》,准確來說這還不是 很嚴謹 的對比。一個合理的思路是,如果要比較兩部電影的好壞,至少應該請同樣多的觀眾觀看和評分。既然《鋼鐵俠》的觀眾人數偏少,那么應該設法為它 “增加” 一些觀眾。
貝葉斯平均(Bayesian Model Averaging) 是動態建模中融合集合預報信息的統計后處理方法。通俗來講就是:
能夠在不知道結果的情況下,會自己先估計一個值,然后不斷用新的信息修正,使得它越來越接近自身正確的值。
貝葉斯平均值公式如下:
- WR, 加權得分(weighted rating)
- R, 對象現有平均得分。
- v, 參與為這個對象打分的人數。
- m, 全局平均每個對象的評分人數。
- C, 全局平均每個對象的平均得分。
排序邏輯
合理驗證《漫威》系列電影的好評排序,按照《漫威》電影時間線獲取每一步電影的:電影名、打分的人數、每個星級的占比:
根據公式獲取每個電影的平均得分 R
、m
、 C
,計算公式為:
得到最新的 貝葉斯平均排序(rank_bayes) 結果如下所示,和原有的 豆瓣評分排序(rank_stars) 對比如下:
豆瓣分都是 8.1
分的《鋼鐵俠》和《復仇者聯盟3》,《復仇者聯盟3》的 貝葉斯平均得分
比 《鋼鐵俠》好,《復仇者聯盟3》比《鋼鐵俠》好看!
最終的排序是:
《復仇者聯盟4》>《復仇者聯盟3》>《復仇者聯盟》>《鋼鐵俠》>《銀河護衛隊》>《銀河護衛隊2》>《美國隊長2》>《美國隊長3》>《鋼鐵俠3》>《蟻人》>《鋼鐵俠2》>《雷神2》>《雷神3》>《蜘蛛俠:英雄歸來》>《復仇者聯盟2》>《蟻人2》>《無敵浩克》>《雷神》>《驚奇隊長》>《美國隊長》>《奇異博士》>《黑豹》
*彩蛋:豆瓣分除以2就是每個電影的平均得分 R *
貝葉斯平均代碼
# 計算對象現有平均分
def average_stars_apply(rating_people,start5,start4,start3,start2,start1):
average_stars = (rating_people*start5*5+rating_people*start4*4+rating_people*start3*3+rating_people*start2*2+rating_people*start1*1)/rating_people
return round(average_stars,2)
# 計算貝葉斯平均
def bayes_score_apply(R,v,m,C):
return (v*R+m*C)/(v+m)
# 主函數
def bayes_score(dataFrame):
df = dataFrame.copy()
df["average_stars"] = dataFrame.apply(lambda row: average_stars_apply(row['rating_people'], row['start5'],row['start4'], row['start3'],row['start2'],row['start1']), axis=1)
m = df.mean().rating_people
C = df.mean().average_stars
df["bayes_score"] = df.apply(lambda row: bayes_score_apply(row['average_stars'], row['rating_people'], m, C), axis=1)
return df
計算結果:
拓展場景
在 淘寶天貓 的商品評價下,有對某家店鋪的評價等級,在用戶購買量不對等,但是評分卻一樣的情況下,計算競品 商品 、店鋪 在用戶眼里的排序:
他們的店鋪評分一樣都是 4.8
分,店鋪A的評價人數是 450787
,店鋪B的評價人數是 198491
,感覺店鋪A評價人多一點感覺可信一些 ,那么有如下條件:
將上述數值帶入公式計算得到:
實時證明:店鋪B優於店鋪A ,店鋪B雖然評價的人數少,但是好評上還是比店鋪A多,整體比店鋪A好
缺陷
假設:電影A有10個觀眾評分,5個為五星,5個為一星;電影B也有10個觀眾評分,都給了三星,這兩部電影在貝葉斯分數是一樣的,即:
計算結果完全一樣!
結論
豆瓣評分主要是依據平均分所得,當在評價人數不同但是豆瓣分一樣的情況下,就可以使用貝葉斯評分繼續判別電影的好壞
下載
關注公眾號【機器學習和大數據挖掘】,回復【漫威】即可下載原始數據和代碼