paint-brush
Utiliser Monte Carlo pour expliquer pourquoi vous ne gagnez pas les jeux de baseball Daily Fantasypar@courtneyperigo
1,670 lectures
1,670 lectures

Utiliser Monte Carlo pour expliquer pourquoi vous ne gagnez pas les jeux de baseball Daily Fantasy

par Courtney Perigo 2022/06/15
Read on Terminal Reader
Read this story w/o Javascript

Trop long; Pour lire

Cet été, j'ai voulu tester mes compétences en recherche opérationnelle sur un problème qui me tracassait. Dans les sports fantastiques, vous choisissez une liste de joueurs à 8 positions et de 2 lanceurs ; et leur salaire ne peut pas dépasser le plafond salarial de la ligue. La simulation utilisera des résultats réels pour les joueurs de baseball des ligues majeures de 2018 à la veille du match que nous simulons. Il peut effectuer une recherche épuisée, modifiée par une nouvelle propagation de contraintes, pour trouver la gamme la plus performante.

Company Mentioned

Mention Thumbnail
featured image - Utiliser Monte Carlo pour expliquer pourquoi vous ne gagnez pas les jeux de baseball Daily Fantasy
Courtney Perigo  HackerNoon profile picture

Non, vous ne gagnerez probablement pas ce jeu de sport fantastique quotidien que vous voulez essayer. Voici pourquoi.


Cet été, j'ai voulu tester mes compétences en recherche opérationnelle sur un problème qui me tracassait. Pourquoi suis-je si mauvais au baseball fantastique quotidien en ligne ?


Si vous lisez ceci, vous savez probablement de quoi je parle. Je suppose que vous êtes du genre à vouloir faire une petite recherche et que vous êtes peut-être tombé sur cet article de blog sur la science des données à la recherche de conseils sur la façon de constituer votre équipe.


Spoiler Alert : J'ai une mauvaise nouvelle pour vous.


Dans ce blog, vous apprendrez pourquoi les sports fantastiques en ligne sont difficiles. Vous verrez que l'économie créée par ces fournisseurs de jeux en ligne est efficace et qu'il vous faudra y consacrer beaucoup de temps si vous souhaitez déjouer le système.

Qu'est-ce que le Fantasy Baseball en ligne ?

Si vous n'êtes pas familier avec tout ce dont je parle, alors ce paragraphe est pour vous. Selon un site Web de jeu en ligne qui restera anonyme, les paris sportifs fantastiques en ligne représentent une industrie de 48 milliards de dollars. Dans les sports fantastiques, vous choisissez des joueurs qui jouent ce jour-là et voyez s'ils peuvent vous faire gagner de l'argent en jouant bien. Dans la version baseball, vous choisissez une liste de joueurs à 8 positions et 2 lanceurs; et leur salaire ne peut pas dépasser le plafond salarial de la ligue. Leur performance ce jour-là dicte les points que vous marquez. Vous n'avez rien d'autre à faire que de choisir les meilleurs joueurs ce jour-là.


Simple, non ?


Image de l'auteur : Fantasy baseball (règles classiques)

Pourquoi suis-je si mauvais au Fantasy Baseball en ligne ?

Image de l'auteur. Mon logo de baseball fantastique.


Entrez dans mon équipe fantastique, les Chicago Red Line Hustlers. Oui, j'ai créé un logo pour mon équipe imaginaire. Qu'est ce que c'est pour toi?


Nous ne sommes pas si bons. Je joue depuis un mois environ et mon équipe a perdu de l'argent. Pas beaucoup, je n'en mets pas beaucoup en jeu. Cependant, je ne peux pas quitter mon travail de jour; et je veux savoir pourquoi.

La simulation de Monte Carlo nous aide à évaluer le risque dans les sports fantastiques

Pour comprendre pourquoi je suis si mauvais à ce jeu, j'ai puisé dans ma boîte à outils d'analyse décisionnelle et dépoussiéré le vieil outil d'analyse de portefeuille éprouvé - la simulation de Monte Carlo. La simulation m'aidera à comprendre le risque dans les décisions de personnel - en particulier les dix joueurs à choisir compte tenu de notre contrainte d'être en dessous du plafond salarial de la ligue.


La simulation utilisera des résultats réels pour les joueurs de baseball des ligues majeures de 2018 à la veille du match que nous simulons. J'y parviens en obtenant des statistiques quotidiennes de l'API publique de MLB.com pour tous les ligueurs majeurs actifs. (Remarque : l'ingénierie des données dépasse le cadre de ce blog.)


Une fois les statistiques collectées, nous devons collecter les joueurs éligibles impliqués dans le jeu fantastique que nous souhaitons simuler. J'y parviens en interagissant avec l'API publique d'un opérateur de paris sportifs en ligne spécialisé dans les sports fantastiques quotidiens. (Remarque : l'ingénierie des données dépasse le cadre de ce blog.)


Une fois les données collectées et les joueurs éligibles identifiés, la simulation peut effectuer une recherche épuisée, modifiée par une nouvelle propagation de contraintes, pour trouver la formation la plus performante ; ou un utilisateur peut définir une gamme et évaluer ses performances.

Fonction objectif

L'objectif de la simulation est de simuler les résultats potentiels des matchs de baseball joués par une formation de 2 lanceurs et 8 joueurs de position. Ces résultats sont notés en utilisant les règles classiques du concours de baseball fantastique quotidien du fournisseur en ligne.

Image de l'auteur : Modèle de notation classique typique utilisé par les fournisseurs de baseball Fantasy en ligne.

La simulation de Monte-Carlo

Avec les données disponibles, nous pourrions expérimenter et modéliser les résultats attendus à partir de nos données du monde réel. Notre objectif est d'identifier le pointage fantastique pour les joueurs à 8 positions (représentant les 8 positions défensives au baseball) et 2 lanceurs. Notre modèle devra traiter la position des joueurs et des lanceurs, séparément.

Simulation de frappeur : l'apparence des plaques compte

Pour les joueurs de position, la notation est fortement biaisée vers les résultats au bâton. Pour les joueurs de position, notre objectif sera de simuler les apparences de plaque et les résultats potentiels correspondants de cette apparence de plaque.


Nous y parvenons en simulant les résultats de l'attaque et nous ne nous soucions que des apparences de plaque car c'est la seule chance qu'un joueur puisse avoir un impact sur le jeu fantastique. L'organigramme de notre simulation montre comment notre modèle procédera pour identifier les apparences des plaques et leurs résultats potentiels.


Image par l'auteur : Organigramme de simulation de frappe

Apparences de plaque

Les joueurs peuvent avoir une variété d'apparences de plaque dans chaque jeu, et cela est principalement associé à l'ordre dans lequel ils apparaissent dans la gamme. Un joueur de position à l'arrière de l'alignement a tendance à avoir moins d'apparitions au marbre qu'un joueur en haut (au début) de l'alignement. Notre modèle a accès au nombre d'apparitions au plateau qu'un joueur a eues historiquement, mais n'a pas accès à l'ordre dans l'alignement dans lequel il est apparu pour ce match. C'est la première limite à la précision de notre simulation. Je modélise les apparitions au marbre en fonction des résultats historiques et non des attentes réelles basées sur l'ordre des frappeurs pour le match à venir.


Pour accomplir notre simulation, nous échantillonnons empiriquement les apparitions de plaque des jeux passés en utilisant un générateur de nombres aléatoires pour sélectionner les apparitions de plaque à partir d'une liste ordonnée d'apparitions de plaque historiques pour chaque joueur de position.


Image par l'auteur : code Python pour renvoyer les apparences de la plaque


Pour chaque jeu simulé, cette sélection aléatoire d'apparences de plaque est effectuée. Cette méthodologie est très précise pour faire correspondre les résultats attendus pour chaque joueur.


Image de l'auteur : apparences de la plaque, performances réelles par rapport aux performances simulées.

Résultats de l'apparence de la plaque

Une fois les apparences de plaque simulées, nous devons maintenant identifier le modèle pour déterminer quels résultats sont possibles et tirer parti d'une probabilité imbriquée pour sélectionner un résultat qui représente ce que le joueur est censé accomplir. Le premier arrêt de notre probabilité imbriquée ou enchaînée est l'échantillonnage de la capacité du joueur à transformer une apparence de plaque en un résultat offensif. Ce rapport peut être appliqué aux apparences de plaque de la simulation pour identifier le nombre de résultats que le joueur a obtenus dans ce jeu.


Image de l'auteur : code Python pour renvoyer le rapport de résultat


Avec le nombre de résultats déterminé, nous pouvons ensuite utiliser les résultats historiques obtenus par le joueur pour simuler ce dont ce joueur est capable. Par exemple, si nous simulons un joueur connu pour avoir frappé beaucoup de circuits, nous verrions de nombreux circuits dans ses performances historiques.


Image de l'auteur : résultats pour deux joueurs de position MLB différents montrant une distribution de résultats unique.


La simulation échantillonnera empiriquement à partir de la distribution des résultats que le joueur a obtenus dans le passé. Le résultat peut ensuite être noté en fonction de la carte de score du fournisseur de fantaisie en ligne et traité ultérieurement pour simuler des résultats supplémentaires en fonction de l'état du jeu lorsque ce résultat s'est produit.


Image de l'auteur : code Python pour renvoyer les résultats des joueurs.

Simulation de l'état de la base et résultat final de l'apparence de la plaque

L'état du jeu lorsqu'un résultat se produit aura également un impact sur trois résultats finaux que notre simulation doit modéliser. Ces trois résultats dépendent des événements qui se sont produits avant, pendant et après que le résultat soit atteint par le joueur. La dernière couche de notre organigramme montre que les courses, les bases volées et les RBI ne sont possibles que lorsque certains résultats se produisent.


De plus, le montant de ces trois événements est également impacté par le résultat. Par exemple, si un joueur frappe un coup de circuit, il reçoit au moins un point produit et un point. Ils n'ont également aucune chance d'obtenir une base volée à cause de ce résultat. Nous modélisons toutes ces règles dans une couche supplémentaire de probabilités imbriquées et échantillonnées de manière empirique en fonction des performances passées des joueurs pour simuler les états de jeu dans lesquels le joueur se produisait. Un exemple de l'un de ces résultats est présenté ci-dessous, la modélisation s'exécute.


Image de l'auteur : code Python pour renvoyer les points marqués par le joueur.

Simulation des résultats au bâton

Avec toutes nos fonctions définies, je peux maintenant simuler des jeux illimités pour n'importe quel joueur avec suffisamment de performances d'échantillons à partir desquelles puiser. Le résultat est très performant. Voici un exemple de Trea Turner simulé des LA Dodgers.


Image de l'auteur : Trea Turner Simulation (2 jeux)


Image de l'auteur : Boxplot de Trea Turner Fantasy Points (simulé) Vs. sa performance réelle (50 matchs)

Simulation de lanceur : la matière lancée des manches

Les frappeurs étant pris en compte dans la simulation, le modèle doit également être en mesure de simuler les résultats des lanceurs. Le score fantastique pour les lanceurs ne prend en compte que les résultats des apparitions au marbre et les résultats des frappeurs auxquels ils sont confrontés.


Image de l'auteur : organigramme de simulation de lancement.


Pour les lanceurs, le modèle commence par simuler des manches lancées. Ceci est important car mes propres recherches récentes suggèrent que les lanceurs qui lancent plus de manches ont tendance à mieux performer (en réduisant les points, les coups sûrs et en améliorant leur pourcentage de victoires au fur et à mesure que le jeu progresse, etc.)


Image de l'auteur : Probabilité de victoire du lanceur par manches lancées (arrondie)


Cette observation est intuitive car un manager est moins susceptible de tirer un lanceur fort ayant une bonne sortie du jeu plutôt qu'un autre lanceur.

Manches lancées

Pour accomplir notre simulation, nous échantillonnons empiriquement les manches lancées à partir de matchs passés en utilisant un générateur de nombres aléatoires pour sélectionner les manches lancées à partir d'une liste ordonnée de manches historiques lancées pour chaque lanceur. Le code pour y parvenir est similaire à la fonction d'apparence de plaque pour les frappeurs. Pour chaque jeu simulé, cette sélection aléatoire est effectuée. Cette méthodologie est très précise pour faire correspondre les manches attendues lancées pour chaque lanceur.


Image de l'auteur : manches lancées par une simulation de lanceur de la MLB par rapport à la réalité.

Résultats de présentation

Les résultats des lanceurs sont évalués en fonction du nombre de manches lancées. Comme je l'ai indiqué précédemment, je fais cela parce que les performances des joueurs sont différentes selon la profondeur de jeu du lanceur.


Il y a trois résultats qui nous intéressent : le nombre de victoires, de courses, de coups sûrs, de marches et de retraits au bâton lancés. Je simule ces résultats en échantillonnant empiriquement des sous-ensembles de données de lanceurs correspondant aux manches lancées. Ce processus garantit que nous respectons la performance du lanceur en fonction des manches lancées.


Image de l'auteur : code Python pour renvoyer les points mérités en fonction des manches lancées.


Les résultats finaux sont une vérification de l'état de la simulation après chaque exécution. Le modèle marque des parties complètes chaque fois que le lanceur simulé lance 9 manches complètes. Il attribue au lanceur un jeu blanc complet chaque fois que le lanceur simulé lance 9 manches complètes et n'a aucun point mérité. Enfin, le modèle attribue au lanceur simulé un sans coup sûr si la simulation produit un lanceur qui a terminé les 9 manches et n'a obtenu aucun coup sûr.

Simulation de jeux de lanceurs joués

Avec toutes nos fonctions de pitch définies, je peux maintenant simuler un nombre illimité de jeux pour n'importe quel lanceur avec suffisamment de données d'échantillon. Les données simulées sont très similaires aux performances réelles de la MLB pour les lanceurs que nous avons modélisés.


Image de l'auteur : Corbin Burnes a simulé des performances de lancer


Image de l'auteur : Corbin Burnes Points de fantaisie réels vs simulés

Expérience informatique et résultats :

L'objectif de ce projet était d'évaluer le risque lié à la sélection des files d'attente pour un jeu de sport fantastique quotidien. Pour y parvenir, j'ai construit une fonction qui remplit aléatoirement une composition valide en dépensant jusqu'au plafond salarial de 50 000 $ indiqué dans les règles classiques d'un fournisseur de baseball fantastique. J'ai fait cela 500 fois pour créer 500 files d'attente valides et aléatoires à simuler. Chaque joueur de la formation valide a été soumis à sa propre simulation, simulant chacun 50 jeux de performance. Les résultats n'étaient pas surprenants.


Il semble que les résultats du baseball soient très aléatoires.

Voici un résumé des performances simulées des 10 meilleures files d'attente aléatoires choisies par le rapport des points à la variabilité - comme un ratio de Sharpe en finance. Ces files d'attente représentent les options les moins risquées, mais les plus efficaces.


Image par l'auteur : Top Sharpe Ratios acquis par des files d'attente aléatoires et valides (les 10 meilleures performances visionnées)


Voici le même visuel mais en sélectionnant les files d'attente valides les mieux notées.


Image de l'auteur : Top 10 des performances aléatoires simulées et valides (les 10 meilleures performances vues)


Ces images montrent des files d'attente valides avec de bonnes performances, mais toutes ces files d'attente ont des valeurs attendues très proches les unes des autres. Grâce à cette vaste recherche, nous n'avons pas pu trouver une gamme qui surpasse de manière significative toutes les autres gammes. Notre simulation a réussi à montrer que les jeux de baseball fantastiques, sans analyse et évaluation détaillées et significatives des joueurs, ne sont que des jeux de hasard.

Discussion et conclusions

En conclusion, la simulation est un outil très utile pour comprendre les risques associés à la prise de décision. Il a été appliqué avec succès dans un large éventail d'applications, notamment la conception de produits, la formation des pilotes, la recherche sur les files d'attente et maintenant les sports fantastiques.


Les résultats de cette simulation spécifique montrent que le baseball à court terme est très aléatoire. N'importe quel joueur, un jour donné, peut avoir un bon ou un mauvais match. Les confrontations peuvent entrer en jeu et les situations de jeu peuvent influencer la décision d'un joueur.


Nous avons atteint la capacité de modéliser un système très complexe et d'obtenir des résultats très concrets. À long terme, je m'attends à ce que ma simulation génère des joueurs dont les performances sont similaires à celles de leurs homologues réels.


Les simulations peuvent être améliorées. Par exemple, nous n'avons pas de données sur l'état du jeu pour tout résultat de performance. Nous simulons sur la base des réalisations passées, mais un modèle amélioré simulerait également l'état du jeu. Ce serait une prochaine étape importante car les décisions des autres joueurs et l'état du jeu auraient un impact sur la capacité du joueur à générer des résultats. De plus, le modèle ne peut pas simuler les matchs - un sujet crucial dans les sports fantastiques. Les frappeurs fonctionnent différemment selon le lanceur auquel ils sont confrontés ou l'équipe qu'ils jouent.


En fin de compte, j'espère installer de nouvelles améliorations qui tiennent compte des matchs et apporter des améliorations progressives à ma capacité à évaluer les performances des joueurs à court terme.


Également publié ici .