Statistiques pour la validation des machines à sous

8

Le problème est que le gouvernement veut fermer la roulette électronique et ils prétendent que la roulette a échoué au test statistique.

Désolé pour ma langue, mais ceci est traduit de la loi slovène aussi bien que possible. Les exigences officielles (selon la loi) sont:

  • la fréquence de chaque événement ne doit pas différer de la fréquence attendue de plus de 3 sigma
  • le test du chi carré de la distribution normale doit être dans le niveau de risque de 0,025
  • test de corrélation consécutive doit passer le test 3 sigma et le test chi carré

J'ai testé les 2 premières exigences et ils réussissent les tests, mais j'ai des problèmes pour comprendre la 3e exigence. (gardez à l'esprit que cela se traduit et que la "corrélation consécutive" peut être autre chose)

Comment dois-je tester la 3e exigence?

Données si quelqu'un est intéressé:
http://pastebin.com/ffbSKpr1

EDIT: le chi carré échoue 2% du temps (ce que j'attends qui est attendu en raison du fait que alpha est 0,025) et le test sigma3 échoue 5% où j'attends 9% d'échec pour 3sigma (il semble que les fréquences ne soient pas distribuées selon distribution normale même pour des nombres aléatoires)

Je ne comprends peut-être pas correctement cette loi, mais il y a près de 0% de probabilité de réussir le test 3sigma pour tous les vecteurs d'autocorrélation, car il y a 9% de probabilité d'échouer en un seul passage et 2,5 pour le test chi carré.

Code 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
la source
3
dober dan! savez-vous si la loi officielle est conçue pour la roulette ou pour certains autres appareils de jeu? (machine à sous, poker, etc.) La troisième exigence ressemble à une autocorrélation, ou elle pourrait être testée par le test de Wald-Wolfowitz, etc.
shabbychef
Il est conçu pour un appareil de jeu général. Le lien pour le droit (en slovène) se trouve à unpis.gov.si/fileadmin/unpis.gov.si/pageuploads/zakonodaja/… (paragraphe 6)
ralu
Ma belle-mère est slovène, mais je ne pense pas qu'elle puisse très bien traduire cela. Le test auquel ils se réfèrent est peut-être l'autocorrélation des retours pour un joueur qui joue toujours le numéro 17, par exemple. (et répéter pour chaque numéro?) Peut-être que fouiller dans les fr.wikipedia.org/wiki/Diehard_tests serait également instructif.
shabbychef
Peut-être ce qu'ils demandent, c'est une régression retardée, c'est-à-dire - le nombre précédent prédit-il le nombre suivant?
russellpierce

Réponses:

2

Pour un jeu équitable, les jeux successifs doivent être indépendants. On dirait qu'ils vous demandent d'effectuer un test que les résultats consécutifs ne sont pas corrélés. Vous pouvez le faire en jumelant les données laissent être les premiers résultats. Ensuite, vous pouvez former paires distnct , . Calculer le coefficient de corrélation de Pearson est différent de zéro (si les données sont continues ou même un ensemble d'entiers). Si les données sont pour perdre / gagner, vous pouvez tester l'indépendance dans le tableau obtenu en utilisant les nombres pour et . Dans ce cas deR1,R2,...,R2n2nn(R1,R2)(R3,R4),...,(R2n-1,R2n)0/12×2(0,0),(0,1),(1,0)(1,1)0/1 le test de course de Wald et Wofowitz suggéré ci-dessus pourrait également être utilisé. De la façon dont il est décrit dans la règle, il semble qu'ils souhaitent que vous construisiez un intervalle de confiance pour la corrélation avec une demi-largeur égale à . Vous passeriez si est contenu dans l'intervalle. Ces tests semblent cependant un peu trop faciles à réussir.3σ0

Michael R. Chernick
la source