Bonjour,
L'histoire commence avec un ticket d'euromillions que je me suis amusé à construire à l'aide des statistiques de site en ligne, pas parce que j'y crois, mais seulement parce qu'il me fallait entrer cinq numéros dans la grille. Résultat : deux numéros son sorti ! Diantre... Et moi qui étais certain que la vitesse de la lumière était constante, que les tirages sont tous équiprobables et qu'un certain F.H était de gauche, toutes mes certitudes balayées d'un revers de la main. Ni une, ni deux, je m'en vais régler cette histoire à coup de python et de notepad !
J'ai donc codé deux petits programmes qui sont assez simples, ils marchent tous les deux de la même manière : Je fait un nombre x de tirage de loto, ensuite je fais une grille, je compare la grille au tirage. En dernier lieu je calcule le taux de réussite sur l'ensemble, c'est-à-dire, combien j'ai réussi à prédire de bonne boule sur l'ensemble.
Je compte en faire un article sur mon blog mais dans un premier temps un avis mathématique et dans un deuxième temps une relecture des programmes en question pour me confirmer que tout est ok.
L'idée est donc de comparer deux façons de faire la grille, la première c'est la façon aléatoire : Je tire aléatoirement cinq boules parmi une liste de 50 boules. La deuxième c'est de faire la grille selon l'écart, c'est-à-dire qu'on va privilégier les boules qui ne sont pas sorties depuis un moment. Par exemple si on lance 100 fois un dé et qu'aucun six n'est pas tombé, on aura tendance à dire que le six a de plus en plus de chance de tomber, le fait est qu'en mathématiques tous les tirages sont équiprobable, il n'y a personne qui compte le nombre de six tombé, le compteur est donc remis à zéro à chaque tirage.
Je pense que la formule mathématique qui s'applique dans mes programme est la suivante, mais j'aimerais que quelqu'un confirme :
Si je tire 50 boules par tirage, j'ai 100% de chance de trouver le loto.
Si je tire 5 boules, on à 100/10 = 10%.
(A voir si quelqu'un est doué en math, pourrait m'éclairer sur ce point)
Les deux programmes vont donc faire des milliers de loto, normalement, ils doivent trouver 10% des numéros, sur la totalité des tirages.
Premier cas : Grille aléatoire.
Extrait de la sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 # -*- coding: utf-8 -*- import random all = [i for i in range(1,51)] moyenne = 0.0 for y in range(1,20) : stat = [[i,0] for i in range(1,51)] random.seed() day = 0 cpt = 0 iteration = 500 for x in range(iteration*y): random.seed() # nombre de jours day += 1 # tirage du loto tirage = random.sample(all,5) match = list(set(random.sample(all,5)) & set(tirage)) if len(match) > 0 : cpt += len(match) moyenne += 100/(day*5.0)*cpt print 'Taux : ' + str((100/(day*5.0))*cpt) print 'Moyenne : ' + str(moyenne/19.0)
On à bien ici nos 10%Taux : 10.0285714286
Taux : 9.67529411765
Taux : 9.79534883721
Taux : 9.78850574713
Taux : 10.0954545455
Taux : 10.0853932584
Taux : 10.16
Taux : 9.82857142857
Taux : 10.0913043478
Taux : 10.3440860215
Taux : 9.83404255319
Taux : 9.98315789474
Taux : 9.93333333333
Taux : 10.1855670103
Taux : 10.3673469388
Taux : 10.1131313131
Moyenne : 10.0552439156
Voilà qui est bien. Passons à la deuxième méthode.
Deuxième cas : Grille favorisant l'écart.
Extrait de la sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 # -*- coding: utf-8 -*- import operator import random all = [i for i in range(1,51)] moyenne = 0.0 for y in range(1,20) : stat = [[i,0] for i in range(1,51)] random.seed() day = 0 cpt = 0 iteration = 500 for x in range(iteration*y): random.seed() # nombre de jours day += 1 # tirage du loto tirage = random.sample(all,5) sort = sorted(stat, key=operator.itemgetter(1)) prediction = [i[0] for i in sort[45:]] match = list(set(prediction) & set(tirage)) if len(match) > 0 : cpt += len(match) for i in range(50): if stat[i][0] not in tirage : stat[i][1] += 1 else : stat[i][1] = 0 moyenne += 100/(day*5.0)*cpt print 'Taux : ' + str((100/(day*5.0))*cpt) print 'Moyenne : ' + str(moyenne/19.0)
Cette deuxième méthode nous donne donc un résultat tout à fait logique, malgré le fait de constituer nos grilles par rapport au nombre en retard dans les tirages, le résultat est sensiblement identique au premier programme qui joue aléatoirement ça grille.Taux : 10.0227272727
Taux : 9.73033707865
Taux : 10.3777777778
Taux : 10.043956044
Taux : 9.76086956522
Taux : 10.2043010753
Taux : 10.3085106383
Taux : 10.2210526316
Taux : 9.82291666667
Taux : 10.0515463918
Taux : 9.78571428571
Taux : 9.80808080808
Moyenne : 10.0284749111
Voilà qui me rassure, les deux numéros sorties sur ma grille n'était bien qu'un coup de chance
Partager