获取了有用且可靠的数据,但是并不能说明可以直接使用数据,可能还会存在各种各样的问题。经常遇到的数据问题有如下几种:
1、数据缺失(Na/N)
比如,在互联网行业中,产品的用户注册阶段需要用户输入基本信息,很多用户会忽略不写,如地区、年龄和收入等级等,由于填写与不填写获得的产品服务差异不大,因此用户往往会忽略,也可能随便填写,比如将年龄写为100岁或以上,从而产生异常值,在无形中造成数据缺失。
对待数据缺失有以下几种递进的处理方式:定位、不处理、删除、填补。
定位:就是要定性与定量了解数据的情况。对于已经收集回来并存储在数据库中的数据,了解数据库中哪些字段有缺失、缺失比例如何,这是一种定量的描述。明确有缺失数据的字段重要性如何,这是一种定性的描述。定量的描述相对容易,定性的描述需要与业务场景相结合。
我们知道,通常行用来表示数据记录(如用户),而列用来表示相应属性(如性别、年龄)。缺失值的情况一般分为以下两种:
- 一是行记录的缺失,即数据记录的丢失;
- 二是列记录的缺失,即数据记录中的某些属性值出现空缺。
数据记录的丢失通常无法找回,一般缺失值处理仅针对属性值的缺失进行处理。
不处理:是预处理的一种方式。数据分析及应用有时对缺失值是存在容忍度的,比如在进行数据降维处理时,很多属性值其实对数据分析的结果相关性非常小,这些属性值的缺失并不会对分析结果带来任何影响,因此完全可以采用不处理的方式来对待。
删除:就是丢弃。如果一个字段对于后续的业务没有太多的帮助,或者该字段的缺失会导致数据处理脚本不能运行等,就可以直接删除。有的时候,虽然一个数据项目对业务很有帮助,但是难以通过直接或间接的方式补齐,也只能作罢。删除就是直接删除有缺失值的数据记录。这种方法明显存在缺陷,当出现以下情况时,直接删除并不合理:
- 大量的数据记录或多或少都存在属性缺失(如超过30%);
- 存在属性缺失的数据记录都是同一类(如80%的男性用户均没有年龄信息)。
以上两种情况都会导致通过数据集推断出的结论不准确,因为大量携带有用信息的数据记录已被遗弃,于是又有了以下方法,即填补。
填补:是更为常用的一种处理方式。填补就是通过一定的方法将存在缺失属性的数据记录补全。通常可以采用如下方法。
- 利用业务知识和经验填充。例如,我们可以根据学生6~7岁上学这个常识对相应年级学生的年龄缺失情况进行补全。
- 利用其余数据记录的属性进行填补:比如针对缺失年龄属性的用户数据记录,我们可以采用对所有用户的年龄取均值、中位数、众数等方法进行填补。以取均值为例,可以使用全部用户的收入均值来补全那些尚未填写收入的数据。
- 专家/用户填补:针对某些少量且具有重要意义的数据(特别是创业期),直接咨询行业专家或用户本人来进行数据填补。
- 利用当前数据记录的其余属性进行填补:比如针对缺失年龄属性的用户数据记录,我们已知用户学历为本科,工作经验为3年,那么可以大致推断出该用户的年龄。很多数据也包含一些隐性的意义,例如手机号可以反映用户的归属地。
其实,在掌握了不处理、删除及填补这3种方法后,我们还需要考虑一种特殊情况,就是当我们无法通过填补的方法补全缺失的属性,并且这些数据记录又无法进行删除时,可以将缺失值也视为一种类型,比如性别除男、女外,可以将缺失数据的用户均记录为未知。在数据分析时,这类用户将会作为一个特殊群体参与分析。
2、数据重复
产生数据重复大致有两个原因,一个是无意重复,另一个是人为重复。
对于无意重复,因素比较多。比如服务器采集上报时重复上报了,或者客户端异常导致重复数据记录操作,都属于无意中存多的重复。也有可能是统计口径不严谨导致的数据重复计算。比如,QQ和微信对外的月活跃用户数分别都有好几个亿,但是如果以用户账号这个ID属性来计算,那么这里面必然有重合的,因为一个用户可能有多个账号的情况,也就是同时使用QQ和微信,而对于这个人的ID属性,是重复的。
对于人为重复,多数可能是为了预防不可抗力的灾害而做的备份。比如对于现在的云计算服务器,将所有数据都放在一个机器上会很不安全,为了防止被黑客入侵、被自然灾害如火灾销毁等,要复制多份。而当这些数据被拉取出来放在一起的时候,就会出现数据重复的情况,必须要注意去重。
针对数据重复的情况,大部分时候我们都会直接使用数据去重的方法,简单的数据样本可以用Excel删除重复项,高阶的方法可以用数据库脚本如SQL进行重复删除,这些技能都是我们必须掌握的。
但一定要注意,有些场景我们是不能随意去重的,比如重复监控。
一般情况下,我们使用数据是用来分析的,直接去重不会对分析结果带来影响。但是一旦我们决定使用数据来监控业务风险,重复数据就不能随意忽略。比如同一个IP在一段时间内连续获取了多次短信验证码,这个重复记录可能说明相应短信验证码的业务出现了重大的规则问题,而且可能遭受了竞争对手的恶意攻击。因此,这些重复数据不能随意删除,产品经理可以通过这些重复值来发现自己设计的产品漏洞,并配合相关团队最大限度地降低给公司带来的损失。再比如,对于一些需要计算某页面或App功能的操作次数,需要对每次的使用行为做上报统计,在这种情况下,也是不能直接进行去重的,会导致数据无法做统计。
3、数据异常
我们知道,提取的数据来自采集上报,那么就很难保证所有采集到的数据都是统一和规范的。这种不统一会给数据处理带来冲突,进而产生异常值。
比如数据格式的不统一导致的数据异常。我们在做数据处理时经常会遇到日期格式问题,如果在一份数据中出现了多种日期格式—,如“2020-3-14”“2020/3/14”“14/Mar/2020”,就要使用统一的方式进行规整,使数据格式统一。
有时由于用户填写错误或后台处理程序读取与编写错误,使得姓名、年龄、手机号码等位置错乱,这也势必使数据分析多了一层障碍。很多时候数据并没有缺失或异常,只是由于不符合常理而显示出异常的一面。例如,用户注册时将年龄输入为200、手机号码输入为13000000000等。一般情况下,通过常识性的推理,就可以判断这些数据属于异常的数据。在处理时可以通过不同字段间的数据进行相互推理印证,比如年龄或出生年月数据与身份证号就可以相互对照,检查数据正误。
和重复值一样,有些情况下我们是不能直接删除异常的数据记录的,而是需要采取保留的方式进行处理。
比如,异常值是业务部门在特定的活动中产生的,运营部门在App上利用某电商促销节点进行促销推广活动。促销活动导致营销数据突增,进而导致App的活跃数据在当天暴涨,这种异常情况,我们不能认为是真实的异常。这种异常数据如果被删除,反而无法评价本次活动的效果。
4、数据样本差异量非常大
对于数据样本差异量较大的情况,这里介绍一种处理方法,叫作数据的标准化归一。数据的归一,本质上就是把绝对的数量转变成相对的数量。
怎样理解绝对转变成相对?假设一个班里有三名同学,他们的体重分别是120斤、105斤与95斤。当需要转变成相对数量时,可以将上述三位同学的体重数据转换成1.2、1.05与0.95。经过这样的变换,我们可能并不清楚这些数值的意义,但能很清晰地知道它们的相对大小和比例关系。
进行归一化还有一个好处,就是可以避免极值问题。例如,一个统计指标是10,而另一个统计指标是10000,要在同一个图标上进行展示,几乎看不到10这个数据,因为已经被1000倍的比例稀释了。而如果进行归一化,就可以缩小这样的比例差距。这个现象或问题相信是绝大部分人经常遇到的。归一化的方法有很多,比如用一个最大值和最小值的方法来说明如何进行标准化归一处理。
数据的异常情况处理需要根据实际的业务进行分析,面对“脏”数据,首先要追寻问题出现的原因,在确保数据来源没有问题后,再针对缺失值采取不处理、删除、填补或保留并转化,而针对重复值和异常值通常会进行删除和保留。作为数据产品经理或运营经理,要从数据预处理阶段就参与其中,结合公司的业务需要合理地针对数据预处理给出产品方案,帮助公司更有效地进行决策。