一、理论基础

(1)RFM模型

R:Recency 最近一次购买–付款日期-按照买家昵称 groupby 取付款日期的信息

F:Frequency 购买频次-付款日期-按照买家昵称 groupby 取付款曰期次数

M:Monetary 购买金额-实付金额-按照买家昵称 groupby 取实付金额的求和

R F M 标签
重要价值客户
重要保持客户
重要发展客户
重要挽留客户
一般价值客户
一般保持客户
一般发展客户
一般挽留客户

(2)问题:客户往往是聚集程度比较高的(从可视化角度),不会均质的分布在8个维度里。

(3)背景:业务方/需求方可能需要我们对应的对客户进行分群,以对应他们准备的3种不同的礼包/优惠券/套餐/推荐,我们作为数据分析师,需要根据客户的一些特征进行分群。

(4)算法思路:

  1. 分类:事先需要准备训练数据集,将训练数据集只保留特征,并提报给业务/需求方由较为有经验的资深员工,进行标签标注。划定哪些客户为第一类,哪些第二类,哪些第三类。标注结束后,用以训练模型并且预测其他客户的分类。

  2. 聚类:使用R/F/M三个特征进行kmeans建模,直接给定k值为3,完成三种不同客户类群的直接划分。

二、导入数据并查看

(1)总览信息查看

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltdata = pd.read_excel('data/电商用户价值挖掘.xlsx')
data.head()
data.info()
data.isnull().mean()

城市有空值,但不影响RFM模型。

(2)分别查看各有用字段

① 查看数据的时间周期

# 最早的时间为min
data['付款日期'].min()  # Timestamp('2019-01-01 00:17:59')
# 最晚的时间为max
data['付款日期'].max()  # Timestamp('2019-06-30 22:46:22.511000')

② 查看订单状态

data['订单状态'].value_counts()
"""
交易成功                 27793
付款以后用户退款成功,交易自动关闭     1040
Name: 订单状态, dtype: int64
"""

(3)进行一些简单的预处理

① 扣除退款数据

data = data[data['订单状态'] == '交易成功']

② 去重

# drop_duplicate(subset=[])
# duplicated
data.drop_duplicates(inplace=True)

三、构建RFM模型

3.1 获取RFM数据

(1)添加距窗口日期结束天数列

# 构造R值
data['R_'] = (end_date - data['付款日期']).dt.days

(2)求出RFM

# 只取需要的列
users_df = data[['买家昵称', 'R_', '付款日期', '实付金额']].copy()
# groupby一次性求出RFM
rfm_df = users_df.groupby('买家昵称').agg({'R_':'min', '付款日期':'count', '实付金额':'sum'})
# 改名
rfm_df.columns = ['R', 'F', 'M']
# 查看
rfm_df.head()

(3)数据处理

① 观察描述性统计信息

rfm_df.describe([0.01, 0.99]).T

② F大于3的都归为4

rfm_df['F'][rfm_df['F']>3] = 4

③ M大于500的都归为500

rfm_df['M'][rfm_df['M']>500] = 500

3.2 建立统计学的RFM模型

(1)制作阈值,打上标签

# 制作阈值
R_threshold = rfm_df['R'].median()
rfm_df.loc[:,'R_SCORE'] = rfm_df['R'].map(lambda x: x > R_threshold)F_threshold = rfm_df['F'].median()
rfm_df.loc[:,'F_SCORE'] = rfm_df['F'].map(lambda x: x > F_threshold)M_threshold = rfm_df['M'].median()
rfm_df.loc[:,'M_SCORE'] = rfm_df['M'].map(lambda x: x > M_threshold)

(2)3种标签汇总

# 汇总的标签
rfm_df['SCORE'] = rfm_df['R_SCORE'] * 100 + rfm_df['F_SCORE'] * 10 + rfm_df['M_SCORE'] * 1

(3)映射成文字标签

# 基于最后score进行映射,完成对应的代码和对应的分类
user_cate_dict = {1: '重要挽留客户',111: '重要价值客户',11: '重要保持客户',101: '重要发展客户',0: '一般挽留客户',110: '一般价值客户',10: '一般保持客户',100: '一般发展客户'
}
rfm_df['user_cate'] = rfm_df['SCORE'].map(user_cate_dict)

(4)画饼图

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = Falseplt.figure(figsize=(12,8))
plt.pie(rfm_df['user_cate'].value_counts(),labels=rfm_df['user_cate'].value_counts().index,autopct='%.1f%%')plt.show()

3.3 KMeans聚类分群

(1)数据预处理

# 数据预处理 标准化
from sklearn.preprocessing import StandardScaler# 标准化 实例化 - 转化
ss = StandardScaler()
rfm = ss.fit_transform(rfm_df[['R', 'F', 'M']])# 重新创建DataFrame对象
rfm = pd.DataFrame(data=rfm, columns=['R', 'F', 'M'])

(2)建模分群并评分

from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_samples, silhouette_score# 使用KMeans进行建模
kmeans = KMeans(n_clusters=4)
# kmeans也可以先fit 再transform
kmeans.fit(rfm)
# 相当于predict
labels = kmeans.labels_
# 使用轮廓系数查看总体评分
silhouette_score(rfm, labels)# 如何去找一个聚类的代表(聚类中心)
centers = kmeans.cluster_centers_

(3)画饼图

# 画图
plt.figure(figsize=(12,8))
plt.pie(pd.Series(labels).value_counts(),labels=pd.Series(labels).value_counts().index,autopct='%.1f%%')plt.show()

【笔记】电商RFM模型相关推荐

  1. 手把手实操|深度剖析电商贷款风控相关细节(电商贷模型)

    序言: 在电商领域中,一直都有这样的场景:对于电商企业而言,资金短缺是经常出现的问题,尤其是在目前疫情状况下,经济下行,营业额逐渐降低,现金流紧张,企业这时就会考虑去借贷融资. 有需求就有供给,目前许 ...

  2. 数据挖掘作业学习学习笔记-电商产品评论数据情感分析

    使用的教材:<电商产品评论数据情感分析> 作业&学习笔记:数据挖掘第14周 说明:书本内容详实.此篇用于自己期末回顾知识的重点内容,故做出的学习笔记缺省了书本原本的其他精粹. 随着 ...

  3. 课堂笔记 - 电商项目开发笔记-02

    易购商城 第二天 目  录 1 课程计划 3 1.1 目标 3 1.2 功能分析 3 1.2.1 相关数据表 3 1.2.2 实现的思路 3 2 第一部分:实现商品类目选择功能 4 2.1 需求分析 ...

  4. 电商营销模型——AIPL模型

    AIPL模型:首次实现品牌人群资产定量化.链路化运营 FAST模型:从数量和质量上衡量消费者运营健康度模型 GROW模型:指导大快消行业品类有的放矢的增长模型 A-I-P-L是一个可以把品牌在阿里系的 ...

  5. web前端学习笔记:电商网站结构搭建与基础区块制作

    思维导图 1.站点结构搭建 项目背景 前端开发工程师的主要任务就是将UI设计图以网页.app.小程序等前端界面呈现给用户的过程. 对于大部分前端初学者来说,直接开始写代码其实是错误的学习步骤,在企业实 ...

  6. MaxCompute在电商场景中如何进行漏斗模型分析

    简介: 本文以某电商案例为例,通过案例为您介绍如何使用离线计算并制作漏斗图. 背景 漏斗模型其实是通过产品各项数据的转化率来判断产品运营情况的工具.转化漏斗则是通过各阶段数据的转化,来判断产品在哪一个 ...

  7. 电商系统中的商品模型的分析与设计—续

    在<电商系统中的商品模型的分析与设计>中,对电商系统商品模型有一个粗浅的描述,后来有博友对货品和商品的区别以及属性有一些疑问.我也对此做一些研究,再次简单的对商品模型做一个介绍. 从SPU ...

  8. 构建高并发高可用的电商平台架构实践

    问题导读: 1.如何构建高并发电商平台架构 2.哈希.B树.倒排.bitmap的作用是什么? 3.作为软件工程师,该如何实现读写? 4.如何实现负载均衡.反向代理? 5.电商业务是什么? 6.基础中间 ...

  9. 电子证书管理系统前台_电商平台后台之商品管理系统组成模块

    "前端用户的一小步,后台系统的一大步",平时常见的功能如购物车.优惠券等,看似简单,实则在后台要经过很多条件的校验.多系统间的信息流转.下面小猪电商介绍下电商平台后台之商品管理系统 ...

最新文章

  1. linux操作系统重启后 解决nginx的pid消失问题
  2. 使用kubernetes的deployment进行RollingUpdate
  3. 【提高系列】webpack相关知识
  4. algorithm头文件下的常用函数--习题
  5. PhpStorm 配置Xdebug
  6. NRF24L01跳频抗信道干扰功能探讨
  7. php链接中二维数组传参数,JS用POST怎么传送二维数组给PHP
  8. AntD 可编辑行表格
  9. es6的Map()构造函数
  10. Java为xml跟节点添加子节点_如何将xml节点作为第一个子节点插入Java中的另一个xml文档中?...
  11. 「leetcode」463. 岛屿的周长【模拟便可】详解
  12. 【原创】asp.net静态页面生成方案
  13. 模电Aus,Uo/Us,童诗白例2.3.3。
  14. *LOJ#2134. 「NOI2015」小园丁与老司机
  15. 明日复明日,明日何其多,我生待明日,万事成蹉跎(分享)
  16. 马来西亚动画片《Ribbit》将在尼亚加拉电影节中首映
  17. [vue-router] Named Route ‘Layout‘ has a default child route. When navigating to this named route (:t
  18. android 获取亮度,如何读取Android屏幕亮度/暗淡的实时,当前值?
  19. java 批注框_Java 回复Word批注
  20. jenkins环境配置

热门文章

  1. Promisification
  2. Nature重磅:人工智能从0到1, 无师自通完爆阿法狗100-0 | 深度解析
  3. 计算机网络技术在高校的应用,浅谈计算机网络技术在高校教学管理中的应用
  4. PLC与变频器屏蔽线连接的方法
  5. 机器学习数学知识积累之概率论
  6. Android行车记录仪软件后台录像,二十四小时不间断循环录像,欢迎大家捧场
  7. 快手正在成为下一个拼多多?
  8. 清理完计算机开机屏红,Windows10电脑开机屏幕变成红色的解决方法
  9. 【报告分享】WEIQ红人营销平台双11红人营销报告-WEIQ(附下载)
  10. 小白科研笔记:理解PointRCNN中的Stage-Two细节