[PYTHON] Si vous tirez une loterie avec 1% de chances d'apparaître 100 fois de suite, gagnerez-vous une fois?

Ce thème

Dans l'article original qui a été inspiré, ce n'est pas une loterie mais une gacha, mais ...

Une fois que la probabilité est claire, elle n'a aucun sens si elle n'est pas comprise correctement. Une erreur courante est la croyance que si la probabilité d'apparition est de 1%, elle sortira presque certainement si vous dessinez le gacha 100 fois. En fait, la probabilité de toucher une gacha avec une probabilité d'apparition de 1% en la tirant 100 fois n'est que d'environ 63%. En d'autres termes, si 100 joueurs tirent 100 fois chacun, 63 gagneront, mais les 37 autres perdront 100 fois. http://www.4gamer.net/games/999/G999905/20160305003/

Qu'est-ce que cela signifie vraiment? Une brève introduction au contexte mathématique, au calcul et à l'illustration en Python.

Probablement

1% de chances de gagner à chaque fois Si vous tirez un gacha 100 fois de suite, ne pouvez-vous jamais gagner? !!

C'est ça. S'il s'agit d'un omikuji dans un sanctuaire, l'omikuji que vous dessinez une fois ne sera normalement pas restauré (au lieu de cela, il sera lié à quelque part dans l'enceinte du sanctuaire), donc chaque fois que vous le dessinez, il sera déduit de tous les omikuji. (Extraction sans restauration). Dans ce gacha, une loterie sur 100 est toujours gagnée, il s'agit donc d'une extraction de restauration. (En parlant d'Omikuji, cela équivaut à rendre votre propre loterie)

Calculons avec Python

Alors

1% de chances de gagner à chaque fois Si vous tirez un gacha 100 fois de suite, ne pouvez-vous jamais gagner? !!

Quantifions. Cela équivaut à faire une perte 100 fois de suite.

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

J'espère que vous pouvez calculer. Si vous me laissez calculer avec python,

>>> 0.99**100
0.3660323412732292

Par conséquent, il n'atteindra même pas une seule fois environ «0,366 ≒ 36,6%» (malheureusement). Ceci est l'article original

Les 37 personnes restantes sont toutes perdues 100 fois.

Voilà la partie.

Pensez mathématiquement

Dans ce cas, l'extraction sans restauration est effectuée 100 fois de suite, donc la "distribution binaire" est équivalente en mathématiques.

Une histoire courante est un contexte comme "Combien de fois le verso ou le recto de la pièce sort-il 100 fois?" C'est une situation comme celle-ci. (Je voudrais voir de quel type de pièce il s'agit, mais ...)

Formulation

Ensuite, la probabilité d'obtenir un résultat r dans 100 extractions non restaurées est

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

Calculons quelques

Lorsque 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}

⇒C'est environ "0,370", donc la probabilité de ne pas gagner même une fois et la probabilité de gagner une fois sont presque les mêmes.

Lorsque 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}

⇒ Cette fois, il s'agit de "0,18", donc la probabilité sera subitement divisée par deux ...

Essayez de dessiner une distribution de probabilité

Il est difficile de penser à chaque cas individuel à chaque fois, donc si vous dessinez une distribution (de probabilité), vous pouvez voir le tableau dans son ensemble.

Essayez de dessiner un graphique en Python

import pandas as pd
import numpy as np

init = 0
trial = 100
prob = 0.01

###Calculer des combinaisons récursivement
def comb(n, r):
    if n == 0 or r == 0: return 1
    return comb(n, r-1) * (n-r+1) / r 

###Calculer la probabilité d'être r fois
def binominal(n,r,p):
    return comb(n,r)*(p**r)*((1-p)**(n-r))

###Vectorisation des fonctions
bi = np.vectorize(binominal)

###Avoir le nombre d'essais dans un tableau
arr = np.arange(init, trial)

###Calculer la distribution binomiale par opération vectorielle
plot_values = pd.DataFrame(bi(trial, arr, prob), columns=['probability'])

###Illustré
plot_values.plot()

graph.png

⇒ Le pic se termine vers «0» et «1», et la probabilité s'approche rapidement de 0 ... (sueur)

Distribution de Poisson

La distribution de ↑, celui qui l'a vu quelque part est nette. C'est une distribution de Poisson. Sur la page "distribution binaire" de Wikipedia Si> n est grand et p est assez petit, np est raisonnablement grand, donc la distribution de Poisson avec le paramètre λ = np donne une bonne approximation de la distribution binomiale B (n, p). Autrement dit, lorsque la valeur attendue λ = np est constante et n est suffisamment grand,

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

Il y a. Nous avons utilisé python pour calculer r = 0, 1, 2, mais essayons d'appliquer k = 0, 1, 2 à la formule ci-dessus. Notez que «λ = 100 × 0,01 = 1» est généralement

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

Alors

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

Et vous pouvez voir que la probabilité est à peu près la même lorsque r = 0, 1. plus loin,

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

Donc, dans le cas de «r = 2», la probabilité de «r = 0, 1» est de moitié, ce qui est presque correct!

Recommended Posts

Si vous tirez une loterie avec 1% de chances d'apparaître 100 fois de suite, gagnerez-vous une fois?
Vous serez ingénieur dans 100 jours ――Jour 63 ――Programmation ――À propos de la probabilité 1
Vous serez ingénieur dans 100 jours ――Jour 64 ――Programmation ――À propos de la probabilité 2
Si vous donnez une liste avec l'argument par défaut de la fonction ...
Si vous voulez un singleton en python, considérez le module comme un singleton
Vous serez ingénieur dans 100 jours ――Jour 24 ―― Python ―― Bases du langage Python 1
[Python] Si vous souhaitez dessiner un diagramme de dispersion de plusieurs clusters
Vous serez ingénieur dans 100 jours ――Jour 30 ―― Python ―― Bases du langage Python 6
Vous serez ingénieur dans 100 jours ――Jour 25 ―― Python ―― Bases du langage Python 2
Un mémorandum de commandes de filtrage que vous pourriez oublier en un instant
Dessinez un cœur en rubis avec PyCall
Vous serez ingénieur dans 100 jours - Jour 29 - Python - Bases du langage Python 5
Vous serez ingénieur dans 100 jours - Jour 33 - Python - Bases du langage Python 8
Vous serez ingénieur dans 100 jours --Jour 26 --Python --Basiques du langage Python 3
Vous devenez ingénieur en 100 jours - Jour 35 - Python - Ce que vous pouvez faire avec Python
Vérifiez le nombre de fois où la requête (sql) a été lancée dans django avec un test
Si vous les gars dans la cuisine de portée pouvez le faire avec une marge ~ ♪
Vous serez ingénieur dans 100 jours --Jour 32 --Python --Basiques du langage Python 7
Si vous obtenez une longue erreur lors de la tabulation d'un shell interactif avec Anaconda
Vous serez ingénieur dans 100 jours --Jour 28 --Python --Les bases du langage Python 4
Même si vous êtes un débutant en python et que vous avez moins d'un an de courses de chevaux, vous avez pu gagner un triple.
Dessiner un graphique d'une fonction quadratique en Python
Dessinez un graphique avec des étiquettes japonaises dans Jupyter
Si vous définissez une méthode dans une classe Ruby, puis définissez une méthode dans celle-ci, elle devient une méthode de la classe d'origine.
Comprendre le rendement Python Si vous mettez le rendement dans une fonction, elle se transforme en générateur
Que faire si vous exécutez python sur IntelliJ et quittez avec une erreur
[Python] Si vous créez un fichier avec le même nom que le module à importer, une erreur d'attribut se produira.