rfm: Python Package for RFM Analysis and Customer Segmentation
rfm is a Python package that provides recency, frequency, monetary analysis results for a certain transactional dataset within a snap. Its flexible structure and multiple automated functionalities provide easy and intuitive approach to RFM Analysis in an automated fashion. It aims to be a ready-made python package with high-level and quick prototyping. On practical hand, real world data is easily suited and adapted by the package. Additionally, it can make colorful, intuitive graphs using a matplotlib backend without breaking a sweat.
- Python (>=3.7)
- Pandas (>=1.2.4)
- NumPy (>=1.20.1)
- matplotlib (>=3.3.4)
To install the current release (Ubuntu and Windows):
$ pip install rfm
# predefine a transaction dataset as df
>>> from rfm import RFM
>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount')
>>> r.plot_segment_distribution()
<-- Temporarily Hosted Here -->
Read required dataframe
>>> df = pd.read_csv('~./data.csv')
Import RFM package and start rfm analysis automatically:
>>> from rfm import RFM
>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount')
>>> r.rfm_table
If you want to do rfm analysis manually:
>>> r = RFM(df, customer_id='CustomerID', transaction_date='InvoiceDate', amount='Amount', automated=False)
returns resultant rfm table df generated with recency, frequency & monetary values and scores along with segments
>>> r.rfm_table
returns segment table df with 10 unique categories i.e. Champions, Loyal Accounts etc.
>>> r.segment_table
Plots recency, frequency and monetary histograms in a single row
>>> r.plot_rfm_histograms()
Plots orders by customer number
>>> r.plot_rfm_order_distribution()
Plots scatterplot of two input columns
>>> r.plot_versace_plot(column1='recency',column2='monetary_value')
>>> r.plot_versace_plot(column1='recency',column2='frequency')
>>> r.plot_versace_plot(column1='frequency',column2='monetary_value')
Plots Distribution of input column by segment
>>> r.plot_distribution_by_segment(column='recency',take='median')
>>> r.plot_distribution_by_segment(column='frequency',take='median')
>>> r.plot_distribution_by_segment(column='monetary_value',take='median')
Plots column distribution of input column
>>> r.plot_column_distribution(column='recency')
>>> r.plot_column_distribution(column='frequency')
>>> r.plot_column_distribution(column='monetary_value')
>>> r.plot_segment_distribution()
Plots Segment Distribution, i.e. Segments vs no. of customers
returns rfm results df with input category
>>> r.find_customers('Champions')