Project 5 updates

This commit is contained in:
Grégoire Mureau 2025-11-10 18:01:59 +01:00
commit a908041053
6 changed files with 224 additions and 0 deletions

86
P5_01_script_052025.sql Normal file
View file

@ -0,0 +1,86 @@
-- 1) 3 months old or less orders received more than 3 days after expected date.
WITH last_date AS (
SELECT MAX(MAX(
order_purchase_timestamp,
order_approved_at,
order_delivered_carrier_date,
order_delivered_customer_date,
order_estimated_delivery_date
)) AS max_date
FROM orders
)
SELECT *
FROM orders
WHERE order_status NOT IN ('unavailable', 'canceled')
AND (julianday((SELECT max_date FROM last_date)) - julianday(order_purchase_timestamp)) < 90
AND julianday(order_delivered_customer_date) - julianday(order_estimated_delivery_date) >= 3;
-- 2) Sellers generating sales of over 100000 reals
-- assuming : price does not have to be multiplied with order_item_id
select seller_id, sum(price)
from order_items
group by seller_id
HAVING sum(price) > 100000;
-- 3) Who are the new sellers (less than 3 months old) who
-- are already very committed to the platform (having already sold more than 30
-- products)?
-- assuming :
-- order_item_id counts the number of items ordered
-- using order_purchase_timestamp is the only way to find a seller first activity
WITH last_date AS (
SELECT MAX(MAX(
order_purchase_timestamp,
order_approved_at,
order_delivered_carrier_date,
order_delivered_customer_date,
order_estimated_delivery_date
)) AS max_date
FROM orders
),
first_sale_dates AS (
SELECT seller_id, MIN(order_purchase_timestamp) as first_sale
FROM orders o
JOIN order_items oi ON o.order_id = oi.order_id
GROUP BY seller_id
)
SELECT seller_id, sum(order_item_id)
FROM order_items oi
WHERE seller_id IN (
SELECT seller_id
FROM first_sale_dates
WHERE (julianday((SELECT max_date FROM last_date)) - julianday(first_sale)) < 90
)
GROUP BY seller_id
HAVING sum(order_item_id) > 30;
-- 4) What are the 5 zip codes with:
-- more than 30 reviews,
-- the worst average review score over the last 12 months?
-- assuming :
-- zip_code is about the sellers
WITH last_date AS (
SELECT MAX(MAX(
order_purchase_timestamp,
order_approved_at,
order_delivered_carrier_date,
order_delivered_customer_date,
order_estimated_delivery_date
)) AS max_date
FROM orders
)
SELECT
s.seller_zip_code_prefix AS zip_code,
AVG(r.review_score) AS mean_reviews_score,
COUNT(r.review_id) AS reviews_count
FROM sellers s
JOIN order_items oi ON s.seller_id = oi.seller_id
JOIN order_reviews r ON oi.order_id = r.order_id
WHERE julianday((SELECT max_date FROM last_date)) - julianday(r.review_creation_date) <= 365
GROUP BY s.seller_zip_code_prefix
HAVING reviews_count > 30
ORDER BY mean_reviews_score ASC
LIMIT 5;

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

135
README.md Normal file
View file

@ -0,0 +1,135 @@
# Projet de Segmentation Client - Olist
## 📋 Contexte du projet
Ce projet a été réalisé dans le cadre d'une mission de consulting pour **Olist**, une entreprise brésilienne proposant une solution de vente sur les marketplaces en ligne. L'objectif principal est d'accompagner Olist dans la mise en place de leur équipe Data et de réaliser leur premier cas d'usage Data Science autour de la segmentation client.
## 🎯 Objectifs
Le projet se divise en deux missions principales :
1. **Mission SQL** : Développer des requêtes SQL pour alimenter le dashboard Customer Experience de l'équipe
2. **Mission Segmentation** : Créer une segmentation client exploitable pour l'équipe Marketing, basée sur des algorithmes de clustering non-supervisé
## 📊 Données
Les données utilisées proviennent d'une base de données anonymisée fournie par Olist, contenant :
- L'historique des commandes depuis janvier 2017
- Les informations sur les produits achetés
- Les commentaires de satisfaction des clients
- La localisation des clients
- Les données sur les vendeurs
**⚠️ Note importante** : La base de données n'est pas incluse dans ce dépôt en raison de sa taille. Elle est téléchargeable à l'adresse suivante :
- **URL** : https://course.oc-static.com/projects/olist.db
## 📁 Structure du projet
```
├── P5_01_script_052025.sql
├── P5_02_notebook_exploration_052025.ipynb
├── P5_03_notebook_essais_052025.ipynb
├── P5_04_notebook_simulation_052025.ipynb
└── P5_05_presentation_052025.pptx
```
### 1. `P5_01_script_052025.sql`
**Script SQL pour le Dashboard Customer Experience**
Ce fichier contient 4 requêtes SQL essentielles pour alimenter le dashboard du service client :
1. **Commandes en retard** : Identification des commandes récentes (moins de 3 mois) reçues avec au moins 3 jours de retard (hors commandes annulées)
2. **Top vendeurs par chiffre d'affaires** : Liste des vendeurs ayant généré un chiffre d'affaires supérieur à 100 000 Real sur les commandes livrées
3. **Nouveaux vendeurs performants** : Identification des vendeurs récents (moins de 3 mois d'ancienneté) ayant déjà vendu plus de 30 produits
4. **Zones géographiques problématiques** : Les 5 codes postaux avec plus de 30 avis et les pires scores moyens de satisfaction sur les 12 derniers mois
### 2. `P5_02_notebook_exploration_052025.ipynb`
**Notebook d'exploration et de feature engineering**
Ce notebook contient :
- L'analyse exploratoire des données (EDA)
- La création et la transformation des features clients
- L'implémentation de la méthode RFM (Recency, Frequency, Monetary)
- Le preprocessing des données (normalisation, encodage)
- Les premières visualisations et insights sur les comportements clients
### 3. `P5_03_notebook_essais_052025.ipynb`
**Notebook de modélisation et clustering**
Ce notebook présente :
- Les différentes approches de clustering testées (K-means, DBSCAN, etc.)
- L'optimisation du nombre de clusters (méthode du coude, silhouette score)
- L'évaluation des performances des modèles
- La caractérisation détaillée de chaque segment client
- La validation métier des segments identifiés
### 4. `P5_04_notebook_simulation_052025.ipynb`
**Notebook de simulation pour le contrat de maintenance**
Ce notebook analyse :
- La stabilité des clusters dans le temps
- L'évolution de l'Adjusted Rand Index (ARI) sur différentes périodes
- La distribution temporelle des features
- Les recommandations sur la fréquence de mise à jour du modèle de segmentation
- Les tests de Kolmogorov-Smirnov pour détecter les drifts
### 5. `P5_05_presentation_052025.pptx`
**Présentation des résultats**
Cette présentation synthétise :
- La démarche méthodologique adoptée
- Les segments clients identifiés et leurs caractéristiques
- Les insights actionnables pour l'équipe Marketing
- Les recommandations sur le contrat de maintenance
- Les perspectives d'amélioration
## 🛠️ Technologies utilisées
- **SQL** : Requêtage de base de données
- **Python** : Analyse de données et machine learning
- pandas, numpy : manipulation de données
- scikit-learn : algorithmes de clustering
- matplotlib, seaborn : visualisation
- yellowbrick : évaluation des clusters
- **Jupyter Notebook** : développement et documentation
## 📈 Méthodologie
1. **Analyse exploratoire** : Compréhension approfondie des données et des comportements clients
2. **Feature engineering** : Création de variables pertinentes (RFM et autres métriques comportementales)
3. **Modélisation** : Test et sélection d'algorithmes de clustering
4. **Évaluation** : Validation technique (silhouette, ARI) et métier des segments
5. **Simulation** : Analyse de la stabilité temporelle pour définir la fréquence de maintenance
## 📝 Livrables
- ✅ Script SQL avec 4 requêtes pour le dashboard
- ✅ Notebook d'exploration et feature engineering
- ✅ Notebook de modélisation avec différents essais de clustering
- ✅ Notebook de simulation pour le contrat de maintenance
- ✅ Présentation de la segmentation et recommandations
## 🎓 Compétences développées
- Requêtage SQL avancé avec agrégations et jointures
- Apprentissage non-supervisé (clustering)
- Feature engineering orienté métier
- Évaluation de la qualité et de la stabilité des modèles
- Communication des résultats à des équipes métier
## 👤 Auteur
**Grégoire Mureau**
Date de réalisation : Mai 2025
---
*Ce projet a été réalisé dans le cadre du parcours Data Scientist d'OpenClassrooms*