Skip to content

TeodoreAutuly/Football-Results-Prediction

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🎯 Prédiction des Résultats de Matchs de Football

Python C Machine Learning

📋 Table des matières

📖 À propos

Ce projet explore l'application de l'apprentissage automatique à la prédiction des issues de matchs de football. Développé dans le cadre d'un TIPE (Travaux d'Initiative Personnelle Encadrés) 2023/2024 sur le thème "Jeux & Sports", il implémente un algorithme de forêts aléatoires (Random Forest) pour prédire si une équipe à domicile gagnera, perdra ou fera match nul.

🎓 Équipe de développement

  • Julie Antoine
  • Valentin Malquy
  • Téodore Autuly

🔬 Contexte du projet

Problématique

Est-il possible de prédire l'issue d'un match de football en fonction des statistiques des matchs précédents ?

Cette question soulève plusieurs défis :

  • La complexité et l'imprévisibilité inhérentes au sport
  • La multitude de facteurs influençant le résultat d'un match
  • Le choix des variables pertinentes pour la prédiction
  • L'équilibre entre précision et généralisation du modèle

Objectifs

  1. Analyser les corrélations entre différentes statistiques de match et les résultats
  2. Implémenter un algorithme de forêts aléatoires from scratch
  3. Comparer les performances entre deux implémentations (Python et C)
  4. Évaluer la fiabilité du modèle sur des données réelles
  5. Simuler des stratégies de paris basées sur les prédictions

🧮 Méthodologie

Algorithme : Random Forest (Forêt Aléatoire)

L'algorithme de forêts aléatoires est une méthode d'ensemble qui combine plusieurs arbres de décision pour améliorer la précision et réduire le surapprentissage.

Principe de fonctionnement :

  1. Bootstrap Aggregating (Bagging) : Création de sous-échantillons aléatoires des données d'entraînement
  2. Construction d'arbres : Création d'arbres de décision sur chaque sous-échantillon
  3. Sélection aléatoire de features : À chaque nœud, sélection aléatoire d'un sous-ensemble de paramètres
  4. Agrégation : Vote majoritaire des arbres pour la prédiction finale

Variables utilisées

Variables d'entrée (features) :

  • FTHG : Buts marqués à domicile (Full Time Home Goals)
  • FTAG : Buts marqués à l'extérieur (Full Time Away Goals)
  • HTHG : Buts à domicile à la mi-temps (Half Time Home Goals)
  • HTAG : Buts à l'extérieur à la mi-temps (Half Time Away Goals)
  • HS : Tirs de l'équipe à domicile (Home Shots)
  • AS : Tirs de l'équipe à l'extérieur (Away Shots)
  • HST : Tirs cadrés à domicile (Home Shots on Target)
  • AST : Tirs cadrés à l'extérieur (Away Shots on Target)
  • HomeTeam : Équipe à domicile (encodée numériquement)
  • AwayTeam : Équipe à l'extérieur (encodée numériquement)

Variable de sortie (target) :

  • FTR : Résultat final (Full Time Result)
    • H (Home) → 1.0 : Victoire à domicile
    • D (Draw) → 0.0 : Match nul
    • A (Away) → 0.0 : Victoire à l'extérieur

Prétraitement des données

  1. Conversion des variables catégoriques : Transformation des résultats (H/D/A) en valeurs numériques
  2. Gestion des valeurs manquantes : Remplacement par la moyenne de la colonne
  3. Encodage des équipes : Conversion des noms d'équipes en valeurs numériques via un hash
  4. Calcul de moyennes historiques : Pour chaque match, calcul des statistiques moyennes des matchs précédents
  5. Mélange aléatoire : Randomisation des données pour éviter les biais

Hyperparamètres du modèle

  • Nombre d'arbres : 150
  • Nombre maximal de paramètres par arbre : 6
  • Profondeur maximale : 15
  • Nombre minimum de divisions : 3

Évaluation

  • Validation Out-of-Bag (OOB) : Estimation de l'erreur sur les données non utilisées dans le bootstrap
  • Matrice de confusion : Analyse détaillée des prédictions
  • Taux de précision : Pourcentage de prédictions correctes
  • Simulation de gains : Évaluation d'une stratégie de paris fictive

📁 Structure du projet

Football-Results-Prediction/
│
├── README.md                          # Documentation du projet
├── Sources.txt                        # Références et sources de données
│
├── datasets/                          # Données de matchs (2013-2023)
│   ├── 2013-2014.csv
│   ├── 2014-2015.csv
│   ├── 2015-2016.csv
│   ├── 2016-2017.csv
│   ├── 2017-2018.csv
│   ├── 2018-2019.csv
│   ├── 2019-2020.csv
│   ├── 2020-2021.csv
│   ├── 2021-2022.csv
│   └── 2022-2023.csv
│
└── code/                              # Implémentations du modèle
    ├── RandomForestClassifier_final.ipynb   # Implémentation Python principale
    ├── RandomForestClassifier .ipynb        # Version alternative
    ├── RandomForestClassifier  copy.ipynb   # Copie de travail
    ├── TIPE_C_commentaires_corriges.c       # Implémentation C commentée
    ├── tipeamelioration.c                   # Version améliorée en C
    ├── tipe C.c                             # Version de base en C
    ├── tipedebug.c                          # Version de débogage
    ├── testdedebug                          # Tests
    ├── SQLite (1).csv                       # Données SQLite
    └── SQLite (2).csv                       # Données SQLite additionnelles

🛠️ Technologies utilisées

Python

  • NumPy : Calculs numériques et manipulation de matrices
  • Pandas : Manipulation et analyse de données tabulaires
  • Matplotlib : Visualisation des résultats et graphiques
  • Seaborn : Visualisations statistiques avancées (heatmaps, etc.)
  • scikit-learn : Métriques d'évaluation (matrice de confusion)

C

  • Implémentation bas niveau pour optimisation des performances
  • Structures de données personnalisées (Noeud, AbrDecision, Foretalea)
  • Gestion manuelle de la mémoire

📊 Données

Source

Les données proviennent de Football-Data.co.uk, une plateforme réputée fournissant des statistiques historiques détaillées sur les matchs de football.

Caractéristiques

  • Période couverte : 2013-2023 (10 saisons)
  • Championnat : Données anglaises (Premier League)
  • Volume : ~380 matchs par saison
  • Variables : Plus de 60 colonnes incluant :
    • Résultats et scores
    • Statistiques de jeu (tirs, fautes, corners, etc.)
    • Cotes de paris de multiples bookmakers
    • Résultats à la mi-temps

Référence complémentaire

Projet GitHub inspirant : FootballPrediction par Amaurytiss

📈 Résultats

Performance du modèle

Le modèle obtient des performances variables selon les saisons et les hyperparamètres :

  • Estimation Out-of-Bag : Affichée lors de l'entraînement
  • Précision sur ensemble de test : Calculée et affichée en pourcentage
  • Matrice de confusion : Visualisation des types d'erreurs

Analyse de corrélation

Une heatmap de corrélation est générée pour identifier les relations entre :

  • Le résultat final (FTR)
  • Les buts marqués (FTHG, FTAG)
  • Les statistiques à la mi-temps
  • Les statistiques de tirs

Simulation de stratégie de paris

Un graphique illustre l'évolution des gains théoriques en pariant :

  • +10 unités sur une prédiction correcte
  • -10 unités sur une prédiction incorrecte

Cette simulation permet d'évaluer la viabilité économique d'une stratégie basée sur le modèle.

🚀 Installation et utilisation

Prérequis

Pour Python :

pip install numpy pandas matplotlib seaborn scikit-learn

Pour C :

  • Compilateur GCC ou équivalent
  • Bibliothèques standard C

Exécution

Version Python

  1. Ouvrir le notebook RandomForestClassifier_final.ipynb dans Jupyter Notebook/Lab
  2. Vérifier que le fichier CSV est dans le bon répertoire
  3. Exécuter les cellules séquentiellement

Version C

gcc -o prediction TIPE_C_commentaires_corriges.c -lm
./prediction

Configuration

Vous pouvez ajuster les hyperparamètres dans le code :

nmb_arbres = 150          # Nombre d'arbres dans la forêt
nb_max_parametres = 6     # Paramètres considérés par arbre
profondeur_max = 15       # Profondeur maximale des arbres
nmb_division_min = 3      # Minimum d'échantillons pour diviser un nœud

👥 Auteurs

Ce projet a été réalisé en équipe dans le cadre du TIPE 2023/2024 :

  • Julie Antoine - Développement et analyse
  • Valentin Malquy - Développement et analyse
  • Téodore Autuly - Développement et analyse

📚 Ressources

Sources de données

Références techniques

  • GitHub - FootballPrediction - Projet inspirant
  • Documentation scikit-learn - Random Forest Classifier
  • Articles académiques sur l'application du ML au sport

Concepts clés

  • Entropie : Mesure d'impureté pour la construction des arbres
  • Gain d'information : Critère de division des nœuds
  • Bootstrap : Technique de rééchantillonnage
  • Bagging : Méthode d'agrégation de modèles

Projet réalisé dans le cadre du TIPE 2023/2024 - Thème : Jeux & Sports

About

TIPE de 3ème année en filière MPI

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • Jupyter Notebook 94.7%
  • C 5.3%