(转载)微软数据挖掘算法:Microsoft 决策树分析算法(1)
介绍:
Microsoft 决策树算法是分类和回归算法,用于对离散和连续属性进行预测性建模。
对于离散属性,该算法根据数据集中输入列之间的关系进行预测。 它使用这些列的值(也称之为状态)预测指定为可预测的列的状态。 具体地说,该算法标识与可预测列相关的输入列。 例如,在预测哪些客户可能购买自行车的方案中,假如在十名年轻客户中有九名购买了自行车,但在十名年龄较大的客户中只有两名购买了自行车,则该算法从中推断出年龄是自行车购买情况的最佳预测因子。 决策树根据朝向特定结果发展的趋势进行预测。
对于连续属性,该算法使用线性回归确定决策树的拆分位置。
如果将多个列设置为可预测列,或输入数据中包含设置为可预测的嵌套表,则该算法将为每个可预测列生成一个单独的决策树。
算法的原理:
Microsoft 决策树算法通过在树中创建一系列拆分来生成数据挖掘模型。 这些拆分以“ 节点”来表示。 每当发现输入列与可预测列密切相关时,该算法便会向该模型中添加一个节点。 该算法确定拆分的方式不同,主要取决于它预测的是连续列还是离散列。
Microsoft 决策树算法使用“ 功能选择”来指导如何选择最有用的属性。 所有 SQL Server Data Mining algorithms to improve performance and the quality of analysis. 功能选择对防止不重要的属性占用处理器时间意义重大。 如果在设计数据挖掘模型时使用过多的输入或可预测属性,则可能需要很长的时间来处理该模型,甚至导致内存不足。 用于确定是否拆分树的方法包括“平均信息量”和 Bayesian 网络的行业标准度量。 有关用于选择有意义的属性以及对这些属性计分和排列的方法的详细信息,请参阅功能选择(数据挖掘)。
数据挖掘模型中的常见问题是该模型对定型数据中的细微差异过于敏感,这种情况称为“过度拟合”或“过度定型”。 过度拟合模型无法推广到其他数据集。 为避免模型对任何特定的数据集过度拟合, Microsoft 决策树算法使用一些技术来控制树的生长。 有关 Microsoft 决策树算法工作方式的更深入说明,请参阅 Microsoft 决策树算法技术参考。
应用场景介绍
其实数据挖掘应用的场景无处不在,很多的环境都会应用到数据挖掘,之前我们没有应用是因为还没有学会利用数据,或者说还没有体会到数据的重要性,现在随着IT行业中大数据时代的到来,让我一起去拥抱大数据,闲言少叙,此处我们就列举一个最简单的场景,一个销售厂商根据以往的销售记录单,通过数据挖掘技术预测出一份可能会购买该厂商产品的客户名单,我相信这也是很多销售机构想要得到的数据,当然这其中还有许多数据可供挖掘,比如:各种商品之间的关联是否能带来联动销售(啤酒和尿不湿、商品货架商品摆放、网站导航商品布局等)、影响每一种商品的属性值等等吧,这些伴随和数据挖掘的过程都会形成报告。
技术准备
这里有几点技术储备需要提到
(1)我们利用微软提供的案例数据仓库(AdventureWorksDW2008R2),当然其实我们应用的也就是两张事实表,一张已有的历史购买自行车记录的历史表,当然包括购买自行车顾客的一些供挖掘的属性,另外一张就是我们将要挖掘的收集过来可能发生购买自行车的人员信息表,从这里面挖掘出可能会买自行车的人。
晒历史销售表结构:
包含一个主键记录、顾客的生日、姓名、Email、婚姻状况、是否有房子、是否有车、年龄、上班距离远近等属性情况,这后面还有一列是是否发生购买自行车,当然从三范式上讲这种设计方式是不符合OLTP的,但此处是OLAP,也不是规范的事实表,这种结构一般通过一个view就能拼凑出来,咱这里就不提这些基础技术了。
另外一张表:
同样是一张人员信息表,也是记录的一些人员的属性,当然这里不会和已经销售人员记录的信息一样,但会包含相同的属性集合,比如:生日、年龄、年收入等等,我们要做的就是从这种表里面找到会买自行车的人。
(2)vs数据挖掘工具、安装好数据库配置好服务,这个都懂,没啥可说的,但要实现这种目的我们会使用三种数据挖掘算法,稍作介绍
Microsoft 决策树:对于离散属性,该算法根据数据集中输入列之间的关系进行预测。它使用这些列的值或状态预测指定的可预测列的状态。具体地说,该算法标识与可预测列相关的输入列。
Microsoft 聚类分析:该算法使用迭代技术将数据集中的事例分组为包含类似特征的分类。在浏览数据、标识数据中的异常及创建预测时,这些分组十分有用。简单点就是找出相同一部分属性的种类。
Microsoft Naive Bayes:Microsoft Naive Bayes 算法是由 Microsoft SQL Server Analysis Services 提供的一种基于贝叶斯定理的分类算法,可用于预测性建模。
这些算法有很多底层算法作支撑,我们只需要记住他们的应用场景和不同算法所具有的特性即可。下面的分步骤分析过程我会总结每种算法能干什么,能够分析出什么。
下面我们进入主题,通过简单的过程配置我们来实现整个数据挖掘的过程,依次步骤如下
1、新建工程,配置数据源
这个没有什么可分析的,基于微软案例数据库建立数据连接,简单的数据配置,实例名和用户名和密码连接数据仓库即可
2、创建数据源视图
这里就是筛选出我们想要数据挖掘的数据表,可以选择的是表或者视图,我们这里要做的事很简单,其实就是把上面的两张表从数据库里连接出来,VS工具配置很简单,根据它的提示我们就可以很轻松的配置出数据视图。
这里有几个技巧可以浏览两张表数据,在所选表中右键选择“浏览数据”,可以查看里面的列,还能分析数据中所占比情况,可以采用类似于Excel的透视表、透视图查看,也可以通过图表工具,例如:
此步骤是为了让我们理解里面的表数据,通过分析数据可以先分析出数据表中可以供我们挖掘的数据列属性有哪些,也可以简要推测影响我们目标(购买自行车)这种行为可能影响的属性,比如:家里有汽车的、年龄大于60或者小于10岁的、上班距离跨越好几个城区的(比如从朝阳——海淀上班)、年收入百万的等等吧按照常理会买自行车的几率还是挺小的,下一步我们用挖掘算法来逐一验证我们基于经验的这些推测是否合理。
3、创建挖掘结构
这一步我们分步骤细一点,逐过程讲解
(1)在解决方案中“数据结构”中,右键选择新建数据挖掘,这里我们选择“从现有数据库或数据仓库”来定义数据挖掘结构
(2)点击下一步,选择一种算法,这里列出了几种我们比较常用的数据挖掘算法,我们选择“Microsoft 决策树”算法
(3)点击下一步,选择我们可以应用的数据源视图
(4)我们选择上面的“vTargetMail”表作为事例来进行挖掘,所谓的事例就是以前我们所存在的历史记录表,点击下一步
(5) 进入指定定性数据模块,显示图如下,这里面有几列比较重要,先看图片
这里面有几列需要我们自己配置,键列:这个就是我们的主键列了,vs能自己识别出来,然后就是输入列:这一列就是根据我们要预测的目标,手动勾选的状态值列,这里我们勾选了年龄、通勤距离、英国学历、英国职位、婚姻状况、家庭汽车数、家庭孩子总数、在家里孩子数、所在地区、年收入等我们认为会影响预测目标的值列,当然这里有时候我们自己的推断不一定能准,但VS同样根据数据给你推算出了可能影响的列供参考选择,这里我们点击“建议”按钮,会弹出如下窗口:
看到了嘛,可爱的vs已经将肯尼个影响的列给你建议出来了,这里的分数就是评估的应该的概率,年龄是影响购买车辆影响最大的因素、其次是家庭车辆、再次是家庭孩子总数、当然这些值也是采样获取的,点击输入,就会选中相应的列,这里我们的可预测列就选择:购买自行车列“BikeBuyer”,这里最前面的一列就是要显示的明细列,数据挖掘的结果提供明细钻取,显示明细的时候需要的列,我们可以在这里面选中。
到这一步其实我们可以简要的推断买不买自行车看来与年龄还是关系比较大的,嗯...老年人和儿童估计骑自行车的可能性不大,呵呵...当然这仅是推测,咱们接着往下挖掘。
(6)点击下一步,进入数据挖掘模型机构,这里面会显示出各个列里面的值类型和值状态,是连续值、还是离散型,可以点击检测推断
(7)点击下一步,会进入数据集两个比较重要的参数配置,一个就是计算模型数据集所占比,一个就是最大实例数的值,先看图,然我我解释含义
在vs中已经有说明了,解释的比较清楚,第一个值就是用于计算数据挖掘模型的值占比,剩下的值作为后面验证我们数据挖掘模型的正确性,简单点就是留一部分测试数据稍后我们那它来测试测试我们建立的数据挖掘模型是否正确。第二个值就是每个挖掘回归所占的最大事例总数,这里我们做一个限制。
(8)点击下一步,给这个数据挖掘模型起一个名字,然后勾选上允许钻取明细
至此我们的Microsoft决策树数据挖掘模型已经建立完毕,看看图
下一步就是分析我们的挖掘结果了,这一步最精彩,我们来逐步分析。
结果分析
在分析之前我们先在解决方案中右键部署该解决方案到本地Analysis Services数据库中。
在我们数据挖掘模型中有四个选项卡一个就是我们的挖掘结构,第二个就是挖掘模型中我们设置的输入列、预测列、键列等信息,没啥可说的看图
接着才是我们重点要分析的数据挖掘模型查看器,这里面会有我们挖掘出来的结果值,形成我们的分析报告等选项,先看看图:
整幅图片中,整个显示结果是一种树状结构图,从顶端依次展开的横向图片,从图例中我们就可以看到,其中红色的也就是值为1的为购买自行车的比例,蓝色的就是没购买自行车的比例,这里有个选项比较重要,就是背景,默认为全部值,也就是说整个图中包含所有的事实,因为我们的需求是要分析购买自行车的顾客的状态,所以我们选择值为1(会发生购买)的进行分析,当然如果需求比较特别,你也可以选择不购买自行车的顾客这部分群体的特征,这里我们选择为1的背景:
看看分析结果:
整体树种,颜色最深的为我们最期望得到的值,而每个方块所代表的就是一种状态值区间,每个方块又可以依次展开看其子节点状态,最靠近根部的方块所代表的的因为即为影响结果值最重要的因素,从上图中我们可以看到家庭中汽车的数量(Number Cars Owned)是决定是否购买自行车最重要的因素,而这种因素中汽车数量为0的购买自行车的概率最高,也就说最想买自行车,其次是有一辆汽车的顾客,我们接着分析:
将鼠标移动到Number Cars Owned为0 的方块中,可以查看明细:
可以看到该部分顾客购买自行车的概率为63.15%,这里面共有4006个事例,发生购买的为2530个,所以这部分顾客应该是厂商最喜欢的,也是他们将要重点挖掘的对象,原因你懂的。当然家里有一汽车的也有很多想买自行车的,我们也不能放弃,同样我们点开这个节点接着分析。
嘿嘿,从图中可以看到我们上面推测的年龄因素已经浮出水面了,家里没有车,然后年龄在45岁以下购买自行车的概率已经飙升到73.49%,有图有真相,45岁以下,然后还没有小汽车,在大米国应该也算是屌丝一级别了,买辆自行车骑骑也正常,同样我们接着分析。
紧接着,影响的第三层因素也开始冒泡了,那就是地域位置,看图中,不在北美位置的顾客购买几率更高,而这里面在家里的孩子为0的购买几率已经达到了92.50%,汗,厂商还等什么,遇到这种顾客你就让你的销售坐等业绩就可,咱们来分析一下这部分人群:家里没有车、年龄在45岁一下、不在北美地区、家里也没有孩子......我那个去,这部分顾客什么情况,一种是直接型的屌丝级别,一种是绝对有品位的高富帅(孩子已经成家)。好吧,如果销售面对的是这群客户,你要做的就是升职、加薪、赢取白富美了...
咱们再来分析另外一种家里有一个汽车的情况,先看图:
结果:年龄在37到53之间,通勤距离小于10Miles,家里孩子既不等于3也不等于4,然后年收入在58000$以上,这部分顾客购买的几率在74.83%左右。
这里我们可以通过查看依赖关系网络图,了解一下我所有的这些元素对购买自行车这种行为的影响:
通过拖动左侧的滑动条可以依次查看所有的因素对买自行车所造成的影响大小,下面最重要,这里为家庭轿车数(Number Cars Owned)、其次是年龄(Age)、再次是地区(Region)....
以上是对决策树算法所推测出的结果进行分析,我们下一步要做的就是要验证我们的分析结果正确率有多高,还会增加其它不同的算法作对比,然后在根据正确率最好的算法推测上面我们已有的顾客列表中找到购买自行车概率最高的那群人。限于篇幅,后面的文章中我们继续详细的分析这些事情,下面我晒几个结果图,供大家玩味:
数据挖掘准确性图表:
图中有我们剩下的那部分测试数据做出的验证图表,还有理想的最佳模型、最烂的随机预测模型,和他们的概率,当然这中间就是我们决策树预测的模型,这图表中的维度和值就不分析了,自己品味。
同样我们还可以根据我们的预测模型绘出利润图:
所谓的利润图,就是通过这种分析能给我们带来的利润,嗯,这个也是厂商关注的。