We use cookies and other tracking technologies to improve your browsing experience on our website, to show you personalized content and targeted ads, to analyze our website traffic, and to understand where our visitors are coming from.
Segmentation RFM dans le Retail
Python
R
Marketing
Connaissance Client
Optimisez votre marketing avec la segmentation RFM : en analysant la récence, la fréquence et le montant des achats pour cibler efficacement vos clients
Author
Abderrahmen DHIF
Published
January 13, 2024
Contexte
Dans l’univers compétitif du retail, les marques cherchent souvent à identifier les clients ayant plus de valeur afin de mieux répondre à leurs attentes.
La segmentation RFM offre une solution précieuse pour atteindre cet objectif en identifiant des segments de clients aux comportements similaires.
Qu’est-ce que la Segmentation RFM ?
R: Récence
Mesure le temps écoulé depuis le dernier achat d’un client. Les clients qui ont acheté récemment sont plus susceptibles de se souvenir de leur expérience et sont souvent plus enclins à revenir.
F: Fréquence
Evalue à quelle fréquence un client effectue des achats sur une période donnée. Une fréquence d’achat élevée est généralement un indicateur de fidélité et de satisfaction du client.
M: Montant
Le montant analyse le total des dépenses d’un client. Les clients qui dépensent beaucoup sont représentent une source de revenus significative pour l’entreprise.
Les Raisons Clés d’Adopter la Segmentation RFM
Personnalisation des Stratégies Marketing: La RFM permet de catégoriser les clients en fonction de leur comportement d’achat réel, permettant ainsi des campagnes marketing plus précises et personnalisées.
Amélioration de la Fidélisation Client: En ciblant les clients avec des offres pertinentes, la segmentation RFM peut augmenter leur satisfaction et fidélité, améliorant ainsi leur valeur pour l’entreprise.
Simplification de l’Analyse des Données: La segmentation RFM est relativement simple à mettre en œuvre et à comprendre, la rendant accessible même pour les entreprises avec des capacités d’analyse de données limitées.
l’adoption de la segmentation RFM dans le retail offre une multitude d’avantages, allant de l’amélioration du ciblage marketing à une meilleure compréhension et gestion des relations clients, tout en restant une méthode accessible et facile à intégrer dans diverses stratégies d’entreprise.
Mise en œuvre
Dans cette partie, nous allons explorer comment implémenter la segmentation RFM en utilisant R et Python, en nous basant sur le jeu de données ‘Online Retail’ disponible sur Kaggle.
Chargement des données
Ce jeu de données contient toutes les transactions réalisées pour une entreprise de vente en ligne basée au Royaume-Uni, entre le 01/12/2009 et le 09/12/2011. Dataset
# Grouper les données par CustomerID et calculer les aggrégatsdata_rfm = data %>%group_by(CustomerID) %>%summarise(Frequence =n_distinct(InvoiceNo), # F: Nombre d'achatsMontant =sum(UnitPrice*Quantity), # M: Montant par clientdernier_achat=max(InvoiceDate), # Date du dernier achatpremier_achat=min(InvoiceDate)) %>%# Date du premier achatungroup() %>%mutate(Recence=as.numeric(max(dernier_achat)-dernier_achat), # Calculer la Recence Anciennete=as.numeric(max(dernier_achat)-premier_achat)) %>%# Calculer l'Anciennetefilter(Montant<10000) %>%# Filtrer les lignes où Montant < 10 000select(-dernier_achat,-premier_achat) #exclure les colonnes 'dernier_achat' et 'premier_achat' knitr::kable(head(data_rfm,2),format ="html")
CustomerID
Frequence
Montant
Recence
Anciennete
12347
7
4310.00
2
367
12348
4
1797.24
75
358
Code
# Grouper les données par CustomerID et calculer les aggrégatsdata['TotalPrice'] = data['UnitPrice'] * data['Quantity']data_rfm = data.groupby('CustomerID').agg( Frequence=('InvoiceNo', 'nunique'), # F: Nombre d'achats Montant=('TotalPrice', 'sum'), # M: Montant par client dernier_achat=('InvoiceDate', 'max'), # Date du dernier achat premier_achat=('InvoiceDate', 'min') # Date du premier achat).reset_index()# Calculer la Recence et l'Anciennetedata_rfm['Recence'] = (data_rfm['dernier_achat'].max() - data_rfm['dernier_achat']).dt.daysdata_rfm['Anciennete'] = (data_rfm['dernier_achat'].max() - data_rfm['premier_achat']).dt.days# Filtrer les lignes où Montant < 10 000 et exclure les colonnes 'dernier_achat' et 'premier_achat'data_rfm = data_rfm[data_rfm['Montant'] <10000].drop(columns=['dernier_achat', 'premier_achat'])display(data_rfm.head(2))
Les clients dont l’ancienneté est inférieure à 3 mois, cette durée peut varier selon le secteur d’activité et la nature des données. Par exemple, dans le retail (mode et habillement) la période considérée peut souvent s’étendre jusqu’à 6 mois.
Clients fidèles
Les clients fidèles sont ceux qui ont effectué au moins un achat sur la période d’analyse, à l’exception des nouveaux clients. Dans le retail (mode et l’habillement), un client fidèle est généralement défini comme quelqu’un ayant effectué au moins un achat sur les 12 derniers mois (hors nouveaux clients).
# Filtrer pour obtenir les nouveaux clients (Ancienneté < 3 mois)data_nouveaux=data_rfm %>%filter(Anciennete<30.5*3)# Obtenir les clients fidèles en retirant les nouveaux clients data_fideles=data_rfm %>%anti_join(data_nouveaux,by='CustomerID')
Code
# Filtrer pour obtenir les nouveaux clients (Ancienneté < 3 mois)data_nouveaux = data_rfm[data_rfm['Anciennete'] <30.5*3]# Obtenir les clients fidèles en retirant les nouveaux clients data_fideles = data_rfm[~data_rfm['CustomerID'].isin(data_nouveaux['CustomerID'])]
Kmeans pour définir les seuils
Nous utiliserons le K-means pour segmenter les clients selon leurs scores RFM afin de définir des seuils distincts pour chaque critère
# Standardiser les les colonnes RFMdata_fideles_standardisees <-scale(data_fideles %>%select(Frequence,Montant,Recence)) # Fixer le seed pour la reproductibilitéset.seed(123)# Exécuter K-means avec 5 clusterskm=kmeans(data_fideles_standardisees, 5)# Ajouter les labels des clustersdata_fideles_km=data_fideles %>%mutate(segment=factor(km$cluster))
Code
# Standardiser les les colonnes RFMscaler = StandardScaler()features_standardisees = scaler.fit_transform(data_fideles[['Frequence', 'Montant', 'Recence']])# Exécuter K-means avec 5 clusterskmeans = KMeans(n_clusters=5, random_state=123) # Fixer le random_state pour la reproductibilitékmeans.fit(features_standardisees)
KMeans(n_clusters=5, random_state=123)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
KMeans(n_clusters=5, random_state=123)
Code
# Ajouter les labels des clusters au dataframe originaldata_fideles['segment'] = kmeans.labels_+1data_fideles['segment']=data_fideles['segment'].astype('category')# Afficher les premières lignes pour vérifierdisplay(data_fideles.head(2))
La représentation des clusters Kmeans selon les dimensions RFM aide à définir les seuils nécessaires à l’élaboration des segments finaux. Il est important de noter que la détermination de ces seuils s’appuie non seulement sur les résultats du Kmeans mais également sur des critères métiers spécifiques au domaine d’activité, assurant ainsi la pertinence des segments obtenus.
fig <-plot_ly(data=data_fideles_km %>%filter(Frequence<40),x =~Montant, y =~Frequence, z =~Recence,color =~segment,text=~paste0("R:",Recence,'<br>',"F:",Frequence,'<br>',"M:",round(Montant),'<br>') , type ='scatter3d', mode ='markers',hoverinfo ='text')%>%layout(title="Visualisation 3D des Clients Fidèles par RFM et Segment")fig
# Filtrer le DataFramedata_fideles_km_filtered = data_fideles[data_fideles['Frequence'] <40]# Créer le graphique 3Dfig = px.scatter_3d(data_fideles_km_filtered, x='Montant', y='Frequence', z='Recence', color='segment', title="Visualisation 3D des Clients Fidèles par RFM et Segment")# Afficher le graphiquefig.show()
Code
# Filtre les données pour les cas où la Fréquence est inférieure à 20data_filtered = data_fideles[data_fideles['Frequence'] <20]fig, ax = plt.subplots()scatter = ax.scatter(data_filtered['Frequence'], data_filtered['Recence'], alpha=0.3, c=pd.factorize(data_filtered['segment'])[0], cmap='viridis')fig.set_facecolor('white') ax.set_facecolor('white') ax.axhline(y=30.5*6, linestyle='--', color='#D00000', linewidth=1)ax.text(15, 32*6, "Seuil Récence", color="#BEBDBD")ax.text(15, 27*6, "6 mois", color="#848484")ax.text(10, 300, "ENDORMIS", color="#AD0BA5", fontsize=12)ax.set_xlabel('Fréquence')ax.set_ylabel('Récence')ax.set_title('Seuil Récence')handles, labels = scatter.legend_elements()ax.legend(handles, labels, loc='best', title='Segment')plt.show()
la description détaillée des segments est une étape fondamentale pour saisir pleinement les nuances de leur comportement. Ces insights sont particulièrement valorisés par les équipes CRM et Marketing, qui les utilisent comme base pour concevoir et déployer des initiatives CRM et marketing personnalisées.
La segmentation RFM permet de cibler plus efficacement les clients, en adaptant des actions marketing spécifiques à leurs comportements d’achat.
VIP : Ces clients valorisent fortement l’image et contribuent au développement du CA de la marque.
==> Assurer la satisfaction : Se concentrer sur le maintien de leur satisfaction grâce à un service exceptionnel, des offres personnalisées et des avantages exclusifs. Mettre en place des programmes de fidélité et des événements exclusifs pour les faire sentir valorisés et spéciaux.
Régulier : Ces clients montrent un intérêt soutenu pour la marque et ses produits.
==> Développer (Up et Cross Selling) : Encourager ces clients à acheter plus fréquemment ou à améliorer leurs achats. Proposer des recommandations de produits, des offres groupées et des promotions ciblées pour augmenter leurs dépenses.
Occasionnel : Ces clients achètent occasionnellement auprès de la marque et peuvent également acheter des produits concurrents.
==> Fidéliser : Mettre en œuvre des stratégies pour convertir ces acheteurs occasionnels en clients réguliers. Proposer des programmes de fidélité, des suivis personnalisés et des incitations pour les achats répétés afin de favoriser la fidélité à la marque.
Opportuniste : Ces clients achètent principalement pendant les soldes ou lors de périodes de fortes remises.
==> Encourager d’autres occasions : Créer davantage d’occasions pour ces clients d’acheter en offrant des remises ciblées, des ventes flash et un accès exclusif anticipé aux événements de soldes. Mettre en avant la valeur qu’ils obtiennent grâce aux offres.
Petit : Ces clients dépensent peu par achat mais effectuent des achats de manière fréquente.
==> Développer le Cross Selling : Promouvoir des produits complémentaires à leurs achats habituels. Suggérer des accessoires, des produits supplémentaires ou des articles complémentaires pour augmenter la valeur moyenne de leurs commandes.
Endormis : Ces clients se sont éloignés de la marque et n’ont pas engagé récemment.
==> Action de rattrapage : Mettre en œuvre des stratégies pour réengager ces clients. Cela pourrait inclure des campagnes de réactivation spéciales, des messages personnalisés et des offres adaptées à leur comportement d’achat passé. Comprendre et adresser les raisons de leur désengagement.
Nouveau : Ces clients sont nouveaux et sont susceptibles d’évaluer et de comparer la marque avec des concurrents.
==> Déclencher le réachat : Se concentrer sur la création d’une première impression forte. Offrir des remises de bienvenue, des expériences d’onboarding faciles et du contenu éducatif sur la marque et les produits. Suivre avec des communications personnalisées pour encourager un deuxième achat et commencer à bâtir la fidélité.
Conclusion
La segmentation RFM, avec sa simplicité et sa facilité d’implémentation, s’est révélée être un outil efficace pour cerner et cibler les clients. Elle permet de personnaliser les actions marketing et de renforcer la fidélité client.
Néanmoins, elle présente des limites, principalement son focus sur des aspects financiers, en négligeant d’autres facettes importantes du comportement client comme les préférences ou les habitudes d’achat. De plus, elle peut entraîner une sur-sollicitation des clients les plus fidèles, risquant de diminuer l’efficacité des efforts marketing.
À mesure que l’entreprise gagne en maturité Data, il sera nécessaire de s’orienter vers une segmentation plus complète et plus stratégique, telle que la segmentation comportementale, pour une analyse plus détaillée et précise des clients en prenant en compte leurs préférences et leurs habitudes d’achat.