Testmethoden, die zufällige Werte in Python zurückgeben

Dieser Artikel ist der 14. Tagesartikel von Python Advent Calendar 2015.

Eine Methode, die einen zufälligen Wert zurückgibt, kann getestet werden, z. B. wenn der Test nicht bestanden wird, wenn die Ergebnisse um einen bestimmten Betrag vom erwarteten Ergebnis abweichen. Ich habe ein Programm geschrieben und mich gefragt, ob es statistisch getestet werden kann.

Unit Test Eine Methode, die mithilfe des Chi-Quadrat-Tests einen zufälligen Wert zurückgibt.

Implementierung

Wenn Sie beispielsweise ein Programm schreiben, das einen Würfel wirft und zufällig 1 bis 6 zurückgibt, ist dies wie folgt.

dice.py


# -*- coding: utf-8 -*-

import random

class Dice(object):
    def throw(self):
        return random.randint(1, 6)

Der Code zum Testen sieht folgendermaßen aus:

test_dice.py


# -*- coding: utf-8 -*-

import collections
import unittest

import dice

from scipy import stats


class TestDice(unittest.TestCase):

    def setUp(self):
        self.__target = dice.Dice()

    def test_throw(self):
        #6000 Mal ausführen
        result = [self.__target.throw() for n in range(0, 6000)]
        #Aggregation der Ausführungsergebnisse
        counted = collections.Counter(result)
        #Überprüfen Sie, ob unregelmäßige Augen vorhanden sind
        self.assertItemsEqual([1, 2, 3, 4, 5, 6], counted.keys())
        #Führen Sie einen Chi-Quadrat-Test mit Signifikanzstufe 1 durch%Wenn die Nullhypothese, dass keine Verzerrung vorliegt, zurückgewiesen werden kann, schlägt der Test fehl.
        #Fast jedes Auge sollte ungefähr 1000 Mal erscheinen, und wenn es erheblich davon abweicht, wird es versagen.
        chi_square_value, p_value = stats.chisquare(
            [counted[1], counted[2], counted[3], counted[4], counted[5], counted[6]],
            f_exp=[1000, 1000, 1000, 1000, 1000, 1000]
        )
        self.assertLess(0.01, p_value)

Das stats Modul von scipy ist erforderlich. Wenn es nicht installiert ist, installieren Sie es mit pip.

$ pip install numpy
$ pip install scipy

Kommentar

Führen Sie es eine bestimmte Anzahl von Malen aus (diesmal 6000 Mal) und aggregieren Sie die Ausführungsergebnisse. Zum Beispiel ist das 1. Auge 1007-mal, das 2. Auge 1050-mal und so weiter.

Ist es möglich, die Differenz zwischen der Gesamtzahl und dem theoretischen Wert, in diesem Fall 1000 Mal für jeden Wurf, zu testen und die Nullhypothese abzulehnen, dass "die Häufigkeit des Würfelns gleich ist"? Herausfinden.

Wenn die Nullhypothese zurückgewiesen werden kann, bedeutet dies, dass das Ergebnis nicht Ihren Erwartungen entspricht und der Test fehlschlägt. Im Gegenteil, wenn es nicht abgelehnt werden kann, ist der Test bestanden.

wichtiger Punkt

Selbst statistische Tests schlagen immer noch fehl, wenn Sie Pech haben. Daher kann es schwierig sein, tatsächlich zu arbeiten.

Durch Verringern des Signifikanzniveaus wird die Anzahl der Muster verringert, bei denen der Test fehlschlägt, obwohl er tatsächlich korrekt ist. Im Gegenteil, der Test schlägt nicht mit einer geringfügigen Abweichung fehl, sodass die Anzahl der Einsen tatsächlich geringfügig höher war als die anderen. Kann nicht erkannt werden.

Umgekehrt erhöht das Erhöhen des Signifikanzniveaus das Muster der tatsächlich korrekten Testfehler. Es können jedoch auch kleine Abweichungen festgestellt werden.

Tests mit zu vielen Fehlern werden nicht wie gewohnt betrachtet, daher denke ich, dass es besser ist, sie mit einem niedrigen Signifikanzniveau durchzuführen, wenn sie tatsächlich betrieben werden.

Referenzierte Seite

Recommended Posts

Testmethoden, die zufällige Werte in Python zurückgeben
Zufälliger Spaziergang in Python
Werte in Python austauschen
String-Objektmethoden in Python
Verwenden Sie Random Forest mit Python
Gewichtete zufällige Auswahl in Python
Rufen Sie Methoden in Python dynamisch auf
Übertragen Sie Parameterwerte in Python
Definieren Sie Funktionen (Methoden) in Python dynamisch
Erstellen Sie eine zufällige Zeichenfolge in Python
Eine Klasse, die häufig verwendete Methoden in Twitter API (Python) zusammenfasst.
Implementieren Sie gemeinsam statistische Hypothesentests in Python
Private Methoden und Felder in Python [Verschlüsselung]
Zusammenfassung der integrierten Methoden usw. der Python-Liste
Krankheitsklassifizierung durch Random Forest mit Python
[Python] Krankheitsklassifikation in zufälligen Wäldern - mit LDA-
[Python] Ein Programm, das die minimalen und maximalen Werte ohne Verwendung von Methoden findet
Ein Liner, der neunundneunzig in Python ausgibt
Zeichnen Sie Konturlinien, die in Lehrbüchern erscheinen (Python).
Ein Memo, das ich schnell in Python geschrieben habe
Erstellen einer Umgebung, die Python mit Eclipse verwendet
Ein Programm, das doppelte Anweisungen in Python entfernt
Statische Typprüfung, die in Python lose beginnt
Füllen Sie dynamische Variablenwerte in Python mit 0
Diejenige, die den Fortschrittsbalken in Python anzeigt
Formeln, die unter Mathematik mit Python ausführen angezeigt werden
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Python frühe Rückkehr
Python: Tips-Swap-Werte
Metaanalyse in Python
Unittest in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Plink in Python
Konstante in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv