Data Science
Construire, évaluer et valider un modèle, des données à la décision
De la première droite de régression jusqu’à la validation croisée : apprends à construire un modèle, à l’évaluer honnêtement et à éviter les pièges, entièrement sur des données NBA.
Modules
- 1
Qu’est-ce que l’apprentissage automatique ?
GratuitPeut-on prédire les points d’un joueur à partir de ses tirs tentés, et estimer sa valeur ? Et d’abord, que veut dire « prédire » ? Un fan appliquerait une règle simple : un tir réussi rapporte deux points, mais un tir sur deux ne rentre pas, donc environ un point par tir tenté. Sur les 413 joueurs de la saison, cette règle se trompe de 2,27 points par match en moyenne, quand un modèle qui cherche la relation tout seul tombe à 0,79 point. Reste à le juger sur des joueurs qu’il n’a jamais vus.
≈ 45 minPython interactif - 2
Variables explicatives et cible
Un front office veut estimer le salaire qu’un joueur devrait toucher à partir de son seul profil de jeu. Mais un modèle ne sait pas ce qu’est un pivot : il ne lit que des nombres. Pour nos 366 joueurs, il faut donc transformer les postes et les équipes en colonnes de 0 et de 1, puis mettre la taille, le poids et l’efficacité au tir sur une échelle commune. Et retenir une règle : si le salaire réel se glisse par erreur parmi les variables d’entrée, le modèle affiche un score parfait et ne sert plus à rien.
≈ 50 minPython interactif - 3
Régression linéaire simple
Un dirigeant doit chiffrer ce que vaut un joueur à 20 points par match, et aucune colonne de la table ne le lui dit. Les données existent pourtant : 367 joueurs avec leurs points par match et leur salaire réel. En ajustant une droite sur ce nuage, on obtient ce que le marché paie en moyenne pour un point marqué, 1,47 million de dollars, soit environ 27 millions pour ce joueur. Et les joueurs qui s’écartent de cette droite en disent encore plus, de Victor Wembanyama à 21 millions en dessous à Trae Young à 33 millions au-dessus.
≈ 55 minPython interactif - 4
Comment un modèle apprend
Un dirigeant a besoin du prix du point pour négocier, et le module précédent l’a obtenu en une ligne de code : 1,47 million de dollars par point marqué. Mais comment un modèle trouve-t-il ce nombre alors que personne ne le lui a donné ? De la même façon qu’un shooteur règle son tir : tirer, voir de combien on se trompe, corriger, recommencer. C’est la descente de gradient, le mécanisme derrière presque tout l’apprentissage automatique, et on va le construire à la main.
≈ 50 minPython interactif - 5
Régression linéaire multiple
Un dirigeant doit renouveler un contrat. Le joueur marque, distribue, prend des rebonds, intercepte des ballons et en perd : combien vaut ce profil sur le marché des salaires ? Une statistique seule ne répond pas, il faut les peser toutes ensemble. Le barème obtenu sur les 366 joueurs de la saison dit ce que la ligue paie pour chaque statistique, et surtout ce qu’elle ne paie pas.
≈ 55 minPython interactif - 6
Évaluer une régression
Le modèle du module précédent prédit un salaire à partir des statistiques d’un joueur. Reste à savoir ce que vaut cette prédiction : il se trompe en moyenne de 6,06 millions de dollars, sur des salaires qui vont de 1,3 à 59,6 millions. Et il ne se trompe pas de la même façon partout, puisque son erreur passe de 4 millions sur les joueurs de rotation à 11,4 millions sur les stars.
≈ 55 minPython interactif - 7
Généralisation et sur-apprentissage
Imagine qu’on ne dispose que des tirs de Stephen Curry pris depuis l’aile droite, là où il en rentre la moitié. Un modèle entraîné sur ces seuls tirs annoncera un tir sur deux partout, à sept mètres comme au buzzer : parfait sur ce qu’on lui a montré, inutilisable en match. Un modèle qui prédit les victoires NBA fait la même chose, avec 96 % de réussite sur les équipes qu’il a vues et bien moins sur celles qu’il découvre.
≈ 55 minPython interactif - 8
Validation croisée
Un dirigeant veut savoir si un joueur est payé à son juste niveau, et un modèle est là pour répondre. Selon les joueurs qu’on met de côté pour le tester, ce même modèle explique 76 % des écarts de salaire de la ligue, ou 56 % : mêmes 366 joueurs, deux verdicts opposés, aucune raison de préférer l’un à l’autre. La validation croisée en tire un seul chiffre défendable, assorti de sa marge.
≈ 55 minPython interactif - 9
Régression logistique
Deux joueurs, deux pourcentages de réussite au tir, et aucun moyen de les comparer tant qu’on ne sait pas d’où partent leurs tirs. La régression logistique apprend la probabilité qu’un ballon rentre selon l’endroit du terrain, et donne ce qu’aucun autre modèle ne donne aussi simplement : de combien la distance, la zone ou le moment du match font monter ou descendre les chances de marquer.
≈ 55 minPython interactif - 10
Évaluer un classifieur
Sur les 412 joueurs de la saison, 37 tournent à 20 points de moyenne ou plus. Un modèle qui répondrait « non » à tout le monde, sans jamais en désigner un seul, aurait 91,1 % de bonnes réponses. Le modèle qui les cherche vraiment monte à 97,6 %. Six points d’écart entre un modèle vide et un modèle qui travaille : c’est tout ce que le taux de bonnes réponses sait dire de la différence entre les deux.
≈ 55 minPython interactif - 11
Régularisation : Ridge et Lasso
Combien vaut un joueur ? Pour y répondre, un front office dispose d’une vingtaine de statistiques par joueur, et de toutes leurs combinaisons possibles. Le réflexe est de tout donner à une régression et de la laisser trancher. Avec 230 variables pour 366 joueurs, elle ne trancherait rien : elle apprendrait par cœur le bruit de la saison, jusqu’à devenir moins utile que de prédire le salaire moyen à tout le monde. La régularisation empêche ça en rendant les gros coefficients coûteux, et sa version Lasso va plus loin : elle annule les statistiques qui ne servent à rien, et désigne donc celles qui font un salaire.
≈ 55 minPython interactif - 12
Ingénierie des variables
Anthony Edwards a marqué 55 points un soir et 5 points un autre. La veille d’un match, son entraîneur veut savoir combien il en mettra ce soir, et aucune colonne de la table des box scores ne répond : les points du match précédent sont un tirage isolé, et un joueur s’écarte de 5,8 points de son propre niveau d’un soir à l’autre. Toute la performance du modèle vient de variables qu’il faut fabriquer.
≈ 55 minPython interactif - 13
Séries temporelles
À la pause All-Star, chaque équipe a joué 40 matchs et le front office veut savoir combien de victoires arriveront sur les 42 restants. Une régression sur le différentiel de points annonce un R² de 0,616 et se trompe de 4,2 victoires. Évaluée honnêtement, elle se trompe de 4,49, contre 4,38 pour la prévision qui prolonge bêtement le rythme actuel. Le modèle perd contre « demain ressemble à hier ».
≈ 55 minPython interactif - 14
Projet de synthèse : de l’analyse au modèle
Keegan Murray et Nikola Jokić jouent le même temps, environ 34 minutes par match. Sauf que Jokić marque 27,7 points et Murray 8,4. Pourquoi l’entraîneur de Murray lui fait-il autant confiance ? Pour le savoir, on construit un modèle qui devine le temps de jeu d’un joueur à partir de ses statistiques. Il tombe juste à moins de quatre minutes près, sauf sur des joueurs comme Murray. Ce qui lui échappe, c’est la défense.
≈ 65 minPython interactif