Python实现LRFM模型分析客户价值

news/2024/5/20 7:01:46 标签: 聚类, 数据分析, 大数据, 数据挖掘, 推荐系统

作者:Dake

1. 分析背景

这是一份某电商平台的销售数据,数据包含2010年4月22到2014年7月24的销售数据。分析该销售数据,可以发现客户价值。

现利用KMeans聚类实现LRFM模型来分析客户的价值,便于客户分群,针对性推广,提高销售额。

LRFM模型定义:

  • L:会员创建日期距离距离2014年7月25的时间间隔(单位:月 )

  • R:会员最近一次购买时间距离2014年7月25的时间间隔(单位:月 )

  • F:会员购买次数

  • M:会员的总购买金额

2. 分析流程

3. 数据探索

3.1 导入相关包和读取数据

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
from sklearn import preprocessing
from datetime import datetime
from sklearn.cluster import KMeans

plt.rcParams['font.sans-serif'] = 'SimHei'
%matplotlib inline

# 读取数据
df = pd.read_csv(r'C:/Users/Administrator/Desktop/RFM分析1.csv',
                engine='python')
# 查看行列                
df.shape

输出:

3.2 查看表结构


从图可以看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。

3.3 描述性分析查看


这里销售金额为负数的情况,数据清洗的时候得把这些异常值过滤。

4. 数据清洗

4.1 将销售额<0的过滤掉

# 销售金额有小于等于0的,直接过滤掉
# 这里有22542条数据
data = df[df['销售金额'] >0]
data.shape

输出:

4.2 会员创建日期、销售日期转换成datetime格式

data['会员创建日期'] = pd.to_datetime(data['会员创建日期'])
data['销售日期'] = pd.to_datetime(data['销售日期'])

# 查看是否转换成功
data.info()

输出:

5. 构建L、R、F、M指标

5.1 提取有用指标

  • L = 相对日期(这里我指定:2014年7月25) - 会员创建日期

  • R = 相对日期(这里我指定:2014年7月25) - 最晚(大)的销售日期

  • F = 用户购买的次数(这里针对流水号进行计数不同)

  • M = 用户购买的汇总金额
    代买实现:

# 计算L,再转换成月,这里转换成月,直接除于30天,保留两位小数
# L是最早的购买日期距离会员创建日期
data1 = data.groupby('UseId').agg({'会员创建日期': ['min'],
                                    '销售日期': ['min', 'max'], 
                                   '销售金额':['sum'],
                                  '流水号':['nunique']})
data1

输出:


删除一层列名,并重新进行命名:
# 删除第一层的列名
data1.columns = [col[1] for col in data1.columns]
# 重新命名列名
data1.columns = ['会员创建日期', '最早销售日期', '最晚销售日期', 'M', 'F']
data1

输出:


M、F指标已经构建完成。

5.2 购买L、R指标

# 先计算L,R,再转化成单位月
data1['L'] = datetime.strptime('2014-7-25', '%Y-%m-%d') - data1['会员创建日期']
data1['R'] = datetime.strptime('2014-7-25', '%Y-%m-%d') - data1['最晚销售日期']

# 将L、R转换成月做为单位
data1['L'] = data1['L'].apply(lambda x: round(x.days/30,3))
data1['R'] = data1['R'].apply(lambda x: round(x.days/30,3))
data1

输出结果:


提取有用的指标:
LRFM_data = data1[['L', 'R', 'F', 'M']]

6. 进行L、R、F、M数据的Z-Score转换

ss = preprocessing.StandardScaler()
ss_LRFM_data = ss.fit_transform(LRFM_data)
ss_LRFM_data

输出:

7. 使用KMeans进行聚类分析

# n_clusters聚类的个数
kmodel = KMeans(n_clusters=5, n_jobs=4)
kmodel.fit(ss_LRFM_data)
#查看聚类中心
kmodel.cluster_centers_ 

输出:


将结果转成DataFrame
client_level = pd.DataFrame(kmodel.cluster_centers_, 
                            index=['客户群1', '客户群2', '客户群3', '客户群4', '客户群5'],
                           columns=['L', 'R', 'F', 'M'])
client_level

输出:

8. 针对结果进行客户群的分类

  • L越大,代表注册会员时间距离指定时间(2014年7月25)越长,代表老客户,该指标越大越好。

  • R越小,代表购买时间距离指定时间(2014年7月25)越短,R越小越好。

  • F越大,代表会员的购买次数越多。

  • M越大,代表会员购买的金额越多。

客户群1分析:
L大,R小,F大,M较大,这里判断是重要发展客户。

客户群2分析:
L大,R大,F小,M较小,这里判断是重要挽留客户。

客户群3分析:
L小,R小,F小,M小,这里判断是低价值客户。

客户群4分析:
L大,R大,F小,M小,这里判断是一般价值客户。

客户群5分析:
L大,R小,F大,M大,这里判断是重要保持客户。


猜你喜欢:
数据分析实战:母婴商品分析

《吊打分析师》实战—我要租个好房

简单的Excel数据分析案例

为什么要学统计学:赤裸裸的统计学

成为数据分析师的第三年,我写了10W字

@ 号主:可乐
@ 公众号/知乎专栏/头条/简书:可乐的数据分析之路
@ 个人微信:data_cola


http://www.niftyadmin.cn/n/1517422.html

相关文章

python3.5+mysql安装及编程学习

首先需要在官网下载MySQL&#xff0c;https://dev.mysql.com/downloads/installer/ 在官网下载python3.5&#xff0c;https://www.python.org/downloads/release/python-354/ 安装python3.5&#xff0c;安装MySQL&#xff0c;因为python3.5并没有官网的mysql接口&#xff0c;所…

关于学习时间的一点小感悟

hello大家好&#xff0c;我可乐又回来了&#xff01;刚肝完一篇文章&#xff0c;今年要做一个不拖稿的可乐&#xff01;首先非常感谢给我安慰鼓励和支持的你们&#xff0c;上一篇有点丧的文章发出后收到了很多小伙伴的爱心慰问&#xff0c;突然发现这两年的公众号没白写~~~其次…

C++日志编程之glog

google的glog可以用于c中记录日志&#xff0c;帮忙调试代码&#xff1a; git clone https://github.com/google/glog.git ./autogen.sh ./configure make -j8 sudo make installgoogle英文教程原版&#xff1a;/doc/glog.html google中文翻译版&#xff1a;http://www.yeolar.c…

C++命令行解析之gflags

git clone https://github.com/gflags/gflags.git mkdir build && cdbuild ccmake .. (sudo apt-get install cmake-curses-gui) make make test (optional) makeinstall (optional)安装教程&#xff1a;https://github.com/gflags/gflags/blob/master/INSTALL.m…

微型计算机原理期末试题,微机原理期末考试试题及答案.doc

第 PAGE 6 页上海应用技术学院2008—2009学年第 一 学期《微机原理及应用》期末试卷 A课程代码: B203205A 学分: 3.5 考试时间: 100 分钟课程序号: 1958&#xff0c;1960班级&#xff1a; 学号&#xff1a; 姓名:我已阅读了有关的考试规定和纪律要求&#xff0c;愿意在考试中遵…

泰坦尼克号数据分析

这是一个很经典的案例&#xff0c;很多博主都写过&#xff0c;对&#xff0c;就是它&#xff1a;泰坦尼克号生存率的分析&#xff0c;它是kaggle上的一道题&#xff0c;通过船上乘客的信息分析和建模&#xff0c;预测哪些乘客得以生还。我们就非常粗暴地拿这个数据集做一个简单…

深入浅出数据分析

好久没有更新读书系列的文章了&#xff0c;今天推荐的这本《深入浅出数据分析》是一本非常适合数据分析行业入门的读物&#xff0c;以章回小说的方式由浅入深地讲述数据分析从业人员要用到的方法&#xff0c;从实际案例出发&#xff0c;告别晦涩难懂的概念。文章末尾有关于这本…

C++智能指针之boost

参考文献&#xff1a;https://www.codeproject.com/Articles/8394/Smart-Pointers-to-boost-your-code std:: auto_ptr中的智能指针有如下缺点&#xff1a; &#xff08;1&#xff09;auto_ptr不能共享所有权&#xff1b;&#xff08;2&#xff09;auto_ptr不能指向数组&#x…