您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 订阅
  捐助
一个企业级数据挖掘实战项目|客户细分模型(上)
 
作者:云朵君
  1105  次浏览      11
 2021-11-11
 
编辑推荐:
本文阐述比较详细,包括代码演示、可视化图形展示、以及文字详细分析。分析较浅,希望能够给大家带来些许帮助,欢迎交流学习
本文来自 数据STUDIO ,由火龙果软件Alice编辑、推荐。

客户细分模型是将整体会员划分为不同的细分群体或类别,然后基于细分群体做管理、营销和关怀。客户细分模型常用于整体会员的宏观性分析以及探索性分析,通过细分建立初步认知,为下一步的分析和应用提供基本认知。常用方法包括:基于属性的方法、ABC分类法、聚类法

基于属性方法

  • 客户地域 -- 如北京、上海
  • 产品类别 -- 如家电、图书
  • 客户类别 -- 大客户、普通客户、VIP客户
  • 客户性别 -- 男、女
  • 会员消费等级 -- 高、中、低价值会员
  • ABC分类法

    Activity Based Classification 是根据事物的主要特征做分类排列,从而实现区别对待、区别管理的一种方法。ABC法则强调的是分清主次。具体做法,先将目标数据列倒序排序,然后做累积百分比统计,最后将得到的累积百分比按照下面的比例划分为A、B、C三类。

  • A类因素:主要影响,累积频次为0%~80%
  • B类因素:次要影响,累积频次为80%~90%
  • C类因素:一般影响,累积频次为90%~100%
  • 聚类法

    常用的非监督方法,无须任何的先验知识,只需要指定要划分的群体数量即可。这里可以参见总结的常用 聚类模型kmeans聚类

    本文客户细分方法

    将使用电子商务用户购买商品数据集,并尝试开发一个模型,主要目的是完成以下两个部分。

  • 对客户进行细分。
  • 通过为新客户分配适当的簇群,预测下一年新客户将进行的购买行为。
  • 本文主要内容

    本次实战项目共分为上下两部分,上篇(本篇)包括探索性数据分析,产品类别分析两部分;下篇将包括客户细分和客户行为分析与预测。本篇主要结构与内容思维导图如下图所示。

    探索性数据分析和预处理

    数据准备

    Dataframe维度: (284709, 8)

    缺失值分析

    缺失值分析与处理是指对原始数据中缺失的数据项进行预处理,以免影响模型精度和稳定性。数据缺失值处理方法有不少,这里可以参见之前总结的 缺失值处理,你真的会了吗?

    删除缺失值

    从上面缺失值分析结果看到, 客户ID 约22%的数据记录是空的,这意味着有约22%的数据记录没有分配给任何客户。而我们不可能把这些记录的值映射到任何客户。所以这些对于目前是没有用的,因此我们可以将其删除。

    删除重复值

    重复的数据条目: 3175

    变量'国家'分析

    统计下来,共有 32 个国家。并根据每个国家的订单量进行计数求和,排序后绘制国家--国家订单量柱状图,如下所示。

    变量'客户和产品'分析

    本数据包含约200,000条记录。这些记录中的用户和产品数量分别是多少呢?

    可以看到,该数据集包含3341个用户的记录,这些用户购买了3182种不同的商品。有约11000的交易被执行。现在我们需要了解每笔交易中购买的产品数量。

    此处需注意的要点:

  • 有一些用户在电子商务平台上只购买了一次,或只购买了一件商品。这类用户如客户ID为12371。
  • 有一些用户经常在每个订单中购买大量商品。这类用户如客户ID为12347。
  • 如果你仔细观察订单编号数据特征,那么你很容易就能发现有些订单编号有个前缀 C 。这个 C 表示该订单已经被取消。如下图中 C560735 。下面就来具体分析下取消的订单一些特征。

    取消订单分析

    这里统计被取消订单对应的交易数量。

    取消订单数量: 1686/11068 (15.23%)

    得到结果已取消的交易数目相当大(约占交易总数的15%)。这里,仔细观察数据集,尤其是取消的订单,可以想到,当一个订单被取消时,在数据集中可能会存在另一条对应的记录,该记录除了 数量 和 订单日期 变量之外,其他变量内容基本相同。下面检查一下是否所有的记录都是这样的。具体做法是:

  • 先筛选出负数数量的记录,并在所有数据中检查是否有一个具有相同数量(但为正)的订单,其它属性都相同( 客户ID , 描述 和 单价 )
  • 有些取消订单中,描述列会标注"Discount",因此将包含该特征的记录筛除后寻找。
  • 没有得到理想的结果,说明取消订单不一定与事先已下的订单相对应。此时,可以在数据表中 创建一个新变量 ,用于指示是否取消了部分订单。而对于其中没有对应购买订单的取消订单记录,可能是由于购买订单是在录入数据库之前执行的。下面对取消的订单进行了一次普查,并检查是否有对应购买订单存在。

    没有对应购买记录的取消订单和有对应购买记录的取消订单分别存储在' doubtfull_entry 和 entry_to_remove 列表,他们的个数分别为1672和3435,而这部分数据我们也需要将其删除。

    库存代码分析

    从上面分析内容中看到, 库存代码 变量的一些值表示一个特定的交易( D代表Discount )。下面通过正则表达式寻找只包含字母的代码集,统计出这个变量都有哪些值。

    我们看到有几种特殊的交易类型,如与港口费或银行费有关。

    购物车价格分析

    接下来是衍生变量: 每次购买的总价 = 单价 * (订单数量 - 取消订单数量)

    数据集中的每一条记录都表示一种产品的价格。而一条订单可以被分成几条记录。因此需要将一条订单中所有价格汇总求和,得到每一个订单总价。

  • 以客户ID和订单编号作为聚合对象,对总价进行求和。
  • 订单日期处理,现将订单日期转换为整数类型,聚合后求平均值,在转换为日期型。
  • 最后筛选出购物车价格大于0的重要记录。
  • 接下来将购物车总价进行离散化处理,并汇总可视化得到如下图所示的结果。

    可以看出,绝大多数订单购买价格相对较大的,约有65%的采购超过了200英镑的价格。

    产品类别分析

    在数据集中,产品是通过变量 库存代码 唯一标识的。产品的简短描述在变量 描述 中给出。在这里计划使用后一个变量的内容,即变量 描述 ,以便将产品分组到不同的类别中。因此这里就涉及到自然语言处理,需要先将简短描述分词后再统计。由于数据集使用的是纯英文数据集,因此这里选用 nltk 库进行处理。

    产品描述

    首先从 描述 变量中提取有用的信息。因此这里定义了一个函数。

    这个函数以dataframe作为输入,分析 描述 列的内容,执行如下操作:

  • 提取产品描述中出现的名称(适当的,常见的)
  • 对于每个名称,提取单词的根,并聚合与这个特定根相关的名称集
  • 每个根出现在数据集中的次数计数
  • 当几个单词被列出为同一个词根时,我认为与这个词根相关的关键字是最短的名字(当有单数/复数变体时,系统地选择单数)
  • 这个函数的执行返回四个变量:

  • ' keywords '

    提取的关键字列表

  • ' keywords_roots '

    一个字典,其中键是关键字的根,值是与这些根相关联的单词列表

  • ' count_keywords '

    字典中列出每个单词使用的次数

  • 'keywords_select'

    字典中列出每个单词词根<->关键字间的关联关系

  • 接下来先对所有产品描述进行去重处理,再运用上面定义的函数进行词根提取并统计.

    从结果看,变量中关键字 '描述' 的数量共 1347个。此时,将其中一个结果 ' count_keywords ' 字典转换为一个列表,根据关键词的出现情况对它们进行排序。

    因为字体有点小,不过不影响我们理解实操逻辑。你也可以通过绘制横向柱状图,调大轴标签大小,来自己探究每个词根。大家可以自己尝试。

    定义产品类别

    上面结果中,我们获得的列表中包含1400多个关键词,而最频繁的关键词出现在200多种产品中。然而,在仔细检查列表中内容时发现,有很多名称是无用的,不携带任何有用的信息,比如颜色、标签等。因此,接下来需要将这些词从数据集中删除。另外,为了更加便捷有效地分析数据,我决定只考虑那些出现超过 13 次的词。

    从结果看,共保留了 164 个关键词。分完词并处理后 ,还没有结束,还需要将文字转化为数字,这个过程就是数据编码过程。

    数据编码

    首先定义编码规则,将使用上面得到的关键字创建产品组。将矩阵定义如下,其中,如果产品的描述包含单词,则系数为1,否则为0。

  • 矩阵表示产品描述中包含的单词,使用独热编码原则。
  • 这里使用的是逐条处理,还有 pd.get_dummies() 函数直接处理,这里就不做详细介绍,有兴趣的小伙伴可以研究研究。
  • 在实践中发现,若使用价格范围来划分分组,这会使每个组中元素更加均衡。
  • 因此,在这个矩阵上增加 6 列以表示产品的价格范围。

    为了选择合适的范围,我检查了不同组别的产品数量,如果组内数量严重不均衡,则需要调整边界点。下面是本次划分的范围,可见该边界范围还算均衡。

    创建产品集群

    将把产品分组到不同的类中。在二进制编码矩阵的情况下,计算距离最合适的度量是汉明度量。而我们本次使用的也是常用的sklearn的 Kmeans 方法使用的是欧几里德距离,但在分类变量的情况下,它不是最佳选择。其实可以使用kmodes包以使用汉明度量,小伙伴们可以自行研究。

    实际上,以上所得的分数可视为相等,因为根据运行情况,所有具有'n_clusters' 3的簇获得的分数约为 (第一个簇的分数略低)。另一方面,发现当超过5个簇时,有些簇所包含的元素非常少。

    因此,最终选择将数据集划分为5个簇。为了确保每次运行 notebook 都能很好地进行分类,我反复迭代,直到我们获得可能的最佳轮廓系数,在目前的情况下,轮廓系数约为0.15。

    描述集群的内容

    上面对所有订单数据进行了Kmeans聚类,并检查每个类中的元素数量。

    轮廓系数看聚类效果

    为了深入了解聚类的效果,常用轮廓系数评价聚类算法模型效果。通过下图可视化地表现聚类效果,参考自sklearn documentation。

    解读此图,不同颜色代表不同的簇,每个簇横坐标表示簇内样本点的轮廓系数,按照大小排序并绘制横向条形图,纵坐标表示样本量大小。

    词云图看聚类结果

    现在我们可以看看每个簇群代表的对象类型。为了获得其内容的全局视图,用每个关键词中最常见的关键词绘制词云图。先统计关键词出现的频次。

     

    定义绘制词云图函数,并绘制词云图。

    从这个词云图结果中我们可以看到,其中一个簇群中包含与礼物相关的对象(关键字:圣诞节Christmas、包装packaging、卡片 card等)。

    另一簇则倾向于包含奢侈品和珠宝(关键词:项链necklace、手镯bracelet、蕾丝lace、银silver)。但也可以观察到,许多词出现在不同的簇群中,因此很难清楚地区分它们。

    PCA主成分分析

    为了使得聚类后的结果能够真正做到有效区分,将含有大量变量的初始矩阵数据,我准备使用PCA主成分分析对其进行处理。

    我们看到解释数据所需的维度数量是极其重要的:我们需要超过100个维度来解释数据的90%的方差。在实践中,我决定只保留有限数量的维度。我们以50个维度来做降维处理。

    为了更加直观地观察PCA降维度后效果,下面用带颜色的散点图可视化的方法展示,横纵轴分别代表不同的维度变量,颜色代表不同的簇,如下图所示,这里只绘制其中的部分维度数据。

    由图可看出,第一主成分已经较好地将几个类别分开了,说明此次降维效果还算可以。

    写在最后

    到目前为止,已经将本次案例前半部分演示完毕,包括数据探索性数据分析,缺失值等处理。各个关键变量的分析。最后重要的是通过聚类方法,将产品进行聚类分类,并通过词云图和主成分分析各个类别聚类分离效果。

    下篇 《 一个企业级数据挖掘实战项目|客户细分模型(下)

     

       
    1105 次浏览       11
    相关文章

    基于EA的数据库建模
    数据流建模(EA指南)
    “数据湖”:概念、特征、架构与案例
    在线商城数据库系统设计 思路+效果
     
    相关文档

    Greenplum数据库基础培训
    MySQL5.1性能优化方案
    某电商数据中台架构实践
    MySQL高扩展架构设计
    相关课程

    数据治理、数据架构及数据标准
    MongoDB实战课程
    并发、大容量、高性能数据库设计与优化
    PostgreSQL数据库实战培训
     
    最新课程计划
    微服务架构设计与实践 11-9[北京]
    业务建模与领域驱动设计 11-14[北京]
    SysML和EA进行系统设计与建模 11-23[北京]
    产品需求分析与管理 11-25[北京]
    软件开发过程中的项目管理 11-27[北京]
    自动化测试体系建设与最佳实践 11-14[北京]
     
    最新文章
    InfluxDB概念和基本操作
    InfluxDB TSM存储引擎之数据写入
    深度漫谈数据系统架构——Lambda architecture
    Lambda架构实践
    InfluxDB TSM存储引擎之数据读取
    最新课程
    Oracle数据库性能优化、架构设计和运行维护
    并发、大容量、高性能数据库设计与优化
    NoSQL数据库(原理、应用、最佳实践)
    企业级Hadoop大数据处理最佳实践
    Oracle数据库性能优化最佳实践
    更多...   
    成功案例
    某金融公司 Mysql集群与性能优化
    北京 并发、大容量、高性能数据库设计与优化
    知名某信息通信公司 NoSQL缓存数据库技术
    北京 oracle数据库SQL优化
    中国移动 IaaS云平台-主流数据库及存储技术
    更多...