Exercice 52 / 60

Segmentation RFM

Sur la table orders (customer_id, order_date, price, quantity), calcule par client : la récence (jours depuis le dernier order_date), la fréquence (nb de commandes) et le montant (SUM(price*quantity)). Attribue un score NTILE(5) à chaque axe (r_score, f_score, m_score), puis un segment_label (Champions, Fideles, Nouveaux, A risque, Perdus, Autres). Trie par montant décroissant.

La segmentation rfm classe les clients selon 3 axes :

Recence = temps depuis le dernier achat (récent = mieux) Frequence = nombre d'achats Montant = total depense
La segmentation RFM classe les clients sur trois axes : depuis quand ils ont acheté, combien de fois, et pour quel montant

Exemple (table commandes) :

WITH segmentation AS ( SELECT client_id, CURRENT_DATE - MAX(date_commande)::date AS recence_jours, COUNT(*) AS frequence, SUM(montant) AS montant_total FROM commandes GROUP BY client_id ) SELECT * FROM segmentation;

On utilise souvent ntile(5) pour donner un score de 1 a 5 par axe.

Rappel : l'opérateur || concatène du texte (vu à l'exercice 38) ; ::text convertit un nombre en texte, ex. r_score::text || f_score::text.

orders
idcustomer_idproduct_idquantitypriceorder_datestatuscreated_at
query.sql

Envie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →