Préparer le repo autonome (Forgejo, fetch-data, datasets hors git si besoin).
This commit is contained in:
parent
799015be44
commit
ce05394e02
2 changed files with 243 additions and 225 deletions
459
README.MD
459
README.MD
|
|
@ -1,226 +1,235 @@
|
||||||
# Système de Recommandation de Contenu - My Content
|
**Source de vérité** : https://git.gregoiremureau.com/grgmro/oc-p10-content-recommendation
|
||||||
|
|
||||||
Projet de développement d'un système de recommandation d'articles basé sur une architecture serverless Azure Functions avec interface utilisateur Streamlit.
|
```bash
|
||||||
|
git clone https://git.gregoiremureau.com/grgmro/oc-p10-content-recommendation.git
|
||||||
|
git clone https://git.gregoiremureau.com/grgmro/oc-p10-content-recommendation.git
|
||||||
## Livrables du Projet
|
```
|
||||||
1. **Application fonctionnelle** : Streamlit + Azure Functions déployée
|
|
||||||
2. **Code source versionné** : Repository GitHub complet
|
Dataset : voir `fetch-data.sh` (hors git si volumineux).
|
||||||
3. **Présentation technique** : Support PDF (docs/presentation.pdf)
|
|
||||||
|
# Système de Recommandation de Contenu - My Content
|
||||||
|
|
||||||
## Vue d'ensemble
|
Projet de développement d'un système de recommandation d'articles basé sur une architecture serverless Azure Functions avec interface utilisateur Streamlit.
|
||||||
|
|
||||||
Ce projet implémente un système de recommandation de contenu utilisant des algorithmes de filtrage collaboratif et basé sur le contenu. L'architecture serverless permet une mise à l'échelle automatique et un coût optimisé.
|
|
||||||
|
## Livrables du Projet
|
||||||
### Fonctionnalités principales
|
1. **Application fonctionnelle** : Streamlit + Azure Functions déployée
|
||||||
|
2. **Code source versionné** : Repository GitHub complet
|
||||||
- **API de recommandation** : Azure Function retournant le top 5 des articles recommandés pour un utilisateur
|
3. **Présentation technique** : Support PDF (docs/presentation.pdf)
|
||||||
- **Interface utilisateur** : Application Streamlit pour tester et démontrer le système
|
|
||||||
- **Algorithmes implémentés** : Content-Based Filtering avec embeddings pré-calculés
|
|
||||||
- **Architecture serverless** : Déploiement sur Azure Functions avec plan Consumption
|
## Vue d'ensemble
|
||||||
|
|
||||||
|
Ce projet implémente un système de recommandation de contenu utilisant des algorithmes de filtrage collaboratif et basé sur le contenu. L'architecture serverless permet une mise à l'échelle automatique et un coût optimisé.
|
||||||
## Analyse et Développement
|
|
||||||
|
### Fonctionnalités principales
|
||||||
### Notebook Jupyter
|
|
||||||
- **Exploration des données** : Analyse du dataset Kaggle Globo.com
|
- **API de recommandation** : Azure Function retournant le top 5 des articles recommandés pour un utilisateur
|
||||||
- **Implémentation des algorithmes** : Content-Based et Collaborative Filtering
|
- **Interface utilisateur** : Application Streamlit pour tester et démontrer le système
|
||||||
- **Comparaison des approches** : Évaluation et choix technique
|
- **Algorithmes implémentés** : Content-Based Filtering avec embeddings pré-calculés
|
||||||
- **Optimisation ACP** : Réduction dimensionnelle 250D → 50D
|
- **Architecture serverless** : Déploiement sur Azure Functions avec plan Consumption
|
||||||
|
|
||||||
Localisation : `notebook/p10_notebook.ipynb`
|
|
||||||
|
## Analyse et Développement
|
||||||
## Architecture
|
|
||||||
|
### Notebook Jupyter
|
||||||
### MVP Actuel
|
- **Exploration des données** : Analyse du dataset Kaggle Globo.com
|
||||||
```
|
- **Implémentation des algorithmes** : Content-Based et Collaborative Filtering
|
||||||
[Interface Streamlit] → [Azure Functions API] → [Algorithme de recommandation]
|
- **Comparaison des approches** : Évaluation et choix technique
|
||||||
↓
|
- **Optimisation ACP** : Réduction dimensionnelle 250D → 50D
|
||||||
[Données embeddings + historique utilisateur]
|
|
||||||
```
|
Localisation : `notebook/p10_notebook.ipynb`
|
||||||
|
|
||||||
### Composants
|
## Architecture
|
||||||
- **Frontend** : Streamlit (interface de test)
|
|
||||||
- **Backend** : Azure Functions (Python 3.12, Linux)
|
### MVP Actuel
|
||||||
- **Algorithme** : Content-Based Filtering avec similarité cosinus
|
```
|
||||||
- **Données** : Embeddings articles (50D via PCA vs 250D embeddings originaux) + historique des clics
|
[Interface Streamlit] → [Azure Functions API] → [Algorithme de recommandation]
|
||||||
|
↓
|
||||||
## Structure synthétique du Projet
|
[Données embeddings + historique utilisateur]
|
||||||
|
```
|
||||||
```
|
|
||||||
Project_10/
|
### Composants
|
||||||
├── azure-app/ # Azure Function
|
- **Frontend** : Streamlit (interface de test)
|
||||||
│ ├── function_app.py # Point d'entrée Azure Function
|
- **Backend** : Azure Functions (Python 3.12, Linux)
|
||||||
│ ├── requirements.txt # Dépendances Python
|
- **Algorithme** : Content-Based Filtering avec similarité cosinus
|
||||||
│ ├── host.json # Configuration Azure Functions
|
- **Données** : Embeddings articles (50D via PCA vs 250D embeddings originaux) + historique des clics
|
||||||
│ ├── local.settings.json # Configuration locale (non versionnée)
|
|
||||||
│ ├── data/
|
## Structure synthétique du Projet
|
||||||
│ │ ├── embeddings_azure_50d.pkl # Embeddings articles (PCA 50D)
|
|
||||||
│ │ └── clicks_sample.csv # Historique des clics utilisateurs
|
```
|
||||||
│ └── utils/
|
Project_10/
|
||||||
│ ├── data_loader.py # Chargement et cache des données
|
├── azure-app/ # Azure Function
|
||||||
│ └── content_based.py # Algorithme de recommandation
|
│ ├── function_app.py # Point d'entrée Azure Function
|
||||||
├── notebook/
|
│ ├── requirements.txt # Dépendances Python
|
||||||
│ └── p10_notebook.ipynb # Analyse données + développement modèles
|
│ ├── host.json # Configuration Azure Functions
|
||||||
├── docs/
|
│ ├── local.settings.json # Configuration locale (non versionnée)
|
||||||
│ ├── presentation.pdf # Support de présentation (15-25 slides)
|
│ ├── data/
|
||||||
│ └── illustrations/ # Schémas d'architecture et captures
|
│ │ ├── embeddings_azure_50d.pkl # Embeddings articles (PCA 50D)
|
||||||
├── streamlit_app.py # Interface utilisateur
|
│ │ └── clicks_sample.csv # Historique des clics utilisateurs
|
||||||
├── streamlit_requirements.txt # Dépendances Streamlit
|
│ └── utils/
|
||||||
└── README.md
|
│ ├── data_loader.py # Chargement et cache des données
|
||||||
```
|
│ └── content_based.py # Algorithme de recommandation
|
||||||
|
├── notebook/
|
||||||
## Installation et Déploiement
|
│ └── p10_notebook.ipynb # Analyse données + développement modèles
|
||||||
|
├── docs/
|
||||||
### Prérequis
|
│ ├── presentation.pdf # Support de présentation (15-25 slides)
|
||||||
- Python 3.12+
|
│ └── illustrations/ # Schémas d'architecture et captures
|
||||||
- Azure CLI
|
├── streamlit_app.py # Interface utilisateur
|
||||||
- Azure Functions Core Tools
|
├── streamlit_requirements.txt # Dépendances Streamlit
|
||||||
- Compte Azure
|
└── README.md
|
||||||
|
```
|
||||||
### Déploiement Azure Functions
|
|
||||||
|
## Installation et Déploiement
|
||||||
1. **Connexion à Azure**
|
|
||||||
```bash
|
### Prérequis
|
||||||
az login
|
- Python 3.12+
|
||||||
```
|
- Azure CLI
|
||||||
|
- Azure Functions Core Tools
|
||||||
2. **Création de l'infrastructure**
|
- Compte Azure
|
||||||
```bash
|
|
||||||
# Groupe de ressources
|
### Déploiement Azure Functions
|
||||||
az group create --name rg-content-recommender --location francecentral
|
|
||||||
|
1. **Connexion à Azure**
|
||||||
# Compte de stockage
|
```bash
|
||||||
az storage account create --name [votre-nom-stockage-unique] \
|
az login
|
||||||
--resource-group rg-content-recommender \
|
```
|
||||||
--location francecentral \
|
|
||||||
--sku Standard_LRS
|
2. **Création de l'infrastructure**
|
||||||
|
```bash
|
||||||
# Function App Linux avec Python 3.12
|
# Groupe de ressources
|
||||||
az functionapp create \
|
az group create --name rg-content-recommender --location francecentral
|
||||||
--resource-group rg-content-recommender \
|
|
||||||
--consumption-plan-location francecentral \
|
# Compte de stockage
|
||||||
--runtime python \
|
az storage account create --name [votre-nom-stockage-unique] \
|
||||||
--runtime-version 3.12 \
|
--resource-group rg-content-recommender \
|
||||||
--functions-version 4 \
|
--location francecentral \
|
||||||
--name contentrecommender-linux \
|
--sku Standard_LRS
|
||||||
--storage-account stcontentrecommend2025 \
|
|
||||||
--os-type Linux
|
# Function App Linux avec Python 3.12
|
||||||
```
|
az functionapp create \
|
||||||
|
--resource-group rg-content-recommender \
|
||||||
3. **Déploiement du code**
|
--consumption-plan-location francecentral \
|
||||||
```bash
|
--runtime python \
|
||||||
# Depuis le dossier azure-app
|
--runtime-version 3.12 \
|
||||||
func azure functionapp publish contentrecommender-linux
|
--functions-version 4 \
|
||||||
```
|
--name contentrecommender-linux \
|
||||||
|
--storage-account stcontentrecommend2025 \
|
||||||
### Interface Streamlit
|
--os-type Linux
|
||||||
|
```
|
||||||
1. **Installation des dépendances**
|
|
||||||
```bash
|
3. **Déploiement du code**
|
||||||
pip install -r streamlit_requirements.txt
|
```bash
|
||||||
```
|
# Depuis le dossier azure-app
|
||||||
|
func azure functionapp publish contentrecommender-linux
|
||||||
2. **Lancement de l'interface**
|
```
|
||||||
```bash
|
|
||||||
streamlit run streamlit_app.py
|
### Interface Streamlit
|
||||||
```
|
|
||||||
|
1. **Installation des dépendances**
|
||||||
## Utilisation
|
```bash
|
||||||
|
pip install -r streamlit_requirements.txt
|
||||||
### API Azure Functions
|
```
|
||||||
|
|
||||||
**Endpoint** : `https://contentrecommender-linux.azurewebsites.net/api/recommend`
|
2. **Lancement de l'interface**
|
||||||
|
```bash
|
||||||
**Paramètres** :
|
streamlit run streamlit_app.py
|
||||||
- `user_id` (int) : Identifiant de l'utilisateur (0-706)
|
```
|
||||||
|
|
||||||
**Exemple d'appel** :
|
## Utilisation
|
||||||
```bash
|
|
||||||
curl "https://contentrecommender-linux.azurewebsites.net/api/recommend?user_id=0"
|
### API Azure Functions
|
||||||
```
|
|
||||||
|
**Endpoint** : `https://contentrecommender-linux.azurewebsites.net/api/recommend`
|
||||||
**Réponse** :
|
|
||||||
```json
|
**Paramètres** :
|
||||||
{
|
- `user_id` (int) : Identifiant de l'utilisateur (0-706)
|
||||||
"user_id": 0,
|
|
||||||
"recommendations": [157519, 157944, 159495, 156690, 162857]
|
**Exemple d'appel** :
|
||||||
}
|
```bash
|
||||||
```
|
curl "https://contentrecommender-linux.azurewebsites.net/api/recommend?user_id=0"
|
||||||
|
```
|
||||||
### Interface Streamlit
|
|
||||||
|
**Réponse** :
|
||||||
1. Configurer l'URL de l'API (local ou Azure)
|
```json
|
||||||
2. Sélectionner un ID utilisateur
|
{
|
||||||
3. Obtenir les recommandations
|
"user_id": 0,
|
||||||
4. Tester les fonctionnalités avancées
|
"recommendations": [157519, 157944, 159495, 156690, 162857]
|
||||||
|
}
|
||||||
## Algorithme de Recommandation
|
```
|
||||||
|
|
||||||
### Content-Based Filtering
|
### Interface Streamlit
|
||||||
|
|
||||||
1. **Chargement des données** : Embeddings pré-calculés et historique utilisateur
|
1. Configurer l'URL de l'API (local ou Azure)
|
||||||
2. **Calcul du profil utilisateur** : Moyenne des embeddings des articles consultés
|
2. Sélectionner un ID utilisateur
|
||||||
3. **Similarité cosinus** : Calcul avec tous les articles du catalogue
|
3. Obtenir les recommandations
|
||||||
4. **Filtrage** : Exclusion des articles déjà vus
|
4. Tester les fonctionnalités avancées
|
||||||
5. **Sélection** : Top 5 des articles les plus similaires
|
|
||||||
|
## Algorithme de Recommandation
|
||||||
### Optimisations
|
|
||||||
|
### Content-Based Filtering
|
||||||
- **Réduction dimensionnelle** : PCA 250D → 50D pour optimiser les performances Azure
|
|
||||||
- **Cache en mémoire** : Embeddings et données utilisateur chargés une seule fois
|
1. **Chargement des données** : Embeddings pré-calculés et historique utilisateur
|
||||||
- **Architecture serverless** : Mise à l'échelle automatique selon la demande
|
2. **Calcul du profil utilisateur** : Moyenne des embeddings des articles consultés
|
||||||
|
3. **Similarité cosinus** : Calcul avec tous les articles du catalogue
|
||||||
## Tests et Validation
|
4. **Filtrage** : Exclusion des articles déjà vus
|
||||||
|
5. **Sélection** : Top 5 des articles les plus similaires
|
||||||
### Tests locaux
|
|
||||||
```bash
|
### Optimisations
|
||||||
# Démarrage Azure Functions local
|
|
||||||
func start
|
- **Réduction dimensionnelle** : PCA 250D → 50D pour optimiser les performances Azure
|
||||||
|
- **Cache en mémoire** : Embeddings et données utilisateur chargés une seule fois
|
||||||
# Test de l'algorithme
|
- **Architecture serverless** : Mise à l'échelle automatique selon la demande
|
||||||
python test_local.py
|
|
||||||
```
|
## Tests et Validation
|
||||||
|
|
||||||
### Métriques de performance
|
### Tests locaux
|
||||||
- **Temps de réponse** : ~200ms par recommandation
|
```bash
|
||||||
- **Utilisateurs supportés** : 707 dans le dataset actuel
|
# Démarrage Azure Functions local
|
||||||
- **Articles disponibles** : 364,047 avec embeddings
|
func start
|
||||||
|
|
||||||
## Problèmes Connus et Solutions
|
# Test de l'algorithme
|
||||||
|
python test_local.py
|
||||||
### Déploiement Azure
|
```
|
||||||
- **Python sur Windows** : Non supporté, utiliser Linux obligatoirement
|
|
||||||
- **Authentification** : Configurer `http_auth_level=func.AuthLevel.ANONYMOUS`
|
### Métriques de performance
|
||||||
- **Erreurs "Service unavailable"** : Problèmes temporaires Azure, réessayer plus tard
|
- **Temps de réponse** : ~200ms par recommandation
|
||||||
|
- **Utilisateurs supportés** : 707 dans le dataset actuel
|
||||||
### Limitations actuelles
|
- **Articles disponibles** : 364,047 avec embeddings
|
||||||
- **Cold start** : Première requête lente après période d'inactivité
|
|
||||||
- **Nouveaux utilisateurs** : Pas de gestion du problème de démarrage à froid
|
## Problèmes Connus et Solutions
|
||||||
- **Mise à jour des données** : Processus manuel
|
|
||||||
|
### Déploiement Azure
|
||||||
## Architecture Cible (Future)
|
- **Python sur Windows** : Non supporté, utiliser Linux obligatoirement
|
||||||
|
- **Authentification** : Configurer `http_auth_level=func.AuthLevel.ANONYMOUS`
|
||||||
### Améliorations prévues
|
- **Erreurs "Service unavailable"** : Problèmes temporaires Azure, réessayer plus tard
|
||||||
- **Gestion cold start** : Recommandations populaires pour nouveaux utilisateurs
|
|
||||||
- **Pipeline de données** : Mise à jour automatique des embeddings
|
### Limitations actuelles
|
||||||
- **Base de données** : Stockage persistant des profils utilisateur
|
- **Cold start** : Première requête lente après période d'inactivité
|
||||||
- **API hybride** : Combinaison Content-Based + Collaborative Filtering
|
- **Nouveaux utilisateurs** : Pas de gestion du problème de démarrage à froid
|
||||||
- **Cache distribué** : Précalcul des recommandations populaires
|
- **Mise à jour des données** : Processus manuel
|
||||||
|
|
||||||
## Technologies Utilisées
|
## Architecture Cible (Future)
|
||||||
|
|
||||||
- **Backend** : Azure Functions, Python 3.12
|
### Améliorations prévues
|
||||||
- **Frontend** : Streamlit
|
- **Gestion cold start** : Recommandations populaires pour nouveaux utilisateurs
|
||||||
- **ML/Data** : scikit-learn, pandas, numpy
|
- **Pipeline de données** : Mise à jour automatique des embeddings
|
||||||
- **Infrastructure** : Azure CLI, Azure Storage
|
- **Base de données** : Stockage persistant des profils utilisateur
|
||||||
- **Déploiement** : Azure Functions Core Tools
|
- **API hybride** : Combinaison Content-Based + Collaborative Filtering
|
||||||
|
- **Cache distribué** : Précalcul des recommandations populaires
|
||||||
## Auteur
|
|
||||||
|
## Technologies Utilisées
|
||||||
Projet réalisé dans le cadre d'une formation OpenClassrooms - Ingénieur IA.
|
|
||||||
|
- **Backend** : Azure Functions, Python 3.12
|
||||||
## Licence
|
- **Frontend** : Streamlit
|
||||||
|
- **ML/Data** : scikit-learn, pandas, numpy
|
||||||
|
- **Infrastructure** : Azure CLI, Azure Storage
|
||||||
|
- **Déploiement** : Azure Functions Core Tools
|
||||||
|
|
||||||
|
## Auteur
|
||||||
|
|
||||||
|
Projet réalisé dans le cadre d'une formation OpenClassrooms - Ingénieur IA.
|
||||||
|
|
||||||
|
## Licence
|
||||||
|
|
||||||
Ce projet est à des fins éducatives uniquement.
|
Ce projet est à des fins éducatives uniquement.
|
||||||
9
fetch-data.sh
Executable file
9
fetch-data.sh
Executable file
|
|
@ -0,0 +1,9 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
cat <<'TXT'
|
||||||
|
P10 — recommandation de contenu
|
||||||
|
|
||||||
|
Hors git : embeddings pickle (~73 Mo) et articles_metadata.csv.
|
||||||
|
Récupération : archive Nextcloud dossier « 10 Réalisez une application de recommandation… »
|
||||||
|
ou artefacts Azure du projet (non publics).
|
||||||
|
TXT
|
||||||
Loading…
Add table
Reference in a new issue