数据分析中缺失值的处理方法

1、缺失值的分类

按照数据缺失机制可分为:

(1)   完全随机缺失(missing completely at random, MCAR)

所缺失的数据发生的概率既与已观察到的数据无关,也与未观察到的数据无关.

(2)   随机缺失(missing at random, MAR)

      假设缺失数据发生的概率与所观察到的变量是有关的,而与未观察到的数据的特征是无关的

MCAR与MAR均被称为是可忽略的缺失形式.

(3) 不可忽略的缺失(non-ignorable
missing ,NIM)亦称为非随机缺失(not missing at random, NMAR),也有研究将其称为MNAR(missing not at random)

如果不完全变量中数据的缺失既依赖于完全变量又依赖于不完全变量本身,这种缺失即为不可忽略的缺失.

2、缺失值的处理方法

   对于缺失值的处理,从总体上来说分为删除存在缺失值的个案和缺失值插补。对于主观数据,人将影响数据的真实性,存在缺失值的样本的其他属性的真实值不能保证,那么依赖于这些属性值的插补也是不可靠的,所以对于主观数据一般不推荐插补的方法。插补主要是针对客观数据,它的可靠性有保证。

1.删除含有缺失值的个案

有简单删除法和权重法。简单删除法是对缺失值进行处理的最原始方法。它将存在缺失值的个案删除。如果数据缺失问题可以通过简单的删除小部分样本来达到目标,那么这个方法是最有效的。当缺失值的类型为非完全随机缺失的时候,可以通过对完整的数据加权来减小偏差。把数据不完全的个案标记后,将完整的数据个案赋予不同的权重,个案的权重可以通过logistic或probit回归求得。如果解释变量中存在对权重估计起决定行因素的变量,那么这种方法可以有效减小偏差。如果解释变量和权重并不相关,它并不能减小偏差。对于存在多个属性缺失的情况,就需要对不同属性的缺失组合赋不同的权重,这将大大增加计算的难度,降低预测的准确性,这时权重法并不理想。

2.可能值插补缺失值

  它的思想来源是以最可能的值来插补缺失值比全部删除不完全样本所产生的信息丢失要少。在数据挖掘中,面对的通常是大型的数据库,它的属性有几十个甚至几百个,因为一个属性值的缺失而放弃大量的其他属性值,这种删除是对信息的极大浪费,所以产生了以可能值对缺失值进行插补的思想与方法。常用的有如下几种方法。

  (1)均值插补。数据的属性分为定距型和非定距型。如果缺失值是定距型的,就以该属性存在值的平均值来插补缺失的值;如果缺失值是非定距型的,就根据统计学中的众数原理,用该属性的众数(即出现频率最高的值)来补齐缺失的值。

  (2)利用同类均值插补。同均值插补的方法都属于单值插补,不同的是,它用层次聚类模型预测缺失变量的类型,再以该类型的均值插补。假设X= (X1,X2…Xp)为信息完全的变量,Y为存在缺失值的变量,那么首先对X或其子集行聚类,然后按缺失个案所属类来插补不同类的均值。如果在以后统计分析中还需以引入的解释变量和Y做分析,那么这种插补方法将在模型中引入自相关,给分析造成障碍。

  (3)极大似然估计(Max Likelihood ,ML)。在缺失类型为随机缺失的条件下,假设模型对于完整的样本是正确的,那么通过观测数据的边际分布可以对未知参数进行极大似然估计(Little and Rubin)。这种方法也被称为忽略缺失值的极大似然估计,对于极大似然的参数估计实际中常采用的计算方法是期望值最大化(Expectation Maximization,EM)。该方法比删除个案和单值插补更有吸引力,它一个重要前提:适用于大样本。有效样本的数量足够以保证ML估计值是渐近无偏的并服从正态分布。但是这种方法可能会陷入局部极值,收敛速度也不是很快,并且计算很复杂。

  (4)多重插补(Multiple Imputation,MI)。多值插补的思想来源于贝叶斯估计,认为待插补的值是随机的,它的值来自于已观测到的值。具体实践上通常是估计出待插补的值,然后再加上不同的噪声,形成多组可选插补值。根据某种选择依据,选取最合适的插补值。

  多重插补方法分为三个步骤:①为每个空值产生一套可能的插补值,这些值反映了无响应模型的不确定性;每个值都可以被用来插补数据集中的缺失值,产生若干个完整数据集合。②每个插补数据集合都用针对完整数据集的统计方法进行统计分析。③对来自各个插补数据集的结果,根据评分函数进行选择,产生最终的插补值。

  假设一组数据,包括三个变量Y1,Y2,Y3,它们的联合分布为正态分布,将这组数据处理成三组,A组保持原始数据,B组仅缺失Y3,C组缺失Y1和Y2。在多值插补时,对A组将不进行任何处理,对B组产生Y3的一组估计值(作Y3关于Y1,Y2的回归),对C组作产生Y1和Y2的一组成对估计值(作Y1,Y2关于Y3的回归)。

  当用多值插补时,对A组将不进行处理,对B、C组将完整的样本随机抽取形成为m组(m为可选择的m组插补值),每组个案数只要能够有效估计参数就可以了。对存在缺失值的属性的分布作出估计,然后基于这m组观测值,对于这m组样本分别产生关于参数的m组估计值,给出相应的预测即,这时采用的估计方法为极大似然法,在计算机中具体的实现算法为期望最大化法(EM)。对B组估计出一组Y3的值,对C将利用 Y1,Y2,Y3它们的联合分布为正态分布这一前提,估计出一组(Y1,Y2)。

  上例中假定了Y1,Y2,Y3的联合分布为正态分布。这个假设是人为的,但是已经通过验证(Graham和Schafer于1999),非正态联合分布的变量,在这个假定下仍然可以估计到很接近真实值的结果。

  多重插补和贝叶斯估计的思想是一致的,但是多重插补弥补了贝叶斯估计的几个不足。

  (1)贝叶斯估计以极大似然的方法估计,极大似然的方法要求模型的形式必须准确,如果参数形式不正确,将得到错误得结论,即先验分布将影响后验分布的准确性。而多重插补所依据的是大样本渐近完整的数据的理论,在数据挖掘中的数据量都很大,先验分布将极小的影响结果,所以先验分布的对结果的影响不大。

  (2)贝叶斯估计仅要求知道未知参数的先验分布,没有利用与参数的关系。而多重插补对参数的联合分布作出了估计,利用了参数间的相互关系。

    以上四种插补方法,对于缺失值的类型为随机缺失的插补有很好的效果。两种均值插补方法是最容易实现的,也是以前人们经常使用的,但是它对样本存在极大的干扰,尤其是当插补后的值作为解释变量进行回归时,参数的估计值与真实值的偏差很大。相比较而言,极大似然估计和多重插补是两种比较好的插补方法,与多重插补对比,极大似然缺少不确定成分,所以越来越多的人倾向于使用多重插补方法。

时间: 2024-10-27 21:48:22

数据分析中缺失值的处理方法的相关文章

规则引擎在数据分析中的作用

前言:规则引擎通过将业务规则和开发者的技术决策分离, 实现了动态管理和修改业务规则而又不影响软件系统的需求.以下通过实例对基于SQL 查询.自定义规则等一系列场景来说明规则引擎在数据分析中的应用. 在现代的企业级项目开发中, 商业决策逻辑或业务规则往往是硬编码嵌入在系统各处代码中的.但是外部市场业务规则是随时可能发生变化的, 这样开发人员必须时刻准备修改.更新系统,降低了效率.在这种背景下, 规则引擎应运而生,它通过将业务规则和开发者的技术决策分离, 实现了动态管理和修改业务规则而又不影响软件系

网页游戏数据分析中变量与关系的相关疑问

"http://www.aliyun.com/zixun/aggregation/8458.html">优化推广""找到用户流失原因和解决方法"是网页游戏数据挖掘数据分析最主要的两方面功能作用,对此尝试举例提出个人在相关思考的几个疑问作为探讨交流题目,希望借此共同关注数据分析在网页游戏运营领域的应用.QQ61411209 MSN:f95858@msn.cn网页游戏广告投放效果的优化是运营中推广需要解决的主要问题,利用数据分析为寻求最优广告策略提供依据

数据分析中遇到的“圆”

与十年前不同,当今令数据分析师迷茫的,可能不再是数据很少,而是数据很多;今天不是不知道玩好数据的重要性,而是不知道玩错数据的危害性,即所谓甜蜜的烦恼.一个数据分析师,如果能体会到,当下数据存在的核心问题,并且能清楚解决办法,就可以精益求精了. 这次想跟大家讲的是一个由受.想.行.识四个部份所组成生生不息的圈(Feedback Loop),彼此互相推进. 听起来有些玄乎,不过结合例子说就可能有意思了. 一.受 "受",即是对周围世界的感受 当前,作为一个电商,去感受公司经营状况的方式越来

数据分析中OLAP应用心得

理性决策的基础是数据,而数据分析中,OLAP是重要且必要的工具.结合自身工作特点及心得,拙作于斯: 1.什么时候用多维度OLAP? 多维度OLAP在让数据透彻的同时,也会造成数据碎片的风险.因此,使用OLAP时一定要有目的的使用,比如在验证或推翻假设检验时对比项(控制组)的选取,抑或探求某一维度下具体指标值.OLAP可以增加数据的分辨率,但也会使数据碎片化.在数据贪心心理的作祟下,谨记在明确目标下再使用多维度OLAP. 在没有明确目的,但要探索数据时进行OLAP,一定要先在目前计算性能允许下,设

C++中COM组件初始化方法实例分析_C 语言

本文实例讲述了C++中COM组件初始化方法.分享给大家供大家参考.具体如下: 这里使用BCB 在使用TADOConnect等组件时需要进行初始化 调用接口 : CoInitialize(NULL);//初始化COM套件 CoUninitialize();//释放COM套件 在DLL入口中调用: static bool isCoInitialize = false; //是否是自己进行的初始化 int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned l

云计算已在大数据分析中发挥重要作用

大数据并不是实时vs.批处理的问题.正如Ovum的分析师Tony Baer和其他一些分析师所指出的那样,这不是一个非此即彼的问题.鉴于现如今的企业用户在制定一套成功的大数据战略方面有着广泛的选择和大量的工作负载,上述分析师的论断也并不奇怪或有什么值得争议的. 更具争议性的话题是,虽然也许并不令人感到惊讶,是从被需要用以获得大多数大数据的基础设施中获得其性质.例如,AWS(亚马逊Web服务)的数据科学主管马特·伍德警告说,虽然"分析是会令人上瘾的,但如果你企业的基础设施跟不上的话,这种积极的上瘾会

有些数据分析中常踩的坑,当心别掉进去

错把相关性当成因果性 correlation vs. causation 经典的冰淇凌销量和游泳溺水人数成正比的数据,这并不能说明冰淇凌销量的增加会导致更多的人溺水,而只能说明二者相关,比如因为天热所以二者数量都增加了.这个例子比较明显,说起来可能会有人觉得怎么会有人犯这样的错误,然而在实际生活.学习.工作中,时不时的就会有人犯这样的错误. 举个栗子 数据显示,当科比出手 10-19 次时,湖人的胜率是 71.5%;当科比出手 20-29 次时,湖人的胜率骤降到 60.8%;而当科比出手 30

PHP往XML中添加节点的方法

 这篇文章主要介绍了PHP往XML中添加节点的方法,涉及php操作XML文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了PHP往XML中添加节点的方法.分享给大家供大家参考.具体方法如下: 1. contacts.xml代码 代码如下: <contact id="43956"> <personal> <name> <first>J</first> <middle>J</middl

java中如何让setText方法读取指定标签数据的时候特意空出一点点空间

问题描述 java中如何让setText方法读取指定标签数据的时候特意空出一点点空间 如何让setText方法读取指定标签数据的时候特意空出一点点空间java当中 解决方案 http://zhidao.baidu.com/link?url=znfx-j9HEz7fJS4EcXcc-gX096uqEKQMTQo4vBNrc9bhRAlFHGGxkAP8cPTOkATWxy3DqxQwhBwFAscWkNPxe_,用空字符串占位置看看可不可以也就是字符串前面有空格,后面有空格. 解决方案二: 使用全