[23] Petite règle statistique pour se représenter une probabilité

Afin de me représenter ce qu’est une probabilité p (particulièrement lorsqu’elle est faible) j’utilise la petite règle suivante :

  • Si je tente l’expérience 1/p fois (arrondi à l’inférieur lorsque ce n’est pas un nombre entier), j’ai “de bonnes chances” que l’événement se réalise
  • Il me faudra attendre 3/p essais pour être “pratiquement certain” que l’événement se réalise

Si par exemple on me dit que “un français sur cinq a plus de 65 ans“, je sais qu’en prenant 5 français au hasard dans la population, j’ai de bonnes chances qu’au moins un ait plus de 65 ans parmi eux, et que je suis presque certain d’en trouver un si je sélectionne 15 français.

Il est facile de voir pourquoi ça marche : la probabilité d’obtenir au moins un succès en n lancers est :

\(\Pr(un~succes) = 1-\Pr(aucun~succes)\)

La probabilité de n’avoir aucun succès vérifie une loi binomiale de paramètre p, soit :

\(\Pr(un~succes) = 1-(1-p)^{\frac{1}{p}} = 1 – \exp ( \frac{1}{p} \log(1-p) )\)

Or, quand p est petite, on a:

\(\log(1-p) \sim -p\)

Donc finalement :

\(\Pr(un~succes) \sim 1-\exp(-1) \sim 0.63\)

De la même façon avec 3/p essais :

\(\Pr(un~succes) \sim 1-\exp(-3) \sim 0.95\)

 

On peut vérifier la qualité des deux approximations avec deux petits graphes (pour p compris entre 0 et 0.5 – au-delà de 0.5, l’arrondi de 1/p étant égal à 1, cela n’aurait plus beaucoup de sens) :

Simulation de l'approximation 1/p pour différentes valeurs de p
Simulation de l’approximation 1/p pour différentes valeurs de p
Simulation de l'approximation 3/p pour différentes valeurs de p
Simulation de l’approximation 3/p pour différentes valeurs de p

Voilà, mis à part quelques effets de seuil et le fait que l’approximation est un peu trop conservative lorsqu’on se rapproche de p = 0.5, ce n’est pas trop mal !

 

[12] Le paradoxe d’Alexander

Il paraît que tout mathématicien apprécie un bon paradoxe. Et il semblerait aussi qu’il n’y ait pas de bon blog de maths sans paradoxe, comme nous le prouvent par exemple Freakonometrics, Science étonnante ou encore la chaîne youtube Science4All ! Donc aujourd’hui on inaugure la section paradoxe de ce blog avec un petit problème dû à Alexander (1989).

Imaginez une tombola où il y a n = 3 prix distribués. Une même personne ne pourra recevoir qu’un seul prix, mais il n’y a pas de limite dans le nombre de tickets que chacun peut acheter pour maximiser ses chances de remporter un lot. Le tirage se déroule comme suit : on met tous les tickets dans l’urne et on tire le gagnant du premier lot. Si la personne tirée possédait plusieurs tickets, on les retire tous de l’urne, et on recommence jusqu’à ce que les trois prix aient été attribués.

Obtenir un de ces prix vous tient très à cœur et vous achetez 225 000 tickets de loterie ! Votre éternel rival (noté R) lui aussi veut un de ces lots à tout prix et achète également 225 000 tickets. 50 000 autres personnes ont joué à la loterie, mais elles n’ont acheté qu’un seul ticket chacune.

Vous manquez malheureusement le tirage mais vous croisez votre rival qui en sort, tout dépité. Logiquement, vous devriez vous réjouir, non ? Le fait qu’il n’ait pas gagné malgré ses 225 000 tickets devrait vous donner mécaniquement plus de chances. En termes plus mathématiques, on devrait donc avoir :

\(\Pr(vous~perdez~|~R~a~perdu) \leq \Pr(vous~perdez) \)

 

On peut très simplement faire des simulations de cette loterie en R (et avec l’aide du package foreach, que j’apprécie beaucoup). On va faire 100000 simulations parce que la différence entre les deux probabilités n’est pas très élevée :

library(foreach)


N <- 500000
multiTickets <- 225000

id_self <- 1
id_rival <- 2
pop <- c(rep(1,multiTickets),rep(2,multiTickets),3:(N-2*multiTickets))

n <- 3

nSim <- 100000

successive_sample <- function(pop, n) {
 
 sample_set <- rep(0,n)
 popTemp <- pop
 k <- 1 ## temp size of sample
 
 cont <- TRUE
 
 while(cont) {
 
 drawn_unit <- sample(popTemp,1)
 sample_set[k] <- drawn_unit
 k <- k+1
 popTemp <- popTemp[popTemp != drawn_unit]
 
 if( k > n ) {
 cont <- FALSE
 }
 
 }
 
 return(sample_set)
}

sim_lottery <- foreach(k = 1:nSim, .combine=rbind) %do% {
 successive_sample(pop, n)
}


p_lost <- sum(as.numeric(
 apply(sim_lottery,1, function(x) { return(!(id_self %in% x)) } )
)) / nSim

sim_rival_lost <- sim_lottery[apply(sim_lottery,1,function(x) { return(!(id_rival %in% x)) }),]
p_lost_conditional <- sum(as.numeric(
 apply(sim_rival_lost,1,
 function(x) { return(!(id_self %in% x)) })
)) / nrow(sim_rival_lost)

Et on observe :

> p_lost
[1] 0.02871
> p_lost_conditional
[1] 0.03449465

C’est-à-dire :

\(\Pr(vous~perdez~|~R~a~perdu) > \Pr(vous~perdez) \)

 

Donc contrairement à notre intuition, le fait de savoir que notre rival a perdu ne doit pas nous réjouir, car nous avons maintenant moins de chances de gagner que sans cette information !

Plutôt rigolo, non ? Vous pouvez essayer de faire tourner le code précédent avec des allocations en tickets un peu moins “bizarres”. Vous observerez par exemple que pour 1000 tickets distribués parmi 1000 joueurs différents, la condition “intuitive” est bien vérifiée. Le “paradoxe d’Alexander” a en fait des applications en statistique théorique et en sondages.

 

Image de couverture © The Pokémon Company