@@ -103,95 +103,6 @@ The project is organized into the following key components:
=======
<<<<<<< HEAD
**User_based**
We begin by loading a dataset using the `load_ratings` function, which converts the data into a format suitable for the `Surprise library`. This formatted data, referred to as `surprise_data`, is then used to create a training set (`trainset`) for our collaborative filtering models. The training set contains user-item ratings that will be used to train our recommendation algorithms.
=======
>>>>>>> Evaluator
>>>>>>> Adrien
Once the training set is prepared, we construct a test set (`testset`) using the `build_anti_testset()` method. This test set consists of user-item pairs not present in the training data, allowing us to evaluate the performance of our models on unseen interactions.
<<<<<<< HEAD
Next, we initialize a `KNNWithMeans` collaborative filtering model (`knn_model`) and specify similarity options using a dictionary (`sim_options`). These options include the choice of similarity metric (`'msd'` for Mean Squared Difference) and whether to use user-based collaborative filtering (`'user_based': True`). Additionally, we set a minimum support threshold (`'min_support'`) to ensure sufficient data for similarity computation.
The `knn_model` is then trained on the `trainset` using the `fit()` method, learning to predict ratings based on item similarities and user preferences. After training, we make predictions on the `testset` using the `test()` method of `knn_model`, estimating ratings for the user-item pairs in the test set.
To analyze and compare the performance of different collaborative filtering models, we define utility functions such as `predict_ratings`, `analyse_min_support`, and `compare_predictions`. These functions allow us to evaluate model predictions, explore the impact of parameter variations (e.g., `min_k` and `min_support`), and compare predictions between different algorithms (e.g., `KNNWithMeans` vs. `UserBased`).
Finally, we evaluate the model performance by calculating evaluation metrics like Mean Absolute Error (MAE) and Root Mean Squared Error (RMSE) using the `accuracy` module. These metrics provide insights into the accuracy and effectiveness of our recommendation models, helping us understand how well they perform in generating personalized recommendations for users.
=======
## Rendu
<<<<<<< HEAD
### Analytics_UI
Lors de ce rendu, différentes analyses ont pu être effectuées sur les datasets disponibles afin de mieux comprendre les différentes données auxquelles nous allons faire face tout au long du projet. Une description détaillée des différentes analyses, menées dans les jupyter notebook, est décrite ci-dessous. Les jupyter notebook peuvent être lancés (run) indépendamment de tout autre fichier (.py) ou (.ipynb).
=======
### Evaluator block
Le Jupyter Notebook peut être lancé indépendemment de tout autre code.
>>>>>>> Evaluator
-**evaluator.ipynb**
Pour ce jupyter notebook Evaluator.ipynb, l'importation de certains **packages** et modules clés est essentielle. Dans notre cas, nous avons importé les packages `model_selection` et `accuracy` de **Surprise**, ce dernier étant nécessaire pour effectuer une **validation croisée** et utiliser des **métriques** prédéfinies pour **évaluer les modèles**. Cela nous permettra d'obtenir des informations précieuses sur les performances de nos modèles de recommandation.
En ce qui concerne l'adaptation des **loaders**, nous avons apporté des modifications à la fonction `load_ratings()`. Cette fonction a été ajustée pour permettre le chargement de données dans un **format** compatible avec **Surprise**. Un argument supplémentaire, `surprise_format`, a été ajouté pour conditionner le chargement en un objet **Dataset** compatible Surprise à partir d'un **DataFrame Pandas**. Cela simplifie grandement le processus de préparation des données pour l'entraînement des modèles.
Pour évaluer nos modèles, nous avons mis en œuvre trois méthodes de **validation croisée**. La première méthode, `generate_split_predictions()`, divise l'ensemble de données en un ensemble d'entraînement et un ensemble de test en utilisant `train_test_split` de Surprise. Ensuite, avec `generate_loo_top_n()`, nous appliquons un processus **"leave-one-out"** pour générer des recommandations top-N et évaluer les performances du modèle. Enfin, `generate_full_top_n()` utilise l'**ensemble complet de données** pour **générer des recommandations** top-N sans division. Ces approches nous offrent une vision complète des performances de nos modèles dans différents scénarios.
Pour améliorer notre évaluation, nous avons également introduit trois **nouvelles métriques**. La **première**, `rmse (split type)`, représente la racine carrée de l'erreur quadratique moyenne pour évaluer les prédictions. **Ensuite**, `hit rate (loo type)` mesure le taux de succès, indiquant le pourcentage d'utilisateurs pour lesquels l'un des films recommandés correspond à ceux notés dans l'ensemble de test. **Enfin**, `novelty (full type)` évalue la nouveauté des recommandations en fonction de la popularité des films recommandés, fournissant ainsi des informations sur la diversité et la pertinence des suggestions.
<<<<<<< HEAD
- analytics_tiny.ipynb
Dans le notebook "analytics_tiny.ipynb", plusieurs analyses ont été menées sur un ensemble de données, surnommé "tiny", étant un dataset réduit du dataset "small". Tout d'abord, le nombre total de notes a été calculé, permettant ainsi d'avoir une vue d'ensemble de la taille de l'ensemble de données. Ensuite, le nombre d'utilisateurs uniques a été déterminé, offrant ainsi un aperçu de la diversité des utilisateurs qui ont contribué aux évaluations des films. De même, le nombre de films uniques dans la matrice des notes a été extrait, ce qui donne un aperçu du nombre de films différents présents dans l'ensemble de données.
Une analyse a également été réalisée pour identifier le(s) film(s) le(s) plus noté(s), ainsi que le(s) film(s) le(s) moins noté(s). Ces informations permettent de repérer les tendances de popularité et les cas exceptionnels dans les données. Ensuite, toutes les valeurs de notation possibles ont été recueillies, de la plus petite à la plus grande valeur. Cette étape est importante pour comprendre la gamme des évaluations et identifier d'éventuelles anomalies ou biais dans les données.
Un autre aspect exploré était le nombre de films qui n'ont reçu aucune note. Cette mesure offre un aperçu de la couverture des évaluations dans l'ensemble de données et peut révéler des lacunes potentielles. En ce qui concerne la section "Long-tail property", une évaluation de la sparsité de la matrice a été réalisée. Cela impliquait le calcul d'une métrique de sparsité ainsi qu'une observation visuelle de la distribution des notes dans la matrice. Cette analyse permet de déterminer dans quelle mesure les données suivent la propriété de la longue traîne, souvent observée dans les systèmes de recommandation.
En complément des analyses mentionnées, une distribution des 'ratings' par films a été effectuée. Cette distribution offre un aperçu détaillé de la manière dont les différentes notes sont réparties entre les films, mettant en lumière les tendances de notation et les variations de popularité parmi les films. De plus, une matrice de sparsité a été calculée pour évaluer la densité des données. Cette matrice montre la proportion de cases vides ou non renseignées dans la matrice des notes, ce qui est crucial pour comprendre la disponibilité des données et leur potentiel pour l'analyse et la modélisation.
- analytics_test.ipynb
Dans le notebook "analytics_test.ipynb", plusieurs analyses ont été menées sur un ensemble de données, surnommé "test", qui comprend 6 utilisateurs et 10 éléments (films) permettant ainsi . Tout d'abord, le nombre total de notes a été calculé, permettant ainsi d'avoir une vue d'ensemble de la taille de l'ensemble de données. Ensuite, le nombre d'utilisateurs uniques a été déterminé, offrant ainsi un aperçu de la diversité des utilisateurs qui ont contribué aux évaluations des films. De même, le nombre de films uniques dans la matrice des notes a été extrait, ce qui donne un aperçu du nombre de films différents présents dans l'ensemble de données.
Une analyse a également été réalisée pour identifier le(s) film(s) le(s) plus noté(s), ainsi que le(s) film(s) le(s) moins noté(s). Ces informations permettent de repérer les tendances de popularité et les cas exceptionnels dans les données. Ensuite, toutes les valeurs de notation possibles ont été recueillies, de la plus petite à la plus grande valeur. Cette étape est importante pour comprendre la gamme des évaluations et identifier d'éventuelles anomalies ou biais dans les données.
Un autre aspect exploré était le nombre de films qui n'ont reçu aucune note. Cette mesure offre un aperçu de la couverture des évaluations dans l'ensemble de données et peut révéler des lacunes potentielles. En ce qui concerne la section "Long-tail property", une évaluation de la sparsité de la matrice a été réalisée. Cela impliquait le calcul d'une métrique de sparsité ainsi qu'une observation visuelle de la distribution des notes dans la matrice. Cette analyse permet de déterminer dans quelle mesure les données suivent la propriété de la longue traîne, souvent observée dans les systèmes de recommandation.
En complément des analyses mentionnées, une distribution des 'ratings' par films a été effectuée. Cette distribution offre un aperçu détaillé de la manière dont les différentes notes sont réparties entre les films, mettant en lumière les tendances de notation et les variations de popularité parmi les films. De plus, une matrice de sparsité a été calculée pour évaluer la densité des données. Cette matrice montre la proportion de cases vides ou non renseignées dans la matrice des notes, ce qui est crucial pour comprendre la disponibilité des données et leur potentiel pour l'analyse et la modélisation.
### Evaluator block
-**evaluator.ipynb**
Pour ce jupyter notebook Evaluator.ipynb, l'importation de certains **packages** et modules clés est essentielle. Dans notre cas, nous avons importé les packages `model_selection` et `accuracy` de **Surprise**, ce dernier étant nécessaire pour effectuer une **validation croisée** et utiliser des **métriques** prédéfinies pour **évaluer les modèles**. Cela nous permettra d'obtenir des informations précieuses sur les performances de nos modèles de recommandation.
En ce qui concerne l'adaptation des **loaders**, nous avons apporté des modifications à la fonction `load_ratings()`. Cette fonction a été ajustée pour permettre le chargement de données dans un **format** compatible avec **Surprise**. Un argument supplémentaire, `surprise_format`, a été ajouté pour conditionner le chargement en un objet **Dataset** compatible Surprise à partir d'un **DataFrame Pandas**. Cela simplifie grandement le processus de préparation des données pour l'entraînement des modèles.
Pour évaluer nos modèles, nous avons mis en œuvre trois méthodes de **validation croisée**. La première méthode, `generate_split_predictions()`, divise l'ensemble de données en un ensemble d'entraînement et un ensemble de test en utilisant `train_test_split` de Surprise. Ensuite, avec `generate_loo_top_n()`, nous appliquons un processus **"leave-one-out"** pour générer des recommandations top-N et évaluer les performances du modèle. Enfin, `generate_full_top_n()` utilise l'**ensemble complet de données** pour **générer des recommandations** top-N sans division. Ces approches nous offrent une vision complète des performances de nos modèles dans différents scénarios.
Pour améliorer notre évaluation, nous avons également introduit trois **nouvelles métriques**. La **première**, `rmse (split type)`, représente la racine carrée de l'erreur quadratique moyenne pour évaluer les prédictions. **Ensuite**, `hit rate (loo type)` mesure le taux de succès, indiquant le pourcentage d'utilisateurs pour lesquels l'un des films recommandés correspond à ceux notés dans l'ensemble de test. **Enfin**, `novelty (full type)` évalue la nouveauté des recommandations en fonction de la popularité des films recommandés, fournissant ainsi des informations sur la diversité et la pertinence des suggestions.
Pour conclure notre processus d'évaluation, nous avons mis en place une fonction `export_evaluation_report()`. Cette fonction permet d'**exporter le rapport** d'évaluation vers un **fichier CSV** dans un répertoire spécifié. Cela facilite le partage et la consultation des résultats, ce qui est crucial pour optimiser nos modèles et affiner nos stratégies de recommandation.
### User_based (à compléter)
### Recommender_UI (à compléter)
=======
Pour conclure notre processus d'évaluation, nous avons mis en place une fonction `export_evaluation_report()`. Cette fonction permet d'**exporter le rapport** d'évaluation vers un **fichier CSV** dans un répertoire spécifié. Cela facilite le partage et la consultation des résultats, ce qui est crucial pour optimiser nos modèles et affiner nos stratégies de recommandation.
>>>>>>> Evaluator
>>>>>>> Adrien
## Contact
...
...
@@ -216,49 +127,12 @@ We thank Professor Vande Kerckhove Corentin for his guidance on recommender syst