Découvrez une expérience cinématographique personnalisée avec Movie Matcher, notre moteur de recommandation de films intégré à Streamlit. Sélectionnez entre 1 et 5 films que vous avez appréciés, et laissez notre modèle de machine learning utiliser à la fois le filtrage collaboratif et le contenu pour vous suggérer des films similaires.
Explorez des recommandations adaptées à vos goûts, et obtenez des informations détaillées sur la disponibilité des films sur différentes plateformes avec abonnement.
Utilisez des filtres avancés tels que mots-clés, genres, acteurs, réalisateurs, année, et plateformes de streaming pour affiner vos choix et trouver votre prochaine pépite cinématographique.
Notre moteur de recommandation de films s'appuie sur deux approches : le filtrage par contenu et le filtrage collaboratif. Autrement dit, les recommandations sont effectuées à partir du calcul de similarité entre les films et entre les profils utilisateurs.
Nos données proviennent de deux sources principales :
-
L'API TMDB : pour les informations sur le synopsis, les genres, le casting, le réalisateur, les mots-clés, etc., avec un volume de données disponibles de 998 000 films ;
-
La base de données MovieLens.org : pour les notes des utilisateurs, avec un volume de données disponibles de 25 millions de notes utilisateurs.
Voici un schéma du fonctionnement de notre moteur de recommandation hybride :
Pour réaliser le filtrage par contenu, nous avons utilisé les outils de la librairie Scikit-Learn : matrice TF-idf et calcul de similarité cosinus.
Pour réaliser le filtrage collaboratif, nous avons utilisé la librairie Surprise et l'algorithme SVD.
Nous avons testé les différents algorithmes de la librairie Surprise et avons retenu celui ayant les meilleures performances en termes de précision et de temps de calcul.
La performance est mesurée avec les métriques MAE et RMSE qui calculent l'écart entre la prédiction et la valeur réelle.
Le tableau ci-dessous résume les scores des différents algorithmes testés :
Lecture :
- En rouge : les scores les moins bons et non adaptés à notre besoin.
- Une MAE de 0.60 indique un écart de 0.60 points entre la prédiction et la note réelle.
- L'écart permet de mettre en évidence les éventuels cas de sur-apprentissage (overfitting).
Pour une question de ressources et de temps, nous devions réduire la taille de notre base de données de films. Pour ce faire, nous avons utilisé la formule du score IMDB pour sélectionner les films à retenir.
Pour obtenir la recommandation finale, nous appliquons un calcul sur les résultats des deux approches de filtrage. Le calcul du score final est détaillé ci-dessous.
-
Formule du score IMDB (ou weighted IMDB ratings) :
Cette formule de score IMDB permet d'appliquer un score selon des critères. Cette formule a été développé
$\text{Score IMDB} = \frac{R \cdot v + C \cdot M}{v + m}$ Où :
-
$v$ est le nombre de votes pour le film -
$m$ est le nombre minimum de votes requis pour figurer dans le classement -
$R$ est la note moyenne du film -
$C$ est la moyenne des votes au global
-
-
Formule du score hybride Movie Matcher :
$Score_{film} = w_{CF} * S_{CF} + w_{CB} * (\frac{\sum_{i=1}^{n} S_{CB_i}}{n} + \alpha * n)$ Où :
-
$w_{CF}$ est le poids pour le modèle de filtrage collaboratif, -
$S_{CF}$ est la note prédite (si le film n'est pas présent dans le modèle de filtrage collaboratif, vous pouvez utiliser la moyenne des scores comme valeur par défaut), -
$w_{CB}$ est le poids pour le modèle content-based, -
$S_{CB_i}$ est le score de similarité content-based pour la (i)-ième occurrence du film, -
$n$ est le nombre d'occurrences du film dans les prédictions du modèle content-based, -
$\alpha$ est un paramètre de réglage.
-
Nous utilisons FastAPI pour exécuter notre modèle de machine learning et récupérer les prédictions. L'interface utilisateur est réalisée avec la librairie Streamlit. Enfin, notre application est Dockerisée et déployée avec Heroku.
Voici un schéma de l'architecture de notre application :
$ git clone https://github.com/thimyxuan/movie-recommender-app.git
Si vous souhaitez déployer l'application en local, vous pouvez choisir parmi une des étapes suivantes :
-
Déployer Streamlit + FastAPI
Il faut simplement lancer la commande
docker-compose up
Les sites seront accessibles aux liens :
-
Streamlit :
http://localhost:8501
-
FastAPI :
http://localhost:4000
-
-
Déployer Streamlit uniquement
Il faut lancer les 2 commandes suivantes :
-
Construire l'image :
docker build -t movie-matcher-streamlit
-
Construire le container :
docker run -it -v "$(pwd):/home/app" -p 8501:8501 movie-matcher-streamlit
Le streamlit sera accessible au lien :
Streamlit :
http://localhost:8501
-
-
Déployer FastAPI uniquement
README disponible dans le dossier suivant : /fastapi
Les scripts sont utilisés pour générer les fichiers nécessaire au fonctionnement du dashboard et de l'API. Ils sont disponibles au répertoire scripts/
-
scripts/script_tmdb_api.py
: connexion à l'API de TMDB, téléchargement des 20.000 films les plus populaires. Récupération de toutes les données importantes et création des fichiersfastapi/src/TMDB_content.csv
etfastapi/src/TMDB_providers.csv
-
scripts/script_imdb_rating.py
: téléchargement des fichiers MovieMatcher, application de la formule du score IMDB et du filtre sur les films, mise à jour du fichierfastapi/src/TMDB_content.csv
puis création du fichierfastapi/src/Movielens_ratings_updated.csv
pour le filtrage collaboratif. -
scripts/script_tmdb_content_based.py
: application du machine learning (matrice TF-IDF, similarité cosinus), puis création du fichierfastapi/src/TMDB_content_based.csv
*Crédits : Ce projet est un travail de groupe réalisé en collaboration avec Clément B. et Yann S. dans le cadre de la formation Full-Stack Data Scientist de l'école Jedha.