You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
luevard 2f3b9f8d98
Merge branch 'master' of https://codefirst.iut.uca.fr/git/PyPloteam/MMIX
1 year ago
__pycache__ Comments and prediction 1 year ago
archive Git add files lol 1 year ago
old Git add files lol 1 year ago
.DS_Store Git add files lol 1 year ago
README.md Merge branch 'master' of https://codefirst.iut.uca.fr/git/PyPloteam/MMIX 1 year ago
analyse.py Comments and prediction 1 year ago
cleanData.py Merge branch 'master' of https://codefirst.iut.uca.fr/git/PyPloteam/MMIX 1 year ago
main.py Comments and prediction 1 year ago
models.py Merge branch 'master' of https://codefirst.iut.uca.fr/git/PyPloteam/MMIX 1 year ago
startModel.py Comments and prediction 1 year ago

README.md

Introduction

Voici MMIX, une application IA permettant de prédire à hauteur de 57% la probabilité de victore d'un combat entre deux combattants MMA.

Les statistiques sont issu d'un dataframe disponible sur Kaggle.

Le model utilisé est une forêt aléatoire.

Les données

Les données utilisées sont issu d'un dataframe reprenant les statistiques de la plus grande organisation MMA au monde, l'UFC (Ultimate Fighting Championship).

Qu'est ce que le MMA ?

Le MMA, ou arts martiaux mixtes, est un sport de percussion-préhension (debout et au sol).

C'est un sport mis en avant par la médiatisation, comme le catch il y a quelques années. Il s'est démocratisé il y a peu de temps en France, car il n'est autorisé que depuis 2020.

Avant cette date, ce sport était pratiquer par nos français à l'extérieur de l'héxagone.

Ce sport est très complexe, et seul les combattants maitrisant plusieurs style de combat peuvent gravir les échellons.

Le MMA permet de réunir plein de sorte de style de combat comme la boxe anglaise, le Jiu-jitsu brésilien, la lutte et le sambo.

Le MMA, comme en boxe, permet de combattre seulement contre sa catégorie de poids, sauf exception (devenir double champion, montée de catégories...).

Et nos français ?

Actuellement à l'UFC, nous possédons 4 dans le top 15 mondial de l'UFC.

Ciryl Gane - Top 2 dans la catégorie Poids Lourd Homme

Manon Fiorot - Top 3 dans la catégorie Poids Mouche Femme

Nassourdine Imavov - Top 8 dans la catégorie Poids Moyen Homme

Benoit Saint Denis - Top 12 dans la catégorie Poids Léger Homme, il est en série de 3 victoires très impréssionantes et va combattre début avril contre le Top 3 Dustin Poirier qui est une légende du MMA

Que retenir du dataset ?

Le dataset contient 140 colonnes, il faut donc trier afin de récupérer seulement les informations importantes

B_avg_BODY_landed : Nombre moyen de coups au corps réussis par le combattant du coin bleu

B_avg_HEAD_landed : Nombre moyen de coups à la tête réussis par le combattant du coin bleu

B_avg_TD_att : Nombre moyen de tentatives de takedown par le combattant du coin bleu

B_avg_TOTAL_STR_landed : Nombre moyen total de coups réussis par le combattant du coin bleu

B_avg_opp_BODY_att : Nombre moyen de tentatives de coups au corps par les adversaires contre le combattant du coin bleu

B_avg_opp_HEAD_landed : Nombre moyen de coups à la tête réussis par les adversaires contre le combattant du coin bleu

B_avg_opp_LEG_landed : Nombre moyen de coups à la jambe réussis par les adversaires contre le combattant du coin bleu

B_avg_opp_SIG_STR_att : Nombre moyen de tentatives de coups significatifs par les adversaires contre le combattant du coin bleu

B_avg_opp_TOTAL_STR_att : Nombre moyen total de tentatives de coups par les adversaires contre le combattant du coin bleu

R_avg_TD_att : Nombre moyen de tentatives de takedown par le combattant du coin rouge

R_avg_opp_GROUND_att : Nombre moyen de tentatives de coups au sol par les adversaires contre le combattant du coin rouge

R_avg_opp_SIG_STR_landed : Nombre moyen de coups significatifs réussis par les adversaires contre le combattant du coin rouge

B_age : Âge du combattant du coin bleu

R_age : Âge du combattant du coin rouge

Comment lancer le projet ?

Pour lancer le projet, il faut simple exécuter la commande : python3 server.py.

Par contre le model met un peu de temps à charger, 2 minutes environs.

Ensuite, une interface web est disponible à l'adresse http://127.0.0.1:5000/ .

LISTE DES VISUALISATIONS A PREVOIR

Taux de victoire par méthode de finition : Analyser la fréquence à laquelle les combats se terminent par soumission, KO, décision unanime, décision partagée, etc

Durée moyenne des combats : Calculer la durée moyenne des combats pour différentes catégories de poids ou pour l'ensemble de l'UFC

Taux de réussite des takedowns : Examiner le pourcentage de tentatives de takedown réussies par les combattants

Taux de réussite des frappes : Analyser le pourcentage de coups réussis par rapport au nombre total de coups tentés

Distribution des finitions par round : Déterminer dans quel round les combats sont le plus souvent terminés (par exemple, soumission au premier round, KO au deuxième round, etc.)

Variation des performances avec l'âge : Vérifier s'il existe une corrélation entre l'âge des combattants et leur succès dans l'UFC

Preparation des données

Pour rappel, notre dataset présentait un large pannel de données. Ces données-là sont chargées à partir d'un fichier CSV contenant des informations sur les combats UFC, telles que les noms des combattants, les statistiques de combat, la date du combat, le gagnant, etc.

La première étape a donc été de nettoyer ses données :

Nettoyage des données

  • Les combats antérieurs à avril 2001, avant l'implémentation des règles unifiées des arts martiaux mixtes, sont supprimés car ils pourraient ne pas être représentatifs des combats actuels. On parle d'une époque où il n'y avait ni juge, ni limite de temps et rounds.

  • Les variables catégorielles sous formes de chaînes de caractères dans le jeu de données ont eu besoin d'être encodées en valeurs numériques à l'aide de la méthode d'encodage de label. Cette étape permet de convertir les chaînes de caractères en nombres, ce qui est nécessaire pour que nos modèles d'apprentissage automatique puissent traiter efficacement les données.

  • Après l'encodage des variables catégorielles, le jeu de données peut contenir des valeurs manquantes (NaN). Pour gérer ces valeurs manquantes, elles sont remplacées par la valeur médiane associée à chaque colonne. Cela garantit que les données sont complètes et prêtes à être utilisées pour l'analyse et le modèle prédictif pour essayer d'avoir les meilleures conditions pour les meilleures prédictions possibles.

  • Une fonction swap_values est aussi appliquée à chaque ligne du jeu de données. Cette fonction permet l'échange de données entre le combattant bleue et le combattant rouge. Nous avons tenté cela pour essayer de baisser l'influence trop importante qu'avait pour un combattant d'être rouge, car statistiquement le côté gagne bien plus souvent que le côté bleu, ce qui influençait grandement nos predictions.

Model

Les tests de modèles

Dans le processus de choix du modèle le plus approprié pour notre tâche de prédiction des résultats de combats d'arts martiaux mixtes (MMA), nous avons expérimenté plusieurs algorithmes d'apprentissage automatique. Voici une analyse des différents choix tentés et des raisons pour lesquelles le modèle Random Forest a été jugé le plus intéressant :

  1. K-Nearest Neighbors (KNN) :
  • Avantages :
    • Facilité d'implémentation : KNN est simple à mettre en œuvre et à comprendre, ce qui en fait une option attrayante pour les débutants.
    • Adaptabilité : Il peut gérer efficacement les problèmes de classification non linéaires, ce qui peut être pertinent pour les combats MMA où les interactions entre les caractéristiques peuvent être complexes. Robustesse aux données bruitées : KNN peut fonctionner de manière robuste même en présence de données bruitées, ce qui peut être utile compte tenu de la variabilité des performances des combattants.
  • Inconvénients :
    • Sensibilité à la distance : Les performances de KNN dépendent fortement du choix de la mesure de distance et du nombre de voisins, ce qui peut être difficile à déterminer dans un contexte MMA.
    • Temps de prédiction : La prédiction avec KNN peut être coûteuse en termes de temps de calcul, surtout avec de grandes quantités de données, ce qui peut être un inconvénient pour une application en temps réel.
  1. Régression Logistique :
  • Avantages :
    • Interprétabilité : La régression logistique fournit des coefficients qui peuvent être interprétés directement, ce qui peut être utile pour comprendre l'importance relative des caractéristiques dans la prédiction.
    • Facilité d'ajustement : Elle est rapide à entraîner et à prédire, ce qui peut être bénéfique pour une application en temps réel.
  • Inconvénients :
    • Limitation à la linéarité : La régression logistique est limitée par sa capacité à capturer des relations linéaires entre les caractéristiques et la cible, ce qui peut être insuffisant pour modéliser les relations complexes présentes dans les données MMA.
    • Sensibilité aux valeurs aberrantes : Elle peut être sensible aux valeurs aberrantes, ce qui peut affecter ses performances, et dans le contexte MMA, où les performances des combattants peuvent varier considérablement, cela peut être un inconvénient majeur.
  1. Random Forest :
  • Avantages (comparatif) :
    • Capacité à capturer des interactions non linéaires : Contrairement à la régression logistique, Random Forest peut gérer efficacement les interactions non linéaires entre les caractéristiques, ce qui est crucial pour modéliser les relations complexes dans les données MMA.
    • Robustesse au surajustement : Contrairement à KNN, qui peut être sensible au surajustement avec de grandes quantités de données, Random Forest est moins susceptible de surajuster grâce à l'agrégation des prédictions de multiples arbres de décision.
Interactions :

Les interactions se réfèrent aux effets combinés de deux ou plusieurs variables sur la variable cible (dans ce cas, le résultat d'un combat MMA).
Par exemple, dans les données MMA, il pourrait y avoir une interaction entre la quantité de coups portés à la tête et la quantité de coups portés au corps d'un combattant. Il se peut que la relation entre ces deux variables combinées soit différente de la somme de leurs effets individuels.
Les modèles capables de capturer ces interactions non linéaires sont souvent mieux adaptés pour modéliser des relations complexes dans les données, comme c'est le cas avec Random Forest.

Caractéristiques linéaires :

Les caractéristiques linéaires se réfèrent aux variables qui ont une relation linéaire avec la variable cible.
Par exemple, dans les données MMA, l'âge d'un combattant pourrait avoir une relation linéaire avec sa performance. Cela signifie que, en général, plus un combattant est jeune, meilleure est sa performance.
Les modèles comme la régression logistique fonctionnent mieux lorsque les relations entre les caractéristiques et la cible sont linéaires. Ils peuvent être moins performants lorsqu'il y a des relations non linéaires ou des interactions entre les caractéristiques.

Choix du Modèle :

Pour prédire les résultats des combats UFC, nous optons pour un modèle de classification, étant donné que notre objectif est de catégoriser les combats en fonction du vainqueur (classe). L'Arbre de Décision Aléatoire (Random Forest) a une capacité à gérer efficacement des ensembles de données complexes et à fournir des prédictions précises tout en minimisant le surapprentissage. Dans le contexte de la prédiction des résultats des combats UFC, la classification est plus appropriée que la régression car nous cherchons à attribuer une étiquette de classe discrète à chaque combat, telle que "Gagnant: Rouge" ou "Gagnant: Bleu". La régression, en revanche, est utilisée pour prédire des valeurs continues, ce qui ne correspond pas au problème de prédiction des résultats des combats UFC. La classification consiste à assigner des étiquettes de classe à des données en fonction de leurs caractéristiques.

Fonctionnement :

Dans un modèle de classification comme les Random Forest, chaque arbre de décision produit une prédiction de classe pour chaque combattant dans un combat donné. Dans le cas d'une prédiction binaire (gagnant ou perdant), chaque arbre attribue un point au combattant qu'il prédit comme gagnant et aucun point à l'autre combattant.

Ensuite, pour obtenir la prédiction finale, les points attribués par chaque arbre sont agrégés. Par exemple, si un combat est évalué par 100 arbres et que 70 arbres prédisent le combattant A comme gagnant et 30 arbres prédisent le combattant B comme gagnant, alors le modèle prédit que le combattant A sera le gagnant avec 70 points contre 30 pour le combattant B.

Cela permet de prendre en compte les opinions de multiples arbres de décision dans la prédiction finale, ce qui rend le modèle plus robuste et moins sensible aux variations aléatoires dans les données d'entraînement.

Justification du Choix :

L'Arbre de Décision Aléatoire est un modèle polyvalent qui s'adapte bien à une grande variété de problèmes de classification. Il fonctionne en construisant un grand nombre d'arbres de décision individuels, puis en combinant leurs prédictions pour obtenir une prédiction finale. Cette approche permet de capturer des interactions complexes entre les différentes caractéristiques des combats UFC, tout en réduisant le risque de surapprentissage par agrégation.

Description des Paramètres :

  • n_estimators : Le nombre d'arbres de décision dans la forêt aléatoire. Plus le nombre d'estimateurs est élevé, plus le modèle aura de stabilité et de précision, bien qu'il puisse nécessiter plus de temps de calcul.
  • criterion : Le critère utilisé pour mesurer la qualité de la division des nœuds de l'arbre. Pour la classification binaire des résultats UFC, nous utilisons généralement "gini" ou "entropy" pour évaluer la pureté des nœuds en fonction de la distribution des classes.
  • max_depth : La profondeur maximale de chaque arbre de décision. Limiter la profondeur peut aider à prévenir le surapprentissage en restreignant la complexité de l'arbre, mais peut également réduire sa capacité à capturer des relations plus complexes dans les données.
  • min_samples_split : Le nombre minimum d'échantillons requis pour diviser un nœud interne. Cela permet de contrôler la croissance de l'arbre en évitant les divisions qui ne seraient pas significatives en raison d'un faible nombre d'échantillons.
  • min_samples_leaf : Le nombre minimum d'échantillons requis pour former une feuille de l'arbre. Cela aide à contrôler la complexité de l'arbre en empêchant la formation de feuilles avec un faible nombre d'échantillons, ce qui peut améliorer la généralisation du modèle.
  • random_state : Une graine aléatoire utilisée pour initialiser la génération de nombres aléatoires. Cela assure la reproductibilité des résultats, permettant ainsi de comparer les performances du modèle de manière cohérente.

En utilisant ces paramètres et en ajustant les hyperparamètres de manière appropriée, notre modèle d'Arbre de Décision Aléatoire peut être entraîné pour fournir des prédictions précises des résultats des combats UFC, offrant ainsi une solution robuste pour la classification des données complexes dans ce domaine.

Tests concrets

  • Ajouter des résultats de tests

Améliorations

  • Remplacer les valeurs NaN de façon plus pertinente, en effet pour un combattant qui n'a pas de données de poid, plutôt que de lui accorder le poid médian de tout les combatants existants, il serait plus cohérent de lui attribuer le poid médian des combattants de la catégorie de poid où il a combattu par exemple, ou encore se fier à un combat où son pied est spécifié.