数据分析

背景

在数据分析的路上跌跌撞撞,从一开始实习做Splunk大数据分析,到小论文做时间序列聚类,再到现在为找工作丰富简历做金融项目“魔镜杯”风控算法大赛。这一路上,迂回转折,慢慢明白了,数据分析,是一个大的概念,包含的很多,但是都有一个共同的目标:帮助决策者做出明智的决策。

  • Splunk:
    Splunk软件主要用作大数据搜索引擎。
    实习做项目的主要流程:
  • 安装软件及配置,包括Enterprise(索引)、转发器以及部署配置,确保分散的数据能集中统一管理。
  • 搜索数据,提取字段。
  • 做一些基础的见解分析,再与客户沟通需求,定制化开发。
  • 完成可视化报表以及告警等其他配套应用。
  • 时间序列聚类:
    这是自己小论文做的电力负荷聚类算法研究,通过阅读文献,大致知晓了数据清洗、特征选择、算法研究这些步骤,算法是写论文发表期刊的主要任务。但是,由于学术研究通常面对的数据集都是标准数据集,不存在数据缺失以及噪声的情况,而现实世界里的数据繁杂、缺失、异常随处可见,对数据的预处理以及特征工程反而是比研究算法更为重要的事情。
  • 项目经验
    感觉自己整个研究生生涯顺序都是反的,先去了实习,而延误了写论文。先看文献,而后做试验。如果有一次重来的机会,我会先做学术工作,把论文搞定后再去做相关算法的工作,而不是虎头虎脑地去实习。先动手做实验,而不是看文献,还是中文的论文,简直就是垃圾,误导祖国的花朵。目前想找金融方面的数据分析工作,所以在网上找到了2016年拍拍贷“魔镜杯”风控算法大赛的项目。通过学习各位获奖大神的研究现实问题的思路,这才茅塞顿开,豁然开朗,感觉找到了做数据分析的正轨。

数据分析

参考:https://www.cnblogs.com/charlotte77/p/5606926.html

数据分析的常见流程如下:  

关键步骤:

  1. 数据清洗
  2. 特征工程
  3. 算法模型

本文主要以2016年拍拍贷主办的“魔镜杯”风控算法大赛项目介绍以上三个步骤,熟悉数据分析的流程。

数据清洗

数据清洗主要包含:

  1. 缺失值处理
  2. 异常值处理
  3. 去重处理
  4. 噪音数据处理

为何要数据清洗?

平常在论文里用到的公开数据集譬如UCI标准数据集都是没有缺失值、异常值、噪音的优质数据。
然而在现实世界里,我们要探索的数据往往都是包含了大量缺失值、噪音的数据,例如,app里一些个人信息,分为标*必填字段,以及非必填字段,那么这样就会存在信息缺失了,同时,部分信息可能因为手工误填而导致出现异常值。而这些低质量的数据会对后序的算法建模产生巨大的影响,直接导致模型的偏差。  
所以我们必须要进行数据清洗工作。

缺失值处理

没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常遇到的问题之一。  
处理不完整数据集的方法主要有三大类:删除元组、数据补齐、不处理。

删除元组

将存在遗漏信息属性值的对象(元组,记录)删除,从而得到一个完备的信息表。这种方法简单易行,在对象有多个属性缺失值、被删除的含缺失值的对象与初始数据集的数据量相比非常小的情况下非常有效。  
缺点:对于小样本数据集,即使删除少量数据也可能严重影响结果的正确性。

数据补齐

用一定的值去填充缺失值,从而使信息表完备化。通常基于统计学原理,根据初始数据集中其余对象取值的分布情况来对一个缺失值进行填充。数据挖掘中常用的有以下几种补齐方法:

  • 人工填写(不可行)
    当数据规模很大、空值很多时
  • 特殊值填充(不可行),该方法耗时耗力,不可行。
    将空值作为一种特殊的属性值来处理,它不同于其他的任何属性值。如所有的空值都用“unknown”填充。这样将形成另一个有趣的概念,可能导致严重的数据偏离,一般不推荐使用。
  • 平均值填充
    将初始数据集中的属性分为数值属性和非数值属性来分别进行处理。
  • 如果空值是数值型的,就根据该属性在其他所有对象的取值的平均值来填充该缺失的属性值;
  • 如果空值是非数值型的,就根据统计学中的众数原理,用该属性在其他所有对象的取值次数最多的值(即出现频率最高的值)来补齐该缺失的属性值。与其相似的另一种方法叫条件平均值填充法(Conditional Mean Completer)。在该方法中,用于求平均的值并不是从数据集的所有对象中取,而是从与该对象具有相同决策属性值的对象中取得。这两种数据的补齐方法,其基本的出发点都是一样的,以最大概率可能的取值来补充缺失的属性值,只是在具体方法上有一点不同。与其他方法相比,它是用现存数据的多数信息来推测缺失值。
  • 下面举例说明:  
      1. “年收入”:商品推荐场景下填充平均值,借贷额度场景下填充最小值;
    1. “行为时间点”:填充众数;
    2. “价格”:商品推荐场景下填充最小值,商品匹配场景下填充平均值;
    3. “人体寿命”:保险费用估计场景下填充最大值,人口估计场景下填充平均值;
    4. “驾龄”:没有填写这一项的用户可能是没有车,为它填充为0较为合理;
    5. ”本科毕业时间”:没有填写这一项的用户可能是没有上大学,为它填充正无穷比较合理;
    6. “婚姻状态”:没有填写这一项的用户可能对自己的隐私比较敏感,应单独设为一个分类,如已婚1、未婚0、未填-1。
  • 插补法
  1. 随机插补法
    从总体中随机抽取某个样本代替缺失样本
  2. 多重插补法
    通过变量之间的关系对缺失数据进行预测,利用蒙特卡洛方法生成多个完整的数据集,在对这些数据集进行分析,最后对分析结果进行汇总处理
  3. 热卡插补
    指在非缺失数据集中找到一个与缺失值所在样本相似的样本(匹配样本),利用其中的观测值对缺失值进行插补。
  • 优点:简单易行,准去率较高  
      - 缺点:变量数量较多时,通常很难找到与需要插补样本完全相同的样本。但我们可以按照某些变量将数据分层,在层中对缺失值实用均值插补
  1. 拉格朗日差值法和牛顿插值法
  2. 建模法
  • 回归
    基于完整的数据集,建立回归方程。对于包含空值的对象,将已知属性值代入方程来估计未知属性值,以此估计值来进行填充。
    缺点:当变量不是线性相关时会导致有偏差的估计。
      - K最近距离邻法(K-means clustering)  
    先根据欧式距离或相关分析来确定距离具有缺失数据样本最近的K个样本,将这K个值加权平均来估计该样本的缺失数据。
  • 期望值最大化方法
    EM算法是一种在不完全数据情况下计算极大似然估计或者后验分布的迭代算法。在每一迭代循环过程中交替执行两个步骤:E步(Excepctaion step,期望步),在给定完全数据和前一次迭代所得到的参数估计的情况下计算完全数据对应的对数似然函数的条件期望;M步(Maximzation step,极大化步),用极大化对数似然函数以确定参数的值,并用于下步的迭代。算法在E步和M步之间不断迭代直至收敛,即两次迭代之间的参数变化小于一个预先给定的阈值时结束。该方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。
  1. 归纳法
      - C4.5方法
    通过寻找属性间的关系来对遗失值填充。它寻找之间具有最大相关性的两个属性,其中没有遗失值的一个称为代理属性,另一个称为原始属性,用代理属性决定原始属性中的遗失值。这种基于规则归纳的方法只能处理基数较小的名词型属性。

就几种基于统计的方法而言,删除元组法和平均值法差于热卡填充法、期望值最大化方法和多重填充法;回归是比较好的一种方法,但仍比不上hot deck和EM;EM缺少MI包含的不确定成分。值得注意的是,这些方法直接处理的是模型参数的估计而不是空缺值预测本身。它们合适于处理无监督学习的问题,而对有监督学习来说,情况就不尽相同了。譬如,你可以删除包含空值的对象用完整的数据集来进行训练,但预测时你却不能忽略包含空值的对象。另外,C4.5和使用所有可能的值填充方法也有较好的补齐效果,人工填写和特殊值填充则是一般不推荐使用的。

不处理

补齐处理只是将未知值补以我们的主观估计值,不一定完全符合客观事实,在对不完备信息进行补齐处理的同时,我们或多或少地改变了原始的信息系统。而且,对空值不正确的填充往往将新的噪声引入数据中,使挖掘任务产生错误的结果。因此,在许多情况下,我们还是希望在保持原始信息不发生变化的前提下对信息系统进行处理。

不处理缺失值,直接在包含空值的数据上进行数据挖掘的方法包括贝叶斯网络人工神经网络等。

贝叶斯网络提供了一种自然的表示变量间因果信息的方法,用来发现数据间的潜在关系。在这个网络中,用节点表示变量,有向边表示变量间的依赖关系。贝叶斯网络仅适合于对领域知识具有一定了解的情况,至少对变量间的依赖关系较清楚的情况。否则直接从数据中学习贝叶斯网的结构不但复杂性较高(随着变量的增加,指数级增加),网络维护代价昂贵,而且它的估计参数较多,为系统带来了高方差,影响了它的预测精度。只有当数据集较小或满足某些条件(如多元正态分布)时完全贝叶斯分析才是可行的。

人工神经网络可以有效的对付缺失值,但人工神经网络在这方面的研究还有待进一步深入展开。

映射到高维空间

比如性别,有男、女、缺失三种情况,则映射成3个变量:是否男、是否女、是否缺失。连续型变量也可以这样处理。比如Google、百度的CTR预估模型,预处理时会把所有变量都这样处理,达到几亿维。这样做的好处是完整保留了原始数据的全部信息、不用考虑缺失值、不用考虑线性不可分之类的问题。缺点是计算量大大提升。

而且只有在样本量非常大的时候效果才好,否则会因为过于稀疏,效果很差

异常值处理

异常值通常也称为“离群点”。

发现异常值

  • 画图
  • 简单的统计分析
1
data.describe()#pandas的describe()函数
  • 3∂原则
  • 箱型图分析
  • 基于模型检测
    首先建立一个数据模型,异常是那些同模型不能完美拟合的对象;如果模型是簇的集合,则异常是不显著属于任何簇的对象;在使用回归模型时,异常是相对远离预测值的对象
    优缺点:1.有坚实的统计学理论基础,当存在充分的数据和所用的检验类型的知识时,这些检验可能非常有效;2.对于多元数据,可用的选择少一些,并且对于高维数据,这些检测可能性很差。
  • 基于距离
    通常可以在对象之间定义邻近性度量,异常对象是那些远离其他对象的对象
    优缺点:1.简单;2.缺点:基于邻近度的方法需要O(m2)时间,大数据集不适用;3.该方法对参数的选择也是敏感的;4.不能处理具有不同密度区域的数据集,因为它使用全局阈值,不能考虑这种密度的变化。
  • 基于密度
    当一个点的局部密度显著低于它的大部分近邻时才将其分类为离群点。适合非均匀分布的数据。
    优缺点:1.给出了对象是离群点的定量度量,并且即使数据具有不同的区域也能够很好的处理;2.与基于距离的方法一样,这些方法必然具有O(m2)的时间复杂度。对于低维数据使用特定的数据结构可以达到O(mlogm);3.参数选择困难。虽然算法通过观察不同的k值,取得最大离群点得分来处理该问题,但是,仍然需要选择这些值的上下界。
  • 基于聚类
    基于聚类的离群点:一个对象是基于聚类的离群点,如果该对象不强属于任何簇。离群点对初始聚类的影响:如果通过聚类检测离群点,则由于离群点影响聚类,存在一个问题:结构是否有效。为了处理该问题,可以使用如下方法:对象聚类,删除离群点,对象再次聚类(这个不能保证产生最优结果)。
    优缺点:1.基于线性和接近线性复杂度(k均值)的聚类技术来发现离群点可能是高度有效的;2.簇的定义通常是离群点的补,因此可能同时发现簇和离群点;3.产生的离群点集和它们的得分可能非常依赖所用的簇的个数和数据中离群点的存在性;4.聚类算法产生的簇的质量对该算法产生的离群点的质量影响非常大。

异常值处理

  • 删除异常值
    明显看出是异常且数量较少可以直接删除
  • 不处理
    如果算法对异常值不敏感则可以不处理,但如果算法对异常值敏感,则最好不要用,如基于距离计算的一些算法,包括kmeans,knn之类的。
  • 平均值替代
    损失信息小,简单高效。
  • 视为缺失值
    可以按照处理缺失值的方法来处理