[PYTHON] Wenn Sie eine Lotterie mit einer Chance von 1% ziehen, 100 Mal hintereinander zu erscheinen, werden Sie dann einmal gewinnen?

Dieses Thema

In dem ursprünglichen Artikel, der inspiriert wurde, ist es keine Lotterie, sondern eine Gacha, aber ...

Sobald die Wahrscheinlichkeit klar ist, ist sie bedeutungslos, wenn sie nicht richtig verstanden wird. Ein häufiger Fehler ist die Annahme, dass eine Erscheinungswahrscheinlichkeit von 1% mit ziemlicher Sicherheit herauskommt, wenn Sie die Gacha 100 Mal ziehen. Tatsächlich beträgt die Wahrscheinlichkeit, eine Gacha mit einer Erscheinungswahrscheinlichkeit von 1% durch 100-maliges Ziehen zu treffen, nur etwa 63%. Mit anderen Worten, wenn 100 Spieler jeweils 100 Mal ziehen, gewinnen 63, die restlichen 37 verlieren 100 Mal. http://www.4gamer.net/games/999/G999905/20160305003/

Was bedeutet das wirklich? Eine kurze Einführung in den mathematischen Hintergrund, die Berechnung und die Illustration in Python.

Probabilistisch

Wenn Sie eine Gacha ziehen, die jedes Mal 100 Mal hintereinander eine Gewinnchance von 1% hat, dürfen Sie dann niemals gewinnen? !!

Es ist das. Wenn es sich um ein Omikuji in einem Schrein handelt, wird das Omikuji, das Sie einmal gezeichnet haben, normalerweise nicht wiederhergestellt (stattdessen wird es irgendwo in den Bezirken des Schreins gebunden). Jedes Mal, wenn Sie es zeichnen, wird es von allen Omikuji abgezogen. (Extraktion ohne Restauration). In dieser Gacha wird immer eine von 100 Lotterien gewonnen, es handelt sich also um eine Restaurationsextraktion. (Apropos Omikuji, es ist gleichbedeutend mit der Rückgabe Ihrer eigenen Lotterie)

Berechnen wir mit Python

Damit

Wenn Sie eine Gacha ziehen, die jedes Mal 100 Mal hintereinander eine Gewinnchance von 1% hat, dürfen Sie dann niemals gewinnen? !!

Lassen Sie uns quantifizieren. Dies entspricht einem 100-maligen Ziehen eines Verlusts hintereinander.

(1-0.01)^{100}=0.99^{100}

Ich hoffe du kannst rechnen. Wenn Sie mich mit Python rechnen lassen,

>>> 0.99**100
0.3660323412732292

Daher wird es (leider) nicht einmal über 0,366 ≒ 36,6% `treffen. Dies ist der Originalartikel

Die restlichen 37 Personen sind alle 100 Mal verloren.

Das ist der Teil.

Denken Sie mathematisch

In diesem Fall wird die Extraktion ohne Wiederherstellung 100 Mal hintereinander durchgeführt, sodass die "binäre Verteilung" in der Mathematik äquivalent ist.

Eine häufige Geschichte ist ein Kontext wie "Wie oft kommt die Rückseite oder Vorderseite der Münze heraus?", Aber die Art und Weise, wie die Vorderseite herauskommt, ist Ibitsu. "Die Wahrscheinlichkeit, dass die Vorderseite herauskommt, beträgt 0,01, die Wahrscheinlichkeit, dass die Rückseite herauskommt, beträgt 0,99." Es ist eine Situation wie diese. (Ich würde gerne sehen, was für eine Münze es ist, aber ...)

Formulierung

Dann ist die Wahrscheinlichkeit, in 100 nicht wiederherstellenden Extraktionen einen "r" -Treffer zu erhalten, gleich

\begin{eqnarray}
{}_{100} C _r\times 0.01^r\times (1-0.01)^{100-r}
\end{eqnarray}

Lassen Sie uns einige berechnen

Wenn r = 1

\begin{eqnarray}
{}_{100} C_1\times 0.01\times (1-0.01)^{99} = 100\times 0.01\times 0.99^{99}=0.3697...
\end{eqnarray}

⇒ Es ist ungefähr 0.370, also sind die Wahrscheinlichkeit, nicht einmal zu gewinnen und die Wahrscheinlichkeit, einmal zu gewinnen, fast gleich.

Wenn r = 2

\begin{eqnarray}
{}_{100} C_2\times 0.01^2\times (1-0.01)^{98} = 4950\times 0.01^2\times 0.99^{98}=0.1849...
\end{eqnarray}

⇒ Diesmal ist es ungefähr 0.18, also wird sich die Wahrscheinlichkeit plötzlich halbieren ...

Versuchen Sie, eine Wahrscheinlichkeitsverteilung zu zeichnen

Es ist schwierig, über jeden Einzelfall nachzudenken. Wenn Sie also eine (Wahrscheinlichkeits-) Verteilung zeichnen, können Sie das gesamte Bild sehen.

Versuchen Sie, ein Diagramm in Python zu zeichnen

import pandas as pd
import numpy as np

init = 0
trial = 100
prob = 0.01

###Berechnen Sie Kombinationen rekursiv
def comb(n, r):
    if n == 0 or r == 0: return 1
    return comb(n, r-1) * (n-r+1) / r 

###Berechnen Sie die Wahrscheinlichkeit, r-mal zu sein
def binominal(n,r,p):
    return comb(n,r)*(p**r)*((1-p)**(n-r))

###Funktionsvektorisierung
bi = np.vectorize(binominal)

###Haben Sie die Anzahl der Versuche in einem Array
arr = np.arange(init, trial)

###Berechnen Sie die Binomialverteilung durch Vektoroperation
plot_values = pd.DataFrame(bi(trial, arr, prob), columns=['probability'])

###Illustriert
plot_values.plot()

graph.png

⇒ Der Peak endet in der Nähe von "0" und "1" und die Wahrscheinlichkeit nähert sich schnell 0 ... (Schweiß)

Poisson-Verteilung

Die Verteilung von ↑, demjenigen, der es irgendwo gesehen hat, ist scharf. Es ist eine Poisson-Distribution. Auf der Seite "Binärverteilung" von Wikipedia Wenn> n groß und p klein genug ist, ist np ziemlich groß, so dass die Poisson-Verteilung mit dem Parameter λ = np eine gute Annäherung an die Binomialverteilung B (n, p) ergibt. Das heißt, wenn der erwartete Wert λ = np konstant ist und n ausreichend groß ist,

P[X=k]\simeq \frac{\lambda^ke^{-\lambda}}{k!}

Es gibt. Wir haben "Python" verwendet, um "r = 0, 1, 2" zu berechnen, aber versuchen wir, "k = 0, 1, 2" auf die obige Formel anzuwenden. Es ist zu beachten, dass "λ = 100 × 0,01 = 1" im Allgemeinen ist

P[X=k]\simeq \frac{1}{e\times k!}

Damit

P[X=0]=P[X=1]=\frac{1}{e} \simeq 0.3679...

Und Sie können sehen, dass die Wahrscheinlichkeit ungefähr gleich ist, wenn "r = 0, 1". des Weiteren,

P[X=2]=\frac{1}{2e}\simeq 0.1839...

Im Fall von "r = 2" ist die Wahrscheinlichkeit von "r = 0, 1" halb so hoch, was fast richtig ist!

Recommended Posts

Wenn Sie eine Lotterie mit einer Chance von 1% ziehen, 100 Mal hintereinander zu erscheinen, werden Sie dann einmal gewinnen?
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Wahrscheinlichkeit 1
Sie werden in 100 Tagen Ingenieur. ――Tag 64 ――Programmieren ――Über Wahrscheinlichkeit 2
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Wenn Sie einen Singleton in Python möchten, stellen Sie sich das Modul als Singleton vor
Sie werden in 100 Tagen Ingenieur. ――Tag 24 ―― Python ―― Grundlagen der Python-Sprache 1
[Python] Wenn Sie ein Streudiagramm mehrerer Cluster zeichnen möchten
Sie werden in 100 Tagen Ingenieur. ――Tag 30 ―― Python ―― Grundlagen der Python-Sprache 6
Sie werden in 100 Tagen Ingenieur. ――Tag 25 ―― Python ―― Grundlagen der Python-Sprache 2
Ein Memorandum mit Filterbefehlen, die Sie möglicherweise sofort vergessen
Zeichne mit PyCall ein Herz in Ruby
Sie werden in 100 Tagen Ingenieur - 29. Tag - Python - Grundlagen der Python-Sprache 5
Sie werden in 100 Tagen Ingenieur - Tag 33 - Python - Grundlagen der Python-Sprache 8
Sie werden in 100 Tagen Ingenieur - 26. Tag - Python - Grundlagen der Python-Sprache 3
Sie werden in 100 Tagen Ingenieur - Tag 35 - Python - Was Sie mit Python tun können
Überprüfen Sie mit einem Test, wie oft die Abfrage (SQL) in Django ausgelöst wurde
Wenn ihr in der Scope-Küche das mit einem Rand machen könnt ~ ♪
Sie werden in 100 Tagen Ingenieur - Tag 32 - Python - Grundlagen der Python-Sprache 7
Wenn beim Tippen einer interaktiven Shell mit Anaconda eine lange Fehlermeldung angezeigt wird
Sie werden in 100 Tagen Ingenieur - 28. Tag - Python - Grundlagen der Python-Sprache 4
Selbst wenn Sie ein Python-Anfänger sind und weniger als ein Jahr Pferderennen haben, konnten Sie ein Triple gewinnen.
Zeichnen Sie in Python ein Diagramm einer quadratischen Funktion
Zeichnen Sie in Jupyter ein Diagramm mit japanischen Beschriftungen
Wenn Sie eine Methode in einer Ruby-Klasse definieren und dann eine Methode darin definieren, wird sie zu einer Methode der ursprünglichen Klasse.
Python-Ertrag verstehen Wenn Sie Ertrag in eine Funktion einfügen, wird dieser in einen Generator geändert
Was tun, wenn Sie Python auf IntelliJ ausführen und mit einem Fehler beenden?
[Python] Wenn Sie eine Datei mit demselben Namen wie das zu importierende Modul erstellen, tritt ein Attributfehler auf.