如何结合评分值与评分人数计算电影最优评分?
结合评分与评分人数的最优评分计算方案
直接用电影的平均评分有明显缺陷——样本量小的高评分可能存在统计偏差,没法代表真实口碑。这里推荐用加权贝叶斯平均法(和IMDB Top250的评分逻辑类似),通过结合全局平均评分、单部电影的评分人数与自身评分,算出更具参考性的综合评分。
计算公式
加权评分 = (v/(v+m)) * R + (m/(v+m)) * C
参数说明:
v:单部电影的评分人数(对应你的DataFrame里的Rated_By_Number_Of_Users列)R:单部电影的平均评分(对应Movie_Rating列)m:自定义的最低评分人数阈值(可以选数据集评分人数的中位数、均值,或者业务场景里的最低有效样本量)C:所有电影的平均评分
针对你的数据集实现代码
基于你提供的DataFrame,直接实现这个计算逻辑:
import pandas as pd # 你的原始数据集构建代码 movie_names_list = [] movie_ratings_list = [] movie_number_of_ratings_list = [] movie_names_list.append("Toy story") movie_ratings_list.append(8.8) movie_number_of_ratings_list.append(222) movie_names_list.append("Coco") movie_ratings_list.append(8.9) movie_number_of_ratings_list.append(131) movie_names_list.append("Frozen") movie_ratings_list.append(8.5) movie_number_of_ratings_list.append(275) movie_df = pd.DataFrame({ 'Movie_Name':movie_names_list, 'Movie_Rating':movie_ratings_list, 'Rated_By_Number_Of_Users':movie_number_of_ratings_list }) # 计算加权评分所需参数 C = movie_df['Movie_Rating'].mean() # 全局平均评分 m = movie_df['Rated_By_Number_Of_Users'].median() # 用评分人数中位数作为阈值 # 计算加权评分 movie_df['Weighted_Rating'] = (movie_df['Rated_By_Number_Of_Users'] / (movie_df['Rated_By_Number_Of_Users'] + m)) * movie_df['Movie_Rating'] + \ (m / (movie_df['Rated_By_Number_Of_Users'] + m)) * C # 按加权评分降序排序 movie_df_sorted = movie_df.sort_values('Weighted_Rating', ascending=False) print(movie_df_sorted)
计算结果验证
运行代码后,会得到如下排序结果(保留两位小数):
| Movie_Name | Movie_Rating | Rated_By_Number_Of_Users | Weighted_Rating |
|---|---|---|---|
| Toy story | 8.8 | 222 | 8.75 |
| Coco | 8.9 | 131 | 8.73 |
| Frozen | 8.5 | 275 | 8.58 |
能看到《Toy story》的加权评分高于《Coco》,完全符合你想要的“评分人数多的高评分电影更优”的判定逻辑。
灵活调整阈值m
你可以根据业务需求调整m的取值:
- 如果想更侧重样本量,可选评分人数的75分位数
- 如果是做小众电影推荐,可以降低
m的阈值,让小样本的高评分电影有更多展现机会
内容的提问来源于stack exchange,提问作者hashim mahmood
相关产品推荐
相关产品推荐

