Keno_20240301

Author

Catherine Hinault, Léon Ilboudo, Fayrouz Karam

Jeu du Keno

Explication du jeu

Dans la version du Keno utilisée dans l’article, il y a \(80\) numéros de \(1\) à \(80\). Le joueur coche sur un bulletin \(15\) numéros de son choix. Ensuite, l’organisateur du jeu (casino ou autre institution) tire au hasard \(20\) numéros parmi les \(80\), numéros désignés comme gagnants. Le gain du joueur dépend du nombre de numéros gagnants qui figurent sur son bulletin.

On veut calculer la probabilité que le joueur ait par exemple \(10\) numéros sélectionnés qui fassent partie des numéros gagnants.

Nous commençons d’abord par une peu de combinatoire.

Calculons le nombre de façons de sélectionner les \(15\) numéros parmi \(80\). C’est le nombre de manières de sélectionner \(15\) objets parmi \(80\). Mathématiquement, on note ce nombre

\[ \binom{80}{15} \]

Nous pouvons le calculer avec R en utilisant le code suivant :

choose(80,15)
[1] 6.63587e+15
library(magrittr)

Nous allons maintenant reproduire la table suivante :

Tableau I extrait de l’article sur le Keno

Chargement des librairies nécessaires à notre programme :

Librairie Utilisation
knitr
magrittr Pour le %>%
kableExtra Affichage d’un beau tableau
stargazer Autre option d’affichage
dplyr
readxl Import de la grille de gain saisies Excel
ggplot2 Présentation des données

Pour alimenter la grille de gains dans notre programme, nous avons opté pour la saisie dans un fichier Excel, puis son importation dans notre document. De cette manière, si la grille venait à changer, nous pourrions simplement effectuer les modifications dans Excel, sans avoir à modifier notre programmation.

Le format du fichier Excel comprend trois colonnes :

  • Nb_Selected: représentant le nombre de numéros sélectionnés par le joueur
  • Nb_Winning: indiquant le nombre de numéros gagnants
  • Payoff: décrivant le gain associé à chaque combinaison

Par la suite, nous avons importé cette grille dans un data frame nommé Payoff_Keno grâce à la librairie readxl

Affichage de la grille de gain: Tableau I

# Affichage de la grille de gains
Payoff_Keno[1:10,] %>%kable()%>%
  kable_styling(bootstrap_options = "responsive", position = "c", row_label_position = "c", full_width = FALSE)%>%
  add_header_above(header = c("Table I - Grille de gains (Exract)" =3) , bold = FALSE,
                   align = "c", 
                   extra_css = "border-bottom: 2px double #000;")
Table I - Grille de gains (Exract)
Nb_Selected Nb_Winning Payoff
1 0 0
1 1 3
2 0 0
2 1 0
2 2 12
3 0 0
3 1 0
3 2 1
3 3 40
4 0 0

Ajout d’une colonne nommée “Probability” dans Payoff_Keno, fournissant la probabilité de gain. Cette probabilité est calculée à l’aide de la fonction \(dhyper\), basée sur une distribution hypergéométrique.

  • argument 1 : nombre de numéros gagnants parmi ceux choisis par le joueur (colonne “NB_Winning”)
  • argument 2 : nombre de numéros tirés par l’organisateur du jeu soit \(20\) pour toutes les lignes du tableau
  • argument 3 : nombre de numéros non tirés par l’organisateur du jeu soit \(60\) pour toutes les lignes du tableau
  • argument 4 : Nombre de numéros sélectionnés par le joueur (colonne “Nb_Selected”)
# Rajouter la colonne Probability calculée avec la fonction dhyper
Payoff_Keno <- Payoff_Keno%>%mutate(Probability = dhyper(Payoff_Keno$Nb_Winning,20,60,Payoff_Keno$Nb_Selected))

Rajout de la colonne “Product” en multipliant les colonnes “Probability” et “Payoff”.

# Rajouter la colonne Product en multipliant Probability par le Payoff
Payoff_Keno <- Payoff_Keno%>%mutate(Product= Payoff_Keno$Payoff*Payoff_Keno$Probability)

Affichage de la grille de gains enrichies des colonnes “Probability” et “Product” dans le Tableau II

# Affichage de la grille de gains
Payoff_Keno[1:10,] %>%kable()%>%
  kable_styling(bootstrap_options = "responsive", position = "c", row_label_position = "c", full_width = FALSE)%>%
  add_header_above(header = c("Table II - Grille de gains enrichie (Extract)" =5) , bold = FALSE,
                   align = "c", 
                   extra_css = "border-bottom: 2px double #000;")
Table II - Grille de gains enrichie (Extract)
Nb_Selected Nb_Winning Payoff Probability Product
1 0 0 0.7500000 0.0000000
1 1 3 0.2500000 0.7500000
2 0 0 0.5601266 0.0000000
2 1 0 0.3797468 0.0000000
2 2 12 0.0601266 0.7215190
3 0 0 0.4165044 0.0000000
3 1 0 0.4308666 0.0000000
3 2 1 0.1387537 0.1387537
3 3 40 0.0138754 0.5550146
4 0 0 0.3083214 0.0000000

Calcul du gain espéré pour chaque nombre de numéros sélectionnés par le joueur, en groupant les lignes par “Nb_Selected” et en calculant pour chaque valeur la somme des “Produits”

Affichage de Table III

# Affichage du tableau Result
Result %>%kable()%>%
  kable_styling(bootstrap_options = "responsive", position = "c", row_label_position = "l", full_width = FALSE)%>%
  add_header_above(header = c("Table III - Gain espéré par nombre de numéros sélectionnés" =2) , bold = FALSE,
                   align = "c", 
                   extra_css = "border-bottom: 2px double #000;")
Table III - Gain espéré par nombre de numéros sélectionnés
Nb_Selected Gain_Espere
1 0.7500000
2 0.7215190
3 0.6937683
4 0.6854791
5 0.6724288
6 0.6720400
7 0.6813072
8 0.6847986
9 0.6800986
10 0.6905981
11 0.6786017
12 0.6833425
13 0.6894051
14 0.6889354
15 0.6705683

Recherche de la valeur du “Nb_Selected” qui donne la meilleure espérance de gain

L’espérance de gain la plus élevée est celle qui correspond à

# Maximum du gain 
Maximum <- max(Result$Gain_Espere)

Affichage des gains espérés par nombre de numéros sélectionnés par le joueur:

# Affichage du graphique via ggplot
ggplot(Payoff_Keno, aes(x = factor(Nb_Selected),y=Product))+
  geom_bar (stat ="sum")+
  scale_x_discrete() +
  labs(x = "Nb de numéros sélectionnés", y = "Gain espéré") +
  ggtitle("Espérance de gain par nombre de numéros sélectionnés") + 
 geom_col(data = subset(Payoff_Keno, Nb_Selected == max_Nb_Selected), fill = "red")+
   theme(legend.position = "none")

#facet_wrap(~Nb_Selected)

Analyse de la distribution de la somme des gains lors de la répétition de l’expérience 10 000 fois pour un échantillon de 1 000 joueurs. L’objectif est d’évaluer la somme des gains par rapport aux revenus de la FDJ. Nous allons recourir à la méthode de simulation Monte Carlo. Nous concentrons notre analyse à 15 numéros sélectionnés

Warning: `data_frame()` was deprecated in tibble 1.1.0.
ℹ Please use `tibble()` instead.