你好,游客 登录
背景:
阅读新闻

一线专家谈谈:数据挖掘在实际领域中的那些事儿

[日期:2016-05-16] 来源:InfoQ  作者:佘伟 [字体: ]

  大家好,我是明略数据的佘伟。今天非常荣幸能给大家分享明略数据在大数据挖掘方面做的一些事情。

  企业中的数据挖掘

  我们先来看看在企业中数据挖掘都是怎么做的,以及有着哪些问题。

数据挖掘

  上图中的左边是SPSS在1999年提出的《跨行业数据挖掘标准流程》,在图中定义了数据挖掘的6个步骤。虽然这个图已经提出有10几年了,但是在大数据环境下,这个流程依然适用。

  理解商业问题。这需要大数据科学家和行业专业,以及客户的业务专家一起来明确问题。这是整个大数据挖掘中最关键的一步。如果不理解业务就贸然开做,最后的项目一定是失败的。

  分析数据。当明确了业务问题之后,我们就需要去分析数据,看看到底哪些数据能够支撑我们的业务,用哪些数据去解决问题。在这个阶段,我们可能发现数据不足,或者数据质量太差,这个时候就可能要寻求第三方数据的帮助,或者规划如何去采集更多的数据了。

  数据挖掘。前两步都是在做数据挖掘前的准备,当业务明略,数据可用时,我们就正式开始数据挖掘了。

  3.1提取特征

  首先我们要对数据进行处理, 从数据中提取特征 。这是数据挖掘非常关键的一步,特征的好坏直接影响最终模型的效果。在数据挖掘过程中,算法其实并不是最主要的因素,影响效果最直接的因素就是特征。

  良好的特征需要有非常好的区分度,只有这些特征,才能很好的去解决问题。举个例子,我们要辨别一个西瓜是好是坏,可能颜色是一个特征,条纹,重量,瓜蒂也是特征。但是,大家都知道西瓜一般都是绿色的,所以用绿色去作为判别西瓜好坏是没有区分度的。而条纹,重量,瓜蒂是判别一个西瓜是好是坏非常重要的因素,因此他们是好特征。

  我们在解决不同问题时,所用的特征是不一样的。可能在解决某个问题有用的特征在解决另外一个问题时就不具备区分度。因此,我们必须紧密的联系业务,去选择合适的特征。

  在提取特征时,因为我们是大数据挖掘,所以要使用大数据技术去从原始数据中提取特征。这需要大数据科学家有着非常丰富的大数据处理技能。

  3.2建立模型

  当特征提取完毕后,我们就需要去应用算法建立模型了。在实际的建模过程中,由于数据量过于庞大,算法训练过程往往十分缓慢,如何 加速算法计算速度 ,是一个非常突出的问题。

  此外,由于传统的数据挖掘算法都是针对小数据集的,当数据规模到了一台服务器无法处理的程度,传统的数据挖掘算法就不再使用。此时,我们需要有新的数据挖掘技术来支持大数据上的数据挖掘。

  当模型建立完成之后,我们需要对模型进行评估,来确定模型效果。此时最重要的是建立模型的评价指标。这个评价指标必须是要结合业务来建立的。当模型效果不佳时,我们要回到特征提取,建模过程来不断的迭代,甚至可能要重新分析业务和数据。

  3.3后期工作

  当一个效果非常好的模型建立完毕了,我们的数据挖掘就结束了吗?传统的数据挖掘软件往往只做到模型建立这一步,但是在模型建立完成之后还有很多工作要做。我们如何将模型在生产系统中使用起来,如何去管理、运行、维护、扩展模型。

  我们先来看看DataInsight对业务的支持。

  可以将DataInsight看做一个模型运行的平台。他提供一套分布式的模型执行引擎。所有通过DataInsight建立的模型都可以在这个分布式执行引擎中运行。

  在执行引擎之上,DataInsight还提供了多个系统供不同业务使用。我们有支持实时分析业务的实时分析系统,有支持离线批处理业务的离线分析系统,还有规则引擎系统,可以让用户的业务人员去通过规则对模型进行修正。

  用户需要针对不同的业务去建立不同的模型,这个建模过程可以由用户自己完成,也可以由明略的大数据科学家去完成。建立好的模型以插件的形式插入到DataInsight中去,方便模型的管理和扩展。

  用户的业务系统会通过API和DataInsight进行通信,来运行或者更新DataInsight中插入的模型。

  一个典型的DataInsight模型运行过程如下:用户通过API调用DataInsight,在请求中指定模型,模型的输入和模型的输出。DataInsight会将数据从数据源中取出,送入模型,并且将模型分成多个步骤,并行化的在分布式执行引擎中运行。当模型运行完毕后,结果将送入用户指定的目的数据库中。这样,用户的应用系统就可以直接从目的数据库中获得模型运行的最新结果了。

  DataInsight中将解决客户业务问题的模型成为业务模型,或者应用。DataInsight对业务模型也进行了一定层次的抽象。每个业务模型都是由若干步骤组成的。每个步骤被称作一个算子。

  上图是一个文本分类的业务模型,其解决的问题是将若干文本进行分类。例如我们有很多文章,我们要对每篇文章的情感进行分类,就可以使用这个模型。

  我们将文本分类模型抽象为很多算子的组合。每个算子都是对数据进行了某种转换,将一组输入转化为一组输出。这个转化过程可能是对数据进行的预处理,也可能是某种机器学习算法。

  每个算子都有输入和输出,且算子的输出可以作为另外一个算子的输入。这样,整个业务模型就抽象成了一个有向无环图(DAG)。DataInsight在执行模型时,会去调度模型中的每个算子,将适合分布式计算的算子送入不同的执行容器中去运行,加速了整个模型的计算速度。

  DataInsight总体的体系架构见下图:

  (点击放大图像)

  下面我们介绍一下明略在各个领域中的一些案例。由于时间关系,我这里只举两个案例。

  一是精准营销方面 。明略是从秒针系统拆分出来的,秒针系统是一家以互联网精准营销为主要业务的公司,因此明略在精准营销方面有着接近10年的积累。

  首先,明略的大数据平台MDP会将企业各种自由数据,包括CRM数据、交易行为数据以及官网数据等,和第三方数据一起收集起来,并对这些数据进行关联和打通,一起存储到大数据平台MDP中去。

  我们针对企业不同的业务,建立多个模型,例如智能推荐模型,用户画像模型,消费预测模型,商圈聚类模型等等,这些模型作为插件插入到我们的大数据挖掘平台DataInsight中去。

  我们可以将原始数据从MDP中取出,进过DataInsight中模型的计算之后,生成最终的结果数据,结果数据将送入用户画像系统和推荐系统的离线部分。

  用户的推荐系统分为在线和离线两个部分,离线推荐的结果就是DataInsight中计算出来的结果。在线推荐系统将会接收一个在线的推荐请求,通过客户画像系统和离线推荐结果,并结合当时的一些场景,共同计算出最终向用户推荐的物品。

  明略的精准营销系统已经应用到了个性化推荐、精准营销、用户洞察、广告投放等多个领域,并取得了良好的效果。

  智能推荐算法

  和传统的协同过滤算法不一样,这个算法是采用了分类的思想,通过分类的方法来实现推荐的。

  首先,在进行推荐之前,我们必须明确推荐的目标。那就是向用户推荐用户感兴趣的物品。这里的物品可以是商品,也可以是广告,甚至是文章、电影、音乐等等。

  然后我们需要去寻找解决这个问题所需的数据。我们有物品内容数据库,用户CRM数据库,以及用户行为数据。

  解决了目标和数据之后,我们就需要采集一批有标注的样本。因为是采用的分类算法,这是有监督的算法,所以标注样本是建模的第一步工作。标注就是通过人工来判定用户是否对某个物品感兴趣。

  标注问题解决后,我们就需要从数据中提取特征。我们的特征分为3类: 物品自身属性 ,比如我们推荐的是手机,手机型号,手机价格,手机颜色都是物品的自身属性。其次,我们要提取 人的属性 ,比如人的性别、年龄、收入、教育程度一类。最后,我们还需要知道 人和物品的交互关系 ,他是浏览过商品还是加入过购物车,还是点击过商品,甚至购买过该商品。除了和推荐的商品之间的关系之外,我们还可以将用户和其他商品之间的关系也作为特征。

  这样,我们就可以通过分类算法去建立模型了。常用的分类算法我们都可以尝试,诸如GBDT,逻辑回归,SVM等等。

  当模型建立完毕之后,我们就可以得到分类结果了。分类结果是某用户对某商品是否感兴趣,以及感兴趣的程度。感兴趣的程度我们可以通过概率来表示。

  有了分类结果还不是我们最终的推荐结果。我们根据分类概率对结果进行排序,最后选出TopK个结果作为最终结果返回。

  设备诊断方案

  我们的第二个案例是有关设备诊断方案的。

  我们知道,工业4.0是目前比较火热的一个话题。而设备诊断正是工业4.0中非常重要的一个应用。

  设备诊断又分为 故障诊断 和 故障预测 两大类。故障诊断是当一个设备出现故障,我们需要辨别该故障的类型。故障预测是我们要预测出某个设备在未来会不会出现故障。这是两个截然不同的问题,但是处理的方法是类似的。

  故障诊断和故障预测已经在多个行业中得到应用,并且已经取得了非常突出的效果。

  明略的故障诊断方案如下图:

  首先,各种设备的数据通过ETL汇聚进大数据平台中去。这些数据包括传感器实时数据,设备历史数据,时间历史数据等等。

  然后,在DataInsight中建立故障诊断和故障预测模型,来对原始的数据进行分析,并得到诊断和预测结果。

  DataInsight中的模型会部署到生产系统中去,通过API和故障诊断和故障预测应用进行交互,提供最终的分析结果给到应用,在应用中根据分析结果进行各种统计和可视化的展现。

  进行故障诊断和故障预测建模有两种方式,其一是传统的方式,其二是通过深度学习的方式。

  这个过程中首先我们要对故障进行标注。对于故障诊断,我们要标注的是何种类型的故障,对于故障预测,我们要标注的是有没有发生故障。标注的工作是专业性极强的工作,一般需要用户的专家来进行标注。

  对于传统方法而言,最复杂的部分是特征选取。上文我们也讲到,只有那些有强区分度的特征才能有效的支持最终的模型。所以,需要由业务专家来指导如何从原始数据中提取特征。这就需要将业务专家的经验程序化,将人的知识变为机器能够处理的方法。这是非常困难的。

  当特征提取完了之后,我们会采用分类算法来训练模型,最终得到故障诊断和故障预测的结果。

  深度学习

  在传统方法之外,我们还可以通过深度学习的方法来进行故障的诊断和预测,深度学习方法示意图如下:

  这个过程中首先我们要对故障进行标注。对于故障诊断,我们要标注的是何种类型的故障,对于故障预测,我们要标注的是有没有发生故障。标注的工作是专业性极强的工作,一般需要用户的专家来进行标注。

  对于传统方法而言,最复杂的部分是特征选取。上文我们也讲到,只有那些有强区分度的特征才能有效的支持最终的模型。所以,需要由业务专家来指导如何从原始数据中提取特征。这就需要将业务专家的经验程序化,将人的知识变为机器能够处理的方法。这是非常困难的。

  当特征提取完了之后,我们会采用分类算法来训练模型,最终得到故障诊断和故障预测的结果。

  深度学习

  在传统方法之外,我们还可以通过深度学习的方法来进行故障的诊断和预测,深度学习方法示意图如下:

  比起传统的方法,故障标注这一步是省不掉的,因为我们用的还是一个有监督的方法,这个方法必须要有一批标注好的样本。

  和传统方法不一样的是,我们直接将样本送入深度学习算法,常用的如卷积神经网络去进行训练,来得到最终的故障诊断和预测的结果。

  相比传统方法,深度学习方法省却了特征提取的过程。我们通过深度学习算法直接从原始数据中学习,省却了专家指导的过程。深度学习方法甚至能够学习到专家所不知道,或者在专家潜意识内但无法表达出来的特征。通过深度学习算法出来的模型,其效果往往好于传统方法的模型。

  但是,深度学习算法对 数据量的要求 非常大。只有有大量训练样本才能使用深度学习。这在现实的工作中可能是一个问题。

  Q&A

  Q1:数据互联行业主要是指哪些业务?

  A1:数据互联是明略将第三方数据引入到企业中和企业自有数据结合起来去做数据挖掘的业务,这个业务需要对第三方数据如何与企业数据融合,去进行数据挖掘有比较深的理解.

  简单的说,就是帮助用户分析需要什么样的数据,以及从何处去获得这些数据,外部数据和内部数据如何打通,如何去数据挖掘.

  Q2:请问领域知识和数据专业知识哪个在实际工作中起的作用更大?

  A2:领域知识和数据专业知识应用的场景不一样。在进行数据挖掘之前,我们首先需要有领域知识。必须明白要解决的问题是什么。只有有了领域知识,并且有数据知识,才能把业务转化为数据挖掘的问题,在进行数据挖掘过程中,数据挖掘知识可能是更关键的,因为你要知道如何去解决这个问题。但是,进行数据挖掘时,还必须根据业务对模型进行调整。

  刚才我也说了,模型调优必须建立合理的评价指标。这个评价指标根据不同的业务可能是不一样的。所以必须有业务知识才能知道如何去调优,才能知道什么样的模型是符合业务需要的,所以,在实际的数据挖掘过程中,领域知识和数据挖掘专业知识都是非常重要的,如果缺乏了任何一种,可能都很难取得比较好的效果。另外大数据挖掘中大数据处理能力也很重要,如果不会处理大数据,或者没有良好的编程能力,也是很难做好的.

  Q3:请问一下明略大数据在特征工程上有哪些比较好的经验呢?

  A3:其实特征工程是一个非常dirty的活,需要大量的尝试性工作,明略的经验就是,在做特征工程时,了解业务是第一位,然后需要深入的去调查客户的每一张表,搞明白每一张表的每一个字段,以及字段间的关联关系,我们在实际工作中,经常要调研几百张表去找到我们需要的数据,此外,作为一个合格的数据挖掘人员,或者数据科学家,敏锐力非常重要,能够结合业务知道可以从数据中提取哪些特征。特征提取出来之后,是否是一个好的特征其实是不知道的。我们可以大胆的尝试,多选取一些特征过来。然后在通过特征选择去进行筛选。特征工程是实际建模中最耗人力的过程。我们建模大概70-80%的时间都耗费在这个上面。

  Q4:请问在进行数据挖掘之前的怎么解决数据质量问题?

  A4:坦白的说,数据质量也是困扰我们的问题,目前我们遇到的客户,坦白的说数据很多都是碎片化的。可能是因为之前他们忽略了某些数据的收集,或者他们的数据只是总体样本的一小部分,对于第一种客户,我们会帮助他们制定如何去收集更多的数据,只有数据有了积累,数据质量问题才会解决。对于第二种客户,我们会帮助引入第三方数据,用第三方数据来补充客户现有的数据,大数据的数据质量差是有目共睹的,但是,正是由于数据量大,数据类型多,我们才能从大数据的沙子中挖到金子。如果传统数据是富矿石,大数据就是贫矿石,大数据数据只能以量去取代质。

  Q5:目前未回答问题中排名最高的是这个:二分类分类算法中,负面情况占比很小,训练集数据负面数据如何按比例分?训练集需要调高负面数据的比例吗?对算法有什么影响?

 

  A5:分类问题中对正负样本的平衡是必须的,这个也是影响最后分类结果的一个很重要的因素,如果样本不平衡,能做的事情是样本增益和样本抽样。比如正样本远远小于负样本,可以对正样本进行复制,或者加上随机扰动来扩充正样本,或者直接对负样本进行抽样。达到一定的正负样本比,这样最终的效果会比较好。我们的经验是正负样本比1:5左右比较适合,达到一定的正负样本比,这样最终的效果会比较好。我们的经验是正负样本比1:5左右比较适合。





收藏 推荐 打印 | 录入:elainebo | 阅读:
本文评论    (0)
评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款