简单随机重定向是行为偏见

时间:2015-11-08 12:29:19

标签: javascript redirect random

我在空白的重定向程序页面上有一个非常简单的Javascript,用于随机将人们重定向到2个网站中的一个。

<script type="text/javascript">
var urls = new Array("http://www.google.com", "http://www.yahoo.com");
window.location = urls[Math.floor(urls.length*Math.random())];
</script>

如果反复点击此重定向器的链接,则登陆Google或Yahoo的几率似乎为50/50。然而,当要求很多人点击它时,他们似乎绝大多数都是第一次点击雅虎。第一次只有一对夫妇被带到谷歌。

任何线索,为什么??

1 个答案:

答案 0 :(得分:0)

ECMAScript / javascript将Math.random()定义为:

  

返回带有正号的Number值,大于或等于0   但小于1,随机选择或伪随机选择近似   在该范围内均匀分布,使用   依赖于实现的算法或策略。这个功能不需要   参数。

为了保证有一个近似均匀的分布,显然需要一个众所周知的数学算法(并且有相当一部分)。因此,结果(取决于算法无限)序列的分布与样本大小相关。

所以,你是正确的,从长远来看......你会在同一个会话期间在同一主机上接近50/50分发

...这是影响你的测试结果及其解释的前两件事:

  • 您的测试规模(您需要非常每个操作系统/浏览器/主机组合的至少1000个样本)
  • 这些测试是在不同的 OS /浏览器/主机组合上执行的(不同位置上的不同序列)

这意味着,您(测试结果序列的接收者)获得的东西非常接近真正的随机性......均匀分布只能播种到无数样本中 - 大小!

强制性迪尔伯特:
Dilbert random 来源:http://dilbert.com/strip/2001-10-25

现在,如果您说您已经获得了大量的测试结果,其中您发现了对特定操作系统/浏览器/主机组合的显着偏见,其中明显偏向Math.random返回高于{的值{1}}作为您的页面/应用程序加载后的第一个值,然后请分享/证明该信息(哪个浏览器(-version)在哪个操作系统上???这将是有趣的,事实上唯一可以认真进一步的事情调查)!!!

我在下面添加了一些测试演示(请注意输出textarea pre -pends输出):

  1. 第一个按钮清除输出textarea。
  2. 第二个按钮打印20个随机(50/50)结果 单击它多次,并注意您正在查看一组是/否(0/1)除以20的组。如果您将相同的结果分成另一个数量,则每行可以以不同的值开始。 。
    另请注意您将如何看到重复值的字符串(如Dilbert卡通片)以及(在小样本范围内)看起来更交替的字符串。
  3. 第三个按钮使其向上倾斜并显示大致均匀的分布(每个按钮的总数和是的),超过您可以选择的样本大小(不要让它 大。 。)
    再次点击它多次,感受一下“感觉”。看看小规模(如10)如何产生很大的百分比差异,但随着你提升样本,你应该看到50/50或接近(百分比)匹配!
  4. 现在,第四个按钮很有趣,并探讨了您更好地利用随机解决方案的想法(您评论了另一个错误答案):通过添加现有数据集的副本来增加数据集。

    0.5又名["http://www.google.com", "http://www.yahoo.com"]更改为[0,1]只是您的数据集重复或相乘(因为[0,1,0,1]会对[0,1,0]产生明显的偏见。因此,因子1是裸数据集0,因子2是[0,1]等 在不增加数据集但只计算等效数据的情况下,我们可以得到相同的行为:[0,1,0,1]

      

    WolframAlpha上的PLOT: plot floor((x*f)*r)mod x where x=2, f=4 for r=0 to 0.99999
      分别是:floor( (array.length * factor) * random ) % array.length(又名array.length)和x=number of items   请注意,与f=factorround一起展示为什么 ceil提供最佳分配是很有趣的。还可以使用floorx查看为什么会这样做。

    单击该按钮会显示10个随机值(缩小到前3个字符,因此缩小1个十进制数字),然后显示前5个因子的结果(作为表格)。
    点击它多次,看看每个因素如何仍然可以得到类似Dilbert的重复或短期交替。看看没有哪些因素(在示例中)给出了合理的改进:选择一个最喜欢的&#39;因素,多次点击该按钮,看看它是否仍然是您最喜欢的&#39;,选择一个新的&#39;最爱&#39;,冲洗并重复...

  5. 第五个按钮显示因子2的分布(如第二个按钮)。请注意,结果(取决于样本大小)与我们(应该)使用第四个按钮看到的一致。
  6. 第六个按钮显示实际数据集的x个样本量的分布,您可以乘以/分解甚至随机化。
    (注意:仅输入f0,以1分隔(空格和标签将被忽略)) 这玩具很有意思。随机化ORDER结合javascript随机的近似均匀分布仍然不应该显着偏向结果。
  7. &#13;
    &#13;
    ,
    &#13;
    &#13;
    &#13;

    建议全屏运行代码段。