比较优秀的国外wordpress网站域名主机基地

当前位置: 首页 > news >正文

比较优秀的国外wordpress网站,域名主机基地,企业管理软件排行榜,net网站开发实例会员价值度模型介绍 会员价值度用来评估用户的价值情况#xff0c;是区分会员价值的重要模型和参考依据#xff0c;也是衡量不同营销效果的关键指标之一。 价值度模型一般基于交易行为产生#xff0c;衡量的是有实体转化价值的行为。常用的价值度模型是RFM RFM模型是根据…会员价值度模型介绍 会员价值度用来评估用户的价值情况是区分会员价值的重要模型和参考依据也是衡量不同营销效果的关键指标之一。 价值度模型一般基于交易行为产生衡量的是有实体转化价值的行为。常用的价值度模型是RFM RFM模型是根据会员 最近一次购买时间RRecency 购买频率FFrequency 购买金额MMonetary计算得出RFM得分 通过这3个维度来评估客户的订单活跃价值常用来做客户分群或价值区分 RFM模型基于一个固定时间点来做模型分析不同时间计算的的RFM结果可能不一样
RFM用户类别高高高重要价值用户高低高重要发展用户低高高重要保持用户低低高重要挽留用户高高低一般价值用户高低低一般发展用户低高低一般保持用户低低低一般挽留用户 RFM模型的基本实现过程 设置要做计算时的截止时间节点例如2017-5-30用来做基于该时间的数据选取和计算。 在会员数据库中以今天为时间界限向前推固定周期例如1年得到包含每个会员的会员ID、订单时间、订单金额的原始数据集。一个会员可能会产生多条订单记录。 数据预计算。从订单时间中找到各个会员距离截止时间节点最近的订单时间作为最近购买时间以会员ID为维度统计每个用户的订单数量作为购买频率将用户多个订单的订单金额求和得到总订单金额。由此得到R、F、M三个原始数据量。 R、F、M分区。对于F和M变量来讲值越大代表购买频率越高、订单金额越高但对R来讲值越小代表离截止时间节点越近因此值越好。对R、F、M分别使用五分位法做数据分区三分位也可以分位数越多划分得越详细。需要注意的是对于R来讲需要倒过来划分离截止时间越近的值划分越大。这样就得到每个用户的R、F、M三个变量的分位数值。 将3个值组合或相加得到总的RFM得分。对于RFM总得分的计算有两种方式一种是直接将3个值拼接到一起例如RFM得分为312、333、132另一种是直接将3个值相加求得一个新的汇总值例如RFM得分为6、9、6。
Excel实现RFM划分案例 以某电商公司为例 R例如正常新用户注册1周内交易7天是重要的值日用品采购周期是1个月30天是重要的值 F例如1次购买2次购买3次购买4~10次10次以上 M例如客单价300热销单品价格240 等
常见的确定RFM划分区间的套路 业务实际判断 平均值或中位数 二八法则 1. 提取用户最近一次的交易时间算出距离计算时间的差值 获取当前时间TODAY() 计算时间间隔 2. 根据天数长短赋予对应的R值R值由我们自定时间间隔越短R值越高 IF(D260,1,IF(D230,2,IF(D214,3,IF(D27,4,5)))) 3. 从历史数据中取出所有用户的购买次数根据次数多少赋予对应的F分值购买次数越多、F值越大 IF(E210,5,IF(E23,4,IF(E22,3,IF(E21,2,1)))) 4. 从历史数据中汇总求得该用户的交易总额根据金额大小赋予对应的M值交易总额越大、M值越大 IF(F21000,5,IF(F2500,4,IF(F2300,3,IF(F2230,2,1)))) 5. 分别求出RFM的中值例如中位数用中值和用户的实际值进行比较高于中值的为高否则为低 6. 在得到不同会员的RFM之后根据步骤⑤产生的两种结果有两种应用思路 6.1 思路1基于3个维度值做用户群体划分和解读对用户的价值度做分析 比如RFM得分为212的会员的F是1往往购买频率较低那就可以针对购买频率低的客户应定期发送促销活动邮件 比如RFM得分为321的会员虽然购买频率高但是订单金额低等这些客户往往具有较高的购买黏性可以考虑通过关联或搭配销售的方式提升订单金额。
6.2 思路2基于RFM的汇总得分评估所有会员的价值度并可以做价值度排名。同时该得分还可以作为输入维度与其他维度一起作为其他数据分析和挖掘模型的输入变量为分析建模提供基础。 RFM小结 R就是距离自定义的时间点最近一次购买的时间间隔、间隔越小得分越高 F就是自定义的时间范围内购买频率、次数越多得分越高 M就是自定义的时间范围内购买总金额总额越大得分越高 RFM的区间和其对应的得分由我们自定义 RFM计算案例 案例背景 用户价值细分 是了解用户价值度的重要途径针对交易数据分析的常用模型是RFM模型 业务对RFM的结果要求 对用户做分组 将每个组的用户特征概括和总结出来便于后续精细化运营不同的客户群体且根据不同群体做定制化或差异性的营销和关怀
用户分群 规划目标将RFM的3个维度分别做3个区间的离散化 用户群体最大有3×3×327个 划分区间过多则不利于用户群体的拆分 区间过少则可能导致每个特征上的用户区分不显著
交付结果 给业务部门做运营的分析结果要导出为Excel文件用于做后续分析和二次加工使用 RFM的结果还会供其他模型的建模使用RFM本身的结果可以作为新的局部性特征因此数据的输出需要有本地文件和写数据库两种方式
数据说明 案例的数据集为 data/sales.xlsx 选择近4年订单数据从不同的年份对比不同时间下各个分组的绝对值变化情况方便了解会员的波动 程序输出RFM得分数据写入本地文件sales_rfm_score.xlsx和MySQL数据库sales_rfm_score表中
用到的技术点 通过Python代码手动实现RFM模型主要用到的库包括: time、numpy和pandas 在结果展示时使用了pyecharts的3D柱形图
案例数据 案例数据是某企业从2015年到2018年共4年的用户订单抽样数据数据来源于销售系统 数据在Excel中包含5个sheet前4个sheet以年份为单位存储为单个sheet中最后一张会员等级表为用户的等级表 前4张表的数据概要如下。 特征变量数4 数据记录数30774/41278/50839/81349 是否有NA值有 是否有异常值有 具体数据特征如下前4张表的数据字段说明 会员ID每个会员的ID唯一由纯数字组成整型 提交日期订单日提交日期 订单号订单ID每个订单的ID唯一由纯数字组成整型 订单金额订单金额浮点型数据 会员等级表中是所有会员的会员ID对应会员等级的情况包括以下两个字段 会员ID该ID可与前面的订单表中的会员ID关联 会员等级会员等级以数字区分数字越大级别越高
代码 导入模块 import pandas as pd import numpy as np import os ​ import pyecharts.options as opts from pyecharts.charts import Bar3D ​ from sqlalchemy import create_engine ​ import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] # 正常显示汉字 plt.rcParams[axes.unicode_minus] False # 正常显示负号 ​ os.chdir(rD:\CodeProject\03data_processing_analysis\my_project) os.getcwd() 读取数据

因为读取的是5张表, 所以获取的是: 字典, 键表名, 值: 该表的数据

sheet_names [2015, 2016, 2017, 2018, 会员等级] ​ sheet_data pd.read_excel(data/sales.xlsx, sheet_namesheet_names) sheet_data #%% print(type(sheet_data)) ​

查看某年具体信息

sheet_data[2015].describe() sheet_data[2015].info() sheet_data[2015].isnull().sum() ​

查看所有数据

for sheet_name in sheet_names:print(\n\n下面信息是表: , sheet_name, \n)print(sheet_data[sheet_name].describe())print(sheet_data[sheet_name].info()) 数据读取结果说明: 每个sheet中的数据都能正常读取无任何错误 日期列提交日期已经被自动识别为日期格式后期不必转换 订单金额的分布是不均匀的里面有明显的极值 例如2016年的数据中最大值为174900最小值仅为0.1 极大极小值相差过大数据会受极值影响 订单金额中的最小值包括0、0.1这样的金额可能为非正常订单与业务方沟通后确认 最大值的订单金额有效通常是客户一次性购买多个大型商品 而订单金额为0.1元这类使用优惠券支付的订单没有实际意义 除此0、0.1这样的金额之外所有低于1元的订单均有这个问题因此需要在后续处理中去掉 有的表中存在缺失值记录但数量不多选择丢弃或填充均可
数据预处理 删掉缺失值, 筛选出金额大于1的数据, 给表新增一列, 表示固定的统计时间
for sheet_name in sheet_names[:-1]:     # 只处理前4张表# 1. 删除空值sheet_data[sheet_name] sheet_data[sheet_name].dropna()# 2. 筛选大于1的数据# 写法1sheet_data[sheet_name] sheet_data[sheet_name][sheet_data[sheet_name][订单金额] 1]# 写法2# sheet_data[sheet_name] sheet_data[sheet_name].query(订单金额 1)# 3. 给表新增1列, 表示该年的统计时间sheet_data[sheet_name][max_year_date] sheet_data[sheet_name][提交日期].max() ​

查看所有数据

for sheet_name in sheet_names:print(\n\n下面信息是表: , sheet_name, \n)print(sheet_data[sheet_name].describe())print(sheet_data[sheet_name].info()) 把前四年的数据, 拼接到一起

1. 合并前4张表.   list(sheet_data.values())[:-1] [df1, df2, df3, df4]

data: 数据,   date: 日期

sheet_data.values(): 从字典中, 获取所有的: 值, 即: 每个值都是1个df对象.

list(sheet_data.values()): 把数据格式转成 列表.

data_merge pd.concat(list(sheet_data.values())[:-1]) ​

2. 给表新增1列, year, 表示该订单所属的: 年份.

data_merge[year] data_merge[提交日期].dt.year ​

3. 给表新增1列, date_inverval 表示: 订单上次生成的时间(即: 该订单距统计时间的间隔. ).

data_merge[date_interval] data_merge[max_year_date] - data_merge[提交日期] ​

4. 把上述的 时间间隔转成天, 即: 364 days 364

data_merge[date_interval] data_merge[date_interval].dt.days ​

5. 查看处理后的结果集.

data_merge 代码说明 汇总所有数据: 将4年的数据使用pd.concat方法合并为一个完整的dataframe data_merge后续的所有计算都能基于同一个dataframe进行而不用写循环代码段对每个年份的数据单独计算 获取各自年份数据: 先计算各自年份的最大日期与每个行的日期的差得到日期间隔 再增加一列新的字段为每个记录行发生的年份使用data_merge[提交日期].dt.year实现 关于pandas的 datetime类型 dt是pandas中Series时间序列datetime类属性的访问对象 除了代码中用到的year外还包括date、dayofweek、dayofyear、days_in_month、freq、days、hour、microsecond、minute、month、quarter、second、time、week、weekday、weekday_name、weekofyear等 转换日期间隔为数字通过 .dt.days 方式获取时间差列中的间隔天数数字 根据 会员id 和 年 进行分组, 计算: date_inverval: min 间隔时间, 订单号: count 频次, 订单金额: sum 总金额

获取RFM值

M

# data_merge.groupby([会员ID, year]).订单金额.sum()

data_merge.pivot_table(index会员ID, columnsyear, values订单金额, aggfuncsum)

# F

# data_merge.groupby([会员ID, year]).订单号.count()

data_merge.pivot_table(index会员ID, columnsyear, values订单号, aggfunccount)

# R

# data_merge.groupby([会员ID, year]).date_inverval.min()

data_merge.pivot_table(index会员ID, columnsyear, valuesdate_inverval, aggfuncmin)

​ rfm_gb data_merge.groupby([year, 会员ID], as_indexFalse).agg({# 最小时间间隔date_inverval:min,# 购买频次订单号:count,# 总金额订单金额:sum }) ​

修改列名

rfm_gb.columns [year, 会员ID, r, f, m] rfm_gb 代码说明 上面代码框中的第一行代码是基于年份和会员ID分别做RFM原始值的聚合计算 这里使用groupby分组以year和会员ID为联合主键设置as_indexFalse意味着year和会员ID不作为index列而是普通的数据框结果列。后面的agg方法实际上是一个“批量”聚合功能的函数它实现了对date_interval、提交日期、订单金额三列分别以min、count、sum做聚合计算的功能。否则我们需要分别写3条goupby来实现3个聚合计算 统计分析 介绍 pd.cut(要处理的列, 划分几段, 生成的值, 是否包含左边界值:最小值)

参1: 要处理的字段

参2: bins表示划分几个区间, 如果传入固定值, 则会等分, 如果传入的是列表, 则自定义划分(区间左开右闭)

参3: labels表示每个区间对应的值

参4: include_lowest表示是否包含左边界最小值

pd.cut(rfm_gb[r], bins3, labels[3, 2, 1], include_lowestTrue) # 生成规则, 默认: 包右不包左 自定义三个列的划分 在做RFM划分时基本逻辑是分别对R、F、M做离散化操作然后再计算RFM。而离散化本身有多种方法可选由于我们要对数据做RFM离散化因此需要先看下数据的基本分布状态 # 1. 查看数据的分布情况. rfm_gb.iloc[:, 2:].describe().T # 2. 手动编写, r, f, m这三列值的 划分区间. r_bins [-1, 79, 255, 365]     # Recency: 最小购买间隔时间 f_bins [0, 2, 5, 130]         # Frequency: 购买频次 m_bins [1, 69, 1199, 206252]  # Monetary: 总金额 为什么做上边的自定义区间划分呢汇总后的数据总共有14万条从基本概要看出 r和m区间划分 r和m的数据分布相对较为离散表现在min、25%、50%、75%和max的数据没有特别集中 而从f购买频率则可以看出大部分用户的分布都趋近于1表现是从min到75%的分段值都是1且mean均值才为1.365 所以我们可以选择25%和75%作为r和m区间划分的2个边界值 f的分布情况说明 r和m本身能较好地区分用户特征而f则无法区分大量的用户只有1个订单 行业属性家电原因1年购买1次比较普遍其中包含新客户以及老客户在当年的第1次购买 与业务部门沟通划分时可以使用2和5来作为边界 业务部门认为当年购买2次可被定义为复购用户而非累计订单的数量计算复购用户 业务部门认为普通用户购买5次已经是非常高的次数超过该次数就属于非常高价值用户群体 该值是基于业务经验和日常数据报表获得的
区间边界的基本原则如下 中间2个边界值r和m是分别通过25%和75%的值获取的f是业务与数据部门定义的。 最小值边界比各个维度的最小值小即可。 最大值边界大于等于各个维度的最大值即可 最小值边界为什么要小于各个维度的最小值: 这是由于在边界上的数据归属有一个基本准则要么属于区间左侧要么属于区间右侧。如f_bins中的2处于边界上要么属于左侧区间要么属于右侧区间 在后续使用pd.cut方法中对于自定义边界实行的是左开右闭的原则即数据属于右侧区间f_bins中的2就属于右侧区间。最左侧的值是无法划分为任何区间的因此在定义最小值时一定要将最小值的边界值 举例[12345]假如数据划分的区间边界是[135]即划分为2份 其中的2/3被划分到(13]区间中 3/4/5被划分到(35]区间中 1无法划分到任何一个正常区间内
演示 pd.cut() 函数, 方便的将一列连续型数据切分成类别型(即: 把数据分成指定的n个区间, 包右不包左) pd.cut() 参1: 要处理的字段 参2: bins表示划分几个区间, 如果传入固定值, 则会等分, 如果传入的是列表, 则自定义划分(区间左开右闭) 参3: labels表示每个区间对应的值 参4: include_lowest表示是否包含左边界最小值 ​

3. 具体的获取 r, f, m评分的过程.

Recency: 最小购买间隔时间, 越小越好, 即: 值越小, 评分越高

rfm_gb[r_label] pd.cut(rfm_gb[r], binsr_bins, labels[3, 2, 1])

Frequency: 购买频次, 越大越好, 即: 值越大, 评分越高

rfm_gb[f_label] pd.cut(rfm_gb[f], binsf_bins, labels[1, 2, 3])

Monetary: 总金额, 越大越好, 即: 值越大, 评分越高

rfm_gb[m_label] pd.cut(rfm_gb[m], binsm_bins, labels[1, 2, 3])

查看结果.

rfm_gb

4. 优化上述的代码, 划分区间的时候, 我们可以通过: for循环生成.

list1 [i for i in range(4 - 1, 0, -1)]

list1

Recency: 最小购买间隔时间, 越小越好, 即: 值越小, 评分越高

rfm_gb[r_label] pd.cut(rfm_gb[r], binsr_bins, labels[i for i in range(len(r_bins) - 1, 0, -1)])

Frequency: 购买频次, 越大越好, 即: 值越大, 评分越高

rfm_gb[f_label] pd.cut(rfm_gb[f], binsf_bins, labels[i 1 for i in range(len(f_bins) - 1)])

Monetary: 总金额, 越大越好, 即: 值越大, 评分越高

rfm_gb[m_label] pd.cut(rfm_gb[m], binsm_bins, labels[i 1 for i in range(len(m_bins) - 1)])

查看结果.

rfm_gb 代码说明 每个rfm的过程使用了pd.cut方法基于自定义的边界区间做划分 labels用来显示每个离散化后的具体值。F和M的规则是值越大等级越高 而R的规则是值越小等级越高因此labels的规则与F和M相反 在labels指定时需要注意4个区间的结果是划分为3份 转换RFM评分类型, 拼接RFM评分, 获取最终结果

1. 查看结果的各列的类型

rfm_gb.info() #%%

2. 把 r_label, f_lable, m_label 转换为 str 类型.

rfm_gb[r_label] rfm_gb[r_label].astype(str) rfm_gb[f_label] rfm_gb[f_label].astype(str) rfm_gb[m_label] rfm_gb[m_label].astype(str) ​

3. 查看处理后的结果

rfm_gb.info() rfm_gb #%%

4. 具体的拼接, 获取 用户分区结果的动作.

rfm_gb[rfm_group] rfm_gb[r_label] rfm_gb[f_label] rfm_gb[m_label] ​

5. 查看处理后的结果

rfm_gb 代码说明 将3列作为字符串组合为新的分组 代码中先针对3列使用astype方法将数值型转换为字符串型 然和直接利用字符串拼接, 将RFM字段拼接到一起, 方便后续的用户分群 出了直接利用字符串拼接外, 还可以用Series.str.cat()方法实现 【了解】Series.str.cat(othersNone, sepNone, na_repNone) 的说明 参数: others : 列表或复合列表,默认为None,如果为None则连接本身的元素 sep : 字符串 或者None,默认为None na_rep : 字符串或者 None, 默认 None。如果为None缺失值将被忽略。 返回值: concat : 序列(Series)/索引(Index)/字符串(str) 示例代码 print(pd.Series([a, b, c]).str.cat([A, B, C])) print(pd.Series([a, b, c]).str.cat([A, B, C], sep,))

返回结果如下

0    aA 1    bB 2    cC dtype: object 0    a,A 1    b,B 2    c,C dtype: object 结果导出 导出到Excel

导出数据到 Excel文件, 不导出索引列.

rfm_gb.to_excel(output/sale_rfm_gb_result.xlsx, indexFalse) 导出到MySQL

准备动作

1. 安装pymysql这个库, 如果你没装的话.

pip install pymysql         # 去DOS窗口中执行.

2. 导包, 放到第1个单元格即可.

from sqlalchemy import create_engine

#%%

具体的代码实现

mysqlpymysql 底层操作的是MySQL数据库, 底层依赖pymysql包

root:123456localhost:3306/rfm_db?charsetutf-   数据库用户名:密码主机地址:端口号/数据库名称?字符集

1. 创建连接对象(引擎对象)

engine create_engine(mysqlpymysql://root:123456localhost:3306/rfm_db?charsetutf8)

engine

2. 导出数据到数据表中.

参1: 要被导出的数据集 即: df对象

参2: 引擎对象

参3: 是否包含索引列, False 不包含索引列, True 包含索引列

参4: 数据表存在了怎么办, 默认是: fail, 如果表存在了, 则报错. append 追加数据, replace 替换数据

rfm_gb.to_sql(rfm_table, engine, indexFalse ,if_existsappend) ​

3. 提示

print(导出成功!) #%%

还可以通过 pandas直接从数据库中读取数据.

pd.read_sql(show tables;, engine) pd.read_sql(select * from rfm_table limit 10;, engine) pd.read_sql(select count(1) from rfm_table;, engine) 结果可视化 分组统计, 获取结果数据

1. 绘制图形的时候, 我们只需要三个列, 分别是: 年份, rfm分组, 用户数量.

display_data  rfm_gb.groupby([year, rfm_group], as_indexFalse).会员ID.count()

2. 修改列名

display_data.columns [year, rfm_group, number]

3. 修改 rfm_group列的 数据类型 int

display_data[rfm_group] display_data[rfm_group].astype(int)

4. 查看结果.

display_data.info() 绘图

如果你的环境中没有安装 pyecharts, 则需要安装.

pip install pyecharts

显示图形

from pyecharts.commons.utils import JsCode

import pyecharts.options as opts

颜色池

range_color [#313695, #4575b4, #74add1, #abd9e9, #e0f3f8, #ffffbf,#fee090, #fdae61, #f46d43, #d73027, #a50026] ​ range_max int(display_data[number].max()) c (Bar3D()#设置了一个3D柱形图对象.add(,#图例[d.tolist() for d in display_data.values],#数据xaxis3d_optsopts.Axis3DOpts(type_category, name分组名称),#x轴数据类型名称rfm_groupyaxis3d_optsopts.Axis3DOpts(type_category, name年份),#y轴数据类型名称yearzaxis3d_optsopts.Axis3DOpts(type_value, name会员数量),#z轴数据类型名称number).set_global_opts( # 全局设置visualmap_optsopts.VisualMapOpts(max_range_max, range_colorrange_color), #设置颜色及不同取值对应的颜色title_optsopts.TitleOpts(titleRFM分组结果),#设置标题) ) c.render()           #数据保存到本地的网页中.

c.render_notebook() #在notebook中显示 结果图 输出3D图像中 X轴为RFM_Group分组、Y轴为年份、Z轴为用户数量 该3D图可旋转、缩放以便查看不同细节 调节左侧的滑块条用来显示或不显示特定数量的分组结果 案例结论

基于图形的交互式分析 重点人群分布212群体 在整个分组中212群体的用户是相对集中且变化最大的 从2015年到2017年用户群体数量变化不大但到2018年增长了近一倍 这部分人群将作为重点分析人群
重点分组分布 除了212人群外312、213、211及112人群都在各个年份占据很大数量 虽然各自规模不大但组合起来的总量超过212本身也要重点做分析。 如果拖动左侧的滑块仅过滤出用户数量在4085以内的分组结果。观察图形发现很多分组的人群非常少甚至没有人
RFM用户特征分析 经过上面的分析得到了要分析的重点客户群体。可根据用户的量级分为两类 第1类是用户群体占比超过10%的群体 第2类是占比在个位数的群体。这两类人由于量级不同因此需要分别有针对性的策略场景。 除此以外我们还会增加第3类人群虽然从用户量级上小但是单个人的价值度非常高。 第1类人群212、211、312、112、213占比超过10%的群体。由于这类人群基数大必须采取批量操作和运营的方式落地运营策略一般需要通过系统或产品实现而不能主要依赖于人工 212可发展的一般性群体。这类群体购买新近度和订单金额一般且购买频率低。考虑到其最大的群体基础以及在新近度和订单金额上都可以因此可采取常规性的礼品兑换和赠送、购物社区活动、签到、免运费等手段维持并提升其消费状态。 211可发展的低价值群体。这类群体相对于212群体在订单金额上表现略差因此在211群体策略的基础上可以增加与订单相关的刺激措施例如组合商品优惠券发送、积分购买商品等 312有潜力的一般性群体。这类群体购买新近度高说明最近一次购买发生在很短时间之前群体对于公司尚有比较熟悉的接触渠道和认知状态购物频率低说明对网站的忠诚度一般订单金额处于中等层级说明其还具有可提升的空间。因此可以借助其最近购买的商品为其定制一些与上次购买相关的商品通过向上销售等策略提升购买频次和订单金额 112可挽回的一般性群体。这类群体购买新近度较低说明距离上次购买时间较长很可能用户已经处于沉默或预流失、流失阶段购物频率低说明对网站的忠诚度一般订单金额处于中等层级说明其还可能具有可提升的空间。因此对这部分群体的策略首先是通过多种方式例如邮件、短信等触达客户并挽回然后通过针对流失客户的专享优惠例如流失用户专享优惠券措施促进其消费。在此过程中可通过增加接触频次和刺激力度的方式增加用户的回访、复购以及订单价值回报 213可发展的高价值群体。这类人群发展的重点是提升购物频率因此可指定不同的活动或事件来触达用户促进其回访和购买例如不同的节日活动、每周新品推送、高价值客户专享商品等。
第2类人群占比为1%10%的群体。这部分人群数量适中在落地时无论是产品还是人工都可接入 311有潜力的低价值群体。这部分用户与211群体类似但在购物新近度上更好因此对其可采取相同的策略。除此以外在这类群体的最近接触渠道上可以增加营销或广告资源投入通过这些渠道再次将客户引入网站完成消费。 111这是一类在各个维度上都比较差的客户群体。一般情况下会在其他各个群体策略和管理都落地后才考虑他们。主要策略是先通过多种策略挽回客户然后为客户推送与其类似的其他群体或者当前热销的商品或折扣非常大的商品。在刺激消费时可根据其消费水平、品类等情况有针对性地设置商品暴露条件先在优惠券及优惠商品的综合刺激下使其实现消费再考虑消费频率以及订单金额的提升。 313有潜力的高价值群体。这类群体的消费新近度高且订单金额高但购买频率低因此只要提升其购买频次用户群体的贡献价值就会倍增。提升购买频率上除了在其最近一次的接触渠道上增加曝光外与最近一次渠道相关的其他关联访问渠道也要考虑增加营销资源。另外213中的策略也要组合应用其中 113可挽回的高价值群体。这类群体与112群体类似但订单金额贡献更高因此除了应用112中的策略外可增加部分人工的参与来挽回这些高价值客户例如线下访谈、客户电话沟通等
第3类群体占比非常少但却是非常重要的群体 333绝对忠诚的高价值群体。虽然用户绝对数量只有355但由于其各方面表现非常突出因此可以倾斜更多的资源例如设计VIP服务、专享服务、绿色通道等。另外针对这部分人群的高价值附加服务的推荐也是提升其价值的重点策略 233、223和133一般性的高价值群体。这类群体的主要着手点是提升新近购买度即促进其实现最近一次的购买可通过DM、电话、客户拜访、线下访谈、微信、电子邮件等方式直接建立用户挽回通道以挽回这部分高价值用户 322、323和332有潜力的普通群体。这类群体最近刚完成购买需要提升的是购买频次及购买金额。因此可通过交叉销售、个性化推荐、向上销售、组合优惠券、打包商品销售等策略提升其单次购买的订单金额及促进其重复购买
案例应用 针对上述得到的分析结论会员部门采取了以下措施 分别针对3类群体按照公司实际运营需求和当前目标制定了不同的群体落地的排期 录入数据库的RFM得分数据已经应用到其他数据模型中成为建模输入的关键维度特征之一
案例注意点 R 最近一次消费的间隔时间 F 消费频率 M 消费总额 不同品类、行业对于RFM的依赖度是有差异的即使是一个公司在不同的发展阶段和周期下3个维度的优先级上也会有调整 大家电等消费周期较长的行业R和M会更重要一些 快消等消费周期短且快的行业更看重R和F 具体要根据当前运营需求与业务部门沟通 对R、F、M区间的划分是一个离散化的过程具体需要划分为几个区间需要与业务方确认 本案例划分为3个区间结果对于业务分析而言有些多意味着业务方需要制定十几套甚至更多的策略 如果业务方要求简化也可以划分为2个区间这样出来的分组数最多有8组策略制定更加简单 具体是划分为2个还是3个取决于当前业务方有多少资源可以投入到这个事情中来。 R、F、M的权重打分 除了案例中提到的建模方式外结合业务经验的专家打分法也是常用的思路这时推荐结合AHP层次分析法打分这样出来的权重结果更加科学、严谨。 虽然订单数据库中的数据质量相对较高但可能由于数据采集、数据库同步、ETL、查询、误操作等问题还是会导致NA值的出现而NA值的处理非常重要。 R、F、M三个维度的处理包括计算、离散化、组合、转换之前都需要注意其数据类型和格式尤其是有关时间项的转换操作应提前完成 小结 RFM模型是经典的一种用户分群方法操作起来比较简单如果数据量不是很大的时候直接使用Excel就可以实现 RFM并不是在所有业务场景下都可以使用一般用于零售行业复购率相对高的行业 使用Python的cut方法对数据进行分组需要注意分组区间默认是左开右闭 使用Pyecharts可以方便的绘制出可以交互的3D图