Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer RFM-Style Revenue Insights | Revenue Breakdowns
Quizzes & Challenges
Quizzes
Challenges
/
Business Analytics and Decision Making with Python

bookRFM-Style Revenue Insights

Understanding how to segment your customers based on their purchasing behavior is crucial for maximizing revenue and tailoring effective marketing strategies. One of the most widely used frameworks for this purpose is RFM analysis. RFM stands for Recency, Frequency, and Monetary value:

  • Recency: how recently a customer made a purchase;
  • Frequency: how often a customer makes purchases;
  • Monetary: how much money a customer spends.

RFM analysis allows you to rank and group customers based on their transaction history. This segmentation is highly relevant because it helps you identify your most valuable customers, those at risk of churn, and those who might respond best to targeted offers. By focusing on these three dimensions, you can prioritize retention efforts, personalize outreach, and allocate resources more effectively.

1234567891011121314151617181920212223242526272829303132
import pandas as pd from datetime import datetime # Sample transaction data data = { "customer_id": [101, 102, 101, 103, 102, 104, 101, 103, 105, 104, 102, 105], "transaction_date": [ "2024-05-01", "2024-05-03", "2024-05-10", "2024-05-12", "2024-05-15", "2024-05-16", "2024-06-01", "2024-06-03", "2024-06-05", "2024-06-10", "2024-06-12", "2024-06-15" ], "amount": [120, 200, 80, 150, 100, 300, 60, 130, 220, 180, 90, 160] } df = pd.DataFrame(data) df["transaction_date"] = pd.to_datetime(df["transaction_date"]) # Set analysis date analysis_date = datetime(2024, 6, 16) # Compute RFM metrics for each customer rfm = df.groupby("customer_id").agg({ "transaction_date": lambda x: (analysis_date - x.max()).days, "customer_id": "count", "amount": "sum" }).rename(columns={ "transaction_date": "recency", "customer_id": "frequency", "amount": "monetary" }).reset_index() print(rfm)
copy
12345678910111213141516
# Rank-based qcut never fails because ranks are always unique rfm["r_score"] = pd.qcut(rfm["recency"].rank(method="first"), 3, labels=[3, 2, 1]) rfm["f_score"] = pd.qcut(rfm["frequency"].rank(method="first"), 3, labels=[1, 2, 3]) rfm["m_score"] = pd.qcut(rfm["monetary"].rank(method="first"), 3, labels=[1, 2, 3]) # Combine the scores rfm["rfm_segment"] = ( rfm["r_score"].astype(str) + rfm["f_score"].astype(str) + rfm["m_score"].astype(str) ) print(rfm[[ "customer_id", "recency", "frequency", "monetary", "r_score", "f_score", "m_score", "rfm_segment" ]])
copy

By segmenting customers into RFM groups, you gain actionable insight into their value and engagement level. Customers with high RFM scores are your best customers: they buy often, spend more, and purchased recently. You can reward these customers with loyalty offers or exclusive deals. Customers with low recency but high frequency and monetary scores may be at risk of churning—these are prime candidates for win-back campaigns. Those with low frequency or monetary value but recent activity might be nurtured to increase their engagement.

RFM segmentation informs your marketing and retention strategies by allowing you to:

  • Target high-value customers with personalized rewards;
  • Identify and re-engage at-risk customers before they churn;
  • Allocate marketing resources to segments with the highest potential for growth;
  • Develop tailored messaging and offers based on customer behavior.

This approach ensures that your retention and growth efforts are data-driven and focused where they will have the greatest impact.

question mark

Which of the following statements about RFM analysis are correct? Each correct option ends with a dot.

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

bookRFM-Style Revenue Insights

Veeg om het menu te tonen

Understanding how to segment your customers based on their purchasing behavior is crucial for maximizing revenue and tailoring effective marketing strategies. One of the most widely used frameworks for this purpose is RFM analysis. RFM stands for Recency, Frequency, and Monetary value:

  • Recency: how recently a customer made a purchase;
  • Frequency: how often a customer makes purchases;
  • Monetary: how much money a customer spends.

RFM analysis allows you to rank and group customers based on their transaction history. This segmentation is highly relevant because it helps you identify your most valuable customers, those at risk of churn, and those who might respond best to targeted offers. By focusing on these three dimensions, you can prioritize retention efforts, personalize outreach, and allocate resources more effectively.

1234567891011121314151617181920212223242526272829303132
import pandas as pd from datetime import datetime # Sample transaction data data = { "customer_id": [101, 102, 101, 103, 102, 104, 101, 103, 105, 104, 102, 105], "transaction_date": [ "2024-05-01", "2024-05-03", "2024-05-10", "2024-05-12", "2024-05-15", "2024-05-16", "2024-06-01", "2024-06-03", "2024-06-05", "2024-06-10", "2024-06-12", "2024-06-15" ], "amount": [120, 200, 80, 150, 100, 300, 60, 130, 220, 180, 90, 160] } df = pd.DataFrame(data) df["transaction_date"] = pd.to_datetime(df["transaction_date"]) # Set analysis date analysis_date = datetime(2024, 6, 16) # Compute RFM metrics for each customer rfm = df.groupby("customer_id").agg({ "transaction_date": lambda x: (analysis_date - x.max()).days, "customer_id": "count", "amount": "sum" }).rename(columns={ "transaction_date": "recency", "customer_id": "frequency", "amount": "monetary" }).reset_index() print(rfm)
copy
12345678910111213141516
# Rank-based qcut never fails because ranks are always unique rfm["r_score"] = pd.qcut(rfm["recency"].rank(method="first"), 3, labels=[3, 2, 1]) rfm["f_score"] = pd.qcut(rfm["frequency"].rank(method="first"), 3, labels=[1, 2, 3]) rfm["m_score"] = pd.qcut(rfm["monetary"].rank(method="first"), 3, labels=[1, 2, 3]) # Combine the scores rfm["rfm_segment"] = ( rfm["r_score"].astype(str) + rfm["f_score"].astype(str) + rfm["m_score"].astype(str) ) print(rfm[[ "customer_id", "recency", "frequency", "monetary", "r_score", "f_score", "m_score", "rfm_segment" ]])
copy

By segmenting customers into RFM groups, you gain actionable insight into their value and engagement level. Customers with high RFM scores are your best customers: they buy often, spend more, and purchased recently. You can reward these customers with loyalty offers or exclusive deals. Customers with low recency but high frequency and monetary scores may be at risk of churning—these are prime candidates for win-back campaigns. Those with low frequency or monetary value but recent activity might be nurtured to increase their engagement.

RFM segmentation informs your marketing and retention strategies by allowing you to:

  • Target high-value customers with personalized rewards;
  • Identify and re-engage at-risk customers before they churn;
  • Allocate marketing resources to segments with the highest potential for growth;
  • Develop tailored messaging and offers based on customer behavior.

This approach ensures that your retention and growth efforts are data-driven and focused where they will have the greatest impact.

question mark

Which of the following statements about RFM analysis are correct? Each correct option ends with a dot.

Select the correct answer

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 3
some-alt