重複中大獎 機率、程式或作弊?
财政部举办「云端种树趣-e起集点树」抽奖有四人重复中大奖引发热议,存在「统计」与「系统程式」二方面的可能。
中奖一般都是假设在「等机率」、也就是人人都只有一张签的前提下。按照媒体报导:「有九万人抽奖,每个人能够抽三轮;第一轮有五个中奖名额、第二轮有五个中奖名额、第三轮有九个中奖名额,那同样四个人中奖二次的机率有多少?」其机率确实趋近于零。
但观察抽奖办法,容许一人以多种途径重复参加;再依其统计,报名注册的人有九万多人,而参加抽奖的人次达到十三点六万人,即有高达四万多次是重复参加的签。这时,就不符合「等机率」的前提。
统计定律,抽样对象如果包括不同质类,则各质类被抽中机率「与各质类的样本数成正比」,拥有愈多签的人被抽中的机率愈大,再根据国税局的说法假设一个最极端的状况:重复的四万多签都是那四人的,即每人有一万多签,也就是比其他民众中奖的机率多一万倍以上,则约每抽出三个奖,四人之一就会得奖,所以会重复中奖是正常的,甚至是必然的。
不过,如果这四人只是比别人多一百个签,还是不太可能重复中奖。所以财政部要释疑的第一步,就是说明这四位到底拥有几个签?就可以更清楚的检定是否可能发生如此极端情况。至于「系统程式」问题,抽奖程式是极为简单的程式,一般软体公司可能不会请资深工程师负责。
自有电脑以来,所有程式语言都提供二个以上的随机抽样方法,以前叫「指令」,现在称为「函数」及更复杂的「标头档案」。以当前最广泛使用的C语言家族为例,就包括rand( )和srand( )两个不同函数,进阶的C++,又加上标头档案。
在抽奖系统中,每张签都搭配唯一的流水号式签号。使用rand( )时,指定范围(如十三点六万)后,其出现的数字一定是「固定顺序」,也就是一定预先知道第一名、第二名、第三名…到最后一名的签号。
使用srand( )时,可在( )加入不同类型参数,而不致重复出现固定顺序,但也可能因设定疏忽而重复出现。
使用标头档案时,其设定比较复杂,预设是不会产生重复、是真正的随机签,但如果刻意设定,还是可以制造固定顺序。
我们在审查学生作品、政府委托或企业委托专案,经常发现学生、新任程式员或缺乏热情的程式员,在处理随机数时,都采用最简单方法,以致在输出结果上造成并不随机,甚至可预知结果。
在一些赌博性电玩案例中,程式员会故意利用以上程式的特性与技巧,制造出「表面看很随机」,但「实际上完全可控制」产生的数字与发生的条件。
所以,中奖人不必拥有很多签,只要将中奖的流水号分配给中签人(反之亦然),即可重复中奖。也就是说,如果参与者拥有签数没特别多,却能够重复中大奖,就无法排除作弊可能。
因程式而重复中奖,有可能是无意、也可能是故意。在场监督的官员、律师再多,若没有写过程式,也没有系统实务经验,便无法观察出来,当然最后只会以「查无不法」结案。