Constitution des datasets
Pour faire tourner des modèles de AI/ML nous avons besoin de constituer le ou les datasets nécessaires, dans un format exploitable dans Python.
Le travail préparatoire sur les données est un point essentiel, nécessitant du temps (même en ayant déjà constitué une base de données avant) et ne devant pas être négligé pour pouvoir ensuite travailler sur des données fiables et pertinentes, et produire des résultats de qualité.
Nous présentons ici les difficultés rencontrées et la façon dont elles ont été traitées:
1/ Les données disponibles sont assez nombreuses et hétéroclites, provenant de tables différentes dans notre base, on a du mal à s’y retrouver.
=> Pour y voir clair nous créons tout d’abord un fichier excel pour lister les données (ou plutôt, les métadonnées) présentes, leur source, leur format.
On travaillera sur ce fichier pour bien maîtriser les données et le périmètre qu’on se fixe dans le dataset, avant de travailler sur les données elles-mêmes.
2/ Certaines données sont vides ou non disponibles
=> On réduit le périmètre de courses sur des dates où on a un maximum de données (possible car on a beaucoup de courses dans la base)
- Si des données restent vides on peut laisser la valeur Vide
Pour les données quantitatives, si on a moins de 5% de données vides, on pourra remplacer la valeur vide par la médiane - Si cela pose un problème dans les traitements alors il faudra réduire encore le périmètre de courses, ou bien tout simplement supprimer la donnée/le feature. Dans un premier temps on peut ne pas inclure les données posant problème (ex le terrain, la moitié des lignes ont une valeur vide) pour essayer déjà d’obtenir un code et des résultats avec un jeu de donnée «propre», avant de complexifier
C’est cette 2ème option qui sera retenue ici.
3/ Certaines données ne sont pas exploitables telles quelles
=> On analyse chaque donnée disponible, on regarde sa pertinence et son exploitabilité
- Si on peut la transformer en donnée pertinente et exploitable on effectue les transformations nécessaires
- Sinon on met la donnée de côté
Exemple : l’heure est transformée en classes: matinée (jusque 14h)/début aprem (14h-16h)/fin aprem (16h-18h)/soirée (après 18h)
4/ Les données ne sont pas les mêmes suivant la discipline (trot attelé ou plat notamment)
=> On crée 3 datasets :
- 1 pour le plat
- 1 pour le trot attelé
- 1 global (plat, trot attelé, et autres disciplines)
Il s’agit ici d’un choix, pris pour plus de simplicité – on travaille successivement sur des datasets moins lourds en lignes (X) et plus réduits en colonnes/features (y) – et basé sur l’expérience pratique des courses, où on sait que les comportements sont différents suivant la discipline. On pressent donc qu’on va avoir des modèles différents à apprendre suivant la discipline.
5/ Les chevaux doivent tous être ramenés à des caractéristiques communes, indépendantes de la course dans laquelle ils courent, afin qu’on puisse effectuer l’analyse sur l’ensemble des chevaux de la même façon, en les analysant tous ensemble, et non au sein d’une course.
=> Les données reliant les chevaux entre eux au sein d’une course doivent donc être retraitées pour être normalisées:
- id_course (l’identifiant de la course) doit être supprimé
- Les pronostics ne doivent pas être gardés tels quels mais doivent être convertis en une donnée de pronostic. Pour cela nous devons transformer cette donnée, il y a plusieurs possibilités comme:
- attribuer une variable catégorielle (classe): 1 s’il est pronostiqué en place 1, 2 en place 2 etc.. et 0 si non pronostiqué
- attribuer une variable numérique: note sur 1 dépendant du nombre de chevaux de la course (incluant les non partants car ceux-ci ne sont pas connus au moment du prono). Exemple:
note_prono= (nb chevaux – place prono +1)/nb chevaux
Avec note=0 si cheval non pronostiqué
On a ainsi note_prono = 1 si cheval pronostiqué 1er et ensuite la note décroit avec la place pronostiquée
C’est cette 2ème option (donnée numérique) que nous utiliserons ici.
- Les cotes (ou plus exactement les rapports) ne doivent pas être traitées seulement en valeurs absolues mais aussi en valeurs relatives, car elles dépendent des cotes des chevaux de la course et du nombre de chevaux. Les cotes en valeur absolue restent cependant intéressantes à conserver pour l’évaluation des gains et l’appréciation des caractéristiques d’une course par rapport aux autres.
Nous ajoutons donc dans le dataset la cote relative arrondie, définie par :
c=( Cote – Min Cotes) / (Max cotes – Min cotes) avec un arrondi à 0,2 le plus proche
où:- Max cotes est la cote maximale de la course, sur l’ensemble des chevaux
- Min cotes est la cote minimale de la course, sur l’ensemble des chevaux
Ainsi lorsque cote=Min cotes, la cote relative est de 0.
Lorsque cote=Max cotes, la cote relative est de 1.
En termes pratiques pour réaliser ces opérations, on part de notre base contenant les données brutes initiales, puis on utilise des requêtes pour transformer les données, et enfin générer les fichiers csv pour chaque dataset nécessaire et que l’on chargera dans Python via Pandas.
Bonjour,
Je fais du dev Front depuis 10 ans et je souhaite monter en compétences en apprenant python. J’ai décidé d’apprendre le langage en travaillant sur de l’IA et les paris sportifs. Votre blog est très enrichissant. J’ai une question concernant le dataset. Une fois celui constitué, dont-on effectuer un shuffle des données ou bien devons absolument suivre l’ordre des courses et faire un set de test et d’entraînement à 50/50 gagnants/non gagnants.
Bonjour, et merci pour votre commentaire. Apprendre le python sur un cas concret qui vous motive est une bonne façon de progresser en s’amusant! Il n’est pas nécessaire de suivre l’ordre des courses du dataset pour construire les sets de test et d’entraînement, au contraire ceux ci doivent être le moins biaisés possible donc le shuffle est préférable. En classification binaire, le dataset doit comme vous le mentionnez être équilibré, soit par nature en prenant un extrait équilibré du dataset initial, soit (plus simple) en effectuant un rééquilibrage de classes dans les paramètres du modèle (méthodes présentées dans les articles sur SVM et réseaux de neurones). Bon apprentissage et amusez-vous bien!
Votre site est super : exploration et stratégie, c’est bien ça !
Pour ma part c’est observation et questions.
Sur une étude de 15000 courses j’en ai isolé 513 dont 63 sont perdantes
est-ce que je peux dire que j’obtiens 87,7% de réussite (mise placée)? Une IA peut elle me permettre
d’améliorer ce score ?
Je suis sceptique, l’IA ne sera que le reflet de ses dataset et hormis le fait que je ne veux pas me lancer
dans un calcul de descente de gradient laborieux je n’ai pas envie de renseigner non plus la couleur des sanitaires de l’hippodrome !
Connaissez vous un soft prêt à l’emploi dans lequel je pourrai rentrer 15 critères maxi et en extirper une suite logique d’arrivées SVP ?
Vous qui avez un diplôme universitaire en IA, vos connaissances vous permettent elles d’être positif dans vos enjeux ?
En résumé, pour ma gouverne, est ce bien la peine de se lancer dans des calculs bien velus pour espérer augmenter mes chances de gains, dirigés actuellement par l’observation ?
Car comme je l’ai dit je suis sceptique, comment peut-on faire entrer une part d’intuition dans une IA ?
(de connaisseur, mais d’intuition, je « voyais » le 3 « Favori de l’Iton » dans la R1C4 le 17/05/2024 à vincennes, d’ailleurs il faudra que je reprenne votre article sur les TRJ et SG/SP car gagnant c’est bien et placé c’est hyper décevant)
En tout cas merci de nous faire toucher du doigt : « La martingale céleste »
BD de 1989 (Godard-Ribera : Le vagabond des limbes) où page 23 l’on apprend que le PMU est le Pari Mortel Urbain c’est étonnant d’anticipation et drôle ! Et si vous avez besoin d’un rédacteur, c’est avec plaisir que je rejoindrais l’équipe, juste pour avoir l’avis d’un turfiste intéressé par ces stats car si je peux faire des exponentielles et des vectorisations c’est vraiment pas ma tasse de thé
Bravo, continuez à nous faire rêver !
Question complémentaire : combien de temps cela vous prend il mensuellement pour faire vivre votre excellent site ?
Christophe – Granulat
Bonjour Christophe,
merci pour votre message;
Comme vous le voyez avec ma réponse tardive, je ne mets actuellement plus à jour ce site. Je le laisse vivre parce qu’il représente une grosse période de travail et que j’ai plaisir et intérêt à relire certains articles, et que je reçois des messages sympathiques comme le vôtre. Aussi je n’exclus pas de m’y remettre un jour. C’est un sujet passionnant mais chronophage.
Non je ne connais pas de soft simple comme vous le décrivez et si j’en croise un, je regarderai mais avec un a priori sceptique.
De ce que j’ai eu le temps de tester avec différents modèles d’IA prédictive sur lesquels j’ai travaillé, l’IA peut faire des prédictions valables cependant dans mes tests je n’étais pas suffisamment rentable. La raison principale étant que ce qu’on arrive à prédire est assez souvent, comme c’est le cas de façon traditionnelle, ce qui rapporte le moins, et qu’on part à -15% de gain (si je prends l’exemple du simple gagnant avec un TRJ de 0,85).
Je reste toutefois intimement convaincu que l’IA peut détecter certains « patterns » peu joués, sur certains types de courses et de chevaux, et que ceci complété avec des paris optimisés mathématiquement (et la touche finale d’intuition et d’expérience du turfiste, non modélisable) doit permettre d’être rentable à long terme.
Identifier cela ressemble à un job à plein temps pendant quelques temps (même si depuis l’IA a tendance à se démocratiser et son accès à se simplifier), j’attendrai donc peut être la retraite 🙂
En attendant, je garde le plaisir de jouer de temps en temps, à l’intuition, ce qui n’est pas mal non plus.
Pour la partie purement financière, si vous aimez les mathématiques et les stratégies, la bourse est plus sûre, la raison principale étant qu’on ne perd pas sa mise, en tout cas pas complètement et pas en une fois (sauf produits risqués spécifiques), et qu’on bénéficie d’une tendance haussière à long terme qui fait qu’en étant patient sélectif et rigoureux sur sa stratégie on peut souvent rattraper de mauvaises passes.
Mais les prévisions hippiques sont plus intéressantes intellectuellement et en terme d’IA de mon point de vue, ce qui a je pense plus de valeur que des gains en bourse à la fin des fins.