Un projet de Machine Learning pour prédire la qualité des films IMDB en combinant web scraping et analyse prédictive.
Ce projet combine deux approches complémentaires :
- Web Scraping IMDB : Extraction automatisée des informations de films depuis IMDB (titre, acteurs, réalisateur, genres, note, durée)
- Prédiction ML : Modèle de classification Random Forest pour prédire si un film sera bien noté (≥7.0/10) en fonction de ses caractéristiques
- Scraping asynchrone avec Playwright pour récupérer les données des films les plus populaires
- Gestion robuste des erreurs et retry automatique
- Preprocessing et feature engineering des données
- Modèle de classification avec RandomForestClassifier
- Validation de stabilité sur plusieurs runs
- Pipeline CI/CD avec GitHub Actions
- Tests automatisés et couverture de code
IMDB-ML/
├── src/
│ ├── main.py # Point d'entrée principal
│ ├── scrapping/
│ │ ├── scraper.py # Scraper IMDB avec Playwright
│ │ └── __init__.py
│ └── preprocessing/
│ └── preprocessing.py # ML pipeline et prédictions
├── data/
│ ├── internal/ # Données scrapées brutes
│ │ └── imdb_movies.csv
│ └── processed/ # Données prétraitées pour ML
│ └── imdb_bdd.csv
├── tests/ # Tests unitaires
├── configs/
│ └── config.json # Fichiers de configuration
├── docs/
│ └── TESTING.md # Documentation des tests
├── .github/
│ └── workflows/
│ └── ci.yml # Pipeline CI/CD
├── requirements.txt # Dépendances Python
├── pyproject.toml # Configuration des outils (black, mypy, pytest)
├── Makefile # Commandes utilitaires
└── README.md
- Python 3.9 ou supérieur
- pip
# Cloner le repository
git clone https://github.com/votre-username/IMDB-ML.git
cd IMDB-ML
# Créer un environnement virtuel
python3 -m venv venv
source venv/bin/activate # Sur Windows: venv\Scripts\activate
# Installer les dépendances
pip install -r requirements.txt
# Installer Playwright et les navigateurs
playwright install chromium# Scraper 200 films (par défaut)
python src/main.py
# Scraper un nombre personnalisé de films
python src/main.py 50Le scraper récupère les films les plus populaires et extrait :
- Titre
- Note IMDB
- Durée
- Genres
- Réalisateur
- Top 3 acteurs
- URL
Les données sont sauvegardées dans data/internal/imdb_movies.csv.
python src/preprocessing/preprocessing.pyCe script :
- Charge les données depuis
data/processed/imdb_bdd.csv - Nettoie et prépare les features
- Entraîne un modèle RandomForest
- Teste la stabilité sur 5 runs avec différentes seeds
- Affiche les métriques (accuracy, F1-score)
- Fait une prédiction exemple
Exemple de sortie :
Essai 1 -> Accuracy: 78.45% | F1-Score (Bons films): 0.82
Essai 2 -> Accuracy: 79.12% | F1-Score (Bons films): 0.83
...
Accuracy moyenne : 78.78% (écart type: +/- 0.45%)
=> Le modèle est STABLE.
Probabilité d'être un bon film : 82.35%
Film Tim Burton/Johnny Depp (Fantasy/Adventure) : Bon film
make help # Affiche toutes les commandes disponibles
make install # Installe les dépendances de production
make install-dev # Installe les dépendances de développement
make format # Formate le code (black + isort)
make lint # Vérifie le code avec flake8
make type-check # Vérifie les types avec mypy
make security # Vérifie les vulnérabilités (bandit + safety)
make test # Lance les tests avec couverture
make test-fast # Lance les tests sans rapport de couverture
make check # Lance toutes les vérifications
make clean # Nettoie les fichiers temporairesLe projet utilise :
- Black : formatage automatique (line-length: 100)
- isort : tri des imports
- flake8 : linting et vérification du style
- mypy : vérification des types
- pytest : framework de tests
- bandit : analyse de sécurité
- safety : vérification des vulnérabilités des dépendances
Pour configurer les hooks de pre-commit :
pre-commit installLes hooks exécuteront automatiquement :
- Formatage avec black et isort
- Linting avec flake8
- Vérifications de sécurité
# Lancer tous les tests avec rapport de couverture
make test
# Lancer uniquement les tests unitaires
pytest tests/ -v -m unit
# Lancer uniquement les tests d'intégration
pytest tests/ -v -m integration
# Lancer les tests rapides (sans couverture)
make test-fastLe rapport de couverture HTML est généré dans htmlcov/index.html.
Le projet utilise GitHub Actions pour l'intégration continue :
- Tests multi-versions : Python 3.12, 3.13, 3.14
- Linting : flake8 et black
- Tests : pytest avec rapport de couverture
- Sécurité : safety et bandit
- Cache pip : pour des builds plus rapides
Le pipeline se déclenche automatiquement sur :
- Push vers
main - Pull requests vers
main
- Playwright : Scraping moderne et robuste avec support JavaScript
- BeautifulSoup4 : Parsing HTML (fallback)
- Requests : Requêtes HTTP
- scikit-learn : RandomForestClassifier, OrdinalEncoder
- pandas : Manipulation de données
- numpy : Calculs numériques
- pytest : Tests unitaires et intégration
- black : Formatage de code
- flake8 : Linting
- mypy : Type checking
- bandit : Analyse de sécurité
- safety : Vérification des dépendances
- Numériques : budget, durée
- Catégorielles : acteurs (top 3), réalisateur, genres (one-hot encoding)
Classification binaire :
- Classe 1 : Films bien notés (score IMDB ≥ 7.0)
- Classe 0 : Films moins bien notés (score IMDB < 7.0)
{
"n_estimators": 200,
"max_depth": 10,
"min_samples_leaf": 2,
"class_weight": "balanced"
}Le modèle utilise un seuil de probabilité de 0.40 (au lieu de 0.50 par défaut) pour favoriser le rappel des bons films.
- Accuracy moyenne : ~78-80%
- F1-Score (bons films) : ~0.82
- Stabilité : écart-type < 2% sur 5 runs
- Forker le projet
- Créer une branche feature (
git checkout -b feature/AmazingFeature) - Commiter les changements (
git commit -m 'Add some AmazingFeature') - Pousser vers la branche (
git push origin feature/AmazingFeature) - Ouvrir une Pull Request
Assurez-vous que :
- Le code est formaté avec
make format - Tous les tests passent avec
make test - Les vérifications de sécurité passent avec
make security - Le code est documenté
Ce projet est un projet éducatif. Respectez les conditions d'utilisation d'IMDB lors du scraping.
Ce projet est destiné à des fins éducatives. Le scraping intensif d'IMDB peut violer leurs conditions d'utilisation. Utilisez-le de manière responsable :
- Respectez les délais entre les requêtes (actuellement 2 secondes)
- Ne surchargez pas les serveurs d'IMDB
- Consultez les robots.txt et les conditions d'utilisation d'IMDB
Pour toute question ou suggestion, ouvrez une issue sur GitHub.