更懂你的客户:使用机器学习进行用户细分


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的列表,作为聚类数量分别进行聚类:

首先,我们得到了聚类的平均轮廓系数:

然后是三个聚类的实际分布图:

我们将,对数转换和标准化处理的数据进行还原,查看原始的聚类中数据:

得到的结果为:

发表评论

电子邮件地址不会被公开。