摘要:数据科学家是二十一世纪最性感的的职业。面临充斥着脏乱差的数据,处理数据一致性问题是其中一项重要任务。人的强项在于智能,却不善于处理重复且枯燥无味的事情。机器不具有智能,却善于处理重复且简单的事情。
01 性感还是闷骚
《哈佛商业评论》说:数据科学家是二十一世纪最性感的的职业。
理想很丰骚,现实很闷骚。之所以闷骚,是因为首先得把自己闷起来,闷过了最枯燥的阶段,你就变明骚了,才性感;闷不过,你就只有离骚了。
想做数据科学家,推荐一篇文章:《为什么“高大上”的算法工程师变成了数据民工?》,从中了解数据民工的的枯燥。看完再以45度角仰望星空10分钟,然后,再大声说出你的理想。
数据科学中,并非都会得出啤酒与尿布的有趣结论,也并非都有漂亮的2D或者3D的图形展示。反而会包含很多枯燥无趣的数据处理,但这却是必经这路。而且,数据处理与清洗会一直伴随你的职业生涯。
现今很多数据都会通过爬虫来获取,最大的数据王国Google也是抓取各家的网站内容。各家网站本身的数据就参差不齐,况且在处理过程中,还会因为解析、存储、业务理解等带来误差。
不同于通常的数据分析,要求产出业务相关的报表。面临充斥着脏乱差的数据,处理数据一致性问题便是其中的首要任务。
02 属性抽取与校验
以二手车抓取的数据为例,我们的目标是清洗爬虫获取的二手车数据,也就是标题中的“洗车”的含义。各家网站的款型描述是单独的,同时还会单独列出:排量、年款、行驶里程、手自动变速器等字段。比如款型描述为:2012款 3.0 自动 旗舰版,单独的字段还分别列出:排量:3.0,年款:2002款,手自动:自动,这里面没有包括行驶的里程。
如果我们分开抓取款型描述、排量、年款、手自动字段下来,即可进行一致性检查。从款型描述中抽取出相应的字段,再与单独的字段进行对比。如果发现不一致,刚肯定有个地方出错了。可能是原始网站上数据出错,也可能是爬虫的解析、存储过程中出现的问题。
这个事情,说起来非常简单,但在实际的环境中,出现问题的数据还真不少,还也常常被忽略。通常采取的抽取规则也很简单,一个简单的正则便可以将需要的属性从详细描述中抽取出来。
一般来说,只要一个属性出现在两个地方,就应该要校验他们的一致性。
除了对多个地方的属性进行一致性校验外,还需要对属性本身的取值范围进行校验。比如:汽车排量大于9通常不合理,如果你看到一个排量属性为0.3或者11.8,那么请校验数据。如果排量为0.0, 只有电动车或者数据出错。还有,上牌时间大于2015年或者为1915年;开了三年的车,行驶里程1千5百公里(超级豪车除外);或者开了三年的车,最后只卖新车指导价的5%,这些数据,通常都需要舍弃或者修正。
从上面一些简单的知识可以看出,数据分析是需要相关的领域知识,甚至有些是常识。千万不要以为数据分析或者机器学习只是单纯的统计和数学模型,不懂业务的机器学习工程师不是一个好的产品经理。
03 机器与人工相结合
假设从各种第三方网站抓取的二手车款型描述差异比较大,我们的目标是将其建立对应的映射关系,映射到我们已经建立的标准款型中去。传统的方式是找几个对二手车熟悉的人,手工建立映射关系。但当数据量越来越多的时候,而且各种描述也越来越不规范的时候,需要的人力是比较大的,况且,人还会犯错,一个眼花就会弄错匹配关系。
可以通过一些简单的算法,来完成二八理论中的那八成,甚至我们可以通过程序来校验人工的结果是否有错误。以《0x03 近朱者赤,相亲knn》中提到的KNN算法,便可以通过人工已经匹配的结果,来进行基于案例的学习,学习人工的经验。
比如,在某一个匹配关系中,人工将“1.0L A/MT 基础型”匹配到标准款型库里面的“1.0 手自一体 基本型”上去了,我们便可以用程序来学习他这种匹配关系,基于已经成功匹配的案例,用简单的算法,来学习人工的经验智慧,这便是机器学习算法带给我们成果。
人的强项在于智能,却不善于处理重复且枯燥无味的事情,并且容易犯错。机器不具有智能,却善于处理重复且简单的事情。用人的智能去处理最困难的20%的问题,而把那相对简单的80%的问题交给程序。
我们还可以通过机器学习来识别人工匹配的错误情况,甚至能分析出数据库里面出现的一些问题,比如数据重复问题。
04 数据验证环节
通过简单的算法进行案例学习,假定人工完成了两条款型的匹配,第一条为:“2.0 标准型 自动” 匹配到标准库为”2.0L 自动 标准型“,另外一条:“2.0L 自动标准型“匹配到了”2.0L 自动 导航型”。那么其中问题就来了,我们程序通过处理后,发现第一条与第二条数据实际上是一样的,可是匹配到标准库的时候,却是两个不一样的结果,那么肯定其中一条映射关系是有问题的。
上面是一个比较复杂的“一对多“问题,因为在判断两条数据不一样的时候,还使用了对数据进行处理。经常还会遇到,就是两条完全一样的款型描述,还是会有匹配到两个不同的标准款型的情况发生,这便是我们前面说的,机器学习用来辅助校验人工匹配的成果了。
还有一种情况,假设上面两条数据,第一条匹配到”2.0L 自动 标准版“,第二条匹配到”2.0L 自动 标准导航版“,通过我们参考其它网上的标准库发现,两个款型描述其实是一样的。那么问题便出在我们自身的标准库上了,我们标准库里面有重复的数据。人工在不同的情况下都是匹配对的,只是他们没有对比分析,所以没有发现是自身的数据重复导致的。
上面情况是:相同(或处理后相同)的数据,映射到不同的结果,是典型的”一对多“问题,当然还有”多对一“的情况,即多个不同的数据,映射到相同的结果上面了。
比如两条数据分别为:”1.8L 标准型 自动”和“1.8T 自动 标准型,都匹配到了“1.8L 自动 标准型“。不仔细的话,估计很难发现,两条描述中,一条是L(自然吸气),另外一条是T(涡轮增压),但他们都匹配到“1.8L 自动 标准型“,因此肯定其中有一条映射错了。
这便是多对一的情况。多对一的想法依然可能检查数据关系的一致性。
05 数据应用
从上面可以看出,数据本身的逻辑一致性,和数据映射关系的一致性,会影响到我们最终数据的质量。尤其是当你用这些数据来做一些和二手车估值相关的数据运算的时候,任何一条逻辑出错或者映射出错的数据,都有可能会影响最终的估估值模型。
假定从第三方网站抓取的数据中,含有新车指导价或者4S店最低报价,也可以通过上面的方面,对这些价格进行一次校验,取出最合理的数据。具体的思想上面都已经有了,只是如何应用的问题,有兴趣的可以自己尝试。
机器没有智能,无法理解数据,尤其是逻辑或者领域相关的知识。但人不一样,这才是数据工程师和机器学习工程师最核心的价值。有了算法思想,很多地方即使只使用简单SQL也能发挥出比较大的威力。
不要放过你遇到的任何小问题,任何的一处小问题,背后都可能隐藏着一系列的错误,或者甚至蕴含着一些你还不知道的知识。
用易经中坤卦的初六爻的爻词来理解:履霜,坚冰至。脚上踩到霜了,便要想到,后面很有可能会有坚冰在等你。