现在,首页的“流行”选项卡已经被破坏了-它是按视图的简单降序排列。正如乔尔(Joel)在18号播客中所说,这是“自我实现的预言”。但这不是故意的,这只是因为我们还没有时间进行改进!
当我坐下来编写一个更好的算法时,我认为你们可能会对如何创建一个好的公式有一些见识。确定“热门”问题-最近24小时,最后一周,最后一个月以及所有时间。
这是我们必须处理的变量:

投票[ aka分数]
观看次数
答案
答案[aka分数]
问题是否已被接受答案
时间问题最初是被问到的
时间关于问题的最后一项活动
问问者的声誉
回答者的声誉

Joel引用了reddit公式作为示例,但我认为我们的网站与只是有点不同基本链接提交站点。另外,我们还有更多变量和数据可以使用。
我发现了一篇博客文章,描述了一些公式:
Y Combinator Hacker News

(p-1)/(t + 2)^ 1.5
p =用户的投票(分数)
t =提交以来的时间(小时)

Reddit

t =(时间入口帖子)-(2005年12月8日)
x =赞成-减少票
y = {如果x> 0则为1,如果x = 0则为0,如果x <0则为-1)
z = {1,如果x <0,否则x}
log(z)+(y * t)/ 45000

有什么想法?有想法吗?我不想想太多。我只希望“热门”问题对我们有意义且有用。因此,算法越简单越好!
根据我对以上内容的分析和到目前为止的评论,这是我到目前为止已实现的第二个版本。这可能糟透了。我不知道:
(log(Qviews)*4) + ((Qanswers * Qscore)/5) + sum(Ascores)
--------------------------------------------------------
((QageInHours+1) - ((QageInHours - Qupdated)/2)) ^ 1.5

请注意,已接受的答案根本不影响人的体重。这是有意为之的,因为我认为公认的答案是很好的社会契约,但对于提问或回答的质量却不是一个很好的数据点。
由于现在包括总和(Ascores),因此该算法将优先考虑具有很多答案的问题-假设如果有很多答案,那么答案也将有更多投票。
更新:请注意,此公式是从每个站点的主页链接的热选项卡上使用的公式。它不是用于确定网络热点列表的公式。请参阅针对热点网络问题选择问题的标准是什么?。

评论

@杰夫·阿特伍德:年龄单位是多少?年龄变量是否不发生变化都没关系,因此单位变得非常重要。我猜是几天,但是假设您不希望年龄值降到1以下(因此当升为幂时,它可能会少于一天(假设天以整数单位并四舍五入?)。它不会降低自身)。

@casper几个小时之内

@Jeff,我认为一个要衡量的重要因素(这会减轻“自我实现的预言”的影响)是一个人在讨论中停留了多长时间。我认为不太有趣的讨论可能有很多观点(因为它们被认为很热门,并在reddit中进行了广告宣传),但是人们在阅读前几行内容后不久就会关闭标签。

这个问题需要更新:meta.stackexchange.com/questions/60756/…。

@tshe SE.com算法有些不同,这是在网站本身上记录了热门算法。

@JeffAtwood:这仍然是真的吗?

@JeffAtwood:Qupdated是最后一次活动时间到当前时间吗?

否定的Ascores归零或abs()',还是错误的答案会降低热情?

由于存在答案而引起的热度上升会适得其反,因为这基本上会将可能过于广泛或过度回答的问题转变为“热问题”,例如此类问题。您应该同时认为缺乏答案和过度存在都是很糟糕的

另请参阅:“热门问题”侧边栏算法发生了什么变化?

希望看到的算法不是很不稳定,并且每次重新加载浏览器页面时,算法都会像当前行为一样发生变化!在这种情况下,似乎没有通过任何确定性算法选择最重要的问题....

#1 楼

我认为不应考虑参与者的声誉。正如Beta所清楚表明的那样,“知名”人士可以进行无关紧要的讨论。

我认为最好是在讨论中考虑活动量,活动的最新性以及总投票数减去投票数。

评论


是的,我同意。过于依赖rep不仅使方程变得混乱,而且增加了每个社交网络都必须应对的精英因素。让代表确定人们可以做什么,但让投票确定人们认为有价值的东西。

– Pollyanna
08-09-19 at 2:26

我不同意负票。投票的改变同样重要。一个好的但有争议的主题可能会获得很多选票,但仍然徘徊在零附近。

– David L Morris
08-09-19 at 2:57

不使用“原始”信誉计数而是3个权重值之一怎么办?例如:1代表低重复用户,5代表1k +用户,10代表5k +用户。通过这种方式,非常“有信誉的”人的投票仍然仅会算作另一个5k +代表用户的高分。

– Vlad K.
13年8月6日在10:53

我不喜欢“热门问题”在哪里接受了答案(大多数答案都在其中),因为“热门”一词表示在该相当不错的帖子中越来越多的用户正在互相交谈,他们正在寻求一个好的答案。为什么我应该点击“热门问题”标签?我可以观看已投票的帖子。

–C.F.G
20年9月3日,9:12

#2 楼

我认为与其考虑公式,不如考虑一下您要衡量的受欢迎程度。 Stackoverflow是用户生成的内容网站,因此受欢迎程度应主要由用户操作决定。大多数受欢迎的网站(Digg,reddit)都希望其列表定期更改,因此人们有理由每天(或每小时)返回该网站。他们通常通过合并某种时间衰减来做到这一点。假设这就是您想要的流行度指标时想要的,那么您不可避免地最终得到一个公式,该公式会与(用户活动)/(时间)有所不同

那么如何衡量用户活动?好吧,您在问题中列出了一些可能的输入。


投票[aka分数]-可能是目前可用的最佳人气指标。
观看次数-投票的替代品很差。单击某人的链接的视图,花了十秒钟阅读并认为这很无聊,这一点与阅读整个问题和每个答案的视图的观点一样多。
答案-您要完成什么?人气页面?您是否希望它成为引起人们对未回答问题的关注的工具,在这种情况下,答案较少的问题应被评为较高?还是要引起人们对好的答案的关注,在这种情况下,更多的答案应被评为更高?也许应该有默认的流行程度(不基于答案的加权),其中包含最流行的未回答问题和最流行的问题与可接受答案的选项卡。
问题是否具有可接受的答案-与答案的关注点相同。
最初询问的时间问题-如果您在分母中加入最初询问的时间,则受欢迎的清单将仅包含最近询问的问题。一个古老的问题几乎不可能出现,看到一个活动突然爆发。
上次活动的提问时间-使用自上次活动以来的时间可以使旧问题再次出现,但也可以使某人玩系统并长时间保留他们喜欢的问题时间,他们只需要做些次要的事情就可以使自上次活动以来的时间保持在较低水平。
提问者的声誉-鉴于在beta版本中爱立信的声誉存在巨大差异,因此使用它似乎意味着新手将永远不会出现在最受欢迎的列表中,无论他们的问题有多好或它吸引了多少兴趣。
答复者的声誉-与问询者声誉的担忧类似,这个问题不会出现该列表,直到有很多代表回答为止。

我认为投票数显然是最好的人气指标。可以根据您想强调的内容来合并答案/接受的答案的数量(我认为,为热门的未回答的问题提供单独的标签将是一个不错的选择)。

我对您列出的任何一种时间选择都不感兴趣。相反,我认为合并时间的最佳方法是将其用作采样窗口,而不是将受欢迎程度除以某种时间量度。查看最近一小时/天/周的投票/观看次数/答案数,而不是除以某种时间度量。当然,这不利于刚刚发布的问题,因为它们没有整整一小时/一天/一周的时间来累积投票。您可以根据问题自发布到抽样窗口以来的时间进行加权。

因此,我提出类似的建议:

人气=(数字最近24小时的投票数)/(自问题发布以来的小时数或24小时,以较少者为准)

评论


我认为没有答案的问题不是“热门”问题,也没有公认的问题,因为没有更多讨论,问题已经解决。

–mk12
09-10-6在2:33

仅仅因为问题作者接受了答案,并不一定意味着讨论已经解决。

– Nico Burns
2012年8月28日在1:02

#3 楼

据我所知,当前公式中的Qanswers很大一部分是有问题的:

(log(Qviews)*4) + ((Qanswers * Qscore)/5) + sum(Ascores)


此处研究的答案中大约有1/3(总共254个中的83个)具有得分低于相应问题最高投票职位的1/100。鉴于对所研究问题的大量观点和投票,看起来当获得足够的问题证据时,就该重新检查算法的(Qanswers * Qscore)部分,以确保其仍能反映基本假设:


假设如果有很多答案,对答案的投票也会更多。


观察到的分数差异(小于1 / 100个最高投票数”)清楚地表明并非所有答案都满足上述假设。算法假设对答案进行投票,但是有力的证据表明读者没有对其中的一些投票;因此,(Qanswers * Qscore)的部分变为假冒。


鉴于所检查的问题是具有成千上万次视图的问题,极低的分数表明,假设这些答案很流行,甚至都不会出现。尽管如此,该公式仍将这些值提取到Qanswers值中,好像每个人都愿意阅读(提示:不是)。



考虑调整公式使其与观察到的投票证据(当足以学习时)与“对答案进行更多投票”的初始假设更加接近。

当问题和答案获得很多投票时,开始忽略分数低/非阳性的答案。或更妙的是,忽略得分低于前一个合理分数(例如1/10)的答案。


为了完整起见,另一种选择是保留当前算法和而是修改“功能规格”以更好地匹配公式。尽管老实说,我无法想象如何将无用的答案以有意义的方式解释/指定为“热度得分”的贡献。

请注意,Prog.SE meta上有一项功能要求,以测试对公式的较少“ klingonic”修改:


针对程序员问题的修改后的“ hotness formula”的试运行



然而,当前配方存在问题的另一个迹象是,操作热度评分有多容易。在我最近针对特定典型热点问题的实验中,单个问题投票方向的改变(上->下->上)似乎导致得分变化了10-15分。这是因为任何问题的投票都会被答案的数量所利用。综合起来,2-3个投票者可以将得分“摆动” 30-50(作为比较,对撞机当前的顶部屏幕向我显示了6个问题,得分从77变为38)。类似地,在投票率很高的问题中添加/删除答案(任何答案)会为作弊提供更多的可能性,因为它被问题分数所利用。如果是游戏,我会觉得这很无聊,因为游戏的平衡性很差。

实际上,人们可以说,当无意识的协调操纵已经很规则地发生时,当游戏中出现的标题吸引着火辣的旅鼠时,在对撞机顶部寻找问题,并开始发布多个零努力大脑转储,使公式泵的得分更高,这会吸引更多的旅鼠,进一步破坏事物等等。 “我特别担心的是,这些错误答案对问题产生了毒害作用,使有趣且表现良好的问题看上去与非建设性的人气竞赛一样。” (引用来源)。为便于记录,2010年8月对算法进行了如下调整:



同一站点将受到越来越多的罚款。因此,列表中SO的第一个问题乘以1.0,第二个问题乘以0.98,第三个问题乘以0.96,依此类推)
社区Wiki问题受到惩罚,以防止整个主页成为民意调查类型的问题
许多答案的收益上限为10,并且我们仅查看前3个答案的分数。
我们仅根据问题的年龄降级,而不是问题的最后更新日期,因此问题不会弹出每次编辑后都返回顶部。
视图不计入得分。

公式的核心(无基于站点的降级或流量缩放)是:

    (MIN(AnswerCount, 10) * QScore) / 5 + AnswerScore
    -------------------------------------------------
             MAX(QAgeInHours + 1, 6) ^ 1.4



是的,“很多答案的收益上限为10”,多么可爱。

即使调整了配方,也塞满了8个没用的东西,对+50个问题的零分答案与对答案进行80次投票具有相同的效果。在+200个问题时,这就像给320个(超过三百个!)投票来回答答案。

毫无疑问,即使进行了上述调整,某些问题也会永远停留在热门问题列表的顶部。

评论


+1当一个具有单个权威性答案的好问题未能排名靠前时,这真的很令人沮丧,因为它没有足够的废话答案来提高答案。

–神秘主义者
13年1月30日在8:43

您为什么不提出正式功能要求,以完全摆脱公式中的Q答案。我认为我们已经有足够的证据。

–神秘主义者
13年1月30日在8:47

@Mysticial在讨论这些问题时,我不相信将Qanswer完全直接抛出是个好主意。在早期阶段,这似乎是做得相当的好法宝,” ......这是比较敏感的潜在热的问题在早期阶段,当有没有足够的票数来判断比较好。坦率地说,这是一部分,我真的很喜欢在当前式...”

– gna
13年1月30日在9:29

...在以后的阶段,完全忽略Q答案对那些因出色答案而变得炙手可热的平庸问题“不公平”。不要误会我的意思,我不喜欢某些有关当前公式的东西,但必须承认这样做对某些事情有好处(例如,对早期问题和中等热点问题的处理对我来说是一件好事)

– gna
2013年1月30日9:31



我认为这更多是定义一个热门问题的问题。具有单个良好答案的问题是否被视为“热门问题”?我只有很少的答案成为流行的问题,这是唯一获得reddit帮助的问题。我从来没有见过只有多对撞机的答案少于5个的问题,而答案却只有+500,这要归功于方程式使他们处于极大的劣势。 (具有两个答案的分支预测变量可能不需要Reddit就能解决。但这是一个极端的情况。)

–神秘主义者
2013年1月30日9:33



@Mysticial的一个例子:John Carmack的一个答案使问题变得非常热烈(数百票,超过10万次观看)。如果对撞机无法反映这一点,那会错吗?

– gna
2013年1月30日9:41



约翰·卡马克(John Carmack)的答案几乎与您能想到的每个地方都有联系。因此,它获得了尽可能多的外部帮助。多对撞机方程式根本不重要。我确实记得它在多对撞机上只有3个答案才达到600+。但这是因为所有选票都从外面涌入。

–神秘主义者
13年1月30日在9:43

换句话说,答案很少的问题之所以流行,不是因为多对撞机,而是因为它们被链接了。我的三个最佳答案属于这一类。如果他们在多功能对撞机上的表现很高,那是因为问题早早得到了联系-正如我的前5个答案中的2个一样。

–神秘主义者
13年1月30日在9:45

@Mysticial我知道了,很有趣。所以这个主意是完全摆脱Q答案,对吗?当Qviews和Ascores仍然很低时,这在早期阶段如何运作?

– gna
13年1月30日在9:52

不会有效果的。让纯票数成为主要因素。如果只有一个好的答案,它将获得很多选票,因此让它加入多对撞机。通过抛出Q答案,错误答案不会对问题的影响力产生任何影响。

–神秘主义者
2013年1月30日9:55



让我们继续聊天中的讨论

– gna
13年1月30日在9:58

#4 楼

@Matt
您写道:


最重要的因素是问题本身的总票数以及问题是否具有可接受的答案。


,然后再加上这个公式。


(votesOnQuestion ^ 2)*(回答2:1)/ timeSinceLastActivity


这将使具有可接受答案的问题保持在列表顶部。我认为那应该是相反的。回答问题后,就无需再讨论了,可以将其存档。如果某人有类似问题,他们将使用搜索找到答案。

#5 楼



每隔15分钟,查看最近24小时内未提升到主页上的问题。
将具有最多视图次数的问题放在主页顶部。
将具有最高票数的问题放在首页顶部。



这对我来说很不错,但也许对前两个而言/每只猫三只,而不是一只。六个新添加的内容比2个要好-即使每15分钟添加一次。

我肯定希望将当前设置作为一个单独的选项卡-但是,我希望您不必对链接进行垃圾邮件处理让每个人都将它放在头版(在大众面前它有任何真正的机会)。也许将其重命名为最近-它是最近的活动(问题/评论),而不是新问题。

评论


或每五分钟切换一次。这样,您将在15分钟内获得六个添加项,并且每五分钟更新一次。您也可以每2.5分钟一次发布一个问题,在投票和观点之间交替。

– Patrick McElhaney
09-10-12在21:21

#6 楼

怎么样?


每隔15分钟,看看最近24小时内问到的
问题
没有被提升到
首页页面。
将具有最多
视图的问题放在首页顶部。
在首页上方投票最多的问题。

简单,对吧?从本质上讲,您可以获得过去24小时内的“热门”问题列表。没有自我实现的预言。您可以使用相同的算法来选择上周,上个月以及所有时间的“热门”问题。

#7 楼

要使用的变量列表中的第一项是“票数”,但我认为这是问题已获得的票数。

为了避免历史上获得最多观点的问题的陷阱,您可以定义将来获得最多观点的问题吗?一旦有人查看了互动问题,其互动程度就会越来越高。

理想情况下,您希望该问题的平均票数,答案的票数和回答频率答案。这样,当找到一个好的解决方案并且不再提供新的答案并且讨论变慢时,即使仍然有很多页面浏览量,它也会从热门主题列表中删除。

#8 楼

该公式需要控制网站上每个问题的平均投票数以及每个问题的平均答案。
Qscore,而在Qscore/Ascore中使用q4312079q(平均得分)公式(并相应地调整公式)。

此控件可控制投票频率不同的网站。同样的事情也可以适用于答案。这甚至可以在站点上的问题之间进行分配;这样一来,那些积累了太多选票的网站就不会太频繁地被吸引到热门问题列表中。

评论


我认为这是非常重要的部分。

– danijar
2013年8月9日23:29

#9 楼

再次编辑:Micha(l)是正确的,我对“答案”的回答是错误的。

最重要的因素是问题本身的总票数以及问题是否具有接受的答案。正如@Blorgbeard所说,声誉并没有真正影响它。

年龄绝对是一个因素,否则,在它所指的技术被取代之后,一个备受投票的问题可能还会持续很长时间。也许上一个活动就是这里需要考虑的全部内容,而不是在问问题时才考虑。

也许像这样:

((totalVotesOnQuestion + 1) ^ 2) * (answered ? 1 : 10) / timeSinceLastActivity


分母适当缩放的位置。

编辑:这将依赖于人们不断增加他们想要答案的问题。我不知道是否有一些其他有用的文字可以帮助您解决此问题,如果人们也想知道答案,就会促使人们对问题进行投票。这可以很好地与UserVoice上的建议紧密结合,以使对一个问题的投票算作“赏金”。

评论


嗨,您的意思是什么(答案是1:10)?这里的值是多少?

–赛义德·普林
15年3月26日在5:36

#10 楼


您是否看过投票箭头上的鼠标悬停文字


“这很有帮助”
“这没有帮助”

...您已经
确切演示了投票为何有用的原因
并且有效。 :)


杰夫在这里再次提到了他认为投票对于关注大众应该有多重要。但是正如Inigo曾经说过的:“为什么继续使用这个词?我不认为这意味着您的意思。”

主题和线程(因为这是最热门的“问题”变成的)不一定非要成为受欢迎的人,所以我可能建议Jeff和这个报价中他所追求的家伙一样残酷地滥用了这一指标。公平地讲,绝大多数关于“热门”问题的人也是如此。

解决方案:将“热门讨论”和“热门问题”分别列出。允许高级用户提出一个显然是讨论的普通问题,并将其设为“ Go Wiki”(编辑者是否可以这样做?),因此不再将其视为“热门问题” 。现在,您可以对问题使用几乎任何您喜欢的公式,因为进入“热门”董事会的任何开放式问题都将很快被淘汰。自上次更新以来,您在公式中引用的几乎所有内容(例如视图,投票和时间)都将更加相关,因为垃圾邮件发送者,喷火器和巨魔将吸引到“讨论”问题。

在Wikipedia讨论页面上,易于进行火焰战争,并且易于将它们隔离开来,无论公式如何,在返回相关结果方面都有很好的记录。

#11 楼

关于排名热门问题的另一种想法。我认为,对于已回答和未回答的问题,热门问题排名的计算或权重可能会有所不同。看来,被查看但未被回答的问题可能比已经提出并回答的问题更有趣。

#12 楼

每个问题都有一个流行度字段。

当用户对问题或其答案之一进行投票时,以固定的数量增加流行度。用否决票减少。

如果用户取消赞成票,则将问题的受欢迎程度降低与定额投票相同,将增加它。

然后定期降低受欢迎程度(每隔一小时,每天一次)使用以下公式:

popularity = popularity * X, where X is carefully selected and 0 < X < 1, 
                             for example X=0.95


然后只需按受欢迎程度订购问题即可。流行度领域中具有最高价值的问题是最热门的问题。

这需要弄清楚系数X应该是多少以及公式应多久应用于问题。

这将为最近的投票增加更多的分量,高人气的峰值最终将消失。这样一来,最近获得高票的问题就可以排在首位。即使问题很老,也可以使用,但是由于某种原因,最近有很多活动。

#13 楼

我的建议已被许多站点框架所拒绝,但我继续提出...存储另一个变量,“从大多数视图排序的任何列表派生的视图”,而不计入这些。

#14 楼

我同意Blorgbeard的看法。我不认为代表应该在确定问题的受欢迎程度方面起主要作用。

我当然不认为它应该仅基于观点或答案的数量发布(显然都可以轻松地进行游戏)。

但是,我认为它应该主要基于得分(?)(赞成票-反对票)。
这应该权衡上下投票的权重问题的答案高于答案,但是答案的答案显然应该有影响。.

如果问题分数由答案内容自动部分控制,则可能会更容易答案的3个upmod = +1的问题。

评论


发表于5年前(五!),这个答案提出的想法现在令人惊讶地相关:“我当然不认为它应该仅基于发表的观点或答案的数量(显然可以很容易地进行博弈)。但是,我认为应该主要基于分数...(赞成-反对)。”

– gna
13年8月6日在11:08



#15 楼

如果您允许我理解哲学,“流行”或“热门”观点的目的是什么?我认为对于问答网站而言,应该是将人们吸引到有趣但尚未回答的问题,但是还有其他可能性。是为了炫耀如何回答一个有趣的问题?仅仅是建议,嘿,很多其他人也对此问题感兴趣吗?

我认为得分应该基于投票总数,观看次数, (相对较弱)的答案数量以及自发布以来的时间,因为每个答案都是参与度的衡量标准。因此,您有一个类似(A * views) + (B * votes) + (C * number of answers)的C小于A或B。投票是答案的总票数(上下),加上对该问题的净正票。然后除以某些迅速增加的年龄因素(age of the post ^ D + age of the post ^ E),以便热门话题始终在变化。可悲的是,所有这些常量都需要凭经验找到,但是我认为这可以做到。

#16 楼

也许可以在此过程中的某个地方考虑​​标签。尤其是因为声誉很高的人可以重新标记别人的问题,从而避免标记错误的问题。

只是想一想...

#17 楼

我看不到有人这样做。但是,如何利用花在阅读这个问题及其答案上的时间呢?实际上,可以获取用户在屏幕上的位置以及窗口是否在焦点上。使用这些参数来确定一个问题(及其答案中的一个)是否最“花时间”。

我猜“热度”可能是您提到的某些参数的函数上面的一个。

#18 楼

我个人看不到stackeoverflow上的“热门”问题的好处。这可能只是偏见,但我来这里是为了寻求针对特定问题的明确答案,不要潜伏或参与主题讨论。

#19 楼

基本上,一个用户发布的问题只是为了获得正确的答案。

作为一个用户,我只想获取一个已被OP接受并已被OP接受的相关问题建议的列表,如果答案很少投票,那就更好了,但这没关系,因为发布答案的用户可能是无名英雄

此外,正如您指出的那样,要考虑的变量如下:

Reputation of asker
Reputation(s) of answerers


在这两个问题中,我认为“扬言者的声望”应被赋予最小的重视,因为这远没有关系。考虑一下:Joshua_Bloch刚刚在stackoverflow上创建了一个帐户,并问了一个声誉为1的很好的问题,难道您不向其他人的建议显示他的问题吗?

#20 楼

我认为对于这样的网站,最热门的问题将是讨论最多的功能。现在,如果仅保留它,那么不相关的讨论也可能会变得很热门。

在这种情况下,我们应该考虑到回答者的声誉(因此为讨论做出了贡献) 。

#21 楼

通常,执行这些操作的最佳方法是保持简单,以便人们可以理解和维护算法中的任何系数。我想随着群众涌入大门,他们将需要进行一些调整。

我很惊讶Firefox频率算法的出色表现。它不能直接翻译成这个,但要切换一些变量,您将拥有一个非常轻巧的公式来对帖子进行排序。

#22 楼

我知道在计算主题为“热门”问题时使用简单的信誉度量会导致新用户出现问题的机会很小。

如何根据用户在Stack Overflow帐户使用期限内获得的总积分计算净信誉指标?年龄变量本身可能取决于用户登录网站至少10分钟的天数。

netReputation = (reputationPoints / numDaysUserVisits);


更多的声誉点,并且碰巧在站点上处于活动状态以获得更高的指标。

#23 楼

我在这里建议的不是解决方案,而是一种通用方法。

手头的问题通常被称为机器学习中的“排名问题”。给定一组示例(每个示例都是实数向量),可以诱导对未见示例进行排序的功能。这个问题已经得到了很好的研究。

我的建议是,Stack Overflow的创建者提取其数据库的一小部分,对其进行手动排名,然后将其联机以供研究人员下载和使用(匿名如有必要)。 UCI机器学习存储库将是一个很好的场所。在这一领域工作的人们注定会跳上去,用它来衡量他们的算法和想法。很快,您将看到出版物将在数据库的子集上产生实际结果。您几乎可以免费获得此功能。许多组织都尝试过这种方法,例如Netflix。

#24 楼

随机问题。也许无关,在这种情况下,请原谅。

在我们的评级中,我们是否考虑了排行榜的偏见。即人们倾向于支持广受好评的观点。在我们的案例中,由于答复是按投票排序的,因此这种偏见会加剧。例如在很大程度上,此响应将被忽略;)

#25 楼

您是否研究过Reddit添加的“最佳”算法?这很漂亮。这是Randall Munroe解释的。

评论


在博客上讨论过blog.stackoverflow.com/2009/10/alternate-sorting-orders

–杰夫·阿特伍德
2010年6月24日在16:44

#26 楼

我开始认为


每个视图的投票和/或每个视图的答案
在较小程度上,看到问题的人均在给定的顶部附近列表(每个问题使用的标签都不同)。

使用的度量标准很好。

它可以预测突出问题的结果,所有试图获得良好答案和用户参与度(投票)的人。

如果看到问题标题的很多人决定查看问题,则显示问题标题的可能性可能会更大。人们将获得更多的参与度。

应该从“热门”列表中获得最大的好处。

#27 楼

帮助我看看这个热门算法是否正确?!
php代码

function hot($Qviews, $Qanswers, $Qscore, $Ascores, $date_ask, $date_active)
{
    $Qage = (time() - strtotime(gmdate("Y-m-d H:i:s",strtotime($date_ask)))) / 3600;
    $Qage = round($Qage, 1);
    $Qupdated = (time() - strtotime(gmdate("Y-m-d H:i:s",strtotime($date_active)))) / 3600;
    $Qupdated = round($Qupdated, 1);

    $dividend = (log10($Qviews)*4) + (($Qanswers * $Qscore)/5) + $Ascores;
    $divisor = pow((($Qage + 1) - ($Qage - $Qupdated)/2), 1.5);
    echo $dividend/$divisor . "\n";
}


测试结果:

hot(1265, 11, 80, 121, '2011-04-01 00:50:02Z', '2011-04-01 04:53:35Z');
hot(85, 4, 0, 6, '2011-04-01 04:05:30Z', '2011-04-01 04:24:02Z');
hot(15, 2, 0, 0, '2011-04-01 05:02:21Z', '2011-04-01 05:14:34Z');
hot(33, 3, 0, 7, '2011-04-01 04:25:43Z', '2011-04-01 05:06:01Z');
hot(12, 0, 0, 0, '2011-04-01 05:00:45Z', '2011-04-01 05:00:45Z');
hot(12, 0, 0, 0, '2011-04-01 05:02:05Z', '2011-04-01 05:02:05Z');
hot(11, 1, 0, 0, '2011-04-01 05:01:04Z', '2011-04-01 05:11:56Z');

5.97048822863
0.308542463568
0.119073201261
0.314512900506
0.10786376822
0.10786376822
0.104757620731


我从热标签的SO中收集了一些数据,但是排名值的结果与SO不一致,这使我非常困惑。

评论


这将很难说。为什么不尝试在数据转储中的某些真实数据上运行它?

– Pekka
2011年4月1日在7:46

我从热点标签的SO收集了一些数据,但结果与SO的热点排序不一致,所以请问错误在哪里

–查理
2011年4月1日7:53

嗯,我明白了。这有点困难,我不能完全确定它是否在此站点上处于主题位置,但可能会。不知道该说些什么

– Pekka
2011年4月1日7:58



#28 楼

您是否打算在元技术中为元问题设置任何例外?您在一个播客中开玩笑说要构建一个用于讨论该系统的系统,当您计算元问题的实际数量时,这当然不是真正发生的事情,但是当您查看真正受欢迎的问题时,似乎是这样。

总体思路是,一旦网站公开,这些帖子最终将被淘汰,但是我不确定那是真的。在讨论该网站的工作方式时,总是会有兴趣,尤其是在您的目标受众中。

在完成测试后,也许只是对tag = stackoverflow进行了一些扣除。当然,这需要对重新标记进行一些努力。

#29 楼

如果是我,我会说通过线性过滤器在每个最短时间内进行加权活动:http://en.wikipedia.org/wiki/Linear_filter

#30 楼

我认为您必须考虑流失率,因为这对大多数人来说都是一个问题-大量资源大量使用了恕我直言。

所以我会选择

(number views/number of answers)     *     (dateTimeQuestions/dateTimeLastAnswer)  


然后对它们进行简单排名。

查看v答案是答复率的流失率(应该很好,因为有很多人在观看它,很多人在回答它),然后加上问题的时间因素,即答案的速度问题的答案速度。

请注意,这是解决问题的简单算法,不是一个真正的算法。

UPDATE

对此进行了思考在超过十亿分之一秒的时间内,可能会有更多的问题。

热门话题的定义是什么?对答案的看法或从问题到答案的时间。

我想我想做的就是将这些结合到一个热门话题的观点上,然后快速给出这两个例程的乘积。 ..

更新2

再读一遍-我仍然没有将声誉和投票纳入...
关于声誉(这是来自人们的花费了很多时间)我的想法是,一个代表10的人可能仍然会提供“最佳答案”,因此打折声望不在“热门话题” ...

所以最后一个可能是

(  (number views/number of answers)     *     (dateTimeQuestions/dateTimeLastAnswer) ) * (number of up votes/number of downvotes )


问题的哼哼*好运=>