如何根据一些已知因素计算人气

Posted

技术标签:

【中文标题】如何根据一些已知因素计算人气【英文标题】:How to calculate popularity based on some known factors 【发布时间】:2012-12-30 15:01:57 【问题描述】:

我有一个电影列表,其中每个电影都知道以下因素:

希望以后看电影的人数 看过电影的人数 喜欢这部电影的人数 观看和不喜欢这部电影的人数 电影中的 cmets 数 电影页面的页面点击次数(直接或来自搜索引擎)

所以基于上述因素,我正在寻找一种方法来计算每部电影的受欢迎程度。在这种情况下,是否有任何已知的公式或算法来计算流行度值?首选算法是那些提供更有效方式来更新先前计算的每个项目的流行度值的算法。

【问题讨论】:

看看 netflix 挑战。分层 SVD 似乎是解决方案。顺便说一句,您只有汇总计数,还是个人投票/链接/等? @wildplasser:netflix 挑战不会对电影的受欢迎程度进行排名,它是一个推荐系统 - 它根据个人对其他电影的排名以及其他用户的排名来排名电影对个人的排名他们的电影......不知道如何在这里应用。 :| @Meysam 好吧,有无数种方法可以做到这一点,一个简单的求和就可以解决问题,或者一个加权求和(给每个组件一个因子)。您可能应该在执行任何功能之前对每个功能应用规范化(因为 cmets 的数量可能明显低于手表的数量,并且您不希望第一个与第二个相比可以忽略不计)。如果您愿意为电影样本手动评分,您可以使用监督机器学习(例如线性回归)来解决这个问题。 我也没有。该评论旨在暗示其他人如何解决类似问题。如果操作只有计数(和其他聚合)线性回归是唯一的方法。可以以某种方式分层。 @wildplasser 我有个人投票。 【参考方案1】:

根据每个因素的重要性,基本上有无数种方法可以做你所追求的。

首先,您需要规范化数据。一种方法是假设每个特征都是distributed normally,并找到每个特征的标准差和平均值。 (您的特征是观看电影的人数、喜欢电影的人数……)。 获得 sd(标准差)和 mu(均值)后,您可以使用 norm = (value-mu)/sd 轻松地将每部电影的特征转换为标准形式。

均值 (mu) 的估计值是简单平均值:sum(x_i) / n 标准差 (sd) 的估计量是sd = sqrt(Sum((x_i - mu)^2) / (n-1))

将数据标准化后,您可以简单地将评级定义为加权和,其中每个特征都会根据其重要性得到提升:

a1 * #watched + a2 * #liked + .... 

如果您不知道权重是多少,但愿意手动给一组电影评分,您可以使用监督学习为您找到 (a1,a2,...,an),使用 linear regression .

【讨论】:

【参考方案2】:

没有正确的答案,但我认为我们应该尝试将其建模为尽可能接近现实。 让我们考虑以下几点: P1=Proportion of people who watched and enjoyed itP2=Proportion of people who disliked the movie P3=Proportion of people who watched and would like to see again P4=People who will watch it later but haven't seen it yet cmets 的数量根本无法说明一部电影有多好,尽管它可以说明它的受欢迎程度。当然。如果可能的话,您可以利用正面和负面 cmets 的数量(可能通过赞成票和反对票) -votes),或者您可以直接使用 cmets 的数量(C)。

页面点击数通常应该很好地表明电影的受欢迎程度,因此我们应该在算法中给予它一个很好的权重。此外,我们应该给最近的页面点击量比一年多前的页面点击量更多的权重.所以尝试保持过去三天(N3)、上周(N7)、上个月(N30)和去年(N365)以及其他所有内容(Nrest)的页面点击数。

你想出一个使用我提到的因素的算法。 [尝试使用加权平均和霍纳规则的变体进行快速更新。祝你好运。]

【讨论】:

以上是关于如何根据一些已知因素计算人气的主要内容,如果未能解决你的问题,请参考以下文章

R语言使用pwr包的pwr.anova.test函数对单因素方差分析进行效用分析(power analysis)在已知效应量(effect size)显著性水平效用值的情况下计算需要的样本量

php已知日期获取星期

matlab中如何计算已知曲线的长度?

基于其他领域的SOLR人气领域

根据已知时间计算时间差

计算最受欢迎课程的算法