ENSAE ParisTech Master Project 2015-2016 "Films Recommendation System by Collaborative Filtering"
Authors group: CUI Biwei/ DELGADO Claudia/ MIAH Mehdi/ MPELI MPELI Ulrich/
Tutors group: COTTET Vincent/ SEBBAR Mehdi
Dans ce projet, nous souhaitons recommander des films à un utilisateur au moyen des notes attribuées par l'ensemble des utilisateurs. Pour cela, nous avons identifier trois grandes façons de procéder :
- par une approche naïve : recommander les films qui ont obtenus les meilleurs moyennes ;
- par une approche des plus proches voisins (knn_user) : recommander les meilleurs films parmi les utilisateurs partageant les mêmes goûts que l'utilisateur final ;
- par une approche de réduction (svd) : recommander les films après une décomposition matricielle des notes
Pour faire uniquement de la recommandation, allez directement à la phase 5.
Les données originales sont disponibles sur le site de Grouplens : http://grouplens.org/datasets/movielens/
Les modifications apportées sont :
- pour le problème ml-100k :
- suppression des doublons de films (ID des films en doublons : 246 268|297 303|329 348|304 500|573 670|266 680|305 865|876 881|878 1003|1256 1257|309 1606|1395 1607|1175 1617| 1477 1625|1645 1650|1234 1654|711 1658|1429 1680|)
- pour le problème ml-1m :
- suppression des films présents dans la base des films mais absents de la base des notes (177 films)
- correction du titre de film "Et Dieu créa la femme"
Les données nécessaires à la prédiction sont générées.
# Se placer dans le dossier courant
source("main_preparation.R")
Deux fichiers pdf sont générés contenant les analyses descriptives des deux problèmes
# Se placer dans le dossier Analysis
source("pdf_analysis_ml-100k.Rmd")
source("pdf_analysis_ml-1m.Rmd")
Pour chaque famille de modèles, les notes des bases de test sont prédites à partir de l'étude des bases d'apprentissage
# Se placer dans le dossier courant
source("./CrossValidation/main_split.R") pour générer les datasets et la base vierge
# Remplacer '***' par le nom de la famille de méthode
source("./***/main_predictionsTest_***.R")
Pour effectuer les recommandations pour un utisateur :
# Se placer dans le dossier courant
source("main.R")
Les recommandations sont testées selon divers critères
# Se placer dans le dossier courant
source("./Tests/main_test_popularitybias.R")
source("./Tests/main_test_robust.R")
Analysis : analyse les données de chaque problème
CrossValidation : génére les sous-datasets servant à la validation croisée et la base vierge, contient les données nécessaires à la prédiction, générées par "main_preparation.R"
Data : contient les données de ml-100k et ml-1m nettoyées
NaiveAlgorithms : prédit et recommande en suivant les algorithmes naïfs
NeighborhoodBasedAlgorithms : prédit et recommande en suivant les algorithmes des plus proches voisins
Results : contient les données nécessaires à la recommandation finale, contient les résultats de la validation croisée à propos de l'estimation de modèles et de paramètres
SVD : prédit et recommande en suivant les algorithmes basés sur la décomposition de matrices
Tests : test les méthodes sur la présence d'un biais de popularité et sur l'influence des notes sur les recommandations
Util : contient les fonctions les plus utiles