数据仓库实践杂谈(十九)——数据挖掘

[目录]

数据仓库实践杂谈(十九)——数据挖掘

我们经常说,数据统计是根据已有规律的进行计算得到结果,比如特定产品销量的地区分布或时间分布,因为我们都知道销量和地区、时间肯定是关联的。而数据挖掘则是发现未知的规律。比如传说已久的“啤酒与尿布”的故事,就是数据挖掘的一个成功的典型范例。虽然不存在普适性,但针对沃尔玛在当时特定的场景确实揭露了未知的、实际存在的规律。

“啤酒与尿布”的故事

20世纪90年代,美国沃尔玛超市管理人员分析销售数据时,发现了一个令人难以理解的现象——在某些特定的情况下,“啤酒”与“尿布”两件看上去毫无关系的商品,会经常出现在同一个购物篮中,且大多出现在年轻的父亲身上。

分析背后原因是,在美国有婴儿的家庭中,一般是母亲在家中照看婴儿,年轻的父亲去超市买尿布。父亲在购买尿布的同时,往往会顺便为自己购买啤酒。

从这个例子可以看出两点:

  1. 首先,是数据管理人员通过技术手段,发现了一个之前未知、潜在的规律,可以指导业务;
  2. 这个结果需要深度的分析其因果关系,否则不排除是偶发的,只有找到因果关系,这个结果才可能被使用。

数据挖掘的工具和方法很多,体系也很成熟。但之前一直都是“传说”,并没有大规模的应用起来;而最近几年随着大数据技术流行,数据挖掘也随之流行起来。我认为其中的原因,主要是原来发现规律的过程使用的数据样本太小。在大数据技术出现之前,数据挖掘的系统处理能力弱,只能处理很小的数据量。因此必须由业务专家根据特定的规则进行数据抽样,拿出一小部分数据,针对这一小部分数据进行分析。这样得到的结果,其实是针对样本数据,并不是针对全量数据的,如果数据抽样有问题,这个结果也就会有很大的偏差了。所以以前我们经常说,某个结果只存在“统计学上的关系”而非没有因果关系。这种结果,基本上是不能用的。

大数据的伟大之处可以说出很多,但最伟大的地方,一定是可处理的数据量极大提升。这里的“大”首先就是数据很多,数据量极大。处理的数据量大了,跑算法的时候可以接纳更多的数据样本,甚至是全量数据的话,所得到的结果,往往就可以不去关心其因果关系了。毕竟,我们基本都不是科学家,我们知道大多数人都喜欢什么,我们就去卖什么好了,不需要关心为什么喜欢。

一个具体的例子就是商品的推荐。“买过X商品的人,也同时买过Y商品”,在大型电商平台都有此功能,看起来很简单,但很有效。实际的计算过程虽然非常复杂,但这个过程,其实无需关心因果。实际上,也无法关心每一个商品关联的因果,可能是喜欢,可能是需要,无所谓,反正大多数用户都会买就可以了。

数据挖掘是指从大量的数据中通过算法搜索隐藏于其中信息的过程。这是数据挖掘的一个标准的定义。简化一下, 数 据 挖 掘 = 大 数 据 + 算 法 数据挖掘=大数据+算法 =+

数据挖掘技术包括关联分析、序列分析、分类、预测、聚类分析及时间序列分析等。

  1. 关联分析
    主要用于发现不同事件之间的关联性,即一个事件发生的同时,另一个事件也经常发生。关联分析的重点在于快速发现那些有实用价值的关联发生的事件。其主要依据是事件发生的概率和条件概率应该符合一定的统计意义。
  2. 分类分析
    分类分析通过分析具有类别的样本的特点,得到决定样本属于各种类别的规则或方法。主要方法有基于统计学的贝叶斯方法、神经网络方法、决策树方法及支持向量机。
  3. 聚类分析
    聚类分析是根据物以类聚的原理,将本身没有类别的样本聚集成不同的组,并且对每一个这样的组进行描述的过程。其主要依据是聚到同一个组中的样本应该彼此相似,而属于不同组的样本应该足够不相似。
  4. 预测
    预测与分类类似,但预测是根据样本的已知特征估算某个连续类型的变量的取值的过程,而分类则只是用于判别样本所属的离散类别而已。预测常用的技术是回归分析。
  5. 时间序列
    分析时间序列分析的是随时间而变化的事件序列,目的是预测未来发展趋势,或者寻找相似发展模式或者是发现周期性发展规律。

数据挖掘的的一般步骤如下:
数据挖掘步骤

  • 业务理解:理解业务本身,其本质是什么?是分类问题还是回归问题?数据怎么获取?应用哪些模型才能解决?
  • 数据理解:获取数据之后,分析数据里面有什么内容、数据是否准确,为下一步的预处理做准备。
  • 数据预处理:原始数据会有噪声,格式化也不好,所以为了保证预测的准确性,需要进行数据的预处理。
  • 特征提取:特征提取是机器学习最重要、最耗时的一个阶段。
  • 模型构建:使用适当的算法,获取预期准确的值。
  • 模型评估:根据测试集来评估模型的准确度。
  • 模型应用:将模型部署、应用到实际生产环境中。
  • 效果评估:根据最终的业务,评估最终的应用效果。

数据挖掘基本上跟机器学习分不开。数据挖掘受到很多学科领域的影响,其中数据库、机器学习、统计学无疑影响最大。统计学界提供的很多技术通常都要在机器学习界进一步研究,变成有效的机器学习算法之后才能再进入数据挖掘领域。从这个意义上说,统计学主要是通过机器学习来对数据挖掘发挥影响,而机器学习和数据库则是数据挖掘的两大支撑技术。

从数据分析的角度来看,绝大多数数据挖掘技术都来自机器学习领域,但机器学习研究往往并不把海量数据作为处理对象,因此,数据挖掘要对算法进行改造,结合大数据技术,使得算法性能和空间占用达到实用的地步。

数据挖掘或者说机器学习的算法,分成有监督和无监督两类:

  • 有监督学习:通过已有的训练样本去训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出。
  • 无监督学习:事先没有任何训练样本,需要直接对数据进行建模。
    算法分类
    在有监督学习下,每组训练数据有一个明确的标识或结果,如对人按地域分类中的“新疆”、“上海”、“东京”等属于地域标识。在建立预测模型的时候,有监督学习建立一个学习过程,将预测结果与“训练数据”的实际结果进行比较,不断的调整预测模型,直到模型的预测结果达到一个预期的准确率。在无监督学习中,数据不被标识,学习模型是为了推断出数据的一些内在结构。

分类、回归和聚类都是机器学习比较常见的算法。定性输出称为分类,或者说是离散变量预测。比如预测明天是阴、晴还是雨,就是一个分类任务。定量输出称为回归,或者说是连续变量预测。比如预测明天的气温是多少度,这是一个回归任务。

分类算法包括决策树分类法(Decision tree)、朴素贝叶斯分类法(Native Bayesian Classifier)、基于支持向量机(SVM)的分类器、K-最近邻法(k-nearest neighbor,kNN)、模糊分类法(Fuzzy Classifier)等。

回归包括线性回归(Linear Regression),逻辑回归(Logistic Regression),多项式回归(Polynomial Regression)、岭回归(Ridge Regression)和套索回归(Lasso Regression)等。

聚类算法包括:

  • 分割聚类算法通过优化评价函数把数据集分割为K个部分,它需要K(需要聚类的个数。比如说,一个游戏公司想把所有玩家做聚类分析,分成顶级、高级、中级、菜鸟四类,那么K=4)作为输入参数,如K均值聚类(k-means)、K中心点算法(K-medoids)、Clarans算法等。
  • 层次聚类由不同层次的分割聚类组成,层次之间的分割具有嵌套的关系。它不需要输入参数,这是它优于分割聚类 算法的一个明显的优点,其缺点是终止条件必须具体指定。典型的分层聚类算法有BIRCH算法、DBSCAN算法和CURE算法等。
  • 基于密度的方法与其他方法的一个根本区别是:它不是基于各种各样的距离的,而是基于密度的。这样就能克服基于距离的算法智能发现“类圆形”的缺点。这个方法的指导思想就是,只要一个区域中的点的密度大过某个阈,就把它加到与之相近的聚类中去。 代表算法有:dbscan算法、optics算法、denclue算法等。
  • 基于网格的方法,这种方法首先将数据空间划分成为有限个单元(cell)的网 结构,所有的处理都是以单个的单元为对象的。这么处理的一个突出的优点就是处理速度很快,通常这是与目标数据库中记录的个数无关的,它只与数据空间分为多少个单元有关。 代表算法有:sting算法、clique算法、wave-cluster算法。

关联分析则是数据挖掘一个特色的算法。关联分析是一种简单、实用的分析技术,就是发现存在于大量数据集中的关联性或相关性,从而描述了一个事物中某些属性同时出现的规律和模式。典型例子是购物篮分析。该过程通过发现顾客放入其购物篮中的不同商品之间的联系,分析顾客的购买习惯。通过了解哪些商品频繁地被顾客同时购买,这种关联的发现可以帮助零售商制定营销策略。其他的应用还包括价目表设计、商品促销、商品的排放和基于购买模式的顾客划分。关联分析典型算法包括Apriori算法和FP-growth算法。

神经网络这几年非常火热,尤其是AlphaGo击败人类职业围棋选手、战胜围棋世界冠军后,感觉全世界都在搞神经网络了。尤其深度卷积神经网络(Convolutional Neural Network,CNN),毕竟AlphaGo的核心技术之一就是CNN,在图形识别上大放异彩。实际上,目前神经网络模型不下30种,适用于图像识别,翻译,语音识别以及各种分类,聚类,预测等都有。从算法上,有监督、无监督的都有。基本上,可以说是无所不能。

基于神经网络数据挖掘的优点:

  • 神经网络在数据集中包含大量噪声输入数据时,也能工作得很好。

  • 神经网络不仅能处理和预测数字,还可以处理和预测分类结果。

  • 神经网络可用于在数据中要求包含时间单元的情况。

  • 神经网络既可以用于有监督的学习,也可以用于无监督的聚类。
    一般来说,适用于数据挖掘的是BP神经网络(反向传递神经网络)。BP神经网络是1986年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,前向传播是输入数据经过隐层的作用逐渐处理直至输出,根据输出和期望误差反向调节各个神经元参数以及阈值,使得输出越来越接近期望值。主要功能:

  • 函数逼近:用输入向量和相应的输出向量训练一个网络以逼近一个函数。

  • 模式识别:用一个待定的输出向量将它与输入向量联系起来。

  • 分类:把输入向量所定义的合适方式进行分类。

  • 数据压缩:减少输出向量维数以便传输或存储。

个人感觉,在未来,神经网络一定会更进一步,作为数据挖掘的主要手段。毕竟用一套程序生成一套合适的程序已经出现。人不许再需要分析模型和分析特征,把样本数据扔进去,程序自己生成一套合适的规则来进行分析,多美好。

同样,无监督的算法,未来也会越来越好。毕竟样本的标注工作量实在是太大。当然,现阶段如果有已经标注的数据进行训练,效果会更好。

前面提到,特征提取是整个数据挖掘中最重要和最难的一个环节。这个环节没有什么特别好的工具或者方法能迅速掌握。举个例子,某银行有2000万零售客户,但只有100万信用卡客户。这些客户,记录有客户基本信息,家庭信息,金融资产信息以及交易信息。能否从现有的零售客户中挖掘出潜在的客户?按照相似的客户一般类似的需求的原则,我们可以做一个假设:在存量的零售客户中找出跟信用卡客户具有“相同特征”的客户作为营销信用卡的重点客户。

此问题粗一看是一个对2000万零售客户的分类问题。先找出100万信用卡客户的“共同特征”,然后看零售客户中那些符合这些特征,符合的作为潜在客户重点营销。这里有两个问题:

  1. 选择什么特征来分析?一般都说人口统计特征跟消费欲望、偏好等有很大关系。我不知道出自何处,但都这样说,我也认为是就好了。然后还选择什么特征?资产?交易次数?交易地点?其实很难说某些特征是否跟会不会办信用卡关联的。还好大数据体系的好处是,只要能用的都尽量加进来,先跑出来,测试验证,再修正。
  2. 选择什么算法或者算法组合?分类/聚类?分类的训练样本如何生成?我们有一个基础定义,2000万零售客户(定义为A)里面肯定有一部分跟现有信用卡客户(定义为B)相似的(定义为A1),另外一部分则不相似(定义为A2)。如果要训练出一个分类模型我们就需要把现有信用卡客户(B)加上和不相似的零售客户(A2)。但我们并不知道A2是哪些。

如果没有很懂数据的专家支持,我们就把尽量多的属性都转化为特征变量。然后通过降维手段去掉或合并特征变量。比如把缺失较多的、方差太小的特征去掉,把高度相关的特征合并。假设我们定义了年龄段、性别、家庭人口数、资产数量、职业类别、月均消费笔数、消费地点等变量并做归一化。对定性特征可以使用哑编码方式转换为0或1的定量值(每个值变成一个字段,如职业类别有:管理,文员,研发,市场几个,则变成四个属性,属于那个值就置1,其他置0)。

如果有已经标注可用于训练的样本,目前来说还是选择有监督的分类算法效率更高也更准确。按照前面的分析,这个场景中只能直接找出办理过的客户,但无法找到一定不会办理的客户。所以更换思路,对现有信用卡用户(B)进行聚类,然后检查零售客户(A)中哪些客户落在聚类中。落入聚类中的认为是和信用卡客户具有同样特质的,作为潜在客户进行重点营销。如何判断落入聚类,可以:

  • 全体数据包含存量零售客户(A)和信用卡用户(B)统一做归一化,统一特征向量的取值度量。
  • 获得每个类别的边界坐标,通过中心坐标+半径,或者遍历所有的点找出边界坐标。
  • 依次判断每一个零售客户的坐标是否落在其中一个区域内。

聚类算法也有很多种实现,很难说哪一种更好。通常的做法都是反复尝试,选择一个最优的或者最合适的。比较舒服的方式,是通过图形化工作流的方式,用户定义有向无环图(DAG),一般按照提取数据、处理数据、提取特征、选择模型、模型评估和模型应用的顺序,快速执行并验证。如果不合适,可以快速的修改,选择其他模型再次尝试。

上一篇:数据仓库实践杂谈(十七)——关于报表

下一篇,暂时没了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值