① k-means与RFM模型结合进行用户群体划分
在CRM系统中经常要对用户进行划分,以标记不同的标签,进行个性化的营销触达动作。通常的用户群体划分会使用用户的一些属性信息,例如年龄,职业,性别等。但是这些属性基本上都是用户本身的特征属性,并不是和品牌关联产生的属性信息。另外一种常用的用户模型,就是 RFM模型 ,是以用户的实际购买行为数据作为基础,进行用户群体的划分的,在实践中更加具有实际价值。
RFM模型由三个指标组成,分别为:
最近一次消费 (Recency)
消费频率 (Frequency)
消费金额 (Monetary)
可以看到这三个属性都是通过用户的购买行为计算得出的,这些指标基本上代表了用户是否活跃,购买能力,忠诚度等信息。
而我们的目标是通过对每个用户的RFM属性进行计算,将用户群体划分为不同的种类进行区分,以便我们进行分析和精准营销。例如我们可以分析出高价值用户,重点发展用户,流失用户等群体进行针对性营销动作。
本文将使用Python的一些工具包,对用户数据集进行分析处理,例如建立RFM模型,数据标准化,以及使用k-means聚类算法将用户群体进行划分。需要读者具有一些基础的Python和数据统计知识。
首先我们通过一些订单数据分析得到一部分用户的样本数据来:
这里包括了用户的id,总购买笔数,总购买金额以及最后一笔订单时间的信息。我们将文件加载进来,截取一部分后对字段类型进行处理:
为了将其转化为我们要使用的RFM属性,我们需要对last_order_date进行处理,转换为最后一次订单时间到目前的天数。这样我们就获得了RFM的基本属性,分别为last_order_day_from_now(R), total_order_count(F), total_order_price(M)。处理完成后对数据进行可视化观察数据分布:
其散点图为:
我们会发现实际上的数据大部分都聚集在了一起,并且有一些非常离散的极端值数据,这对我们后续进行数据聚类会产生不利影响,所以我们使用log函数对数据进行处理,让其分布的更加均匀:
可以看到现在数据分布的已经比较均匀了,这为我们进行聚类打下一个比较好的基础。但同时我们也会发现RFM这三个属性的单位却并不相同,分别是天数,交易笔数和交易金额。这就造成了其数值差别巨大。而聚类算法一般都是使用不同向量间的距离进行计算划分的,属性单位不同造成的数值差异过大会造成计算距离时的权重分布不均衡,也并不能反映实际情况,所以我们还要对数据进行标准化处理,这里我们使用z-score对RFM属性进行加工运算。
z-score是一种数据标准化的计算方法,其公式为:
z = (x – μ) / σ
μ代表x所属数据组的平均值,σ代表x所属数据组的方差。所以通过z-score计算,我们将绝对值数据转化为一个数据在所属数据组中的位置(得分),这样不同单位和类型间的数据使用z-score做相互的比较也就有了一定的意义。
这时候会看到数据不但分布较为均匀,而且不同维度间的数值差异也很小了,这样我们可以把三种不同单位的属性一起进行处理。
当我们建立好RFM的数据模型之后,期望通过不同的RFM值,对用户进行区分以进行精准化营销。当然我们可以通过对RFM这三组数值的平均值或者中位数和每个用户进行比较,以建立起一个数据立方,进行群体划分。但另外一方面,一般来说用户群体会大致符合28原则,80%左右的收入是由20%左右的客户所贡献的,所以根据平均值或者中位数进行群体划分也并不能总是科学的反应出不同的用户群体来,所以我们也可以基于数据本身的特性,使用聚类算法进行处理,以便让数据更加“自然”的区分。
这里我们选用非常常用的k-means算法进行聚类计算,k-means聚类的原理并不复杂,首先随机的或者通过更高效的方式(例如k-means++)选取k个点,然后不断迭代的计算,修正这k个点的坐标,目的是让集合中的每个点的距离(有很多种距离算法,比较常用的是欧氏距离)都和k个点里的其中一个尽量的近,而和其他的尽量的远。这样数据集合就能根据自身的分布规律,自然的区分出不同的类别来。
这里我们将k值设定为3,也就是将数据划分为三个部分,通过使用我们处理后的RFM属性进行计算,最终我们得到:
可以看到不同的颜色代表不同的用户类别,可以简单的认为标记为0的是流失用户,1是重点发展用户,2是高价值用户。这样我们就可以对不同的群体使用适合的营销策略了,同时当有新的用户加入后,我们也可以使用得到的k-means模型对其进行预测划分。
在使用这种方式做实际的数据处理时,可能因为数据分布的原因导致区分度并不是特别好,因为根据销售数据进行用户区分,并不是总能发现比较明显的区分“界限”,也就是不同群体间的边界其实是非常模糊和混杂的(从上面的最终分析图也可以看出这样的情况),所以从这个角度讲,单纯通过RFM模型和聚类进行用户群体划分也是有它的局限性的。
② 如何对用户进行聚类分析
需要搜集用户的哪些特征?
聚类分析变量选择的原则是:在哪些变量组合的前提,使得类别内部的差异尽可能的小,即同质性高,类别间的差异尽可能的大,即同质性低,并且变量之间不能存在高度相关。
常用的用户特征变量有:
①
人口学变量:如年龄、性别、婚姻、教育程度、职业、收入等。通过人口学变量进行分类,了解每类人口的需求有何差异。
②
用户目标:如用户为什么使用这个产品?为什么选择线上购买?了解不同使用目的的用户的各自特征,从而查看各类目标用户的需求。
③
用户使用场景:用户在什么时候,什么情况下使用这个产品?了解用户在各类场景下的偏好/行为差异。
④
用户行为数据:如使用频率,使用时长,客单价等。划分用户活跃等级,用户价值等级等。
⑤
态度倾向量表:如消费偏好,价值观等,看不同价值观、不同生活方式的群体在消费取向或行为上的差异。
需要多少样本量?
没有限制,通常情况下与实际应用有关,如果非要加一个理论的限制,通常认为,样本的个数要大于聚类个数的平方。
①如果需要聚类的数据量较少(<100),那么三种方法(层次聚类法,K-均值聚类法,两步聚类法)都可以考虑使用。优先考虑层次聚类法,因为层次聚类法产生的树状图更加直观形象,易于解释,并且,层次聚类法提供方法、距离计算方式、标准化方式的丰富程度也是其他两种方法所无法比拟的。
②如果需要聚类的数据量较大(>1000),应该考虑选择快速聚类别法或者两步聚类法进行。
③如果数据量在100~1000之间,理论上现在的计算条件是可能满足任何聚类方法的要求的,但是结果的展示会比较困难,例如不可能再去直接观察树状图了。
应用定量方法还是定性方法?
聚类分析是一种定量分析方法,但对聚类分析结果的解释还需要结合定性资料讨论。
1.聚类分析的定义与用途
聚类分析(Cluster Analysis)是一种探索性的数据分析方法,根据指标/变量的数据结构特征,对数据进行分类,使得类别内部的差异尽可能的小,即同质性高,类别间的差异尽可能的大,即同质性低。
2.聚类分析的方法
①层次聚类法(Hierarchical),也叫系统聚类法。既可处理分类变量,也可处理连续变量,但不能同时处理两种变量类型,不需要指定类别数。聚类结果间存在着嵌套,或者说层次的关系。
②K-均值聚类法(K-Means Cluster),也叫快速聚类法。针对连续变量,也可处理有序分类变量,运算很快,但需要指定类别数。K-均值聚类法不会自动对数据进行标准化处理,需要先自己手动进行标准化分析。
③两步聚类法(Two-Step Cluster):可以同时处理分类变量和连续变量,能自动识别最佳的类别数,结果比较稳定。如果只对连续变量进行聚类,描述记录之间的距离性时可以使用欧氏(Euclidean)距离,也可以使用对数似然值(Log-likelihood),如果使用前者,则该方法和传统的聚类方法并无太大区别;但是若进行聚类的还有离散变量,那么就只能使用对数似然值来表述记录间的差异性。当聚类指标为有序类别变量时,Two-Step Cluster出来的分类结果没有K-means cluster的明晰,这是因为K-means算法假定聚类指标变量为连续变量。
3.聚类分析的步骤
①确定研究目的:研究问题关注点有哪些、是否有先验分类数…
②问卷编制:态度语句李克特项目、有序类别…
③确定分析变量:问卷变量的类型,连续or分类,有序类别or无序类别、是否纳入后台数据,变量间相关性低…
④聚类分析:聚类分析方法选择、数据标准化方法、聚类类别数确定…
⑤结果检验:类别间差异分析、是否符合常理…
⑥聚类结果解释:类别的命名、类别间的差异、结合定性资料解释…
③ 分类和聚类的区别及各自的常见算法
1、分类和聚类的区别:
Classification (分类),对于一个classifier,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做supervised learning (监督学习),
Clustering (聚类),简单地说就是把相似的东西分到一组,聚类的时候,我们并不关心某一类是什么,我们需要实现的目标只是把相似的东西聚到一起。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在Machine Learning中被称作unsupervised learning (无监督学习).
2、常见的分类与聚类算法
所谓分类,简单来说,就是根据文本的特征或属性,划分到已有的类别中。如在自然语言处理NLP中,我们经常提到的文本分类便就是一个分类问题,一般的模式分类方法都可用于文本分类研究。常用的分类算法包括:决策树分类法,朴素贝叶斯分类算法(native Bayesian classifier)、基于支持向量机(SVM)的分类器,神经网络法,k-最近邻法(k-nearestneighbor,kNN),模糊分类法等等。
分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应。但是很多时候上述条件得不到满足,尤其是在处理海量数据的时候,如果通过预处理使得数据满足分类算法的要求,则代价非常大,这时候可以考虑使用聚类算法。
而K均值(K-mensclustering)聚类则是最典型的聚类算法(当然,除此之外,还有很多诸如属于划分法K中心点(K-MEDOIDS)算法、CLARANS算法;属于层次法的BIRCH算法、CURE算法、CHAMELEON算法等;基于密度的方法:DBSCAN算法、OPTICS算法、DENCLUE算法等;基于网格的方法:STING算法、CLIQUE算法、WAVE-CLUSTER算法;基于模型的方法)。
④ 数据挖掘 聚类算法概述
文 | 宿痕
来源 | 知乎
本篇重点介绍聚类算法的原理,应用流程、使用技巧、评估方法、应用案例等。具体的算法细节可以多查阅相关的资料。聚类的主要用途就是客户分群。
1.聚类 VS 分类
分类是“监督学习”,事先知道有哪些类别可以分。
聚类是“无监督学习”,事先不知道将要分成哪些类。
举个例子,比如苹果、香蕉、猕猴桃、手机、电话机。
根据特征的不同,我们聚类会分为【苹果、香蕉、猕猴桃】为水果的一类,和【手机、电话机】为数码产品的一类。
而分类的话,就是我们在判断“草莓”的时候,把它归为“水果”一类。
所以通俗的解释就是:分类是从训练集学习对数据的判断能力,再去做未知数据的分类判断;而聚类就是把相似的东西分为一类,它不需要训练数据进行学习。
学术解释:分类是指分析数据库中的一组对象,找出其共同属性。然后根据分类模型,把它们划分为不同的类别。分类数据首先根据训练数据建立分类模型,然后根据这些分类描述分类数据库中的测试数据或产生更恰当的描述。
聚类是指数据库中的数据可以划分为一系列有意义的子集,即类。在同一类别中,个体之间的距离较小,而不同类别上的个体之间的距离偏大。聚类分析通常称为“无监督学习”。
2.聚类的常见应用
我们在实际情况的中的应用会有:
marketing:客户分群
insurance:寻找汽车保险高索赔客户群
urban planning:寻找相同类型的房产
比如你做买家分析、卖家分析时,一定会听到客户分群的概念,用标准分为高价值客户、一般价值客户和潜在用户等,对于不同价值的客户提供不同的营销方案;
还有像在保险公司,那些高索赔的客户是保险公司最care的问题,这个就是影响到保险公司的盈利问题;
还有在做房产的时候,根据房产的地理位置、价格、周边设施等情况聚类热房产区域和冷房产区域。
3.k-means
(1)假定K个clusters(2)目标:寻找紧致的聚类
a.随机初始化clusters
b.分配数据到最近的cluster
c.重复计算clusters
d.repeat直到收敛
优点:局部最优
缺点:对于非凸的cluster有问题
其中K=?
K<=sample size
取决于数据的分布和期望的resolution
AIC,DIC
层次聚类避免了这个问题
4.评估聚类
鲁棒性?
聚类如何,是否过度聚合?
很多时候是取决于聚合后要干什么。
5.case案例
case 1:卖家分群云图
作者:宿痕 授权转载
原文链接:http://zhuanlan.hu.com/dataman/20397891