Estatísticas para validação de máquinas de jogo

8

O problema é que o governo quer fechar a roleta eletrônica e afirma que a roleta falhou no teste estatístico.

Desculpe pelo meu idioma, mas isso é traduzido da lei eslovena da melhor maneira possível. Os requisitos oficiais (por lei) são:

  • A frequência de cada evento não deve diferir da frequência esperada em mais de 3 sigma
  • O teste do qui quadrado da distribuição normal deve estar dentro do nível de risco de 0,025
  • teste de correlação consecutiva tem que passar no teste de 3 sigma e no teste do qui quadrado

Testei os 2 primeiros requisitos e eles passaram nos testes, mas tenho problemas para entender o 3º requisito. (lembre-se de que isso é traduzido e "correlação consecutiva" pode ser outra coisa)

Como devo testar o 3º requisito?

Dados se alguém estiver interessado:
http://pastebin.com/ffbSKpr1

EDIT: chi ao quadrado falha 2% do tempo (o que eu espero que seja esperado devido ao fato de que alfa é 0,025) e o teste sigma3 falha 5%, onde eu espero 9% de falha no 3sigma (parece que as frequências não são distribuídas de acordo com distribuição normal, mesmo para números aleatórios)

Talvez eu não entenda essa lei corretamente, mas é quase 0% de probabilidade de passar no teste 3sigma para todos os vetores de autocorrelação, uma vez que é 9% de probabilidade de falha na execução única e 2,5 no teste do qui-quadrado.

Código Python:

from math import sqrt
from itertools import *
import random

#uncoment for python 2.x 
    #zip = izip 
    #range = xrange


#with open("rng.txt","r") as wr:
#   n = [int(i) for i in wr]
n = [random.randint(0,36) for i in range(44000)] 


def get_freq(n):
    r=[0 for i in range(37)]
    for i in n:
        r[i] += 1
    return r

def trisigmatest(freq):
    Ef = 1.0*sum(freq)/37
    sigma = sqrt(sum(i**2 for i in freq)/37-Ef**2)
    return all((abs(i - Ef )< sigma*3) for i in freq)


def chiquaretest(freq):
    Ef = 1.0*sum(freq)/37
    chi2 = sum((i-Ef)**2 / Ef for i in freq)
    # values are from http://itl.nist.gov/div898/handbook/eda/section3/eda3674.htm
    # (EDIT) I recaluclated these valuse from inverse cdf chi2 
    # distribution for interval (0.025/2,1-0.025/2) (alpha = 0.025)
    return 20.4441 < chi2 < 58.8954   


#whitout autocorelation  
gf = get_freq(n)
if not trisigmatest(gf):
    print("failed")
    raise
if not chiquaretest(gf):
    print("failed")
    raise


actests = 1000
trifailed = 0;
chifailed = 0;
for i in range(1,actests + 1):
    f=((b-a+37) % 37 for (a,b) in zip(n,n[i:]))
    gf = get_freq(f)
    if not trisigmatest(gf):
        trifailed += 1;
    if not chiquaretest(gf):
        chifailed += 1;
print("trisigmatest failed ", 1.0 * trifailed / actests )
print("chiquaretest failed ", 1.0 * chifailed / actests )
ralu
fonte
3
dober dan! você sabe se a lei oficial foi projetada para roleta ou para outros dispositivos de jogo? (slot machine, póquer, etc) O terceiro requisito sons como autocorrelação, ou pode ser testada por teste de Wald-Wolfowitz, etc
shabbychef
Ele foi projetado para dispositivos de jogo em geral. O link para direito (em língua eslovena ) está em unpis.gov.si/fileadmin/unpis.gov.si/pageuploads/zakonodaja/… (parágrafo 6)
ralu
Minha sogra é eslovena, mas não acho que ela possa traduzir isso muito bem. Talvez o teste a que se referem seja a autocorrelação de retornos para um jogador que sempre joga o número 17, por exemplo. (e repita para cada número?) Talvez bisbilhotar os en.wikipedia.org/wiki/Diehard_tests também seja instrutivo.
06
Talvez o que eles estão pedindo seja uma regressão com atraso de tempo, ou seja - o número anterior prevê o número subsequente?
22811 russellpierce

Respostas:

2

Para um jogo justo, jogadas sucessivas devem ser independentes. Parece que eles estão pedindo para você executar um teste para que os resultados consecutivos não sejam correlacionados. Você pode fazer isso pareando os dados para que sejam os primeiros resultados. Então você pode formar pares distintos , . Calcular o coeficiente de correlação de pearson é diferente de zero (se os dados forem contínuos ou mesmo um conjunto de números inteiros). Se os dados forem para perda / vitória, você poderá testar a independência na tabela obtida usando as contagens para e . Neste caso deR1,R2,...,R2n2nn(R1,R2)(R3,R4),...,(R2n-1,R2n)0 0/12×2(0 0,0 0),(0 0,1),(1,0 0)(1,1)0 0/1 também pode ser usado o teste de Wald e Wofowitz sugerido acima. Da maneira como é descrito na regra, parece que eles desejam que você construa um intervalo de confiança para a correlação com meia largura igual a . Você passaria se estivesse contido no intervalo. Esses testes parecem um pouco fáceis de passar.3σ0 0

Michael R. Chernick
fonte