You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合评分值与评分人数计算电影最优评分?

结合评分与评分人数的最优评分计算方案

直接用电影的平均评分有明显缺陷——样本量小的高评分可能存在统计偏差,没法代表真实口碑。这里推荐用加权贝叶斯平均法(和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_NameMovie_RatingRated_By_Number_Of_UsersWeighted_Rating
Toy story8.82228.75
Coco8.91318.73
Frozen8.52758.58

能看到《Toy story》的加权评分高于《Coco》,完全符合你想要的“评分人数多的高评分电影更优”的判定逻辑。

灵活调整阈值m

你可以根据业务需求调整m的取值:

  • 如果想更侧重样本量,可选评分人数的75分位数
  • 如果是做小众电影推荐,可以降低m的阈值,让小样本的高评分电影有更多展现机会

内容的提问来源于stack exchange,提问作者hashim mahmood

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:05:15