Système de recommandation de films
Système de recommandation de films
OUAHCHI FIRDAWS
OUAZZANI CHAHDI Nada
MAAROUFI Ilias
ACHBANI Ismail
TOURE Nagnan Abraham Karim
ABOUELAZ Youssef
2023-2024
TABLE DES MATIÈRES
I. Contextualisation....................................................................................................4
1. Systèmes de recommandation ...........................................................................4
1.1. Filtration collaborative ..............................................................................4
1.2. Filtration basée sur le contenu ...................................................................5
1.3. Système de recommandation hybride.........................................................5
2. Machine Learning (apprentissage automatique) et ses approches.........................6
2.1. Apprentissage supervisé.............................................................................6
2.1.1.Classification......................................................................................6
2.1.2. Régression..........................................................................................7
2.2. Apprentissage non supervisé......................................................................7
2.2.1. Clustering...........................................................................................7
2.2.2. Réduction de dimensionnalité..............................................................8
2.3. Apprentissage par renforcement.................................................................8
3. Relation entre les systèmes de recommandation et l'apprentissage automatique....9
4. Factorisation matricielle....................................................................................9
5. Enoncé du problème ........................................................................................10
V. Explication du Code.............................................................................................23
1. Les bibliothèques utilisées.................................................................................23
2. Division 80/20 (ALS) ..........................................................................................25
2.1. Gestion des données................................................................................25
2.2. Implémentation des métriques.................................................................25
2.3. Implémentation de l’algorithme de l’ALS...................................................26
2.4. Implémentation des outputs.....................................................................27
2.5. Résultats obtenus.....................................................................................27
I. CONTEXTUALISATION
Dans un monde où la quantité de contenu disponible explose chaque jour, les systèmes de
recommandation jouent un rôle crucial en aidant les utilisateurs à découvrir des produits, des
services ou des contenus qui correspondent à leurs intérêts et à leurs préférences. L'un des
types les plus populaires de systèmes de recommandation est celui des systèmes de
recommandation de films. Ces systèmes exploitent les avancées de l'intelligence artificielle, en
particulier du machine Learning, pour prédire les préférences des utilisateurs et leur suggérer
des films pertinents.
L’intelligence artificielle est l’ensemble des théories et de techniques mises en œuvre en vue
de réaliser des machines capables de simuler l’intelligence humaine.
1. Systèmes de recommandation
Les systèmes de recommandation sont conçus pour identifier et proposer des produits,
services ou informations adaptés aux préférences individuelles des utilisateurs. Leur
fonctionnement repose sur trois approches principales :
1.1. Filtration collaborative : Ce système se base sur les ressemblances entre les
comportements et les préférences des individus pour leur proposer des produits qui leur
correspondent. Il prend en entrée les préférences des utilisateurs, dans notre contexte cela peut
être les films qui ont été mis en favoris. Il va alors rechercher dans la base de données les
utilisateurs qui ont mis les mêmes films en favoris et ainsi trouver des profils similaires à celui
de l’utilisateur auquel on souhaite faire des recommandations. Ces recommandations seront les
films favoris des utilisateurs qui ont un profil similaire.
Avantages :
Démarrage facile.
Historique des interactions entre utilisateurs et items : plus cette historique est importante,
plus la recommandation sera pertinente, étant donné qu'elle nécessite uniquement cela.
Inconvénients :
Démarrage à froid pour les nouveaux utilisateurs ou les nouveaux items. C‘est-à-dire qu‘à
l'entrée d'un nouvel utilisateur dans le système, aucun score n'est attribué à aucun item, ce
qui rend les préférences de ce nouvel utilisateur inconnues.
1.2. Filtration basée sur le contenu : Cette approche recommande des articles en analysant les
caractéristiques des produits eux-mêmes et en les comparant aux préférences ou au profil de
l'utilisateur. Par exemple, si un utilisateur aime des films de science-fiction avec certains
acteurs, le système recommandera d'autres films de science-fiction mettant en vedette ces
acteurs. Les techniques utilisées peuvent inclure l'analyse de texte pour les descriptions de
produits, l'extraction de caractéristiques pour les images, etc.
Avantages :
Efficacité dans la recommandation des items peu populaires à un utilisateur ayant des goûts
spécifiques.
Capacité de calculer la préférence d'un utilisateur pour un nouvel item, résolvant ainsi en
partie le problème de démarrage à froid.
Inconvénients :
Incapacité de produire des recommandations pour un nouvel utilisateur.
Le modèle produit est spécifique à l'utilisateur, ce qui peut renforcer ses goûts existants et
limiter sa découverte de nouveaux items.
2.1.1. Classification (Group similar data points together) : Consiste à prédire la classe ou la
catégorie d'un exemple. Exemples: Classification des e-mails en spam ou en non spam,
reconnaissance faciale pour la classification des personnes, etc.
2.1.2. Régression (To Make continuous predictions) : Consiste à prédire une valeur continue
pour un exemple donné. Exemples: Prédiction du prix des maisons en fonction de leurs
caractéristiques, estimation du temps de livraison en fonction de la distance, etc.
Avantages :
Fournir des prédictions précises pour de nouvelles données.
Possibilité d’utilisation pour des tâches variées, telles que la classification, la régression et la
prédiction.
Inconvénients :
Dépendance forte de la qualité et de la quantité des données étiquetées disponibles.
Possibilité d’être sujet à des problèmes de surapprentissage si le modèle est trop complexe
ou si les données d'entraînement sont bruitées.
Avantages :
Peut révéler des structures complexes dans les données qui ne seraient pas apparentes
autrement.
N'exige pas de données étiquetées, ce qui le rend plus flexible pour l'analyse exploratoire
des données
Inconvénients :
Les résultats peuvent être difficiles à interpréter, en particulier pour des ensembles de
données complexes.
Peut être sensible à l'initialisation et aux paramètres de l'algorithme.
Avantages :
Peut s'adapter à des environnements changeants et incertains.
Peut prendre en compte les récompenses différées pour optimiser les décisions à long
terme.
Inconvénients :
Peut être difficile à entraîner et à configurer, nécessitant souvent des expériences itératives
et des mécanismes de régularisation.
Peut être sensible à la conception de la fonction de récompense, qui doit être
soigneusement définie pour refléter les objectifs souhaités.
Filtrage collaboratif :
1. Filtrage collaboratif utilisateur-utilisateur.
2. Filtrage collaboratif item-item.
3. Factorisation de matrices.
4. Factorisation matricielle
La factorisation matricielle est une technique utilisée dans les systèmes de recommandation,
en particulier dans le filtrage collaboratif. L'idée principale est de décomposer une grande
matrice (souvent une matrice utilisateur-item indiquant les préférences ou les évaluations des
utilisateurs) en deux matrices de dimension inférieure de telle manière que le produit de ces
deux matrices approche la matrice originale. Cela permet d'identifier des structures latentes
dans les données, souvent interprétées comme des facteurs ou des caractéristiques cachés
influençant les préférences des utilisateurs.
ALS (Alternating Least Squares) : Une approche itérative qui combine la mise à jour des
facteurs utilisateurs et des facteurs items afin de réduire l'erreur quadratique moyenne entre les
prévisions et les observations.
5. Enoncé du problème
Dans le cadre de notre projet, nous avons pour objectif de mettre au point un système de
recommandation de films en exploitant la méthode du filtrage collaboratif basé sur la
factorisation matricielle, en utilisant le dataset MovieLens.
L'enjeu est double : d'une part, améliorer l'expérience des utilisateurs en leur proposant des
films qui correspondent véritablement à leurs goûts et préférences, et d'autre part, relever les
défis techniques associés à la gestion et l'analyse de grandes quantités de données, la mise en
œuvre de méthodes de factorisation matricielle avancées et l'évaluation rigoureuse de la
performance des modèles développés.
En complément de ces objectifs, le projet prévoit la création d'une interface web conviviale
permettant aux utilisateurs de visualiser les recommandations générées par le système,
facilitant ainsi leur accès à un contenu personnalisé et améliorant leur engagement.
Les entrées de P et Q sont ajustées de manière à minimiser l'erreur entre R et PQT, souvent
mesurée par l'erreur quadratique moyenne (RMSE) sur l'ensemble des évaluations connues. La
fonction de coût L(P,Q) peut être exprimée comme suit :
où κ est l'ensemble des indices ( i , j ) pour lesquels l'évaluation rij est connue, pi est la i-ème
ligne de P, qjest la j-ème colonne de Q, et λ est un terme de régularisation qui aide à éviter le
sur-ajustement en pénalisant les valeurs trop grandes dans P et Q. Pour minimiser la fonction
de coût L(P,Q), les algorithmes ALS, SVD et NMF sont utilisés.
où ri est la ligne i de R.
4. Répéter : Alterner entre les étapes 2 et 3 jusqu'à convergence, c'est-à-dire jusqu'à ce que la
réduction de la fonction de coût L(P,Q) entre deux itérations successives soit inférieure à un
seuil prédéfini.
La fonction als_factorization
1. Initialise aléatoirement les facteurs de la matrice utilisateurs P et la matrice items Q avec
des valeurs entre 0 et 3. P a une dimension de num_factors × num_users, tandis que Q a
une dimension de num_factors × num_items.
2. Initialise la première ligne de Q avec les moyennes des notations: La première ligne de Q
est initialisée avec les moyennes des notations pour chaque item. Cela est fait en calculant
la moyenne des notations non nulles pour chaque item dans la matrice R et en l'assignant à
la première ligne de Q.
3. Identifie la matrice identité pour la régularisation: Une matrice identité de taille
num_factors × num_factors est créée pour la régularisation. Cette matrice sera utilisée
plus tard dans le processus de régularisation.
1. On extrait les indices des items notés par l'utilisateur i à partir du vecteur indicateur Ii.
2. On extrait les caractéristiques latentes des items notés par l'utilisateur i à partir de la
matrice Q.
3. On extrait les notations de l'utilisateur i pour les items notés à partir de la matrice R.
4. Résolution du système linéaire : On résout un système linéaire pour obtenir les
caractéristiques latentes de l'utilisateur i. Cela implique la construction d'une matrice Ai et
d'un vecteur Vi, puis l'utilisation de la fonction de résolution de système linéaire pour
trouver les facteurs utilisateur P.
Cette partie du code parcourt tous les items pour calculer le nombre d'utilisateurs ayant noté
chaque item. Si aucun utilisateur n'a noté aucun item particulier, le nombre est ajusté à 1 pour
éviter une division par zéro lors des mises à jour des facteurs item.
Cette partie du code met à jour les facteurs item en résolvant un système linéaire basé sur
les caractéristiques latentes des utilisateurs qui ont noté chaque item et leurs notations
respectives.
Tout comme l’ALS, la SVD vise à décomposer une matrice R (les évaluations des utilisateurs
sur des films) en composantes plus simples, facilitant ainsi la découverte de structures latentes
dans les données. Pour la SVD, la décomposition s'écrit :
Ce code utilise la bibliothèque existante Surprise pour construire et entraîner un modèle SVD
pour la recommandation de films.
On commence par instancier un objet de modèle SVD en utilisant la classe SVD fournie par la
bibliothèque Surprise. Cette classe prend plusieurs paramètres :
n_factors : Le nombre de facteurs latents à utiliser dans la décomposition. Cela détermine
la dimensionnalité des espaces de facteurs utilisateur et item.
n_epochs : Le nombre d'epochs (itérations) à utiliser lors de l'apprentissage du modèle. Plus
le nombre d'epochs est élevé, plus le modèle aura la possibilité d'apprendre à partir des
données.
reg_all : Le terme de régularisation à appliquer à tous les paramètres du modèle. Cela
permet de contrôler le sur-ajustement en ajoutant une pénalité pour des valeurs de
paramètres trop grandes.
Ensuite, on entraîne le modèle en appelant la méthode fit() sur l'objet de modèle SVD. On lui
fournit les données d'entraînement sous forme d'un ensemble de données de formation
construit à partir des données d'entraînement initiales à l'aide de la méthode
build_full_trainset() de l'objet train_data. Cette méthode crée un ensemble de données
d'entraînement complet à partir des données fournies, ce qui est nécessaire pour que le modèle
puisse être entraîné correctement.
Contrairement à SVD et ALS, NMF impose une contrainte de non-négativité sur les matrices
qu'elle décompose, ce qui rend l'interprétation des composants beaucoup plus intuitive,
notamment dans des contextes où les données ne peuvent pas être négatives (comme des notes,
des fréquences, etc.).
Dans ce code, nous avons utilisé la classe NMF de la bibliothèque scikit-learn pour effectuer la
factorisation de la matrice. Nous initialisons le modèle avec le nombre de facteurs souhaités
(n_components) et le nombre maximal d'itérations (max_iter). Ensuite, nous adaptons le
modèle aux données de notation (R) à l'aide de la méthode fit_transform(), qui renvoie les
matrices W et H correspondant aux facteurs utilisateur et item respectivement.
L'Analyse Exploratoire des Données (EDA) permet aux analystes de comprendre les données,
de formuler des hypothèses et de déterminer quelles stratégies de modélisation ou de calcul
utiliser. C’est une étape cruciale avant la modélisation dans tout projet de science des données,
où un certain nombre de techniques sont utilisées pour mieux comprendre l'ensemble de
données utilisé, ceci est accompli en faisant :
Analyse Univariable non-graphique : Cette forme d'analyse est la plus simple, se concentrant
sur une seule variable sans tenir compte des causes ou des relations avec d'autres variables. Son
but principal est de décrire les données pour identifier des tendances ou des modèles internes.
Par exemple, calculer la moyenne, la médiane, le mode, la variance, et l'écart type.
Analyse Univariable graphique : Les méthodes non-graphiques ne fournissent pas une image
complète des données, donc les méthodes graphiques sont nécessaires pour une meilleure
visualisation.
Diagrammes en tige-et-feuille : Ils montrent toutes les valeurs des données et la forme de la
distribution.
Histogrammes : Un type de graphique à barres où chaque barre représente la fréquence
(nombre) ou proportion (nombre/total) de cas pour une plage de valeurs.
Boîtes à moustaches (Box plots) : Elles représentent graphiquement un résumé en cinq
nombres : minimum, premier quartile, médiane, troisième quartile et maximum.
Analyse Multivariée non-graphique : Lorsque les données proviennent de plus d'une variable,
on parle de données multivariées. Ces techniques d'EDA montrent les relations entre deux ou
plusieurs variables à travers des tableaux croisés ou des statistiques.
Analyse Multivariée graphique : Les données multivariées utilisent des graphiques pour
afficher les relations entre deux ou plus ensembles de données.
Graphiques à barres groupées : Chaque groupe représente un niveau d'une des variables, et
chaque barre au sein d'un groupe représente les niveaux de l'autre variable.
Graphiques multivariés : Représentation graphique des relations entre plusieurs facteurs et
une réponse.
Graphiques à bulles (Bubble charts) : Une visualisation qui affiche plusieurs cercles (bulles)
dans un tracé bidimensionnel.
Cartes de chaleur (Heat maps) : Représentation graphique des données où les valeurs sont
représentées par des couleurs.
3. Visualisation du DataSet
Utilisateurs
Films
NB : Un fichier [Link] regroupant tous les codes de cette partie est déposé en complément avec le rapport.
Afin d’évaluer les performances d'un modèle d'apprentissage automatique, on divise la base de
données en ensembles d'entraînement et de test, et cela s’avère important pour plusieurs
raisons :
Évaluation des performances : La division des données permet de tester le modèle sur des
données qu'il n'a pas vues pendant l'entraînement, ce qui donne une estimation plus précise
de sa capacité à généraliser sur de nouvelles données.
Prévention du sur-ajustement : En réservant une partie des données pour le test, nous
nous assurons que le modèle n'apprend pas simplement par cœur les données
d'entraînement, mais qu'il est capable de généraliser à de nouvelles données.
Division 80/20 : Dans cette approche, 80% des données sont utilisées pour l'entraînement et
20% pour le test.
Division 75/25 : Similaire à la division 80/20, mais avec une répartition légèrement
différente où 75% des données sont utilisées pour l'entraînement et 25% pour le test.
Nested Cross-Validation : l'ensemble de données est divisé en k folds, puis pour chaque
fold, un processus de validation croisée est appliqué à nouveau pour diviser ce fold en deux
parties distinctes : une pour l'entraînement et une pour le test.
K-Fold Cross-Validation :
Permet une meilleure utilisation des données en effectuant K itérations où chaque
échantillon est utilisé une fois comme ensemble de test.
Fournit une estimation plus robuste des performances du modèle.
Leave-One-Out Cross-Validation (LOOCV) :
Utilise toutes les données disponibles pour l'entraînement à l'exception d'une seule
observation, ce qui peut conduire à une meilleure estimation des performances du modèle.
Nested Cross-Validation :
Permet une évaluation plus fiable de la performance du modèle.
Réduit le risque de sur-ajustement.
K-Fold Cross-Validation :
Peut être plus coûteux en termes de temps de calcul, surtout avec de grands ensembles de
données et des valeurs élevées de K.
Leave-One-Out Cross-Validation (LOOCV) :
Peut être coûteux en termes de temps de calcul, en particulier avec de grandes quantités de
données.
Nested Cross-Validation :
Augmente considérablement le temps de calcul en raison de la répétition de la validation
croisée à chaque Fold.
Chacune de ces méthodes a ses avantages et ses inconvénients, le choix de la méthode dépend
souvent de la taille de l'ensemble de données, de sa distribution, et des exigences spécifiques du
problème.
L'erreur quadratique moyenne de la racine (RMSE) calcule la valeur moyenne de toutes les
différences au carré entre les notes réelles et prédites, puis procède au calcul de la racine
carrée sur le résultat. Ainsi, de grandes erreurs peuvent avoir un impact significatif sur la note
RMSE, ce qui rend la métrique RMSE plus précieuse lorsque des erreurs significatives sont
indésirables. Les notes réelles et les notes prédites ont une erreur quadratique moyenne de :
2.2. Precision
Lorsqu'on cherche à prédire si un utilisateur est intéressé ou non par un item, quatre
possibilités sont offertes par la matrice de confusion.
2.3. Recall
Si la précision est faible, l'utilisateur sera insatisfait, car il devra perdre du temps à lire des
items qui ne l'intéressent pas.
Si le rappel est faible, l'utilisateur n'aura pas accès à un item qu'il souhaiterait avoir.
2.4. F1-Score
V. EXPLICATION DU CODE
1. Les bibliothèques utilisées
Bibliothèque Pandas
La bibliothèque NumPy offre des structures de données efficaces pour les calculs numériques
et algébriques. Dans notre code, NumPy est utilisé pour plusieurs aspects clés.
D'abord, nous l’utilisons pour créer des matrices [Link]() et les manipuler, comme les
matrices de notation (R et T) et les matrices d'index (I et I2). Ces matrices sont des tableaux
NumPy qui représentent respectivement les évaluations des utilisateurs sur les articles et les
indices indiquant la présence de ces évaluations.
Ensuite, dans le processus de factorisation de matrices, nous utilisons les fonctionnalités de
NumPy pour des calculs algébriques, tels que la résolution de systèmes d'équations linéaires à
l'aide de [Link]() qui met à jour les matrices de facteurs latents (P et Q) lors de
l'entraînement du modèle.
De plus, NumPy est utilisé pour effectuer des calculs matriciels qui sont au cœur de
l'algorithme de factorisation de matrices. [Link](): produit matriciel, [Link](): racine carrée,
[Link](): somme éléments, [Link](): crée tableau , [Link](): moyenne éléments,
[Link](): nombres aléatoires, [Link](): matrice identité.
Bibliothèque scikit-learn (sklearn.model_selection)
Bibliothèque [Link]
[Link] est une bibliothèque de visualisation en Python utilisée pour créer des
graphiques et des visualisations de données.
Nous utilisons la fonction [Link]() de [Link] pour tracer les courbes d'erreur.
Dans ce contexte, nous traçons à la fois l'erreur RMSE sur l'ensemble d'entraînement et
l'ensemble de test par rapport au nombre d'époques. Ces courbes nous permettent de visualiser
la performance de notre modèle pendant l'entraînement et de détecter tout signe de
surapprentissage (overfitting) ou de sous-apprentissage (underfitting).
En utilisant d'autres fonctions de [Link] telles que [Link](), [Link](),
[Link]() et [Link](), nous ajoutons des titres et des légendes à notre graphique pour le
rendre plus informatif et compréhensible.
Bibliothèque surprise
La bibliothèque Surprise est spécialisée dans les systèmes de recommandation. Nous utilisons
ses classes Dataset et Reader pour charger et préparer les données de recommandation.
Dataset convertit les données de sources variées en un format compatible avec les algorithmes
de Surprise, tandis que Reader spécifie les bornes de notation (1 à 5, par exemple).
La fonction cross_validate permet une validation croisée à k-fold, évaluant les modèles sur
différentes métriques comme le RMSE. L'algorithme SVD, accessible via la classe SVD, est
central pour nos modèles de recommandation, permettant de configurer des paramètres tels
que le nombre de facteurs latents. Ces importations facilitent le chargement des données, la
validation croisée, et l'entraînement des modèles, exploitant les fonctions spécifiques à la
recommandation de Surprise.
Bibliothèque flask
Flask est un framework Python pour développer des applications web rapidement. Il gère la
création de l'application, la présentation de pages HTML, l'envoi de fichiers et d'autres
interactions HTTP. Nous définissons des routes pour gérer l'authentification, le
téléchargement/suppression de fichiers et la génération de recommandations.
La fonction login() authentifie les utilisateurs, et une fois connectés, Flask utilise leur ID pour
proposer des recommandations personnalisées via la fonction
matrix_factorization_recommendations, qui applique une factorisation de matrices aux
données utilisateurs-articles. Les recommandations générées sont affichées sur le web grâce à
render_template, offrant ainsi une expérience utilisateur sur mesure. Flask facilite donc
l'intégration du modèle de recommandation avec l'interface utilisateur, enrichissant
l'expérience par des suggestions ciblées.
Bibliothèque Pickle
La bibliothèque pickle est utilisée pour sauvegarder et charger les matrices P et Q, générées
aléatoirement, dans un fichier "NMF_matrices.pkl" via `[Link]()` et `[Link]()`,
respectivement. Cette technique de sérialisation permet de stocker efficacement ces objets
Python, évitant ainsi de les recalculer, ce qui est avantageux dans les scénarios où la génération
des données est coûteuse en temps ou en ressources.
Dans cette section, nous avons commencé par la lecture des données à partir d'un fichier et
les avons transformées en un format utilisable pour l'entraînement et les tests. Les données ont
été lues à l'aide de la bibliothèque Pandas et stockées dans un DataFrame. Ensuite, nous avons
divisé ces données en ensembles d'entraînement et de test à l'aide de la fonction
train_test_split de la bibliothèque sklearn.model_selection (80% pour l'entraînement et 20%
pour le test).
Pour préparer les données pour l'algorithme de factorisation de matrices, nous avons rempli
notre matrice utilisateur-film avec des 0 dans les parties où les données sur les évaluations des
films étaient manquantes. Cette étape est cruciale car elle permet de garantir que notre modèle
puisse traiter efficacement les données incomplètes et fournir des prédictions appropriées pour
les évaluations manquantes. Enfin, nous avons converti ces ensembles en matrices pour les
utiliser dans l'algorithme de factorisation de matrices.
2.2. Implémentation des métriques
Nous avons défini les métriques d'évaluation pour évaluer les performances de notre modèle
de recommandation. Ces métriques comprennent la racine carrée de l'erreur quadratique
moyenne (RMSE), la précision, le rappel et le score F1.
Vous trouverez ci-dessous une représentation de nos métriques pour la phase d'entraînement
ainsi que pour la phase de test en fonction du nombre d'époques.
Le temps d'exécution du code est de 8 secondes .
Ci-dessus, vous trouverez la comparaison entre la moyenne de chaque métrique dans le même
histogramme.
Et finalement, voici les prédictions de notation pour un utilisateur, basées uniquement sur ses 5
meilleurs films.
Voici les résultats des métriques pour chaque epoch ainsi que leur moyenne pour toutes les
époques.
Le temps d'exécution du code est de 29 secondes.
Ci-dessus, vous trouverez la comparaison entre la moyenne de chaque métrique dans le même
histogramme.
Figure 3: Histogramme de l’erreur en fonction des différentes métriques de la méthode K-Cross 1 (ALS)
Finalement, voici les prédictions de notation pour l'utilisateur 17, basées uniquement sur ses 15
meilleurs films.
Dans cette section, nous gérons les données nécessaires à notre modèle de recommandation
collaborative. D'abord, nous utilisons une fonction load_data(filepath) pour charger les
données à partir d'un fichier CSV spécifié par filepath. Ensuite, nous transformons les données
en une matrice d'utilité, où les utilisateurs sont représentés par les lignes et les articles par
les colonnes. Cette matrice est essentielle pour entraîner notre modèle de recommandation.
Dans cette partie, nous définissons les métriques de performance que nous utiliserons pour
évaluer la qualité des prédictions de notre modèle .
Dans cette dernière partie, nous affichons les résultats obtenus après l'exécution de
l'algorithme. Voici donc les résultats des différentes métriques pour chaque Fold ainsi que leur
moyenne
Avec un temps d'exécution de 24 secondes pour ce code.
Voici une comparaison entre les ratings réelles et les predicted ratings pour l’utilisateur 11.
Cette section prend en considération le code pour afficher les résultats obtenus, tels que
les scores RMSE moyens, la précision moyenne, le rappel moyen et le score F1 moyen sur
toutes les Folds de la validation croisée.
Dans cette dernière partie, nous affichons les résultats obtenus après l'exécution de
l'algorithme. Voici donc les résultats des différentes métriques pour chaque Fold ainsi que leur
moyenne
Avec un temps d'exécution de 4 secondes pour ce code.
6. NMF (Bonus)
6.1. Implémentation de l’algorithme de l’NMF
Cette première partie du code définit une fonction nommée compute_metrics qui calcule la
précision, le rappel et le score F1 à partir des données de notation des films, des matrices P et
Q issues de la factorisation de matrice, ainsi qu'un seuil optionnel.
Ces étapes préparent les données et sauvegardent les matrices P et Q pour une utilisation
ultérieure dans l'entraînement du modèle NMF (Non-negative Matrix Factorization).
La méthode [Link]() est utilisée pour sauvegarder chaque matrice, avec
pickle.HIGHEST_PROTOCOL spécifié comme protocole de sérialisation pour garantir une
compatibilité maximale.
Cette partie du code concerne l'entraînement du modèle NMF et la collecte des erreurs et
métriques pour chaque époque. On commence par Initialiser les listes d'erreurs et de
métriques, on ajoute une boucle d'entraînement sur les époques et une sur les utilisateurs.
Ensuite, on calcule l'erreur et on met à jour les matrices P et Q.
Nous constatons que les résultats de l'entraînement du modèle semblent montrer une
amélioration progressive des performances au fil des époques.
Pour un temps d'exécution de 31 secondes pour ce code.
Précision (Precision) :
On observe une augmentation générale de la précision au fil des époques, avec une moyenne
de précision sur toutes les époques de 0.7939. Cela indique que le modèle devient plus sélectif
dans ses recommandations et présente moins de faux positifs.
Rappel (Recall) :
Bien que le rappel augmente également au fil des époques, il semble augmenter à un rythme
plus lent que la précision, suggérant ainsi que le modèle pourrait manquer certaines
recommandations pertinentes.
Score F1 (F1-Score) :
Une augmentation du score F1 indique généralement une amélioration globale de la
performance du modèle, avec une moyenne du score F1 sur toutes les époques de 0.6716 .
En comparant les résultats entre une division de données de 80/20 et 75/25 pour l'entraînement
et les tests, plusieurs observations peuvent être faites.
D'abord, en passant d'une division de 80/20 à 75/25, nous observons une légère diminution du
RMSE (Root Mean Squared Error) de 0,75 à 0,74. Cela suggère que le modèle a légèrement
amélioré sa capacité à prédire les notes des utilisateurs sur l'ensemble de test lorsque plus de
données sont utilisées pour l'entraînement.
Augmenter le nombre de Folds dans la validation croisée peut conduire à une meilleure
estimation des paramètres du modèle, ce qui est avantageux lorsque les données
d'entraînement sont limitées. Par exemple, pour la méthode SVD, en augmentant le nombre de
Folds de 5 à 10, la précision est devenue 0,73. Cependant, cela entraîne généralement une
augmentation du temps d'exécution, comme observé avec des durées de 15 secondes pour 7
Folds et de 21 secondes pour 10 Folds. Chaque itération de la validation croisée nécessite
davantage de temps, car le modèle est entraîné et évalué sur un plus grand nombre de sous-
ensembles de données.
En analysant les performances des différentes méthodes sur notre base de données, plusieurs
observations émergent. La méthode ALS avec la validation croisée K-Cross 2 présente la
meilleure précision, atteignant 0.73, ce qui en fait un choix attrayant pour une précision
élevée. NMF montre également des performances prometteuses avec une progression des
métriques au fil des époques et un temps d'exécution relativement court de 31 secondes.
Cependant, la méthode ALS avec K-Cross 1 affiche une précision encore plus élevée, bien que
cela soit accompagné d'un temps d'exécution plus long avec l'augmentation du nombre de
Folds. La division 80/20 avec ALS montre une légère amélioration du RMSE, mais une
diminution de la précision et du rappel. Enfin, la méthode SVD avec K-Cross 2 présente
également une précision de 0.73, mais avec un temps d'exécution de 21 secondes pour 10
Folds.
Ainsi, le choix de la méthode dépendrait des exigences spécifiques du projet, avec ALS K-Cross
2 étant privilégié pour une précision maximale, tandis que NMF peut être préférable si un
temps d'exécution plus court est nécessaire tout en maintenant des performances raisonnables.
En conclusion, chaque méthode présente des avantages et des inconvénients, mais il semble
que la méthode ALS avec la validation croisée (K-Cross 2) soit la plus appropriée pour notre
base de données , elle offre ainsi les meilleures performances en termes de précision, bien
que cela puisse varier en fonction des critères de division spécifiques utilisés.
Pour comparer les résultats obtenus avec les modèles ALS, SVD et NMF, nous examinons
plusieurs métriques, notamment le RMSE, la précision, le rappel et le score F1, ainsi que le
temps d'exécution de chaque modèle.
Pour le modèle ALS, nous obtenons un RMSE moyen de 0.9357, une précision moyenne de
0.7237, un rappel moyen de 0.4130 et un score F1 moyen de 0.5259, avec un temps d'exécution
de 24 secondes. En comparaison, le modèle SVD affiche un RMSE moyen de 0.9452, une
précision moyenne de 0.7171, un rappel moyen de 0.9462 et un score F1 moyen de 0.8158, avec
un temps d'exécution de 4 secondes. Enfin, le modèle NMF présente une moyenne d'erreur
d'entraînement sur toutes les époques de 0.8492, une moyenne de précision de 0.7957, une
moyenne de rappel de 0.5915 et une moyenne de score F1 de 0.6719, avec un temps d'exécution
de 31 secondes.
En analysant ces résultats, il est clair que le modèle ALS se distingue comme le meilleur choix
en termes de performances et de temps d'exécution. En effet, il affiche le RMSE le plus bas et
des scores de précision et de F1 compétitifs, tout en maintenant un temps d'exécution
relativement court par rapport au modèle NMF. Ainsi, pour notre application, le modèle ALS
semble être la meilleure option, offrant un équilibre optimal entre précision et efficacité en
temps réel.
2. Description de l'Application
Centrale Flix est une application web composée de deux pages principales :
Page d'identification : Cette page permet aux utilisateurs de s'identifier en fournissant
leur identifiant et leur mot de passe. Une fois authentifiés, les utilisateurs peuvent
accéder à la page de recommandations des films.
Page principale : Sur cette page, les utilisateurs peuvent découvrir une sélection de
films recommandés spécialement pour eux, basée sur divers critères de
personnalisation. Voici les fonctionnalités disponibles sur cette page :
Affichage des films recommandés : La liste des films recommandés est présentée dans un
tableau clair et organisé.
Exploration des films : Les utilisateurs peuvent explorer la liste des films recommandés
en faisant défiler le tableau. Chaque film est identifié par son numéro et son titre,
permettant aux utilisateurs de rapidement repérer les films qui les intéressent.
Consultation des détails : Pour chaque film recommandé, les utilisateurs peuvent
consulter des informations détaillées telles que l'identifiant du film et son estimation des
notes.
Interactions utilisateur : En plus de découvrir les films recommandés, les utilisateurs
peuvent interagir avec un Chatbot intégré, entraîné par IBM Watson Assistant. Ce Chatbot
peut répondre à diverses questions courantes sur les films et sur l'application Centrale
Flix.
NB : Dans notre cas simplifié, pour tester le code source de Centrale Flix (le bonus), entrez un
identifiant entre 1 et 10 et le mot de passe : "test".
3. Fonctionnement de l'Application
Organisation du dossier
Le dossier de l'application Centrale Flix se compose de trois
principaux éléments organisés de manière structurée. Le dossier
principal comprend deux sous-dossiers distincts, à savoir "Static"
et "Templates". Le dossier "Static" héberge les fichiers CSS,
essentiels à la mise en forme et au style des pages web de
l'application, tandis que le dossier "Templates" contient les
fichiers HTML définissant la structure et le contenu des pages
d'identification ("[Link]") et de recommandations de films
("[Link]"). En outre, le fichier principal de
l'application, "[Link]", est situé dans le répertoire principal. Il
contient le code essentiel pour gérer les interactions avec
l'application, y compris l'authentification des utilisateurs, la
récupération des recommandations de films et la gestion des
déconnexions. Cette organisation claire et structurée facilite la
gestion et la maintenance de l'application Centrale Flix, en
garantissant une séparation efficace entre la logique de
l'application, la présentation visuelle et les fichiers statiques.
Code Flask
Le code Flask est organisé de manière à gérer les routes et les fonctions de
l'application. La fonction login() gère l'authentification des utilisateurs à partir
de la page d'identification. Elle vérifie les identifiants saisis par l'utilisateur et
redirige vers la page de recommandations si les informations sont correctes.
Sinon, elle affiche un message d'erreur.
Lorsqu'un utilisateur accède à l'application, il est dirigé vers la page d'identification où il doit
saisir son identifiant et son mot de passe. Ces informations sont vérifiées côté serveur pour
garantir l'authenticité de l'utilisateur.
La base de données simplifiée utilisée dans notre application Centrale Flix consiste en un
ensemble de recommandations de films pour plusieurs utilisateurs, stockées sous forme de
dictionnaires Python. Chaque utilisateur est identifié par un numéro unique. Pour chaque
utilisateur, nous avons des données sur les films qui lui sont recommandés. Chaque ensemble
de recommandations comprend les identifiants des films, les titres des films correspondants et
les évaluations estimées de ces films pour cet utilisateur. Les données sont extraites du code
Python de recommandation de films basé sur la factorisation de matrices, en utilisant la
méthode de K-Cross 2 (ALS). Voici un extrait de ces données :
Bien que cette représentation des données soit efficace pour tester et démontrer
le fonctionnement de l'application, dans un scénario réel, nous aurions utilisé
une base de données SQL pour stocker ces informations de manière persistante
et organisée. Cela aurait permis une gestion plus flexible des données, une
évolutivité accrue et une meilleure intégration avec d'autres fonctionnalités de
l'application.
De plus, pour enrichir l'expérience utilisateur, nous envisageons d'intégrer une fonctionnalité
de sign in plus interactive. Plutôt que de se limiter à une simple authentification, les utilisateurs
pourraient être invités à spécifier leurs préférences cinématographiques initiales lors de leur
inscription. Pour ce faire, nous pourrions mettre en œuvre des techniques de machine learning
telles que la méthode k-plus proches voisins (KNN) pour recommander des films basés sur les
goûts et les intérêts similaires des utilisateurs. Cette approche permettrait de personnaliser
davantage les recommandations et d'offrir une expérience utilisateur plus immersive et
engageante.
Dans la pratique, l'algorithme ALS s'est avéré efficace pour traiter de vastes matrices
d'interactions utilisateur-élément, bien qu'il puisse rencontrer des défis avec des matrices très
creuses. En revanche, l'algorithme de factorisation de matrices non négatives (NMF) offre une
flexibilité appréciable pour gérer des données binaires et des matrices creuses, en plus de sa
capacité à traiter des données non négatives.
Concernant les performances, notre approche montre que l'ALS est généralement plus rapide
que le NMF ou le SVD pour les matrices de taille moyenne à grande, bien que le NMF puisse
surpasser l'ALS pour les matrices binaires et très creuses. Le choix de l'algorithme et de la
méthode de validation appropriés dépend donc des caractéristiques spécifiques des données et
des objectifs du système de recommandation.
En conclusion, cette étude met en lumière l'importance de choisir des algorithmes adaptés au
contexte et aux caractéristiques des données pour obtenir des systèmes de recommandation
performants. Elle offre des insights précieux pour le développement et l'optimisation des
systèmes de recommandation dans divers domaines d'application.
2. Futures perspectives
À l'heure actuelle, la factorisation de matrice reste un outil largement utilisé et efficace pour
la recommandation de contenu en ligne. Cependant, les services de renom tels que Netflix ou
TikTok vont bien au-delà de cette approche, en adoptant des algorithmes bien plus sophistiqués
et complexes. Ils combinent souvent plusieurs techniques d'intelligence artificielle pour fournir
des recommandations personnalisées à chaque utilisateur.
Par exemple, Netflix exploite une gamme d'algorithmes reposant sur divers aspects tels que le
contenu visionné, les préférences des utilisateurs et les contextes de visionnage. Parmi ces
algorithmes, l'algorithme SVD (Décomposition en Valeurs Singulières) est largement utilisé, en
plus d'autres techniques telles que les réseaux de neurones, pour améliorer la précision des
recommandations.
[1] [Link]
sequence=1&isAllowed=y#:~:text=Les%20syst%C3%A8mes%20de%20recommandations%20son
t,qui%20r%C3%A9pondent%20%C3%A0%20leurs%20exigences%20.
[2] [Link]
[3] [Link]
[4] [Link]
[5] [Link]
[6] [Link]
[7] Paolo Cremonesi, Roberto Turrin, and Fabio Airoldi, "Hybrid algorithms for recommending
new items," in Proceedings of the 2nd International Workshop on Information Heterogeneity
and Fusion in Recommender Systems, New York, 2011, pp. 33-40.
[8] G Takács, I Pilászy, B Németh, and Domonkos Tikk, "Investigation of Various Matrix
Factorization Methods for Large Recommender Systems," in IEEE International Conference on
Data Mining Workshops, Pisa, 2008., pp. 553-562
[9][Link]