Le fantasy football est-il vraiment prévisible ? Chaque année, de nombreux passionnés de football américain, comme moi, se demandent s'il existe une stratégie pour remporter des succès réguliers dans les ligues de fantasy football. Utilisons JMP pour le découvrir !
Grâce aux améliorations apportées à l'intégration Python de JMP, importer les données de votre ligue de fantasy football dans JMP est plus simple que jamais. Après une brève démonstration de l'utilisation de la fonctionnalité native de requête HTTP de JMP pour accéder aux API documentées de fournisseurs de fantasy football tels qu'ESPN et Sleeper, cette présentation se concentre sur l'utilisation des wrappers d'API existants de la communauté Python pour extraire des années de données de ligues de fantasy. Classements, résultats des séries éliminatoires, statistiques des joueurs NFL, résultats fantasy, bons et mauvais choix lors de la draft : les données à explorer sont innombrables !
Une fois les données importées et organisées en tableaux, nous pouvons alors utiliser les outils de découverte statistique de JMP pour explorer et analyser les données spécifiques à notre ligue, en identifiant les tendances et les schémas potentiels qui nous donneront un avantage.
Le succès repose-t-il principalement sur une draft réussie ou sur des échanges et des acquisitions tout au long de l'année ? Les performances exceptionnelles en fantasy sont-elles reproductibles d'une année sur l'autre ? Quelle est l'importance d'avoir un joueur parmi les trois meilleurs producteurs en fantasy dans son équipe ? Les running backs sont-ils toujours les joueurs ayant le plus d'impact en fantasy, ou la donne a-t-elle évolué en faveur des wide receivers et des quarterbacks ? Ce sont les questions que nous explorons pour déterminer si JMP peut vous aider à remporter votre prochaine ligue.
Bonjour à tous. Je m'appelle Nick Holmes et je suis ingénieur de test chez JMP. Merci de me rejoindre aujourd'hui. Nous allons voir comment utiliser JMP pour gagner votre ligue de fantasy football. J'ai bien dit « peut-être » car, évidemment, rien n'est jamais garanti en fantasy football. Nous allons importer nos données de fantasy football dans JMP, effectuer quelques analyses et voir ce que nous pouvons en tirer.
Un petit mot sur moi. Je suis un véritable passionné de fantasy football. Je suis commissaire d'une ligue de 12 joueurs avec repêchage, qui existe depuis environ 2015. Ce sont principalement les données de cette ligue que nous utilisons pour nos exemples et analyses d'aujourd'hui. L'une des motivations de cette présentation, ou plutôt de ce projet, est que j'ai remporté la ligue en 2022, puis terminé dernier en 2023. Je cherche donc des outils d'analyse qui me permettent d'anticiper mes résultats en fantasy football.
Je ne suis pas statisticien, mais je ferai de mon mieux. Nous utiliserons les données d'ESPN et de Sleeper. ESPN, vous le connaissez probablement tous, est un fournisseur de jeux de fantasy football. Sleeper, c'est la même chose, mais sur une plateforme différente pour héberger votre ligue de fantasy football. Nous importerons les données de ces deux plateformes et les utiliserons pour notre analyse.
J'ai utilisé SPN d'environ 2015 à 2020 et Sleeper de 2021 à aujourd'hui. C'est pourquoi nous avions besoin de récupérer des données de ces deux plateformes. Voici un aperçu de ce que nous allons faire aujourd'hui pour importer ces données dans JMP, puis les analyser. Tout d'abord, nous devons utiliser des API pour importer les données. Nous allons procéder de deux manières : soit en utilisant une nouvelle requête HTTP, soit en utilisant l'intégration JMP-Python.
Nous allons ensuite organiser, ou plutôt je vais vous montrer comment organiser ces requêtes en classes JMP ou objets de classe JMP. Une fois ces données importées dans JMP, il faut les organiser en tables de données JMP. Il existe plusieurs méthodes pour cela ; je vous présenterai la fonction `JSON to data table`, native à JMP, ainsi que l'utilisation des tableaux associatifs et de JSL pour créer des tables de données JMP.
Une fois les données importées dans les tables JMP, nous procéderons à leur exploration et à leur analyse. La première étape consistera à manipuler ces tables de données. Je vous montrerai comment faire à l'aide de Workflow Builder, puis nous réaliserons des visualisations et des analyses sur différentes plateformes JMP.
Alors, qu'est-ce qu'une API ? Vous pouvez consulter la définition ci-contre, mais en résumé, une API permet de récupérer des données depuis un serveur web. Il existe plusieurs méthodes HTTP : GET, POST, DELETE et PUT, mais aujourd'hui, nous nous concentrerons sur la plus simple : GET. Nous enverrons une requête GET à une URL ou un point de terminaison d'API, et le serveur nous renverra une chaîne JSON. Nous utiliserons ensuite cette chaîne pour créer un tableau associatif dans JMP, ainsi que nos tables de données JMP.
La fonction `new HTTP request` de JMP permet d'utiliser JSL pour communiquer avec les API REST. Elle prend en charge les méthodes GET, POST, PUT et DELETE, comme mentionné précédemment. Aujourd'hui, nous nous concentrerons principalement sur GET et verrons à quel point il est simple d'utiliser `new HTTP request` pour importer des données dans JMP.
Je vais commencer par vous montrer comment récupérer des données de Fantasy League Sleeper. Une simple recherche Google avec l'API vous permettra d'accéder à une documentation très complète qui vous indiquera précisément le point de terminaison de requête HTTP à utiliser et le type de données que vous pouvez espérer recevoir.
C'est en fait le scénario idéal pour l'utilisation d'une API : le fournisseur propose une API très claire, précise le type de données renvoyées et fournit une documentation très complète. Comme vous pouvez le constater, leur documentation explique comment importer les données de notre ligue et nos effectifs dans JMP. Il semble que, dans la plupart des cas, l'identifiant de la ligue soit la seule information à ajouter à l'URL.
Comme vous pouvez le voir dans cet exemple, voici un aperçu de ce à quoi cela pourrait ressembler dans JMP. Nous fournissons notre propre identifiant de ligue et le définissons comme variable d'URL. Ensuite, nous envoyons cette requête via une nouvelle requête HTTP, en spécifiant l'URL avec la méthode GET. Nous envoyons la requête, puis nous analysons le JSON renvoyé à JMP.
Maintenant que nous avons examiné à quoi pourrait ressembler cette requête, voyons comment elle se comporte dans JMP. Vous voyez, une fenêtre de script JMP est ouverte. Si vous regardez cette URL définie, vous voyez que nous avons notre identifiant de ligue et la requête que vous avez vue dans la diapositive précédente. Si nous exécutons ce script, vous voyez que nous obtenons une chaîne JSON. Afin de mieux interagir avec ces données dans JMP, nous allons les convertir en un tableau associatif JMP ; c'est précisément le rôle de la fonction « Parsed JSON ».
Vous voyez, on nous assigne un tableau associatif. Si on examine ce tableau et qu'on accède à son indice pour obtenir le nom de notre ligue, on obtient « league-certified fantasy football », qui est le nom de la ligue. Maintenant que je vous ai montré une démonstration très simple, je vais vous montrer comment interagir avec nos requêtes et les organiser en classes JMP afin d'organiser notre requête HTTP. Fermons cette fenêtre et ouvrons notre fichier de projet. En consultant ce fichier, vous verrez que des classes sont définies pour organiser nos requêtes.
Nous avons cette classe « ligue ». Comme vous pouvez le constater dans cette référence, elle est en fait issue d'une API Python dont j'ai repris la structure. Nous y reviendrons plus en détail lors de notre discussion sur l'intégration de JMP avec Python. En examinant cette classe, vous remarquerez qu'elle contient des classes pour les utilisateurs, les joueurs, le repêchage et les statistiques de la ligue. Toutes ces classes côté serveur font appel à cette API de base, qui est à l'origine de notre nouvelle requête HTTP en arrière-plan.
Voyons comment utiliser cette classe pour récupérer nos données. Je vais exécuter la définition de cette classe, puis faire défiler vers le bas pour trouver des exemples. Veuillez m'excuser si le défilement vous donne le tournis. Vous voyez, je définis un objet « ligue », en lui fournissant l'identifiant de ma ligue. La définition de la classe est maintenant affichée, et nous pouvons utiliser les méthodes définies pour cet objet afin d'obtenir les effectifs de la ligue, ses utilisateurs, etc. Toutes ces données sont renvoyées dans un tableau associatif.
Nous n'allons pas nous attarder sur le contenu exact pour l'instant, mais simplement vous montrer les données obtenues. Nous avons maintenant les mêmes informations pour les utilisateurs, les joueurs et les rideaux. Je partagerai tout cela avec la communauté JMP sous forme de supports de présentation, avec les diapositives. Vous devriez pouvoir utiliser ces classes dans la présentation que je montrerai plus tard afin d'importer vos données dans JMP.
Pour Sleeper, récupérer nos données était très simple. Une API bien définie nous permettait de créer facilement nos requêtes HTTP. Malheureusement, ce n'est pas le cas pour ESPN. Une recherche rapide avec « API ESPN » ou « API ESPN Fantasy » ne renvoie qu'une classe Python créée par un utilisateur. Aucune documentation publique n'est disponible pour leur API.
Que faire ? Eh bien, c’est le moment idéal pour vous parler de JMP et de la nouvelle intégration de Python dans JMP 18. Désormais, Python est installé par défaut dans JMP 18. Nous pouvons utiliser des packages Python avec une configuration minimale. Grâce aux classes Sleeper que je vous ai présentées précédemment, ou inspirées des classes Python, au lieu de les créer nous-mêmes, nous pouvons simplement installer le package Python à l’aide de la ligne de script ci-contre et interagir avec Python pour importer les données dans JMP.
Puisque cela existe pour ESPN, nous pouvons désormais faire de même. En l'absence de documentation adéquate, nous pouvons nous appuyer sur l'API Python existante, déjà développée. Quels sont les avantages de l'intégration Python ? Tout le travail complexe est déjà fait. Nous n'avons pas besoin de coder la logique des appels d'API ni aucune autre manipulation de données pour les fonctions que nous souhaitons créer. Nous pouvons simplement utiliser les fonctions et la documentation déjà écrites en Python.
Nous appelons simplement les fonctions Python et renvoyons les données à JMP. Voici un exemple simple. Veuillez m'excuser si la lecture est un peu difficile, mais je voulais tout afficher à l'écran. Ces diapositives seront mises à votre disposition ultérieurement, mais vous pouvez déjà vous faire une idée en observant la taille de la définition de la fonction. Trouver notre propre fonction `get_scoreboard` est bien plus complexe que d'utiliser l'intégration Python pour appeler la fonction `get_scoreboard` déjà définie.
Voyons maintenant à quoi pourrait ressembler l'intégration d'ESP et de Python. Nous conclurons cette section. Nous examinerons à nouveau ces classes d'intégration, cette fois-ci avec Python. Vous pouvez constater, dans notre classe League, que nous utilisons une série d'instructions `submit` et `get` de Python pour interagir avec l'API Python existante.
Pour obtenir les informations sur notre ligue, nous exécuterions simplement une instruction `submit` en Python afin de définir une variable d'information de ligue. Ensuite, avec cette variable, nous utiliserions `get_league` pour récupérer les informations correspondantes, puis nous renverrions cette variable à JMP à l'aide de `get` en Python.
Toutes ces fonctions fonctionnent exactement de la même manière qu'auparavant avec l'implémentation JSL des nouvelles requêtes HTTP, à ceci près que cette classe n'est plus nécessaire car la requête HTTP est désormais abstraite et gérée au niveau Python. Cela simplifie considérablement la définition des méthodes de notre classe. Prenons maintenant l'exemple d'ESPN, la plateforme que la plupart d'entre vous connaissent probablement le mieux. Vous pouvez constater que nous avons des classes identiques ou similaires pour ESPN.
L'API Python étant conçue selon une approche orientée objet, la ligue renvoie des objets « équipe », « joueur », etc. Nous utiliserons ensuite des méthodes pour accéder aux attributs de ces objets. Je vais exécuter la définition de cette classe afin de voir quelques exemples de récupération de données depuis ESPN et d'interaction avec ces objets.
Vous voyez ici que je récupère les informations de ma ligue privée. L'objet est défini. Nous utiliserons la méthode `getteams` sur la ligue pour obtenir les informations des équipes. Nous avons maintenant un tableau associatif. Nous parcourrons ce tableau à l'aide d'une boucle `foreach` pour afficher le nom de chaque équipe. Comme vous pouvez le voir, voici le nom de mon équipe. Pour accéder à mon équipe, je me connecterai à la variable `teams`. Ensuite, si je veux exécuter `getwins` sur cette équipe, je peux voir mon nombre de victoires pour cette saison : sept, un résultat plutôt moyen.
Maintenant, si je voulais consulter l'effectif de cette équipe, j'utiliserais la fonction « get roster » puis j'analyserais cet effectif pour obtenir les noms des joueurs. Comme vous pouvez le voir ici, je verrais tous les joueurs que j'avais dans mon effectif pour cette saison. Comme je l'ai mentionné, ces classes seront à votre disposition. J'ai pris le temps de les commenter, je pense, de manière assez détaillée, afin que vous puissiez les utiliser pour accéder aux informations de votre propre équipe.
Maintenant que nous avons importé ces données dans JMP, pour les analyser, nous devons les intégrer dans des tables de données JMP. Il existe plusieurs façons de procéder. Comme mentionné précédemment, lorsqu'on appelle une API, les données sont généralement renvoyées sous forme de chaîne JSON. JMP intègre une fonction appelée « JSON vers table de données » que nous pouvons utiliser, comme illustré dans cet exemple, pour créer une table de données à partir de notre chaîne JSON.
C'est probablement la méthode la plus simple. JMP propose également un assistant d'importation JSON permettant de personnaliser les colonnes à importer et les données spécifiques à extraire de votre table. Une autre approche, plus adaptée à nos données ESPN (orientées objet), consiste à définir manuellement notre table en JSL, puis à utiliser les méthodes de l'objet pour la remplir.
Comme vous pouvez le constater, nous parcourons les objets « équipe » afin de récupérer les équipes participant à une ligue. Pour définir les données d'une colonne, nous utilisons la méthode appropriée. Par exemple, pour la colonne « victoires », nous utilisons `getwins`, pour les défaites, `getloss`, etc. S'il y a des objets imbriqués, nous pouvons les parcourir afin, par exemple, de générer une liste d'identifiants de joueurs pour une colonne.
Vous pouvez le constater pour chaque expression. Je vais maintenant vous montrer comment nous avons structuré ces tables de données dans JMP. J'ai des fichiers distincts pour récupérer les données Sleeper et les données ESPN. Pour les données Sleeper, nous importons nos classes, car ce sont les méthodes que nous utilisons pour obtenir les données. Je vais parcourir rapidement cette page, mais je vais mettre en évidence la méthode dont nous avons parlé précédemment : la conversion JSON vers une table de données. Vous voyez, nous l'utilisons ici pour définir nos colonnes et créer une table de données pour les équipes d'une ligue.
Je partagerai à nouveau ces fichiers avec vous. Si vous possédez des données pour une ligue peu connue, il vous suffira d'exécuter cette dernière ligne de code pour obtenir toutes les données de chaque année d'existence de la ligue. Elle utilise toutes les fonctions définies précédemment dans ce fichier, que vous pouvez consulter à votre convenance. Nous avons un système similaire pour ESPN. Vous remarquerez que nous créons nos tableaux d'une manière légèrement différente, comme indiqué dans la diapositive : nous définissons un tableau avec JSL, puis nous utilisons des méthodes d'objet pour le remplir.
Normalement, pour obtenir toutes vos données ESPN, il vous suffit d'exécuter cette dernière ligne de commande. Voyons maintenant à quoi ressemblent ces données dans JMP. Après l'exécution de ces fichiers, vous devriez obtenir un répertoire portant le nom de votre ligue. Pour chaque année de la ligue, vous devriez trouver les tables suivantes : la table de la draft, la table des membres, la table des équipes, ainsi que les effectifs individuels de chaque utilisateur de la ligue.
Nous allons examiner ces données. Vous pouvez voir la liste des équipes. Je vais essayer d'agrandir ces colonnes. J'espère que c'est suffisamment lisible. Pour chaque équipe, vous trouverez le nom d'affichage des utilisateurs. Je vais le réduire légèrement pour une meilleure visibilité. Pour chaque équipe, vous verrez également les membres de la ligue, ainsi que leur nombre de victoires et de défaites. Vous pouvez cliquer sur la colonne « Joueurs » pour afficher la liste des joueurs de l'effectif correspondant.
Nous aurons un tableau de données pour la draft, avec les joueurs sélectionnés par tour et numéro de choix. Vous pourrez cliquer sur un utilisateur pour voir les joueurs sélectionnés lors de sa draft. Nous avons également un tableau pour les membres de la ligue. Vous pouvez imaginer les analyses que nous pourrons effectuer grâce à ces tableaux.
Avant de nous plonger dans l'analyse, je tiens à vous en expliquer les raisons, comme je l'ai mentionné précédemment. En 2022, j'ai terminé premier de ma ligue, tandis qu'en 2023, j'ai malheureusement fini dernier. Je cherche à identifier des tendances et des résultats prévisibles. Comme vous pouvez le constater sur le nuage de points à gauche, j'avais un excellent tight end et un excellent quarterback, alors que dans la ligue où j'ai terminé dernier, aucun de ces deux joueurs ne figurait parmi les cinq meilleurs.
Cependant, j'avais un meilleur receveur, donc en comparant ces deux graphiques, je ne peux pas vraiment déterminer la cause exacte de ma réussite une année plutôt qu'une autre. C'est ce qui a inspiré mon analyse. Que allons-nous examiner aujourd'hui ? Tout d'abord, la ligue de fantasy commence par la draft. Certains choix de draft sont plus avantageux que d'autres.
Nous allons maintenant examiner les tendances et les changements survenus en fantasy football au cours de la dernière décennie. Quelles stratégies de draft offrent les meilleures chances de victoire ? Une approche conservatrice ou risquée ? En bas, vous trouverez la configuration de ma ligue, assez classique : un quarterback, deux receveurs droits, deux running backs, deux flex, un kicker et une défense avec un système de points PPR à mi-récompense. Ce sont des configurations de ligue assez standard.
J'espère que les conclusions de notre analyse pourront également être utiles à votre ligue. Le choix de la position de draft a-t-il un impact sur le succès ? Nous allons utiliser les tableaux de données que je vous ai montrés précédemment pour effectuer une analyse. Pour ce faire, nous utiliserons un outil de création de flux de travail afin de visualiser les étapes d'organisation des tableaux et de réalisation de l'analyse.
Vous pouvez consulter le flux de travail ici. Nous avons cette étape de configuration initiale, qui définit simplement le nom de notre ligue et indique au flux de travail où récupérer les données. Je vais vous expliquer étape par étape. Nous effectuons les étapes suivantes pour chaque année de la ligue : nous allons ouvrir une table de draft, puis une table des équipes.
Pour notre tableau de draft, nous allons filtrer les données en fonction du nombre d'utilisateurs dans la ligue afin d'obtenir le numéro de choix associé à chaque utilisateur. Voici à quoi cela ressemble. Nous allons ensuite fusionner ce tableau de données avec notre tableau des équipes pour obtenir un tableau similaire à celui-ci, qui affiche le nombre de victoires de chaque joueur (ou membre de la ligue) ainsi que son rang de sélection lors de la draft. Nous répéterons cette opération pour chaque année de la ligue et concaténerons les tableaux pour effectuer notre analyse.
Je vais détailler les étapes suivantes. Certains tableaux s'affichent sur un autre écran, mais je vais vous montrer le tableau final ainsi que l'analyse. Comme vous pouvez le voir sur ce graphique, l'axe des abscisses représente notre numéro de sélection, et l'axe des ordonnées, le nombre de victoires de l'équipe ainsi que son classement final.
En observant ce graphique, je ne constate pas de corrélation significative entre le rang de sélection et le résultat final. Je regarde le nombre de victoires. On remarque que si l'on choisit tôt dans la draft, le nombre moyen de victoires est légèrement supérieur dans l'historique de ma ligue, puis il y a peut-être une baisse en milieu de draft. J'en conclus que, quel que soit votre rang de sélection, vous avez une chance de remporter votre ligue.
Voyons maintenant comment la stratégie de draft a évolué au cours des neuf années d'existence de ma ligue. Pour gagner du temps, je vais vous montrer les étapes que nous suivons. Nous ouvrons tous nos tableaux de draft, les concaténons, puis effectuons des sélections par sous-ensembles. Pour plus de concision, je vais vous présenter brièvement le processus et le résultat.
Nous avons ici deux graphiques de résultats. Nous allons les examiner de plus près. Je vais vous expliquer le graphique principal, et vous pouvez consulter celui-ci à côté si cela vous intéresse. Il s'agit d'une ventilation détaillée des acquisitions. Concrètement, l'axe des abscisses représente l'année et l'axe des ordonnées le nombre de joueurs sélectionnés à une position donnée lors des quatre premiers tours.
En observant ce graphique, on constate que le nombre de quarterbacks, running backs, tight-ins et wide receivers sélectionnés lors des quatre premiers tours de la draft a augmenté pour l'ensemble de la ligue. On observe également une augmentation du nombre de running backs sélectionnés entre 2015 et 2020, suivie d'une baisse significative ces trois dernières années, ce qui explique la diminution du nombre de running backs sélectionnés lors des quatre premiers tours. On comprend ainsi pourquoi le nombre de receveurs a suivi une tendance similaire à celle des running backs, se stabilisant et restant légèrement supérieur. Enfin, la popularité des quarterbacks a diminué lors de la draft, avec une légère hausse récente en début de draft.
Le nombre de tight ends est resté relativement stable, avec une légère augmentation ces deux dernières années. Comme vous pouvez le constater sur ce graphique, nous avons une analyse détaillée tour par tour ; je la partagerai avec la communauté si vous souhaitez l'examiner de plus près.
Nous avons vu comment la stratégie de draft a évolué au fil des ans. À présent, je souhaite examiner si une stratégie de draft modifiée est efficace. Pour cette analyse, nous allons étudier le nombre de joueurs sélectionnés à chaque position lors des six premiers tours, et ce, uniquement sur les trois dernières années. Vous pouvez consulter les étapes de cette analyse ici. Je vais lancer la phase de configuration. Pour chaque année, nous allons ouvrir le tableau de draft, puis le tableau des équipes. Nous allons ensuite extraire les données des six premiers tours. Puis, nous allons créer un tableau récapitulatif indiquant le nombre de joueurs sélectionnés à chaque position pour chaque utilisateur. Nous répéterons cette opération pour chaque année, puis nous concaténerons les résultats pour effectuer notre analyse.
Commençons par examiner ce graphique. On constate que le nombre de running backs sélectionnés lors des six premiers tours tend à être légèrement inversement corrélé au nombre de victoires. Cela confirme la tendance observée dans notre analyse précédente, à savoir la diminution du nombre de running backs sélectionnés. On observe un pic pour les wide receivers, avec deux sélectionnés lors des six premiers tours, suivi d'une légère baisse, pour atteindre trois wide receivers sélectionnés.
La pente la plus abrupte que nous observons ici concerne le poste de tight end, sur lequel nous reviendrons dans un instant. Cela montre que sélectionner un tight end lors des six premiers tours de la draft est généralement corrélé positivement au nombre de victoires attendues pour la saison. On observe une corrélation similaire pour le poste de quarterback, mais la pente est légèrement moins marquée. Analysons maintenant ces données de manière plus statistique à l'aide d'un modèle d'ajustement. Comme vous pouvez le constater, la pente est très abrupte pour le poste de tight end. Observons nos estimations de paramètres en bas à gauche.
On constate, grâce à des données statistiques significatives, une corrélation positive assez forte entre le choix d'un tight end lors des six premiers tours et le nombre de victoires attendues sur une saison. Le principal enseignement de cette analyse est que, même s'il est préférable de choisir moins de running backs (comme le montre cette corrélation négative), sélectionner un tight end lors des six premiers tours est un facteur prédictif assez fiable du nombre de victoires sur une saison.
Je souhaite maintenant analyser la prévisibilité des meilleurs joueurs d'une année sur l'autre. Plus précisément, je veux déterminer le pourcentage des 12 meilleurs joueurs en fantasy football, par position, qui restent constants d'une année sur l'autre, afin de savoir si cela peut vous éclairer sur les joueurs à privilégier lors de votre draft.
Encore une fois, pour gagner du temps, je vais vous présenter brièvement ce processus. Vous pouvez suivre les étapes sur le côté pendant l'exécution. L'exécution est très rapide. Je vais ensuite vous expliquer les avantages de l'utilisation des flux de travail pour votre analyse. Cela vous permet de parcourir itérativement les différentes étapes de votre analyse et d'identifier les points problématiques.
De plus, si vos collègues ont un accès facile aux données que vous utilisez, ils peuvent reproduire votre analyse et les étapes nécessaires à son élaboration très facilement. Je vais vous montrer ici les graphiques et les données issues de cette analyse. Vous pouvez consulter les données ci-contre ; elles indiquent, d'une année sur l'autre, le pourcentage des 12 premiers résultats pour chaque position qui est resté inchangé par rapport à l'année précédente.
En observant ce graphique, on constate que le nombre de running backs (la ligne bleue) a tendance à diminuer ces dernières années. Cela signifie que les performances des running backs d'une année sur l'autre sont devenues un peu moins prévisibles qu'auparavant. En revanche, les performances des receveurs et des tight ends sont légèrement plus prévisibles. Par exemple, parmi les meilleurs running backs de 2023, on observe un taux de courses cumulées de seulement 33 % sur les deux dernières années pour les 12 meilleurs joueurs. Ces positions sont donc peut-être un peu plus difficiles à prévoir que celles des wide receivers et des tight ends.
Voici notre dernière analyse. Nous allons examiner qui sélectionner lors de notre draft. Nous analyserons toutes les tendances et tous les schémas observés. Quelles stratégies adopter pour notre draft ? Cette analyse portera sur la valeur des joueurs draftés et sur l'impact des performances supérieures à la moyenne des joueurs draftés sur le succès de votre équipe. Je souhaite m'attarder un peu plus sur cette analyse, car je la trouve particulièrement intéressante.
Après la configuration initiale, nous allons répéter l'opération chaque année. Nous allons d'abord ouvrir le tableau de la draft, puis celui des équipes. Vous pouvez ignorer les deux étapes suivantes ; il s'agit simplement de tâches administratives. Nous allons maintenant effectuer une analyse bivariée sur notre tableau de la draft afin d'étudier la relation, par position, entre le numéro de sélection d'un joueur et le total des points qu'il a marqués.
En analysant ces données par variables, on obtient une ventilation par position, avec en abscisse le numéro de sélection et le nombre total de points marqués par le joueur. Je m'intéresse particulièrement aux points situés au-dessus et en dessous des valeurs attendues, ou des valeurs attendues selon la régression pour chaque position.
Je souhaite observer comment les performances, supérieures et inférieures aux prévisions de la régression linéaire, influencent nos chances de victoire. C'est précisément l'objectif de la suite de cette analyse. Nous allons enregistrer les valeurs de régression et les résidus de ces graphiques dans notre tableau de brouillon, comme vous pouvez le constater. Ensuite, nous regrouperons les tours en trois catégories : début, milieu et fin. Veuillez recoder rapidement la colonne « tour ».
Nous avons maintenant une analyse détaillée des performances en début, milieu et fin de draft. Nous pouvons observer l'impact des surperformances et des sous-performances, par tour de draft, sur nos chances de victoire. Je vais vous présenter le reste de l'analyse. Veuillez patienter quelques instants pendant le chargement. Nous y sommes presque. Vous pouvez maintenant constater que nous obtenons un tableau de données regroupant toutes les données de l'année. Nous disposons du nombre de surperformances extrêmes par tour de draft pour chaque utilisateur au cours d'une année donnée, et ce, pour toutes les années. L'objectif de cette analyse est d'évaluer l'influence des surperformances ou des sous-performances extrêmes lors des tours de draft sur nos chances de victoire.
Nous pouvons examiner ici le graphique de ce modèle d'ajustement. Il s'agit, à mon avis, de l'analyse la plus intéressante du jour. Nous pouvons également observer certains graphiques de levier, en portant une attention particulière aux joueurs ayant surperformé de manière extrême lors des tours intermédiaires et à ceux ayant sous-performé de manière extrême lors des premiers tours. En analysant nos estimations de paramètres, nous constatons qu'avec une signification statistique, la surperformance d'un joueur lors des tours intermédiaires est fortement corrélée au nombre de victoires de la saison. Plus il y a de joueurs surperformants lors des tours intermédiaires, plus vos chances de remporter des victoires en fantasy sont élevées.
À l'inverse, un joueur très décevant en début de draft a une corrélation très négative avec le nombre de victoires que vous pouvez prévoir pour la saison. On peut donc en tirer la leçon qu'il faut tenter sa chance en milieu de draft. Je vais essayer de drafter des joueurs capables de réaliser des coups d'éclat, sans trop m'inquiéter de les rater. Comme vous pouvez le constater, sélectionner un joueur très décevant en milieu de draft n'est pas si pénalisant.
Autant viser la lune et tenter de recruter les joueurs qui vous offrent le plus de potentiel et les meilleures chances de victoire, d'autant plus que les conséquences d'un mauvais choix seront minimes. À l'inverse, rater un joueur en début de draft et choisir un joueur très fragile peut s'avérer très préjudiciable à votre réussite en fantasy football.
Merci de m'avoir suivi tout au long de cette analyse. Voici les principaux points à retenir : l'année dernière ne se répète jamais. Comme nous l'avons vu dans une de nos analyses, les meilleurs joueurs en fantasy football d'une saison, notamment les running backs, sont beaucoup moins prévisibles d'une saison à l'autre.
Dans les formats classiques, les running backs perdent de leur valeur et, comme je l'ai mentionné, sont moins prévisibles, tandis que les wide receivers gagnent légèrement en valeur et sont nettement plus prévisibles que les running backs. On ne peut plus négliger les postes de quarterback et surtout de tight end ; comme nous l'avons vu, sélectionner un tight end tôt dans la draft tend à favoriser la victoire. Les premiers choix ne garantissent pas la victoire, mais ils peuvent faire perdre le championnat, et les championnats sont souvent déséquilibrés au milieu de la draft.
Misez sur les joueurs à fort potentiel pour les raisons évoquées précédemment. À vous de jouer ! Je vous ai fourni les classes et l'API que j'utilise pour importer les données de Sleeper et d'ESPN dans JMP. Vous pouvez utiliser ces API pour partager vos analyses au sein de la communauté JMP. Si votre ligue de fantasy n'est pas sur Sleeper ou ESPN, vous pouvez vous inspirer de l'intégration Python pour utiliser n'importe quel dépôt Python afin d'importer ces données dans JMP et réaliser votre analyse.
Je tiens à vous remercier chaleureusement pour votre temps aujourd'hui. J'ai vraiment hâte de découvrir vos analyses et j'espère que vous pourrez m'aider à remporter ma prochaine ligue de fantasy football. Merci.