精华内容
下载资源
问答
  • 一、数据挖掘常用方法利用数据挖掘进行数据分析常用方法主要有分类、回归分析聚类、关联规则、特征、变化和偏差分析、Web页挖掘等,它们分别从不同角度数据进行挖掘。分类。分类是找出数据库中一组数据...

    一、数据挖掘的常用方法

    利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等,它们分别从不同的角度对数据进行挖掘。

    分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。

    回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

    聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

    关联规则。关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

    特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。

    变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。

    Web页挖掘。随着Internet的迅速发展及Web 的全球普及, 使得Web上的信息量无比丰富,通过对Web的挖掘,可以利用Web 的海量数据进行分析,收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、客户等有关的信息,集中精力分析和处理那些对企业有重大或潜在重大影响的外部环境信息和内部经营信息,并根据分析结果找出企业管理过程中出现的各种问题和可能引起危机的先兆,对这些信息进行分析和处理,以便识别、分析、评价和管理危机。

    二、数据挖掘的功能

    数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。

    自动预测趋势和行为:数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能做出反应的群体。

    关联分析:数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。

    聚类:数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Michalski提出了概念聚类技术,其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。

    概念描述:概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法、遗传算法等。

    偏差检测:数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。

    三、数据挖掘实例 – 聚类分析应用之市场细分

    聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。

    从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。

    从机器学习的角度讲,簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据对象有类别标记。聚类是观察式学习,而不是示例式的学习。

    从实际应用的角度看,聚类分析是数据挖掘的主要任务之一。而且聚类能够作为一个独立的工具获得数据的分布状况,观察每一簇数据的特征,集中对特定的聚簇集合作进一步地分析。聚类分析还可以作为其他算法(如分类和定性归纳算法)的预处理步骤。

    聚类分析的核心思想就是物以类聚,人以群分。在市场细分领域,消费同一种类的商品或服务时,不同的客户有不同的消费特点,通过研究这些特点,企业可以制定出不同的营销组合,从而获取最大的消费者剩余,这就是客户细分的主要目的。在销售片区划分中,只有合理地将企业所拥有的子市场归成几个大的片区,才能有效地制定符合片区特点的市场营销战略和策略。金融领域,对基金或者股票进行分类,以选择分类投资风险。

    下面以一个汽车销售的案例来介绍聚类分析在市场细分中的应用。

    商业目标

    业务理解:数据名称《汽车销售.csv》。该案例所用的数据是一份关于汽车的数据,该数据文件包含销售值、订价以及各种品牌和型号的车辆的物理规格。订价和物理规格可以从 edmunds.com 和制造商处获得。定价为美国本土售价。如下:

    表1:数据视图

    业务目标:对市场进行准确定位,为汽车的设计和市场份额预测提供参考。

    数据挖掘目标:通过聚类的方式对现有的车型进行分类。

    数据准备

    通过数据探索对数据的质量和字段的分布进行了解,并排除有问题的行或者列优化数据质量。

    第一步,我们使用统计节点审核数据的质量,从审核结果中我们发现存在缺失的数据,如下图所示:

    第二步,对缺失的数据进行处理,我们选择使用缺失填充节点删除这些记录。配置如下:

    建模

    我们选择层次聚类进行分析,尝试根据各种汽车的销售量、价格、引擎、马力、轴距、车宽、车长、制动、排量、油耗等指标对其分类。

    因为层次聚类不能自动确定分类数量,因此需要我们以自定义的方式规定最后聚类的类别数。层次聚类节点配置如下(默认配置):

    可以使用交互表或者右击层次聚类节点查看聚类的结果,如下图所示:

    再使用饼图查看每个类的大小,结果如下:

    从图中可见,分成的三个类样本数差异太大,cluster_0和cluster_1包含的样本数都只有1,这样的分类是没有意义的,因此需要重新分类。我们尝试在层次聚类节点的配置中指定新的聚类方法:完全。新的聚类样本数分布如下:

    cluster_0、 cluster_1、cluster_2的样本数分别为:50、9、93。

    执行后输出树状/冰柱图,可以从上往下看,一开始是一大类,往下走就分成了两类,越往下分的类越多,最后细分到每一个记录是一类,如下所示:

    我们可以再使用条形图查看每类的销售量、平均价格,如下图所示:

    每类总销量分布图

    每类平均销量分布图

    每类平均价格分布图

    我们再看一下每类的销售额分布情况。首先,我们需要使用Java代码段节点或者派生节点生成销售额字段,配置如下:

    再使用饼图查看销售额分布情况,cluster_0、 cluster_1、cluster_2的市场份额分别为:32.39%、0.53%和67.08%,如下图所示:

    案例小结

    通过这个案例,大家可以发现聚类分析确实很简单。进行聚类计算后,主要通过图形化探索的方式评估聚类合理性,以及在确定聚类后,分析每类的特征。

    展开全文
  • 聚类分析案例

    2017-04-01 13:54:00
    一、数据挖掘的常用方法 利用数据挖掘进行数据分析常用的方法主要有分类、回归分析聚类、关联规则、特征、变化和偏差...它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析客户的购买趋势预测等...

    一、数据挖掘的常用方法

    利用数据挖掘进行数据分析常用的方法主要有分类、回归分析、聚类、关联规则、特征、变化和偏差分析、Web页挖掘等,它们分别从不同的角度对数据进行挖掘。

    分类。分类是找出数据库中一组数据对象的共同特点并按照分类模式将其划分为不同的类,其目的是通过分类模型,将数据库中的数据项映射到某个给定的类别。它可以应用到客户的分类、客户的属性和特征分析、客户满意度分析、客户的购买趋势预测等,如一个汽车零售商将客户按照对汽车的喜好划分成不同的类,这样营销人员就可以将新型汽车的广告手册直接邮寄到有这种喜好的客户手中,从而大大增加了商业机会。

    回归分析。回归分析方法反映的是事务数据库中属性值在时间上的特征,产生一个将数据项映射到一个实值预测变量的函数,发现变量或属性间的依赖关系,其主要研究问题包括数据序列的趋势特征、数据序列的预测以及数据间的相关关系等。它可以应用到市场营销的各个方面,如客户寻求、保持和预防客户流失活动、产品生命周期分析、销售趋势预测及有针对性的促销活动等。

    聚类。聚类分析是把一组数据按照相似性和差异性分为几个类别,其目的是使得属于同一类别的数据间的相似性尽可能大,不同类别中的数据间的相似性尽可能小。它可以应用到客户群体的分类、客户背景分析、客户购买趋势预测、市场的细分等。

    关联规则。关联规则是描述数据库中数据项之间所存在的关系的规则,即根据一个事务中某些项的出现可导出另一些项在同一事务中也出现,即隐藏在数据间的关联或相互关系。在客户关系管理中,通过对企业的客户数据库里的大量数据进行挖掘,可以从大量的记录中发现有趣的关联关系,找出影响市场营销效果的关键因素,为产品定位、定价与定制客户群,客户寻求、细分与保持,市场营销与推销,营销风险评估和诈骗预测等决策支持提供参考依据。

    特征。特征分析是从数据库中的一组数据中提取出关于这些数据的特征式,这些特征式表达了该数据集的总体特征。如营销人员通过对客户流失因素的特征提取,可以得到导致客户流失的一系列原因和主要特征,利用这些特征可以有效地预防客户的流失。

    变化和偏差分析。偏差包括很大一类潜在有趣的知识,如分类中的反常实例,模式的例外,观察结果对期望的偏差等,其目的是寻找观察结果与参照量之间有意义的差别。在企业危机管理及其预警中,管理者更感兴趣的是那些意外规则。意外规则的挖掘可以应用到各种异常信息的发现、分析、识别、评价和预警等方面。

    Web页挖掘。随着Internet的迅速发展及Web 的全球普及, 使得Web上的信息量无比丰富,通过对Web的挖掘,可以利用Web 的海量数据进行分析,收集政治、经济、政策、科技、金融、各种市场、竞争对手、供求信息、客户等有关的信息,集中精力分析和处理那些对企业有重大或潜在重大影响的外部环境信息和内部经营信息,并根据分析结果找出企业管理过程中出现的各种问题和可能引起危机的先兆,对这些信息进行分析和处理,以便识别、分析、评价和管理危机。

    二、数据挖掘的功能

    数据挖掘通过预测未来趋势及行为,做出前摄的、基于知识的决策。数据挖掘的目标是从数据库中发现隐含的、有意义的知识,主要有以下五类功能。

    自动预测趋势和行为:数据挖掘自动在大型数据库中寻找预测性信息,以往需要进行大量手工分析的问题如今可以迅速直接由数据本身得出结论。一个典型的例子是市场预测问题,数据挖掘使用过去有关促销的数据来寻找未来投资中回报最大的用户,其它可预测的问题包括预报破产以及认定对指定事件最可能做出反应的群体。

    关联分析:数据关联是数据库中存在的一类重要的可被发现的知识。若两个或多个变量的取值之间存在某种规律性,就称为关联。关联可分为简单关联、时序关联、因果关联。关联分析的目的是找出数据库中隐藏的关联网。有时并不知道数据库中数据的关联函数,即使知道也是不确定的,因此关联分析生成的规则带有可信度。

    聚类:数据库中的记录可被化分为一系列有意义的子集,即聚类。聚类增强了人们对客观现实的认识,是概念描述和偏差分析的先决条件。聚类技术主要包括传统的模式识别方法和数学分类学。80年代初,Michalski提出了概念聚类技术,其要点是,在划分对象时不仅考虑对象之间的距离,还要求划分出的类具有某种内涵描述,从而避免了传统技术的某些片面性。

    概念描述:概念描述就是对某类对象的内涵进行描述,并概括这类对象的有关特征。概念描述分为特征性描述和区别性描述,前者描述某类对象的共同特征,后者描述不同类对象之间的区别。生成一个类的特征性描述只涉及该类对象中所有对象的共性。生成区别性描述的方法很多,如决策树方法、遗传算法等。

    偏差检测:数据库中的数据常有一些异常记录,从数据库中检测这些偏差很有意义。偏差包括很多潜在的知识,如分类中的反常实例、不满足规则的特例、观测结果与模型预测值的偏差、量值随时间的变化等。偏差检测的基本方法是,寻找观测结果与参照值之间有意义的差别。

    三、数据挖掘实例 – 聚类分析应用之市场细分

    聚类是将数据分类到不同的类或者簇这样的一个过程,所以同一个簇中的对象有很大的相似性,而不同簇间的对象有很大的相异性。

    从统计学的观点看,聚类分析是通过数据建模简化数据的一种方法。传统的统计聚类分析方法包括系统聚类法、分解法、加入法、动态聚类法、有序样品聚类、有重叠聚类和模糊聚类等。

    从机器学习的角度讲,簇相当于隐藏模式。聚类是搜索簇的无监督学习过程。与分类不同,无监督学习不依赖预先定义的类或带类标记的训练实例,需要由聚类学习算法自动确定标记,而分类学习的实例或数据对象有类别标记。聚类是观察式学习,而不是示例式的学习。

    从实际应用的角度看,聚类分析是数据挖掘的主要任务之一。而且聚类能够作为一个独立的工具获得数据的分布状况,观察每一簇数据的特征,集中对特定的聚簇集合作进一步地分析。聚类分析还可以作为其他算法(如分类和定性归纳算法)的预处理步骤。

    聚类分析的核心思想就是物以类聚,人以群分。在市场细分领域,消费同一种类的商品或服务时,不同的客户有不同的消费特点,通过研究这些特点,企业可以制定出不同的营销组合,从而获取最大的消费者剩余,这就是客户细分的主要目的。在销售片区划分中,只有合理地将企业所拥有的子市场归成几个大的片区,才能有效地制定符合片区特点的市场营销战略和策略。金融领域,对基金或者股票进行分类,以选择分类投资风险。

    下面以一个汽车销售的案例来介绍聚类分析在市场细分中的应用。

     

    汽车销售聚类分析

     

    商业目标

    业务理解:数据名称《汽车销售.csv》。该案例所用的数据是一份关于汽车的数据,该数据文件包含销售值、订价以及各种品牌和型号的车辆的物理规格。订价和物理规格可以从 edmunds.com 和制造商处获得。定价为美国本土售价。如下:

     

    美国本土售价

     

    表1:数据视图

    业务目标:对市场进行准确定位,为汽车的设计和市场份额预测提供参考。

    数据挖掘目标:通过聚类的方式对现有的车型进行分类。

    数据准备

    通过数据探索对数据的质量和字段的分布进行了解,并排除有问题的行或者列优化数据质量。

     

    汽车销售销售数据

    第一步,我们使用统计节点审核数据的质量,从审核结果中我们发现存在缺失的数据,如下图所示:

     

     

    审核后的数据

    第二步,对缺失的数据进行处理,我们选择使用缺失填充节点删除这些记录。配置如下:

     

     

    删除记录配置

     

    建模

    我们选择层次聚类进行分析,尝试根据各种汽车的销售量、价格、引擎、马力、轴距、车宽、车长、制动、排量、油耗等指标对其分类。

    因为层次聚类不能自动确定分类数量,因此需要我们以自定义的方式规定最后聚类的类别数。层次聚类节点配置如下(默认配置):

     

    层次聚类节点配置

    可以使用交互表或者右击层次聚类节点查看聚类的结果,如下图所示:

     

     

    使用交互表或者右击层次聚类节点查看聚类的结果

    再使用饼图查看每个类的大小,结果如下:饼图结果

     

     

    从图中可见,分成的三个类样本数差异太大,cluster_0和cluster_1包含的样本数都只有1,这样的分类是没有意义的,因此需要重新分类。我们尝试在层次聚类节点的配置中指定新的聚类方法:完全。新的聚类样本数分布如下:新的聚类样本数分布

     

     

    cluster_0、 cluster_1、cluster_2的样本数分别为:50、9、93。条形图记数

     

     

    执行后输出树状/冰柱图,可以从上往下看,一开始是一大类,往下走就分成了两类,越往下分的类越多,最后细分到每一个记录是一类,如下所示:树状图

     

     

    我们可以再使用条形图查看每类的销售量、平均价格,如下图所示:条形图求和

     

     

    每类总销量分布图每类总销量分布图

     

     

    每类平均销量分布图每类平均销量分布图

     

     

    每类平均价格分布图

     

    我们再看一下每类的销售额分布情况。首先,我们需要使用Java代码段节点或者派生节点生成销售额字段,配置如下:每类平均价格分布图配置

     

    再使用饼图查看销售额分布情况,cluster_0、 cluster_1、cluster_2的市场份额分别为:32.39%、0.53%和67.08%,如下图所示:市场份额

     

     

     

    案例小结

    通过这个案例,大家可以发现聚类分析确实很简单。进行聚类计算后,主要通过图形化探索的方式评估聚类合理性,以及在确定聚类后,分析每类的特征。

    转载于:https://www.cnblogs.com/zourui4271/p/6655699.html

    展开全文
  • 某天业务部门拿了一些数据找到数据部门,这些数据是关于客户的,苦于没有分析入手点,希望数据部门通过这些数据的分析,给业务部门一些启示、建议。 数据源特征如下: user_id用户ID列,整数型 AVG_ORDERS:平均...

    来自:宋天龙《PYTHON数据分析与数据化运营》,以下内容比较简陋,方便日后翻阅。

    1. 业务场景

    某天业务部门拿了一些数据找到数据部门,这些数据是关于客户的,苦于没有分析入手点,希望数据部门通过对这些数据的分析,给业务部门一些启示、建议。

    数据源特征如下:
    user_id用户ID列,整数型
    AVG_ORDERS:平均用户订单数量,浮点型
    AVG_MONEY:平均订单价值,浮点型
    IS_ACTIVE:是否活跃 字符串
    SEX:性别,0,1,1表示未知,男,女
    

    分析:
    IS_ACTIVE是字符串型分类变量,SEX是分类型变量,均需要对其onehotencode处理;
    AVG_ORDERS和AVG_MONEY有明显的量纲差异,需要归一化;
    但是使用onehotencoder后IS_ACTIVE和SEX的特征被分开了,最后输出的结果可能会比较凌乱,不符合业务原始变量分析的需求。
    下面使用另外一种方法:
    直接对IS_ACTIVE和SEX分类特征计算,只是不能用距离来判断相似度,而是计算类别内的分类特征值的出现频率。

    2. python实现

    1.导入库,读取数据

    import pandas as pd # panda库
    import numpy as np
    import matplotlib.pyplot as plt  # 导入matplotlib库
    from sklearn.preprocessing import MinMaxScaler # 标准化库
    from sklearn.cluster import KMeans  # 导入sklearn聚类模块
    from sklearn.metrics import silhouette_score, calinski_harabasz_score  # 效果评估模块
    import matplotlib.pyplot as plt # 图形库
    # 读取数据
    raw_data = pd.read_csv('cluster.txt')  # 导入数据文件
    print(raw_data.head())
    

    在这里插入图片描述

    2.数据处理、模型训练

    模型训练和评估的数据只是标准化的两列

    # 数据标准化
    numeric_features = raw_data.iloc[:,1:3] # 数值型特征
    scaler = MinMaxScaler()
    scaled_numeric_features = scaler.fit_transform(numeric_features)
    print(scaled_numeric_features[:,:2])
    # 训练聚类模型
    n_clusters = 3  # 设置聚类数量
    model_kmeans = KMeans(n_clusters=n_clusters, random_state=0)  # 建立聚类模型对象
    model_kmeans.fit(scaled_numeric_features)  # 训练聚类模型
    

    在这里插入图片描述

    3.评估模型

    # 模型效果指标评估
    # 总样本量,总特征数
    n_samples, n_features = raw_data.iloc[:,1:].shape
    print('samples: %d \t features: %d' % (n_samples, n_features))
    # 非监督式评估方法,还是训练的两列
    silhouette_s = silhouette_score(scaled_numeric_features, model_kmeans.labels_, metric='euclidean')  # 平均轮廓系数
    calinski_harabaz_s = calinski_harabaz_score(scaled_numeric_features, model_kmeans.labels_)  # Calinski和Harabaz得分
    unsupervised_data = {'silh':[silhouette_s],'c&h':[calinski_harabasz_s]}
    unsupervised_score = pd.DataFrame.from_dict(unsupervised_data)
    print('\n','unsupervised score:','\n','-'*60)
    print(unsupervised_score)
    

    在这里插入图片描述
    第一个指标大于0.5说明聚类质量较优。

    4.结果合并分析

    对于分类变量可以根据非分类变量训练得到的标签对其计算每一类别的频数

    # 合并数据和特征
    # 获得每个样本的聚类类别
    kmeans_labels = pd.DataFrame(model_kmeans.labels_,columns=['labels']) 
    # 组合原始数据与标签
    kmeans_data = pd.concat((raw_data,kmeans_labels),axis=1)
    print(kmeans_data.head())
    # 计算不同聚类类别的样本量和占比
    label_count = kmeans_data.groupby(['labels'])['SEX'].count()  # 计算频数
    label_count_rate = label_count/ kmeans_data.shape[0] # 计算占比
    kmeans_record_count = pd.concat((label_count,label_count_rate),axis=1)
    kmeans_record_count.columns=['record_count','record_rate']
    print(kmeans_record_count.head())
    # 计算不同聚类类别数值型特征
    kmeans_numeric_features = kmeans_data.groupby(['labels'])['AVG_ORDERS','AVG_MONEY'].mean()
    print(kmeans_numeric_features.head())
    
    # 计算不同聚类类别分类型特征
    active_list = []
    sex_gb_list = []
    unique_labels = np.unique(model_kmeans.labels_)
    print('标签:',unique_labels)
    for each_label in unique_labels:
        each_data = kmeans_data[kmeans_data['labels']==each_label]
    
        active_list.append(each_data.groupby(['IS_ACTIVE'])['USER_ID'].count()/each_data.shape[0])
        sex_gb_list.append(each_data.groupby(['SEX'])['USER_ID'].count()/each_data.shape[0])
    
    kmeans_active_pd = pd.DataFrame(active_list)
    kmeans_sex_gb_pd = pd.DataFrame(sex_gb_list)
    kmeans_string_features = pd.concat((kmeans_active_pd,kmeans_sex_gb_pd),axis=1)
    kmeans_string_features.index = unique_labels
    kmeans_string_features.columns=['不活跃','活跃','未知','男','女']
    print(kmeans_string_features.head())
    
    # 合并所有类别的分析结果
    features_all = pd.concat((kmeans_record_count,kmeans_numeric_features,kmeans_string_features),axis=1)
    print(features_all.head())
    

    在这里插入图片描述

    5.可视化展示

    # part 1 全局配置
    fig = plt.figure(figsize=(10, 7))
    titles = ['RECORD_RATE','AVG_ORDERS','AVG_MONEY','IS_ACTIVE','SEX'] # 共用标题
    line_index,col_index = 3,5 # 定义网格数
    ax_ids = np.arange(1,16).reshape(line_index,col_index) # 生成子网格索引值
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
        
    # part 2 画出三个类别的占比
    pie_fracs = features_all['record_rate'].tolist()
    for ind in range(len(pie_fracs)):
        ax = fig.add_subplot(line_index, col_index, ax_ids[:,0][ind])
        init_labels = ['','',''] # 初始化空label标签
        init_labels[ind] = 'cluster_{0}'.format(ind) # 设置标签
        init_colors = ['lightgray', 'lightgray', 'lightgray']
        init_colors[ind] = 'g' # 设置目标面积区别颜色
        ax.pie(x=pie_fracs, autopct='%3.0f %%',labels=init_labels,colors=init_colors)
        ax.set_aspect('equal') # 设置饼图为圆形
        if ind == 0:
            ax.set_title(titles[0])
        
    # part 3  画出AVG_ORDERS均值
    avg_orders_label = 'AVG_ORDERS'
    avg_orders_fraces = features_all[avg_orders_label]
    for ind, frace in enumerate(avg_orders_fraces):
        ax = fig.add_subplot(line_index, col_index, ax_ids[:,1][ind])
        ax.bar(x=unique_labels,height=[0,avg_orders_fraces[ind],0])# 画出柱形图
        ax.set_ylim((0, max(avg_orders_fraces)*1.2))
        ax.set_xticks([])
        ax.set_yticks([])
        if ind == 0:# 设置总标题
            ax.set_title(titles[1])
        # 设置每个柱形图的数值标签和x轴label
        ax.text(unique_labels[1],frace+0.4,s='{:.2f}'.format(frace),ha='center',va='top')
        ax.text(unique_labels[1],-0.4,s=avg_orders_label,ha='center',va='bottom')
            
    # part 4  画出AVG_MONEY均值
    avg_money_label = 'AVG_MONEY'
    avg_money_fraces = features_all[avg_money_label]
    for ind, frace in enumerate(avg_money_fraces):
        ax = fig.add_subplot(line_index, col_index, ax_ids[:,2][ind])
        ax.bar(x=unique_labels,height=[0,avg_money_fraces[ind],0])# 画出柱形图
        ax.set_ylim((0, max(avg_money_fraces)*1.2))
        ax.set_xticks([])
        ax.set_yticks([])
        if ind == 0:# 设置总标题
            ax.set_title(titles[2])
        # 设置每个柱形图的数值标签和x轴label
        ax.text(unique_labels[1],frace+4,s='{:.0f}'.format(frace),ha='center',va='top')
        ax.text(unique_labels[1],-4,s=avg_money_label,ha='center',va='bottom')
            
    # part 5  画出是否活跃
    axtivity_labels = ['不活跃','活跃']
    x_ticket = [i for i in range(len(axtivity_labels))]
    activity_data = features_all[axtivity_labels]
    ylim_max = np.max(np.max(activity_data))
    for ind,each_data in enumerate(activity_data.values):
        ax = fig.add_subplot(line_index, col_index, ax_ids[:,3][ind])
        ax.bar(x=x_ticket,height=each_data) # 画出柱形图
        ax.set_ylim((0, ylim_max*1.2))
        ax.set_xticks([])
        ax.set_yticks([])    
        if ind == 0:# 设置总标题
            ax.set_title(titles[3])
        # 设置每个柱形图的数值标签和x轴label
        activity_values = ['{:.1%}'.format(i) for i in each_data]
        for i in range(len(x_ticket)):
            ax.text(x_ticket[i],each_data[i]+0.05,s=activity_values[i],ha='center',va='top')
            ax.text(x_ticket[i],-0.05,s=axtivity_labels[i],ha='center',va='bottom')
            
    # part 6  画出性别分布
    sex_data = features_all.iloc[:,-3:]
    x_ticket = [i for i in range(len(sex_data))]
    sex_labels = ['SEX_{}'.format(i) for i in range(3)]
    ylim_max = np.max(np.max(sex_data))
    for ind,each_data in enumerate(sex_data.values):
        ax = fig.add_subplot(line_index, col_index, ax_ids[:,4][ind])
        ax.bar(x=x_ticket,height=each_data) # 画柱形图
        ax.set_ylim((0, ylim_max*1.2))
        ax.set_xticks([])
        ax.set_yticks([])
        if ind == 0: # 设置标题
           ax.set_title(titles[4])    
        # 设置每个柱形图的数值标签和x轴label
        sex_values = ['{:.1%}'.format(i) for i in each_data]
        for i in range(len(x_ticket)):
            ax.text(x_ticket[i],each_data[i]+0.1,s=sex_values[i],ha='center',va='top')
            ax.text(x_ticket[i],-0.1,s=sex_labels[i],ha='center',va='bottom')
        
    plt.tight_layout(pad=0.8) #设置默认的间距
    

    在这里插入图片描述

    6.结果分析

    在这里插入图片描述

    展开全文
  • K-Means(K均值)是聚类最常用的方法之一,基于点与点距离的相似度来计算最佳类别归属。数据来源业务部门,这些数据是关于客户的,苦于没有分析入手点希望数据部门通过对这些...故考虑对客户进行聚类分析,分析客户...

    1b9161bf0e6378f9b22d576586eb28cb.png

    K-Means(K均值)是聚类最常用的方法之一,基于点与点距离的相似度来计算最佳类别归属。

    数据来源业务部门,这些数据是关于客户的,苦于没有分析入手点希望数据部门通过对这些数据的分析,给业务部门一些启示,或者提供数据后续分析或者业务思考的建议。

    基于以上的场景的描述和需求,由于业务部门可以自己做一些描述性的统计分析,以及此次数据属于探索性数据分析,没有之前的参考案例。故考虑对客户进行聚类分析,分析客户的一些特点。

    数据源链接:https://pan.baidu.com/s/1gx0q2k9HtTBM-T7xW3oD2Q

    提取码:1k95

    数据描述:

    • USER_ID:客户id
    • AVG_ORDERS:平均用户订单数量
    • AVG_MONEY:平均订单价值
    • IS_ACTIVE:是否活跃
    • SEX:性别(0,1,2分别代表未知,男,女)

    1.导入库

    # 导入库
    import pandas as pd
    import numpy as np
    import matplotlib.pyplot as plt
    
    from sklearn.cluster import KMeans #Kmeans
    from sklearn.preprocessing import MinMaxScaler#数据标准化包
    # x效果评估模块
    from sklearn.metrics import silhouette_score , calinski_harabaz_score
    
    #忽略警告信息
    import warnings
    warnings.filterwarnings('ignore')
    
    #解决中文乱码问题
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

    2.导入数据文件

    # 导入数据文件
    raw_data = pd.read_csv('F:pythonpython数据分析与数据运营课本数据chapter4cluster.txt')
    # 数值型特征
    numeric_features = raw_data.iloc[:,1:3]
    raw_data.head()

    dc0126383cd05fb6d848323ec171d4ca.png
    numeric_features.head()

    69f792ab851bc5fb3db5bda5d646611d.png

    3.数据标准化

    # 数据标准化
    scaler = MinMaxScaler()
    scaled_numeric_features = scaler.fit_transform(numeric_features)
    print(scaled_numeric_features[:,:2])

    4.训练模型

    #设置聚类数量
    n_clusters = 3 
    # random_state = 0的目的是保证每次训练时的初始值一致
    model_kmeans = KMeans(n_clusters = n_clusters,random_state = 0) 
    model_kmeans.fit(scaled_numeric_features)
    
    ''’对象持久化:将模型保存至硬盘,便于后期使用时直接调用'''
    import pickle
    # dump:将python对象序列化保存至本地文件
    pickle.dump(model_kmeans,open('my_model_object.pk1','wb'))
    #load:从本地文件读取python对象并恢复实例对象
    model_kmeans = pickle.load(open('my_model_object.pk1','rb'))

    5.模型效果指标评估

    # 输出总样本量,总特征数
    n_sample,n_feature = raw_data.iloc[:,1:].shape
    print('n_sample: %d n n_feature: %d'%(n_sample,n_feature))

    n_sample: 1000
    n_feature: 4

    # 非监督式评估方法
    # 平均轮廓系数
    silhouette_s = silhouette_score (scaled_numeric_features,model_kmeans.labels_,metric ='euclidean')
    # calinski和harabaz得分
    calinski_harabaz_s = calinski_harabaz_score(scaled_numeric_features,model_kmeans.labels_)
    print('silhouette_s: %f n calinski_harabaz_s: %f'%(silhouette_s,calinski_harabaz_s))

    silhouette_s: 0.634086
    calinski_harabaz_s: 2860.821834

    silhouette_s大于0.5,说明聚类质量较优。优秀与否的基本原则是不同类别间是否具有显著的区分效果。

    6.合并数据和特征

    # 整合上面的聚类标签到原始数据中
    kmeans_labels = pd.DataFrame(model_kmeans.labels_ , columns= ['labels'])
    #组合原始数据与标签
    kmeans_data = pd.concat((raw_data,kmeans_labels),axis = 1)
    kmeans_data.head()

    7.计算不同类别的样本量和占比

    #计数
    label_count = kmeans_data.groupby('labels')['SEX'].count()
    #占比
    label_count_rate = label_count/kmeans_data.shape[0]
    kmeans_record_count = pd.concat((label_count,label_count_rate),axis=1)
    kmeans_record_count.columns = ['record_count','record_rate']
    
    kmeans_record_count

    92792a32ae9247413521ecd42b76a2b9.png
    # 计算样本容量
    customer_count =  kmeans_record_count.record_count.sum()
    customer_count

    1000

    # 画图
    plt.pie(kmeans_record_count.record_rate,
            autopct="%3.1f%%",
            labels=kmeans_record_count.index       )
    plt.title('不同类别的样本量和占比')

    2a211e99aa2aaa4a5cf480e05cb3684d.png

    样本数量共1000人

    1)分类为‘0’332人,占33.2%,

    2)分类为‘1’337人,占33.7%,

    3)分类为‘2’331人,占33.1人

    8.计算不同聚类类别数值型特征

    # 查看一下数值型特征的均值情况
    kmeans_numeric_features = kmeans_data.groupby('labels')[['AVG_ORDERS','AVG_MONEY']].mean()
    kmeans_numeric_features

    c68332661fb1c795d688c7a8f8eb19ef.png
    kmeans_numeric_features.plot()

    501cc58f278bdc4708e8c0c7cca73f18.png

    3个分类中,AVG_ORDERS和AVG_MONEY有轻微变化。

    9.计算不同聚类类别分类类型特征

    9.1 不同活跃度在不同标签中的占比

    kmeans_data['n']=1
    kmeans_active_count = kmeans_data.groupby(['labels','IS_ACTIVE'])['n'].count().unstack()
    kmeans_active_count

    27be5cdcd058b88f575166eb00fd2a04.png
    # 'labels = 0' 时,活跃与不活跃用户占比
    plt.pie(kmeans_active_count.iloc[0,:],
            autopct="%3.1f%%",
            labels=kmeans_active_count.columns
           )
    plt.title('labels = 0')

    622ac52bd910ab714ac6e9feee021013.png
    # 'labels = 1' 时,活跃与不活跃用户占比
    plt.pie(kmeans_active_count.iloc[1,:],
            autopct="%3.1f%%",
            labels=kmeans_active_count.columns
           )
    plt.title('labels = 1')

    4e45a7af005290a9fa54a525d4378916.png
    # 'labels = 2' 时,活跃与不活跃用户占比
    
    plt.pie(kmeans_active_count.iloc[2,:],
            autopct="%3.1f%%",
            labels=kmeans_active_count.columns
           )
    plt.title('labels = 2')

    51df246855d231c59b61046803a4ec06.png

    由上面的3个饼图可知,用户是否活跃对标签的影响不大,在各分类中,活跃与不活跃用户基本各占50%。

    9.2不同性别在不同标签中的占比

    kmeans_sex_count = kmeans_data.groupby(['labels','SEX'])['n'].count().unstack()
    kmeans_sex_count

    9739c1a034ae56ffbef36a4f6f42982d.png
    # 'labels = 0' 时,各性别用户占比
    plt.pie(kmeans_sex_count.iloc[0,:],
            autopct="%3.1f%%",
            labels=kmeans_sex_count.columns
           )
    plt.title('labels = 0')

    7e5f02413fe72a2ba532fa017cf33d9b.png
    # 'labels = 1' 时,各性别用户占比
    plt.pie(kmeans_sex_count.iloc[1,:],
            autopct="%3.1f%%",
            labels=kmeans_sex_count.columns
           )
    plt.title('labels = 1')

    c48f34a8591d98b3b81a7a6c1a71e593.png
    # 'labels = 2' 时,各性别用户占比
    plt.pie(kmeans_sex_count.iloc[2,:],
            autopct="%3.1f%%",
            labels=kmeans_sex_count.columns
           )
    plt.title('labels = 2')

    a0f0593df7e9bc446264bec9e82cb067.png

    由上面的3个饼图可知,性别对分类的影响比较大,近似可以看做每个性别类型对应一个分类。

    总结:

    通过kmeans聚类分析主要得出以下结论:

    1. 使用 kmeans对客户信息进行聚类,共3个分类,silhouette_s大于0.5,说明聚类质量较优;
    2. 样本数量共1000人
      1. 分类为‘0’332人,占33.2%,
      2. 分类为‘1’337人,占33.7%,
      3. 分类为‘2’331人,占33.1人
    3. 3个分类中,AVG_ORDERS和AVG_MONEY有轻微变化;
    4. 用户是否活跃对标签的影响不大,在各分类中,活跃与不活跃用户基本各占50%;
    5. 用户性别对分类的影响比较大,近似可以看做每个性别类型对应一个分类。
    展开全文
  • K-Means(K均值)是聚类最常用的方法之一,基于点与点距离的相似度来计算最佳类别归属。数据来源业务部门,这些数据是关于客户的,苦于没有分析入手点希望数据部门通过对这些...故考虑对客户进行聚类分析,分析客户...
  • 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法目标顾客群体挖掘,同样利用微软案例数据进行简要总结。 应用场景介绍 通过上一篇中我们采用Microsoft决策树分析算法已经发生购买...
  • 例如,一个营销组织来说,将不同客户根据他们特点进行分组,从而有针对性地定制营销活动,这很重要。又比如,学校老师来说,将学生分组同样能够有所侧重进行教育活动。分类与聚类是数据挖掘领域两大基础方法...
  • 数据挖掘本质是“计算机根据已有数据做出决策”,其社会价值不必多言,相关应用已经有很多,包括垃圾邮件拦截、客户价值分析等。 尽管数据挖掘实现过程细节千差万别,但是从思路来说,主要包括两个...
  • (原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 聚类分析算法)本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法目标顾客群体挖掘,同样利用微软案例数据...
  • 【数据猿导读】本篇是这个系列文章最后一个部分,将要说明重点案例是利用聚类分析对售后问题进行分组,不同分组进行分析,进而采取针对性优化或者行动作者 | TalkingData官网 | www.datayuan.cn微信公众号ID...
  • 文章目录案例实战:基于聚类算法完成航空公司客户价值分析任务1、任务描述2、数据集2.1 数据集中字段含义3、方法3.1 数据预处理3.2 特征工程3.2.1 RFM模型3.2.2 变体-LRFMC模型3.2.3 标准化3.3 模型训练与数据...
  • 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法目标顾客群体挖掘,同样利用微软案例数据进行简要总结。 应用场景介绍 通过上一篇中我们采用Microsoft决策树分析算法已经发生...
  • 这一节是使用聚类算法来公司客户价值进行判断和分析。 提到聚类算法,大家应该都会想到是K-means。这是比较简单和经典一种聚类算法。 k-means聚类算法原理比较简单,实现也容易,可以直接调用pythonsklearn...
  • 根据这些客户数据,结合用户通话行为,对客户进行细分,推荐相应套餐,或者结合用户现有套餐优化用户套餐,提供个性化套餐。 数据分析步骤 数据预处理 描述性统计分析 缺失值处理 异常值处理 相关性检验 标准化处理 ...
  • 2.2 聚类  我们经常会碰到这样问题:  1)如何通过一些特定症状归纳某类特定疾病?... 5)如何用户WAP上网行为进行分析,通过客户分群进行精确营销?  除此之外,促销应该针对哪一类客户,这类客户具...
  • 本篇文章主要是继续上一篇Microsoft决策树分析算法后,采用另外一种分析算法目标顾客群体挖掘,同样利用微软案例数据进行简要总结。 应用场景介绍 通过上一篇中我们采用Microsoft决策树分析算法已经发生...
  • 数据分析的基本模型——K均值聚类

    千次阅读 2018-04-20 14:41:08
    场景:客户生命周期价值聚类相似人群聚类案例客户生命周期价值聚类解读:利用客户最近购买时间,购买总金额、购买频次等特征,利用聚类算法,将相似的客户划分为K个不同价值的客户,进行精准营销,或个性化服务。...
  • 本篇文章主要采用另外一种分析算法目标顾客群体挖掘,...通过上一篇中我们采用Microsoft决策树分析算法已经发生购买行为订单中的客户属性进行了分析,可以得到几点重要信息,这里做个总结: 1、
  • python数据分析:客户价值分析案例实战

    万次阅读 多人点赞 2018-08-24 10:58:54
    简介:本案例以电信运营商客户信息为数据,通过层次聚类和K-means聚类用户划分成不同的群体,然后可以根据用户群体的不同特征提供个性化的策略,从而达到提高ARPU的效果。 1.商业理解 根据客户的日常消费...
  • 案例将使用航空公司客户数据,结合RFM模型,采用K_Means聚类算法,对客户惊醒分群,比较不同类别客户的客户价值,从而制定相应的营销策略。 RFM模型:Recency最近一次消费,Frequency消费频率,Monetary消费总金额...
  • 分词之后,使用朴素的贝叶斯,K-means和TF-IDF相关算法来完成词频统计,情感分析和聚类分析。 研究发现,农村特色产品的质量得到了电子商务客户的更多认可,但其总体情感得分略低于非本土产品。 在总结了前者的弊端...
  • 文章目录第二部分 客户主题分析前言第五章 拒绝平均人:对客户进行合理分群1.聚类规模和消费金额条形图2.消费频次以及消费金额趋势线3.不同群体各类产品消费情况4.消费频次和类平均消费价格散点图 前言 本部分...
  • IVR客户进行聚类分析,总结出其重要特点;提出相应对策,帮助提高IVR客户的满意度和利用率。建立一个C5.0决策树模型,分析预测客户是基于什么情况才进入IVR系统的。分析IVR客户与入网时长、地区、ARPU值之间的规则...

空空如也

空空如也

1 2 3
收藏数 41
精华内容 16
关键字:

对客户的聚类分析案例