1、关于用户细分
用户细分是客户关系管理(CRM)中很重要的一个组成部分。无论是传统企业,还是新兴的互联网企业;不管是面向企业的业务还是面向于个人的业务;在全行业中,对用户群体进行划分类型,都可以更好的抓住用户的诉求,以进行更加精准的营销。
在传统的营销方案中,手段简单且粗暴,对所有的用户都是千篇一律的信息推送、广告宣传和优惠宣传。这样的营销手段,不仅会效果极差,而且因为骚扰用户而导致用户的厌烦。
在了解了用户的特点和需求后,我们才能进行有针对性的营销和推广,这样不仅使营销的资源得到最大化的利用和不浪费,用户也乐于接受我们的营销信息。
在用户细分领域,有一个经典的模型——RFM模型,是传统的用于衡量客户价值和客户创收能力的一个重要模型。其主要有三个指标组成:
- 最近一次消费间隔;
- 消费的频率;
- 消费的金额;
虽然这个模型到如今面对层出不穷的消费形式,已经稍显力不从心。但从研究角度看,还是值得使用的。接下来,我们就使用scikit-learn模型的K均值聚类算法,构造RFM数据集来进行用户细分。
2、下载使用数据集
在此,我们使用加州大学欧文分校用于机器学习的数据库中的数据集——Online Retail Data Set ,这是一个跨国数据集,其中包含所有在2010年12月1日至2011年12月09日期间在英国注册的非在线零售网上零售业务的交易。
下载地址为:http://archive.ics.uci.edu/ml/datasets/online+retail
这个数据集中一个有8个属性,分别为:
- InvoiceNo:发票号码,作为交易记录的唯一标识;
- StockCode:商品代码;
- Description:商品描述;
- Quantity:交易数量;
- InvoiceDate:开票日期,作为交易产生的日期;
- UnitPrice:商品单价;
- CustomerID:客户ID;
- Country:客户的国家;
3、初览数据
首先,引入相关模块:
使用pandas从数据集中导入数据:
使用shape属性查看一下数据集的形状,一共有541909行、8列:
接着使用columns属性查看一下数据集的列名,是否和网页描述上的一致:
确实是一致的,我们来看看数据集的部分数据,使用head()方法:
英文的列名操作起来不方便,我们将其重命名为中文:
这样看上去,就舒服多了:
再来看看这些订单中包含了多少个客户:
嗯,四千余个客户产生了五十四万个订单。看看哪些国家的订单量居多:
英国客户的订单量一骑绝尘哈。
4、用户细分
数据清理和构造
首先我们清理一下数据,只选取客户为英国的订单,然后添加一个交易总额的列:
再将客户ID为空值的列,总额为小于0的列剔除:
接着,创建一个变量refrence_date,其为订单中发票开票日期最大值加一天的日期,作为判断距今购买时间间隔的标准:
根据refrence_date变量,新增两个列,为最后一次购买距今日期和最后一次购买距今日期数:
根据客户ID进行分组,新生成一个DataFrame——customer_history_df:
根据客户ID进行分组,对交易总额进行汇总求和得到客户的总交易金额:
接着将客户总交易金额合并到customer_history_df中:
根据客户ID进行分组,对交易总额进行计数求和获得交易频率值:
接着合并交易频率到customer_history_df中:
现在的数据集构造好了。
数据预处理
构造后的数据集特征之间数值差异较大,我们需要先对其进行数据预处理。
首先对数据特征进行对数转换:
接着对对数转换后的数据进行标准化处理:
这样我们就可以进行聚类建模了。
K均值聚类
在此,我们选择K均值聚类算法进行演示,同时使用平均轮廓系数进行聚类的评估。因为对数据中的用户类型并不明确,所以我们通过一个循环遍历来创建不同聚类数量的模型,同时进行可视化显示:
先引入K均值算法和评估算法:
接着遍历从2到4的列表,作为聚类数量分别进行聚类:
首先,我们得到了聚类的平均轮廓系数:
然后是三个聚类的实际分布图:
我们将,对数转换和标准化处理的数据进行还原,查看原始的聚类中数据:
得到的结果为:
文章版权所有:州的先生博客,转载必须保留出处及原文链接