python做估值模型_Python实现LRFM模型分析客户价值

1. 分析背景

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

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

LRFM模型定义:ide

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

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

F:会员购买次数code

M:会员的总购买金额orm

2. 分析流程

d2cc1bdda1b40aeeec9c46a09938acbb.png

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

输出:

blog

3.2 查看表结构

1f9fef4e5c167b2bb6d18ca460a9b29c.png从图能够看出这里的数据只有class2有缺失值,这里暂时不用提取这个指标,暂不清洗。图片

3.3 描述性分析查看

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

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

输出:

4b2c0a431b9fcc4df955cf1bb8d80ee8.png

删除一层列名,并从新进行命名:

# 删除第一层的列名

data1.columns = [col[1] for col in data1.columns]

# 从新命名列名

data1.columns = ['会员建立日期', '最先销售日期', '最晚销售日期', 'M', 'F']

data1

输出:

5fc5ef8a73a2712dfaa1991a206a233b.png

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

输出:

80e582f87a11544bafc1a7aa1209d587.png

7. 使用KMeans进行聚类分析

# n_clusters聚类的个数

kmodel = KMeans(n_clusters=5, n_jobs=4)

kmodel.fit(ss_LRFM_data)

#查看聚类中心

kmodel.cluster_centers_

输出:

c712da478b121c9cc3cf495f6ec12e22.png

将结果转成DataFrame

client_level = pd.DataFrame(kmodel.cluster_centers_,

index=['客户群1', '客户群2', '客户群3', '客户群4', '客户群5'],

columns=['L', 'R', 'F', 'M'])

client_level

输出:

271739605103d3b44c0dc1344606358f.png

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大,这里判断是重要保持客户。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,非常感谢您的信任,我会尽力为您解答这个问题并给出具体实现。 以下是我给出的Python程序实现思路: 1. 数据清洗和预处理 ```python import pandas as pd import numpy as np # 加载数据集 userinfo = pd.read_excel('userinfo.xlsx') sales = pd.read_excel('sales.xlsx') # 去除重复数据 userinfo.drop_duplicates(inplace=True) sales.drop_duplicates(inplace=True) # 处理缺失值和异常值 userinfo.fillna(0, inplace=True) sales.fillna(0, inplace=True) sales = sales.clip(0, 999999) ``` 2. 数据探索和可视化 ```python import matplotlib.pyplot as plt import seaborn as sns # 统计分析 userinfo.describe() sales.describe() # 数据可视化 sns.boxplot(x=userinfo['age']) sns.distplot(sales['sales_amount']) ``` 3. 数据集成和特征工程 ```python # 合并数据集 data = pd.merge(userinfo, sales, how='inner', on='user_id') # 计算LRFM指标 grouped = data.groupby('user_id') L = grouped['order_date'].max() - grouped['order_date'].min() R = (pd.to_datetime('2022-01-01') - grouped['order_date'].max()).dt.days F = grouped['order_date'].count() M = grouped['sales_amount'].sum() RFM = pd.DataFrame({'L': L, 'R': R, 'F': F, 'M': M}) # 构建特征 features = pd.DataFrame() features['age'] = userinfo['age'] features['gender'] = userinfo['gender'] features['job'] = userinfo['job'] features = pd.concat([features, RFM], axis=1) ``` 4. 建立LRFM模型 ```python from sklearn.cluster import KMeans # K-Means 聚类 kmeans = KMeans(n_clusters=5, random_state=0) kmeans.fit(features) # 输出聚类结果 result = pd.DataFrame({'user_id': userinfo['user_id'], 'label': kmeans.labels_}) ``` 5. 用户价值分析与预测 ```python # 计算用户价值 result = pd.merge(result, RFM, how='inner', left_on='user_id', right_index=True) result = result.groupby('label').agg({'L': 'mean', 'R': 'mean', 'F': 'mean', 'M': 'mean'}) # 对未来消费行为进行预测,提出营销策略 # ... ``` 以上是我给出的Python程序实现思路,其中用到了Pandas、Numpy、Matplotlib、Seaborn和Scikit-learn等Python库。具体实现还需要根据具体的业务需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值