码迷,mamicode.com
首页 > 其他好文 > 详细

重新认识数据

时间:2017-08-22 01:53:22      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:打折   了解   一点   高手   关联   自然语言   今天   应该   不同   

误入数据分析行业已有5年多,由于并非“科班”专业毕业,自己从编程到统计理论基础,从简单线性回归到SVM、GBDT、LSTM等复杂算法一路跌跌撞撞学习过来,蓦然回首,才发现做了这么久的数据分析、数据挖掘、大数据等,却没有系统地思考过“数据”这一最基础的要素的确切含义和特性。而所有行业中,基础要素的概念和特性,无疑都是武侠中的“气宗”之本,决定了最终修为的境界高低。回忆所学,似乎也没有哪本书专门讲过“数据”本身,大概大家都对这个词习以为常了吧,就像大家都对政府门前的石狮子习以为常了,很少去想中国境内有没有“狮子”这种动物。今天就结合工作中的个人体会,系统地梳理一下“数据”的概念和特性,欢迎大牛补充。

数据本质上是信息。

数据本质上是对信息的记载。从刻在龟壳上的甲古文,到记录在计算机磁盘上的文字,本质上都是对信息的记载。这些记载的信息,属于数据的一个子类:文本数据。互联网上80%以上都是文本数据,现阶段对于非结构化文本数据的挖掘分析,相比半结构化、结构化的文本数据和数字数据,还是很不充分的。

信息又是什么呢?信息是和物质、能量一起构成世界的三大要素之一。物质和能量相对好理解,没有物质,一切都不存在;没有能量,一切都是死寂的。没有信息呢?一切都没有意义。物质、能量和信息都是客观存在的,只不过人类认知到物质和能量的时间要远早于信息。直到1940年代香农的信息论问世,才奠定了信息学科的基础。

信息的价值不言而喻。战争中,掌握更多情报的一方占据巨大的、有时甚至是决定性的优势。经济学中,信息不对称是造成竞争优势的重要因素。商业决策中,一份具有洞见的咨询报告,即使只用到了简单的统计汇总,也能卖出天价,并给公司指明战略方向。二战中,苏联面对德国的围攻,欧洲战场已无兵可用,但远东部署的60万兵力却不敢调回。关键时期,苏联的特务获知并向莫斯科发送了1比特的情报信息:日本将南下。斯大林得知后,迅速将远东的60万兵力调回欧洲,投入战争中,对扭转整个二战战局起到了不可估量的作用。可见,即使是最小单位的信息量,也可能产生无上的价值。

信息是如此的基础,以至于在人类涉及的所有领域中都会用到。而数据本质上是信息,数据分析就是挖掘信息,因此数据分析在国防、政府决策、战争、金融、电信、互联网、医药、心理学、社会学等领域中都有应用。关于数据的应用案例,推荐去读余子沛先生的《数据之巅》这本书,它讲了美国在200多年的历史中,几乎把数据分析应用到了国家的方方面面的案例,真正接近于运用数据的巅峰状态。

理解了数据的本质,也就明白了行业中常说的“数据是新石油”的含义。我们知道石油储蕴含着能量,而发动机引擎是将此能量可控地释放出来,为人类所用的工具。发动机本身是不产生能量的,它输出的动力性能如何,最主要还是要看喂给它的能量原料如何,其次才是这个发动机的性能如何。“数据是新石油”,这个类比真的很贴切:数据里蕴含着信息!数据挖掘80%的时间花在数据清洗上,这个步骤类似于对石油的提炼,清洗好的数据,相当于提炼好的汽油、柴油等;而各个机器学习算法如SVM、GBDT等,相当于发动机引擎,它们是把数据中蕴含的信息释放出来的工具。做数据分析、数据挖掘的人,最后往往发现自己最需要练好的,不是各个算法的调优啊、推导啊之类看似高大上的技能,反而是数据清洗和加工的功底。是不是感觉被欺骗了?这也是很多新人容易跑偏,眼高手低,老是想去做高大上的模型,看不起清洗数据这类“低级活”的原因。

数据与数字的区别。

可能还是有部分新人和外人直觉上认为数据就是数字,这里特意强调一下这两者的区别。数字是量化了的数据,可以进行加减乘除等数学运算的。数字的“可运算”性是非常重要的,因为一旦可运算,就与数学建立了联系,我们就可以借助整个数学帝国中的工具去分析、优化它来达到目的。而数据更多是指信息,“我们没有数据,所以不知道平衡车的市场前景如何”这样的话中,“数据”的本意就是信息。数据的表现形式除了数字,还可以是文本、图像、音频、信号等等,并且图像识别、自然语言处理、语音识别等也都是机器学习的应用领域。这些数据都不可运算,那数学算法是如何去计算并优化它们的呢?这里就涉及到数据的转换和表征了,所谓表征,就是用可计算的数字,来表示这些不可计算的数据,并且尽量保持数据中的原本信息。数据的表征后面再细谈,这里主要强调一点:一旦用数字表示了文本等不可计算的数据后,就可运算了。

数据与生产者、方差因子。

所有的数据都不是从石头缝里蹦出来的,一定有产生它的生产者。在进行任何数据分析之前,我们必须先搞清楚这些数据是怎么来的,即生产者是谁,生产逻辑是什么。这对于我们理解数据十分重要。比如人的身高、体重、三围数据,人是生产者,生产逻辑是按国际长度标准和质量标准测量的。我在工作中曾经碰到过部分建模同事,做完模型汇报工作时,被领导询问却答不出一个变量的确切含义。数据的含义都没弄清楚,又如何确保你使用数据的姿势水平优不优雅、正不正确呢?

但仅有生产者和生产逻辑是不够的,不同人的这些指标不同,差异的源头来自哪里呢?除了这些显性的、可直接观测的数据之外,显然还有一些隐性的、抽象的内在因子,它们造成了观测数据的差异,因此称做方差因子。显然性别是一个重要的因素,它对身高、体重、三围都有重要的影响,当然性别是一个可观测的方差因子。在语音识别领域中,演讲者的性别、年龄、国籍、口音等,都是造成音频信号差异的重要因子。数据挖掘,很大程度上就是要提取、分析出业务领域内的方差因子,并从各个维度上量化这些方差因子。比如作者从事的风险建模领域内,一个人的信用逾期风险,与贷款收益、还款能力、履约历史、共债水平、稳定性、违约成本等方差因子强烈相关,因此特征工程都以这些方差因子作为指导方向,而选择出的特征也往往反映了这些维度的信息。因此,如果想要挖掘到深处去,一定不能停留于数据的浅表,而要不断地思考并尝试,直到提取出内在的方差因子。而想要找出内在的方差因子,一般又需要对业务知识有足够的了解,因此业内的牛人都会告诉你,一定要理解业务,一定要结合业务,就是这个道理。

数据与产生时的场景。

所谓产生时的场景,是指这些数据被生产出来时,其生产者和生产逻辑的上下文环境。某种程度上,生产者和生产逻辑都是静态信息,有时候只了解这些静态信息是不够的,还要了解场景这一重要的动态上下文信息。如果你在分析数据时觉得不对劲,排除数据出错的可能后,首先就应该去检查它的场景。而想要还原场景,最重要、最不可或缺的就是时间戳。有了时间戳,我们就可以问这个关键的问题了:当时发生了什么?然后查大事记、询问干系人等,一般都能顺利还原出数据产生的场景。曾经有实习MM问“我们10月1号的申请量比平日高了几倍,是不是被黑中介人肉攻击了?”,其实她的问题中已经包含了答案,只是她不懂得还原场景:十一是国庆节啊妹子!也有新人做分析时自动把时间、日期、id等变量自动剔除——时间信息又不能入模型,为什么要留着它呢。这种想法大错特错,不能入模,不代表这个变量不重要。时间信息,恰恰是很少入模,而又最重要的场景信息!

场景除了帮助理解数据,在查找问题时也特别有用。工作中经常遇到已经正常在线上跑了几个月的模型,突然又出错误了。为了救火省时间,我一般首先查找公司最近是不是又上新版本了,哪里改动了什么。然后抽取改动时间点前后各部分数据,快速分析对比一下错误变量的数据,一般就能定位问题了,剩下的事情就是通知干系人去改bug了。

数据与时间戳、id。

上面提到的时间戳,除了能还原场景,还有很重要的作用。你可以认为我们活在三维空间中,也可以认为我们活在四维空间中——如果加上时间维的话。去掉时间维,很多变化的、重复的数据都比较棘手,难以应付;而站在四维的角度看待问题的话,一切都是静止的、不变的,因此问题的复杂度大大降低(这是从函数式编程中借鉴的思想,特别推荐感兴趣的朋友去了解一下)。如果告诉你我国的人口是12亿,你肯定会说“这数据错了吧”,假如你去数据库里面一查,我的天,库里面为什么为有10、11.4、12、13、13.6、14亿等这么多个人口数据?哪一个才是正确的呢?其实这些数据都是正确的,只不过是不同年份里统计出来的。加上时间维度后,重复性便不存在了,更进一步,我们还有了更多的信息(历史信息)。有了历史信息,我们便可以看趋势、也可以做对比,还能够做预测等等。这个随手举的简单例子,显示出数据的时间属性的基本作用,以及缺失时会面临的基本问题。我工作中,曾经遇到过IT在数据库中建了个没有时间戳的表,查询问题、去重、增量抽取等很多操作都存在问题,遗害不浅。借用函数式编程里的一句话来强调一下:时间是一个本质的问题。

同样本质的还有数据关联的id,此id代表了数据属于谁,是与其他数据联结在一起的基础。在讲数据的基本特性时会提到,数据融合后的价值,远大于数据价值的加和,而想要把一个个数据孤岛连通,就需要id这个独木桥。数据的id,几乎是关于这个数据最重要的信息,它一般不能用于分析,也不能入模,最主要的作用是定位数据。但离了这个id,数据便成了无主之野魂,利用价值大打折扣。有些人做模型时,喜欢把清洗好的,能用来跑模型的特征单独取出来用一个表保存,其他的id、时间、原始特征等数据都不在这个表中。这种做法是极不推荐的,这样做丢失了最重要的id、时间和原始数据,却保存了一份完全可以再生的衍生数据。正确的做法是:如果磁盘空间有限,就保存好所有原始数据和衍生代码;如果磁盘空间富裕,就把原始数据和衍生数据保存在同一个表中,并在代码中记录好哪些字段是衍生字段,然后保存代码即可。

数据的再生性和粒度。

有些数据是可以再生的,而有些数据丢失了就再也找不回来了。像衍生类的数据,都是可以根据原始数据再计算出来的;而像时间戳这样的数据,数据产生时没有打上,就永远丢失了。

数据的粒度,是指记录数据的详细程度。最详细的数据,肯定是事物性的数据,一行一条记录。这样的数据,包含最丰富的、最原始的信息,因此是必须保存好的。但这样的数据通常也是量最大的,直接分析这样的数据比较困难,计算速度也慢。因此需要将常用的指标按天、周、月、年汇总计算出来。按不同维度汇总,我们就称粒度的粗细不同,比如按年汇总,就是最粗粒度级别。另外时间维只是我举的一个例子,也可以按地理维、产品维度等其他维度汇总统计,这些维度也都有不同的层次关系,层次越高,粒度越大。还可以综合好几个维度来计算,比如把时间维、地理维、产品维一起综合计算了,这就是一个多维立方体了,更详细的可以参考OLAP相关的理论知识。显然除了最细粒度的事物性数据,其他数据都是可再生的。

保存数据时,原则是优先保存最原始的,不可再生的数据,再按实际情况权衡计算各种衍生数据;常用的业务分析时,原则是先分析粗粒度的统计数据,有异常时再去提取原始数据检查。

一不小心篇幅有点多,数据的基本特性就另起一篇文章吧。

 

重新认识数据

标签:打折   了解   一点   高手   关联   自然语言   今天   应该   不同   

原文地址:http://www.cnblogs.com/liuxianglong/p/7401964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!