Les loteries sont avant tout imprévisibles, mais c'est amusant de jeter un coup d'œil derrière le rideau et d'explorer les bizarreries de ces jeux. Que vous soyez joueur ou simple observateur curieux, le monde des chiffres réserve toujours une ou deux surprises.
Dans mon pays, il existe un jeu de loto hebdomadaire dans lequel les participants sélectionnent 6 numéros dans un pool de 37 et un autre numéro dans un pool de 7. Concentrons-nous sur la première partie du jeu et oublions la sélection d'un numéro supplémentaire dans un pool de 7. 7.
Lorsqu'il s'agit de loteries de la forme k/N, où k est le nombre de sélections souhaitées (dans notre cas, 6) sur un pool total de N numéros (dans notre cas, 37), une question courante est de savoir si chacun des ces numéros ont une chance égale de faire partie de la combinaison gagnante.
Examinons cette question.
J'ai rassemblé des statistiques sur leur site Web pour 1 609 dessins s'étalant de 2009 à 2023.
Par la suite, j'ai converti les données du fichier CSV en objet :
La clé de l'objet correspond à la date du tirage et la valeur associée est un tableau de nombres qui sont apparus comme la combinaison gagnante pour ce tirage spécifique.
Ensuite, j'ai créé un tableau contenant tous les nombres obtenus à partir des dessins :
Ces résultats indiquent que le numéro 1 a été tiré 268 fois, le numéro 2 a été tiré 256 fois, et ainsi de suite.
Il semble que la répartition des numéros dans les résultats de loterie soit relativement uniforme. Pour confirmer davantage cela, nous pouvons effectuer un test pour valider l’uniformité de la distribution.
Pour tester l'équiprobabilité des N nombres individuels, vous pouvez suivre cette approche :
Calculez la fréquence observée (Oi) avec laquelle chaque nombre i = 1, ..., N s'est produit lors des n tirages de loterie.
Calculez les décomptes attendus (Ei) pour chaque numéro à l'aide de la formule Ei = (nk) / N, où n est le nombre total de tirages de loterie, k est le nombre de numéros sélectionnés à chaque tirage (dans ce cas, 6), et N est le nombre total de nombres possibles (dans ce cas, 37).
Utilisez la statistique de Pearson ou la statistique du Chi carré pour comparer les décomptes observés (Oi) avec les décomptes attendus (Ei). La formule de la statistique de Pearson est souvent exprimée comme suit :
Calculez la statistique du chi carré en utilisant les nombres observés et attendus.
Effectuez un test statistique, tel qu'un test du chi carré, pour déterminer si la valeur du chi carré calculée est statistiquement significative. Cela vous aidera à évaluer si la distribution des nombres est significativement différente de ce à quoi on pourrait s'attendre en cas d'équiprobabilité.
Si la valeur du chi carré calculée n’est pas statistiquement significative, cela suggère que les nombres sont raisonnablement uniformément répartis, ce qui conforte l’hypothèse d’équiprobabilité. Cependant, si la valeur X^2 est significative, cela indiquerait un écart par rapport à l'équiprobabilité.
Créons une fonction pour effectuer le test du chi carré pour l'équiprobabilité des nombres :
Cette fonction renvoie le tuple constitué de la statistique du chi carré et le résultat de l'équiprobabilité acceptée avec la probabilité 1 - 2 * p-value , c'est-à-dire que les valeurs extrêmes de cette distribution uniforme discrète ont une faible probabilité.
N = 37 chi2(count, len(numbers), N) (25.0748, True)
Certes, vous pouvez utiliser la fonctionnalité intégrée de la bibliothèque SciPy pour effectuer le test du chi carré pour l'équiprobabilité :
from scipy import stats chi2_statistic, p_value = stats.chisquare(count) (25.074, 0.96053)
Explorons les combinaisons de ces nombres, en commençant par des paires :
from itertools import combinations pairs = list(combinations(range(1, N), 2))
Suite à cette étape, nous construisons une matrice 2D qui suit les occurrences de ces paires :
pairs_count = np.zeros([N] * 2, dtype=int) for pair in pairs: for draw in lotto.values(): if pair[0] in draw and pair[1] in draw: pairs_count[pair[0]][pair[1]] += 1 pairs_count = pairs_count[1:, 1:]
Cela forme une matrice triangulaire, car elle tient compte du fait que les paires (a, b) et (b, a) sont équivalentes, et nous ne comptons que les occurrences des paires (a, b).
comb3 = list(combinations(range(1, N), 3)) comb3_count = np.zeros([N] * 3, dtype=int) for comb in comb3: for draw in lotto.values(): contains = comb[0] in draw and comb[1] in draw and comb[2] in draw if contains: comb3_count[comb[0]][comb[1]][comb[2]] += 1 comb3_count = comb3_count[1:, 1:, 1:] counts = comb3_count.flatten() counts = counts[counts > 0] chi2(counts, sum(counts), len(counts)) (6457.575829383709, False)
Quelque chose ne va pas, probablement à cause de la grande parcimonie de la matrice. La valeur du chi carré tombe en dessous du seuil critique inférieur du chi carré :
6457.575829383709 < 6840.049842653838
Cependant, lorsque vous utilisez SciPy, le résultat est :
Enfin, nous pouvons également rechercher si des dessins identiques ont déjà eu lieu :
lotto_counts = {} for k, v in lotto.items(): v_str = str(v) if v_str in lotto_counts: lotto_counts[v_str] += [k] else: lotto_counts[v_str] = [k] result = {k: v for k, v in lotto_counts.items() if len(lotto_counts[k]) > 1} { '[13, 14, 26, 32, 33, 36]': ['16/10/2010', '21/09/2010'] }
Il est amusant de constater que ces événements se sont produits presque consécutivement.
Alors que nous terminons notre voyage dans le monde des données de loterie, ce fut une véritable aventure à travers les chiffres et les probabilités. Nous avons découvert quelques informations intéressantes – des paires et triplés à la détection des numéros les plus populaires.
Les loteries sont avant tout imprévisibles, mais c'est amusant de jeter un coup d'œil derrière le rideau et d'explorer les bizarreries de ces jeux. Que vous soyez joueur ou simple observateur curieux, le monde des chiffres réserve toujours une ou deux surprises.