如何确定51区的提交百分比?我知道它是基于rep的,但是它是如何工作的呢?

评论

请在Area51常见问题解答中添加此帖子的链接。非常令人困惑的是,为什么有几百个提交者的一些提案落后于另一些有100个或150个提交者的提案,而FAQ却没有解释激活网站所需的工作。

因此,看来,如果您试图将一个社区带入Stack Exchange以启动一个新站点,则将需要鼓励一群用户参与系统中的其他站点。这似乎是要求至少在1个站点上获得100名信誉得分为200的提交者的实际影响。

绝对需要在常见问题中加以澄清!那里似乎想要拥有活跃的社区,但规模没有限制。对于您的社区很小但非常活跃的专业主题,这是非常成问题的。

#1 楼

我在这里的答案:


在第一轮中,我们只想
启动肯定会成功的网站。因此,我们需要(1)很多
用户和(2)很多具有较高
rep的用户,因为我们知道这些用户
做出了很大贡献,并且知道了
系统工作。现在的解决方案是
对这些人非常重要。

一旦我们从一些成功的网站获得了更多数据,我们将开始
松开它。一点。现在我们
真的不知道200名提交者具有1个声誉的
意味着在第1天有200个用户在第1天还是在第1天有20个用户。对于
第一个站点非常谨慎,并尽可能收集与之相关的数据。


有了这一警告,我们现在使用的公式如下所示:根据我们认为他们对网站做出贡献的可能性,我们给每个用户一个“分数”。现在有点麻烦,因为我们没有大量数据。我们拥有的一个可以告诉我们很多且很难玩的数据是用户在现有网站上的声誉。


如果您拥有很多声誉,那么您就很多更有可能主动使用该网站,因为您已经证明自己在积极使用相似的网站
如果您在多个网站中享有很高的声誉,那么您更有可能主动使用该网站,因为您ve证明您积极使用许多此类网站
另一方面,如果您是互联网上随机散布的没有声誉的人,则很难量化,但是很有可能您不会做出贡献非常

这是我们现在拥有的公式。几乎可以肯定这是错误的,我们将对其进行调整:

PrelimScore = SUM(Reputation >= 200 ? 0.233 * ln(Reputation-101) - 0.75 : 0) + 1.5
UserScore = PrelimScore * 0.9 ^ (DAYS / 180)


SUM位于用户拥有帐户的每个网站上,而DAYS是金额自他们首次提交提案以来的天数,或提交之后访问提案的天数。

要感受一下:


没有信誉的用户获得1.5分
在1个站点上具有200个信誉的用户获得1.82分
在3个站点上具有200个信誉的用户获得2.46分
/>在1个站点上具有10000个信誉的用户获得的分数为2.89
在3个站点上具有10000个信誉的用户获得的分数为5.68

阅读此书的方法是,我们认为具有10000名声誉的用户贡献的可能性几乎是没有声誉的用户的贡献的两倍,并且一年不重新访问该提案的用户的贡献可能性比他们重新访问的可能性低19%。

请注意,您看不到自己的承诺得分(但可以自己计算),也看不到总承诺得分的确切值(只能看到百分比,该百分比除以5并四舍五入) )。

UPDATE

自从最初发布该公式以来,我们已经根据第一个网站beta版的数据对其进行了几次调整。我已将上述公式更正为最新的公式。总的来说,我们降低了高回报用户的价值,因为他们似乎贡献的可能性不大,而且也给新用户带来了一定的推动作用。

提案的最终承诺百分比等于以下三个数字的最小值:


总承诺得分(以上)/ 500
提交者总数/ 200
单个站点上具有200个以上代表的提交者总数/ 100

换一种说法,每个启动的提案必须满足以下三个条件:


总承诺得分为500,
200个提交者
100个提交者,每个站点上至少200个代表

这是一种令人迷惑的图形化方式,可查看任何一个提交者对多少贡献这三个条件中的每一个:



更新#2

我们在第51区的承诺投票中添加了一个衰减因子。这仅适用于承诺得分部分。基本上,投票越长,其衰减越多。这是非常渐进的:在6个月内达到10%左右。如果用户非常投入,可以在登录时通过访问提案来“更新”投票。

评论


这不是固定数字。通常,我们将首先根据承诺创建站点的能力来创建承诺最高的站点,我们将根据实际情况来决定。最终,我们希望达到一个稳定的状态,在此我们有一个很好的经验构想,一个站点成功需要多少点。

–乔尔·斯波斯基♦
2010-6-15在17:05



非常有趣,谢谢!您还算在meta,area51和stackapps上的声誉,还是SO,SF和SU? (我问,因为很明显我的一半分数来自meta / area51 / stackapps)

– Pollyanna
2010-6-15 17:12



@Pollyanna现在,我们计算除51区以外的所有相关站点

–David Fullerton
2010年6月15日19:49

因此,Blender 3d建模站点(可能具有平均代表低于100的用户)将需要大约数百万亿用户来确认吗? :)并且大多数站点都将是这样-只有技术站点可能拥有很高比例的预先存在的SO用户。尽管是最早确认的站点之一,但波斯IT站点也只有3%。似乎权重太低了...糟糕-刚刚看到Area51不算在内的字样-这意味着Blender的平均代表更接近于零...

– John C
2010-6-15在20:26



@John-我希望整个过程中的前几步都会遇到非常艰难的挑战。不久之后,这些规则将被放宽,并且将探索在没有高级用户的情况下使投标进入Beta状态的其他方法。但是,很难弄清楚一个站点是否会成功,并且很难定义成功。经过将近一年的stackexchange 1.0,实际上很少有站点可以被认为是成功的。我怀疑这是由外部原因引起的,但是所有这些都使人们相信,启动站点应该很困难。

– Pollyanna
2010年6月15日在21:06

嗯,GIS站点对我来说肯定是赢家,并且只有15%的站点是大量站点。另一方面,有“末日防御”。我想,当该新闻稿首次发布Beta版时,投资者会为新闻发布而tick之以鼻。如果没有与现有三部曲完全重叠,这项政策不会很难启动一个网站,这使它变得不可能。如何在一个简单的课程中激怒人们并将他们发送到其他平台。

–罗西南特
2010年6月15日在21:12



这是很棒的信息。谢谢大卫!

–squillman
2010年6月15日在21:16

@ waiwai933-“?”是if(Reputation> = 200)的简写,则得分= SUM(Reputation-101)^ 0.45 else score = 0

–ChrisF♦
2010-6-15在21:22



@Pollyanna,感谢您的信息。尽管我理解将标高设置为高然后降低的概念,但我担心它会产生一种自我实现的预言,这会导致大多数站点失败。如果有很多(非SO)用户提交到站点,并且只看到1%的站点,那会不会阻止更多的人提交?

– John C
2010年6月15日在22:32

如果您不允许200名信誉为1的用户打开网站,您将如何了解提交该网站的低重复用户是否有效?

–马克·艾略特(Mark Elliot)
2010年6月21日在17:27

抱歉,我很难遵循这个逻辑:您不知道当没有销售代表用户创建站点时会发生什么,因此,您将通过创建高销售代表用户首先想要的站点来确保它的安全性吗?那么,什么时候您会知道低代表站点将如何公平?在我看来,您想首先允许低代表用户站点查看发生了什么。应该在早期阶段对其进行测试,以查看实际上有多少人活跃。

–鲍勃
2010-6-25 at 16:44

@Bob,他们并不是真的在尝试查看可行的方法-他们想确保站点能够正常工作。我只能假定,如果一个站点无法吸引大量的高素质专家,他们的收入模式或投资者将对他们施加可怕的惩罚。

– John C
2010-6-25 17:38

原则上,衰变是清除非活动状态的好主意。但我不喜欢您需要手动重新提交。访问第51区的提案应该足够了。很少有人知道该衰减。访问Area51上的投标表明用户仍然对此感兴趣。

– CodesInChaos
2011-6-10 10:51



我是否可以由此推断三个不同站点上的10000与单个站点上的30000相同?

– corsiKa
11年8月21日在22:33

当您说“没有信誉的用户获得1.5的分数”时-1.5是什么?它似乎不是百分比-至少,我已经看到三个低重复率用户加入了我的建议,并且从68%上升到... 68%。

– John C
2011年9月19日19:13在

#2 楼






游戏网站的总代表为307,812,承诺百分比为18%,而世界末日防御站点的总代表为354,402,但是只有11%的承诺百分比。

百分比可能是人员总数(游戏为41,世界末日防御为26)和全部代表的混合体。


编辑:根据@David的答案,我计算出以下用户的总得分:



WordPress的答案(2%)= 45.265422137288866,
世界末日防御(14 %)= 316.8734350894245,
游戏(23%)= 428.1480785888331

,所以100%的得分是


2185.33 1821.91
毫米范围不相交。但是答案似乎是2,000。

(每个用户每个站点的分数是使用Firebug提取的,每页上的

$('#committer-list .sites img').map(function(x,y){
   return Math.pow(y.title.match(/[\d,]+$/g)[0].replace(/\D/g,'')-101,0.45);
})


。列表相加,然后除以10,然后将提交者总数添加到列表中。)

评论


推荐人不会被重复计算。在这里查看大卫的声明

–恩典♦
2010-6-15 13:38



@ccomet:谢谢。这从该计数中减去了4,175次,进一步加强了我的论点。

– kennytm
2010年6月15日14:05

从那以后,世界末日防御发生了……世界末日……。

–安德鲁·格林(Andrew Grimm)
2010-12-18在3:16

#3 楼


在第一轮中,我们只想
发射一定会成功的站点
。因此,我们需要(1)很多
用户和(2)很多具有较高
rep的用户,因为我们知道这些用户
做出了很大贡献,并且知道了
系统工作。现在的解决方案是
对这些人非常重要。

一旦我们从一些成功的网站获得了更多数据,我们将开始
松开它。一点。现在我们
真的不知道200名提交者具有1个声誉的
意味着在第1天有200个用户在第1天还是在第1天有20个用户。对
第一个站点非常谨慎,并尽可能收集与我们有关的数据。


WordPress Answers提议是一个例外。当我宣布它时,很多人从WordPress.org上的wp-hackers列表中走了出来,因此,只有51名代表。评论显示出很大的活动潜力,但代表几乎没有显示。当然,这是引进外部人士的最终目标。

评论


现在,它已经完成了24%。 109个承诺。

– Arlen Beiler
2010-6-25 at 16:12

#4 楼

GIS网站也是如此。这有点令我失望,但我确信GIS网站会在某个时候创建​​。

跟随它的几乎所有用户都已经提交了,所以我不确定它是否会提高。

评论


在花费了社区的信任说服其他人加入我们并对此感到兴奋之后,如果它无法启动,我将不免有些失望。如果我提前知道了意图/参数,我将等待提交,而不是进入流程并冒着一个“一旦被咬”就永远不会提交的社区的风险。

–JasonBirch
2010年6月18日在6:12

尽管许多GIS人士不仅仅将SO用作参考,但我们是技术含量高,通才,自适应的一群。我担心SO会过分强调它们的特殊性,就像我们偶尔这样做一样。

–JasonBirch
2010年6月18日在6:12

我同意。我担心如果需要“两轮”提议,大量潜在的GIS溢出用户不会再次打扰。尽管在撰写本文时,GIS的提交者和当前领先的“ Web应用程序”站点的提交者数量是相等的,但是看起来人们提交的速率正在稳定。

–fmark
2010年6月20日23:08

我能理解对那些已经证明他们会积极参与但不是要让专家进行讨论并在此基础上支持他人的人的需求吗?通过给SO用户带来很大的偏见,您肯定会鼓励非编程领域的爱好者。在我看来,GIS拥有超过400项承诺,但仍远远落后于进展,这真是太疯狂了。

–詹姆斯·瑞安(JamesRyan)
2010年7月1日在8:53



@ EK01:那是困扰我的一件事。在某些地区,Trilogy居民可能需要答案,但我们可能没有专家。软件法就是其中之一。我们的目标专家之一可能没有Trilogy代表,而好奇的旁观者可能有成千上万。

– David Thornley
10年7月2日在19:23

我赞同杰森·伯奇的评论。我一直在游说许多不了解SO并付诸实施的社区。有些人这样做,然后他们什么也没做,除非每天大约检查一次提交/百分比计数器,然后发现仍然无事可做。目前,我们有将近460个提交者处于这种边缘保留模式。我认为由于不采取行动,我们将损失大量的钱,要再次获得信任/兴趣将是艰巨的工作。

–马特·威尔基
2010年7月9日在18:16

#5 楼

以下Python 3.x脚本可用于基于新公式计算承诺百分比。最后会发出3条标准的分数,显示需要哪种用户来提高百分比。

从我测试过的一些建议中,最严格的标准是“一个站点上至少有200名代表的100个提交者”。

该标准的数字可能会因区域51的声誉是否计入承诺分数而夸大?。

import lxml.html
import urllib.request
import urllib.error
import re
import math
import time

def integerize(s):
    return int(re.sub('\D', '', s))

def collect_reps_for_user(ud):
    for site in ud.find_class('sites')[0].iterfind('a'):
        site_title = site.find('img').get('title')
        if not site_title.startswith('Area 51'):
            reputation = integerize(re.search('[\d,]+$', site_title).group())
            yield reputation


def collect_user_data(html):
    total_score = 0
    significant_committers = 0

    for committer in html.find_class('committer-info'):
        ud = committer.find_class('user-details')[0]

        user_link = ud.find('a')
        name = user_link.text
        user_id = int(re.match('/users/(\d+)', user_link.get('href')).group(1))
        print('<-> User: #{0} ({1})'.format(user_id, name), end='')

        rep_list = collect_reps_for_user(ud)
        user_score = 1.5 + 0.233 * sum(math.log(rep-101) for rep in rep_list)
        total_score += user_score
        if user_score > 1.5:
            significant_committers += 1

        print(' ... score = {0}'.format(user_score))

    return (total_score, significant_committers)




print("<?> Proposal ID: ", end='')
proposal_id = input()
url = 'http://area51.stackexchange.com/proposals/' + proposal_id

print("<:> Loading [{0}], please wait...".format(url))
try:
    with urllib.request.urlopen(url) as resp:
        doc = lxml.html.parse(resp)
        html = doc.getroot()

        phase = html.find_class('phase-name')[0].text
        proposal_title = html.find_class('proposal-hyperlink')[0].text

        print("<-> Found proposal #{0} ({1}).".format(proposal_id, proposal_title))
        print("<-> Phase: ", phase)

        if phase == 'Definition':
            print("<!> The proposal is still in Definition phase.")
        elif phase != 'Commitment':
            print("<!> The Commitment phase for this proposal has already ended.")
        else:
            committers = integerize(html.find_class('vote-count-post')[0].text)
            print("<-> Number of users committed: {0}".format(committers))

            page_links = html.find_class('page-numbers')
            pages = integerize(page_links[-2].text) if len(page_links) >= 2 else 1
            print("<-> Totally {0} pages".format(pages))

            (total_score, significant_committers) = collect_user_data(html)

            base_url = url + '?page='
            for page in range(2, pages+1):
                url = base_url + str(page)
                print("<:> Loading [{0}], please wait...".format(url))
                time.sleep(1)
                with urllib.request.urlopen(url) as resp2:
                    doc2 = lxml.html.parse(resp2)
                    html2 = doc2.getroot()
                    (extra_total_score, extra_significant_committers) = collect_user_data(html2)
                    total_score += extra_total_score
                    significant_committers += extra_significant_committers

            print("------------------------------------------")
            print("Committers:   {0:3}% [{1}]".format(min(committers//2, 100), committers))
            print("Significants: {0:3}% [{1}]".format(min(significant_committers, 100), significant_committers))
            print("User scores:  {0:3}% [{1}]".format(min(int(total_score/5), 100), total_score))


except urllib.error.HTTPError as exc:
    print("<!> Encountered '{0}' while loading [{1}]".format(exc, url))


评论


这是为哪个版本的python写的?我使用2.5.2收到大量错误

– Bobby Jack
2011-2-25在10:37

@Bobby:第一行中的“以下Python 3.x脚本...”

– kennytm
2011-02-25 13:32

抱歉,肯尼-今天戴上笨顶帽子! ;)

– Bobby Jack
2011-2-25在23:14

我喜欢它!我当时正在考虑为Ruby写一个,以帮助我更好地学习Ruby。 :P

–忧郁症
11年4月20日在23:12