Statistiken zur Validierung von Spielautomaten

8

Das Problem ist, dass die Regierung das elektronische Roulette schließen will und behauptet, dass das Roulette beim statistischen Test fehlgeschlagen ist.

Entschuldigung für meine Sprache, aber diese ist so gut wie möglich aus dem slowenischen Recht übersetzt. Offizielle (gesetzlich) Anforderungen sind:

  • Die Häufigkeit jedes Ereignisses sollte nicht um mehr als 3 Sigma von der erwarteten Häufigkeit abweichen
  • Der Chi-Quadrat-Test der Normalverteilung muss innerhalb des Risikograds von 0,025 liegen
  • Der Test der aufeinanderfolgenden Korrelation muss den 3-Sigma-Test und den Chi-Quadrat-Test bestehen

Ich habe die ersten beiden Anforderungen getestet und sie bestehen die Tests, aber ich habe Probleme mit dem Verständnis der dritten Anforderung. (Denken Sie daran, dass dies übersetzt wird und "aufeinanderfolgende Korrelation" etwas anderes sein kann)

Wie soll ich die 3. Anforderung testen?

Daten, wenn jemand interessiert ist:
http://pastebin.com/ffbSKpr1

BEARBEITEN: Chi-Quadrat schlägt 2% der Zeit fehl (was ich erwarte, wird erwartet, weil Alpha 0,025 ist) und Sigma3-Test schlägt 5% fehl, wenn ich 9% Fehler für 3sigma erwarte (es sieht so aus, als ob die Frequenzen nicht entsprechend verteilt sind Normalverteilung auch für Zufallszahlen)

Ich verstehe dieses Gesetz möglicherweise nicht richtig, aber es besteht eine Wahrscheinlichkeit von fast 0%, dass der 3-Sigma-Test für alle Autokorrelationsvektoren bestanden wird, da die Wahrscheinlichkeit, dass er in einem Durchgang fehlschlägt, bei 9% und im Chi-Quadrat-Test bei 2,5% liegt.

Python-Code:

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
quelle
3
dober dan! Wissen Sie, ob das offizielle Gesetz für Roulette oder andere Spielgeräte ausgelegt ist? (Spielautomat, Poker usw.) Die dritte Anforderung klingt nach Autokorrelation, oder sie könnte durch einen Wald-Wolfowitz-Test usw. getestet werden
Shabbychef
Es ist für allgemeine Spielgeräte konzipiert. Link für Recht (in slowenischer Sprache) ist unter unpis.gov.si/fileadmin/unpis.gov.si/pageuploads/zakonodaja/… (Absatz 6)
ralu
Meine Schwiegermutter ist Slowene, aber ich glaube nicht, dass sie das sehr gut übersetzen kann. Vielleicht ist der Test, auf den sie sich beziehen, die Autokorrelation der Renditen für einen Spieler, der zum Beispiel immer die Nummer 17 spielt. (und für jede Nummer wiederholen?) Vielleicht wäre es auch lehrreich, in den en.wikipedia.org/wiki/Diehard_tests herumzustöbern .
Shabbychef
Vielleicht fordern sie eine zeitverzögerte Regression, das heißt - sagt die vorherige Zahl die nachfolgende Zahl voraus?
Russellpierce

Antworten:

2

Für ein faires Spiel sollten aufeinanderfolgende Spiele unabhängig sein. Es hört sich so an, als würden Sie aufgefordert, einen Test durchzuführen, bei dem aufeinanderfolgende Ergebnisse nicht korreliert sind. Sie können dies tun, indem Sie die Daten Lassen Sie die ersten Ergebnisse sein. Dann können Sie verschiedene Paare , . Die Berechnung des Pearson-Korrelationskoeffizienten unterscheidet sich von Null (wenn die Daten stetig sind oder sogar eine Menge von ganzen Zahlen). Wenn die Daten für Verlieren / Gewinnen sind , können Sie die Unabhängigkeit in der Tabelle , indem Sie die Zählungen für und . In diesem Fall vonR.1,R.2,...,R.2n2nn(R.1,R.2)(R.3,R.4),...,(R.2n- -1,R.2n)0/.12×2(0,0),(0,1),(1,0)(1,1)0/.1 der oben vorgeschlagene Lauftest von Wald und Wofowitz ebenfalls verwendet werden. So wie es in der Regel beschrieben wird, klingt es so, als ob Sie ein Konfidenzintervall für die Korrelation mit der halben Breite von . Sie würden übergeben, wenn im Intervall enthalten ist. Diese Tests scheinen jedoch etwas zu einfach zu bestehen.3σ0

Michael R. Chernick
quelle