Préparer le repo autonome (Forgejo, fetch-data, datasets hors git si besoin).

This commit is contained in:
Grégoire Mureau 2026-09-09 15:32:38 +02:00
parent 799015be44
commit ce05394e02
2 changed files with 243 additions and 225 deletions

459
README.MD
View file

@ -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
View 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