大数据技术贴:构建一个有指导的数据挖掘模型 行业资讯
数据挖掘的目的,就是从数据中找到更多的优质用户。接着上篇继续探讨有指导数据挖掘方法模型。什么是有指导的数据挖掘方法模型,以及数据挖掘如何构建模型。在构建一个有指导的数据挖掘模型,首先要理解和定义一些模型试图估计的目标变量。一个典型的案例,二元响应模型,如为直接邮寄和电子邮件营销活动选择客户的模型。模型的构建选择历史客户数据,这些客户响应了以前类似的活动。有指导数据挖掘的目的就是找到更多类似的客户,以提高未来活动的响应。
这构造有指导的数据挖掘模型的过程中,首先要定义模型的结构和目标。二、增加响应建模。三、考虑模型的稳定性。四、通过预测模型、剖析模型来讨论模型的稳定性。下面我们将从具体的步骤谈起,如何构造一个有指导的数据挖掘模型。
有指导数据挖掘方法:
把业务问题转换为数据挖掘问题选择合适的数据认识数据创建一个模型集修复问题数据转换数据以揭示信息构建模型评估模型部署模型评估结果重新开始
步骤:
1、把业务问题转换为数据挖掘问题
《爱丽丝梦游仙境》中,爱丽丝说“我不关心去哪儿”。猫说:“那么,你走哪条路都没什么问题”。爱丽丝又补充到:只要我能到达某个地方。猫:“哦,你一定能做到这一点,只要你能走足够长的时间。”
猫可能有另外一个意思,如果没有确定的目的地,就不能确定你是否已经走了足够长的时间。
有指导数据挖掘项目的目标就是找到定义明确的业务问题的解决方案。一个特定项目的数据挖掘目标不应该是广泛的、通用的条例。应该把那些广泛的目标,具体化,细化,深入观察客户行为可能变成具体的目标:
确定谁是不大可能续订的客户为以家庭为基础的企业客户设定一个拨打计划,该计划将减少客户的退出率确定那些网络交易可能是欺诈如果葡萄酒和啤酒已停止销售,列出处于销售风险的产品根据当前市场营销策略,预测未来三年的客户数量
有指导数据挖掘往往作为一个技术问题,即找到一个模型以解释一组输入变量与目标变量的关系。这往往是数据挖掘的中心,但如果目标变量没有正确的定义以及没有确定适当的输入变量。反过来,这些任务又取决于对要解决的业务问题的理解程度。没有正确的理解业务问题就没办法把数据转化为挖掘任务。在技术开始之前,必须认识两个问题:如何使用结果?以何种方式交付结果?
上述两个问题,都是建立在客户的真正需求是什么?而不是作为数据挖掘工程师认为的什么是有用的数据,什么对客户最好的数据。这些结果看似有利于客户提高销售额,但是我们交付的结果是什么,我们有理解客户的需求吗?所有前提,不要着急急着动手,先理解真正需求,不可盲目主断。
1.1如何使用结果?
例如:许多数据挖掘工作旨在提高客户保留
主动向高风险或高价值的客户提供一个优惠,挽留他们改变获取渠道的组合,以利于那些能带来最忠实客户的渠道预测未来几个月的客户数量改变会影响客户的满意度的产品的缺陷
这些目标都会对数据挖掘过程产生影。响。通过电话或直接邮寄的营销活动接触现有客户,意味着除了确定客户风险之外,你要了解为什么他们处于风险中,从而可以构造一个有吸引力的优惠。电话,不能过早或过迟。预测意味着除了确定那些客户可能离开,确定有多少新客户加入,以及他们会停留多久。而新客户的加入,不只是意味着预测模型要解决的问题,还是被纳入到业务目标和预算之中。
1.2如何交付结果?
有指导的数据挖掘项目可能会产生几个不同类型的交付形式。交付形式往往是一个报表或充满图标和图形的简报。交付形式会影响数据挖掘的结果。当我们的目的是提醒销售惊雷时,产生一个营销测试的客户列表是不够的。所谓的如何交付结果,就是在挖掘结果产生之后,我们要如何给用户提供这个结果,目的是好的,但实际的过程中会遇到,会遇到我们没有办法去交付这个结果。因为,你交付的结果,可能会导致一些本不该流失的客户,却流失了。这也是在具体工作之前,我们要考虑的问题。
数据挖掘人员的作用是确保业务问题的最后表述可以被转换成一个技术问题。前提是正确的业务问题。
2、择合适的数据 2.1什么数据可用?
寻找客户数据的首要地方就是企业数据仓库。仓库中的数据已经被清洗和核实过,并且多个数据源被整合到一起。一个单一的数据模型有望确保命名相似的字段在整个数据库和兼容的数据类型中都有相同的含义。企业数据库是一个历史数据库,新数据不断的被追加,但历史数据一直不变。从这一点更有利于做决策支持。
问题在于,在许多企业组织中,这样的数据仓库实际上并不存在,或者存在一个或多个数据仓库,不符合直接作为规范的数据用来挖掘。在这种情况下,挖掘人员,必须寻求来自不同的部门的数据库和业务系统内的数据。业务系统数据是指执行一个特定的任务,如网站运行,索赔处理,完成呼叫或账单处理。它们的目标是快速、准确的处理事务,数据可以保存成任何格式。而这些对于没有数据仓库的一些企业来说,这些数据往往是隐藏的很深,需要大量的企业调度和规划来整理这些数据。这也就谈到了一个问题:就是数据仓库对一家企业的重要性,而建立企业级数据仓库,需要的决策不是一个经理就可以完成的,这可能需要企业级最高领导下令,下面的所有部门全部配合。
在企业总确定哪些数据可用是相当困难的。因为许多的文档会丢失或过时。通常情况下,没有一个人可以提供所有答案。确定什么数据可用,需要遍历数据字典,了解具体的业务,沟通每个部门,访问用户和DBA,审查现有的报告以及查找数据本身是否有用。还有些问题,不仅需要有关客户的数据,还需要潜在的客户的数据。当需要这些数据的时候,外部资源和业务系统,如Web日志、呼叫详细记录、呼叫中心系统、有时甚至是邮件或电子表格,这些都是数据信息的来源。
数据挖掘工作的方式并不是一直等到完美和干净的数据才进行下一步工作。虽然需要额外干净的数据,但是受挖掘必须能够使用目前的数据,提前入手,开始工作。
2.2多少数据才足够?
一、数据越多越好,更多意味着更好。在建模期间,必须对模型集进行平衡,使得每个结果的数目都相等。如果在一个大规模的样本中有一个比例很小的稀有数据,则一个较小的、均衡的样本会更受欢迎。
二、当模型集足以建立良好的、稳定的模型时,使它更大将会产生相反的作用,因为这时需要更长时间在更大的模型上去运行,由于数据挖掘是一个反复的过程,这就导致时间的浪费。如果一次建模例程的运行都需要数小时而不是数分钟,这个时间的消耗就耗不起的。这就导致,在模型确定后,数据并不是越多越好。
2.3需要多久的历史?
数据挖掘使用过去的数据预测未来。但是,数据需要来自多久的过去?这个没有定性的回答,这要考虑很多的因素。另一方面,历史上太久的数据未必对数据挖掘有用,因为市场环境在变化,特别是当一些外部事件(如监管制度的变化)进行了干预时尤其如此。对于许多以客户为中心的应用,2-3年的历史是合适的。然而,在这种情况下,客户关系确实存在有效才被证明是有价值的,那么重要的是什么:最初的渠道是什么?最初的报价是什么?客户最初怎么支付的等。
多少变量:
不熟练数据挖掘的人员有时太急于抛出不太可能有意义的变量,且只保存了他们认为重要的几个精心挑选的变量。数据挖掘方法要求数据本身能揭示它重要或不重要。
通常情况下当与其他变量结合使用时,原先被忽视的变量会具有预测价值。例如:一个信用卡者从未把把现金刷没又继续刷,通过数据挖掘发现他们仅在11月和12月才会使用用信用卡垫付。据推测,这些人非常谨慎,大部分时间他们都避免因多刷而产生的高利息,谨慎也推断出一个结论(他们比习惯使用现金垫款的人更加不太可能选择拖欠欠款),但在假期,他们需要一些额外的现金,并愿意为此付出较高的利息。
2.4数据必须包含什么?
最低限度,数据必须包含有可能有意义的结果的例子。有指导数据挖掘的目的是预测一个特定目标变量的值,但在有指导的数据挖掘中,模型集必须由分类好的数据组成。要区分哪些人拖欠贷款哪些人不可能拖欠,模型集的每个类都需要有成千上万的例子。当一个新的申请产生时,他的申请会与过去的客户的申请进行对比,可以直接把新的申请归类。这其中隐含的意思:数据可用来形容过去发生了什么事情,从错误总吸取教训,首先我们必须识别我们已经犯了什么错。
3、认识数据
在数据用于构建模型之前,在探索数据上花费时间的重要性通常没有得到足够的重视。后面我们会抽出绝对的篇幅来说明这个问题。优秀的数据挖掘工程师似乎非常依赖直觉——例如,某种程度上能够猜测将要派生的变量结果如何。要在陌生的数据集中利用直觉来感应发生了什么事情,唯一办法就是陷入数据之中,你会发现许多数据质量的问题,并能够得到启发提出在其他情况下不容易被发现的问题。
3.1检查分布
在数据库的初步探索阶段,数据可视化工具非常有益,如:散列图、条形图、地理地图、Excel等可视化工具对观察数据提供了强大的支持。
当你开始着手一个新数据源中的数据文件,就应该剖析数据了解到底发生了什么,包括计数和每个字段的汇总统计,分类变量不同值的数量,并在适当的情况下,需要基于产品和区域的交叉统计表。除了提供对数据的了解,剖析工作可能会产生不一致问题或定义问题的警告,这些问题可能会对后面的分析造成麻烦。
3.2值与描述的比较
观察每个变量的值,并把它们与现有文件中的变量描述进行比较。这项工作可以发现不准确或不完整的数据描述。其实是,你记录的数据,是否和你要描述的数据一致,这个要先确定。目的是什么?在实际的数据挖掘过程中,你要去揣测这个字段的数据到底是什么意思?如果业务人员知道,那是最好的了。如果业务人员都不知道,这个时候,可能就需要凭借经验去揣测了,而且这种情况经常发生,字段定义不明确。
3.3询问大问题
如果数据看上去似乎不明智或者不如所愿,记录下来。数据探索过程的一个重要输出是对提供该数据的人给出一个问题列表。通常,这些问题将需要进一步研究,因为很少有用户像数据挖掘工程师一样仔细地观察数据。对数据的探索的前期工作,判断字段,含义,是否有用,是否缺失,是否有问题等一系列问题,需要大量的工作,同时也是一件心细的过程。
4、创建一个模型集
模型集包含建模过程中使用的所有数据。模型集中的一些数据被用来寻找模式,对于一些技术,模型集中的一些数据被用来验证该模型是否稳定。模型集也可用来评估模型的性能。创建一个模型集需要从多个数据源聚合数据以形成客户签名,然后准备数据进行分析。
4.1聚合客户签名
模型集是一个表或一系列表,每一行表示一个要研究的项目,而字段表示该项目有利于建模的一切。当数据描述客户时,模型集的行通常称为客户签名。客户签名,每个客户都由他离开的踪迹唯一确定,你可以利用踪迹充分的了解每个客户。
从关系型数据库中聚合客户签名旺旺需要复杂的查询,这些查询往往需要关联很多的表去查询的数据,然后利用其他来源的数据增强结果。聚合数据的一部分过程是使数据位于正确的汇总层次,然后每一行都包含先关客户的所有信息。
4.2创建一个平衡的样本
在标准的统计分析中,一种常见的做法是抛弃离群点——远远超出正常范围的观测值。然而在数据挖掘的过程中,这些利群点可能正是你要找的。或许他们带有欺诈行为,可能是你的业务中的一些错误,或一些利润惊人的市场商机。在这种情况下,我们不希望抛出离群点,认识和了解他们。
知识发现算法需通过实例来进行学习。如果没有足够数量的关于某个特定类或行为模型的例子,数据挖掘工具无法得出一个预测该类或模式的模型。在这种情况下,利用罕见事件的例子丰富该模型集,提高建模中该事件的概率。如果比较罕见,有两种方法可以平衡样本:一、分层抽样。二、权重。
例如:银行要建立一个模型,以确定哪些客户是私人银行计划的潜在客户。这些计划只针对非常富有的客户,他们在一个相当大的银行客户样本中也是非常稀少的。如何构建一个能发现这类用户的模型,该模型集可能需要有50%的私人银行的客户,即使他们代表所有支票份额中还不到1%。另外私人银行客户可能被赋予一个值为1的权重,其他客户的权重为0.01,所以浙西专有客户的总权重等于其余客户的总权重。通过增加一些孤立点客户的权重,从而达到模型对数据的合理梳理。
4.3时间帧
基于一个时间段内的数据建立模型会增加风险,即学习的知识不真实。结合模型集中的多个时间帧可以消除季节性因素的影响。由于季节性影响如此重要,因此应该把它们明确地添加到客户签名中。还有假日购物模式也非常重要。把客户的信息按照时间细分,或是在相应的数据上打上标签。
4.4创建一个预测模型
当模型集用来预测时,另一个问题,模型集应包含多长时间,时间段该如何划分。任何客户标签在预测变量和目标变量之间都应该有一个时间差。时间可分为,过去、现在、将来。当然所有数据都来自过去,过去又分为三个时期:遥远的过去、不太遥远的过去和最近。预测模型就是要发现遥远的过去的模型,用来解释最近的输出。当部署模型时,它能够使用最近的数据预测未来。如果构建一个模型来利用6月份(不太遥远的过去)的数据对7月份(最近)进行预测,那么在8月份之前的数据是可用的,但它不能用来对9月份进行预测。但是8月份的数据是可用的吗?肯定不是,因为这时,数据仍在产生数据。也不会是9月份的第一周,因为这些数据需要被收集、清洗、加载、测试和认可。8月份的数据可能要懂啊9月份中旬或10月才能用,到这个时候,没人会担心9月份的预测了。解决的办法是在模型集中跳过1个月。
4.5创建一个剖析模型集
剖析模型集与测试模型相似,但有一点:目标的时间帧与输入的时间帧重叠。看微小的差别对建模工作的影响却很大。因为输入可能会“污染”目标模式。例如:银行,拥有投资账户的客户在储蓄账户中往往有非常低的结余——因为他们能从投资账户中得到更好的回报。这是否意味着银行要为了投资账户而识别低存储账户余额的客户呢?可能不需要,因为这些客户的资产很少。
解决这个问题的一种方法是非常仔细得选择剖析模型的输入。把所有账户余额组合到“储蓄”,“贷款”两组。储蓄组包括所有类型的储蓄和投资。这种方法非常有效,事实证明模型是稳定的。一个更好的办法:开通投资账户之前对账户产生一个模型。一个并发的问题是:由于每一个客户的时间帧都取决于客户开通账户的时间,建立这样一个模型集面临更多的困难。
当目标变量的时间帧与输入变量的时间帧相同时,那么该模型是一个剖析模型,并且这个输入可能会引入一些似是而非的模式,而这些模式可能会混淆数据挖掘技术。你需要非常小心地选择输入或者重建模型集来产生预测模型。
4.6划分模型集
当你从适当的时间帧中获得预分好的数据后,有指导数据挖掘房峰辉把它分为三个部分。一、训练集,用户建立初始模型。二、验证集,用于调整初始模型,减少其与训练集特性的额绑定,从而更具一般性。三、测试集,用来衡量吧模型应用与未知的数据时可能产生的效果。三个数据集是必要的,因为若某个数据已在此过程中的某一步使用过,那么它包含的信息就已经成为模型的一部分。因此,它不能用来修正或判断模型。
我们往往很难理解为什么训练集和验证集被用来建立模型之后就会成为“污点”。这就好比你参加考试,你认为这题你做的是正确的,老师让你去预测考试成绩,你显然认为分数很高,因为你认为,如果没有答案,第二天在参加同样的考试,你的想法不会改变。这时候,你的系统中没有一个新的标准,这时,你需要的是一个验证集。
现在,想象一下测试结果以后,估分之前老师让你看看你同学的几个试卷。如果他们都和你的结果不一样,这时候,你可能会把你自己的答案标记为一个错误的答案。如果第二天老师给出了正确的结果,这个时候让你再去做同样的的试卷,你可能得出的就是不同的结果。这就是为什么验证集应该不同于测试集的原因。
对于预测模型,一个好主意是测试集所在的时间段与训练集和验证集的时间段不同。一个模型的稳定性证据在于它在连续的月份中都能够良好的运行。来自不同的时间段的测试集,也称为不合时宜的测试集,虽然这样的测试集并不总是可用,但是它是验证模型稳定性的一个很好的方法。