4.1 关于数据的系统性认识
以数据为研究对象的学科领域包括数据科学和数据工程:数据科学的重点在于对数据进行分析和建模,以便从数据中提取有价值的信息,偏分析层面;数据工程的重点在于数据的采集、存储、处理、服务等,偏工程层面。
大多数情况下,数据分析的过程必须包括数据探索。对于数据探索可以有两个层面的理解:一是仅利用一些工具对数据特征进行查看;二是通过探索,理解业务含义,感知数据价值,并由此决定后续数据加工和处理的逻辑。对数据进行探索、预处理和分析,既需要技术手段的支撑,也需要具备数据分析经验和对业务问题有深入的理解。对数据进行处理和探索,依赖于对数据本身的理解,包括数据的业务逻辑、数据的存储逻辑等。
4.1.1 数据基本特征
1. 定类型、定序型、定距型、定比型
度量特性反映了数据的业务含义,按照度量特性,数据可以分为定类型、定序型、定距型和定比型4类。
1)定类型指无序的数据,例如性别。
2)定序型指有序的数据,例如学历。
3)定距型指有刻度单位的数据,虽然不能进行乘和除操作,但是可以相减以计算距离或差异,例如温度、年龄。
4)定比型数据可以进行各种数值型操作,特别是相比操作,例如金额、比例。
在有些文献中数据也分为三大类,区间型、序数型、分类型,即将定距型和定比型数据合并为区间型,定类型即为分类型,定序型即为序数型。
对数据度量特性的理解和判断将影响和决定后续数据处理的方式,如果一个数据是定类型的,虽然用数值1、2、3等进行存储,但数值的相对大小与业务含义并不对应,这种情况下必须要将数值转换成类别编码,不能直接将数值代入模型中。
2. 连续型与离散型,数值型与分类型
更简单的数据分类方式是分为连续型和离散型或者数值型和分类型。通常将定类型和定序型数据归为离散/分类型数据,定距型和定比型数据归为连续/数值型数据,这种对应并不严格。
注意这里提到的“数值型”是数据业务逻辑层面的概念,而非计算机物理存储层面的概念。例如年龄,业务逻辑理解应当是数值型的,但可能因为特殊原因,例如数据导出时就是以带引号的数字存储的,导致在数据库中以char方式存储,在后续数据处理过程中就需要将其转换成数值型。又例如性别,业务逻辑理解应当是分类型的,但可能因为自定义编码在数据库中是以数字形式存储的,在后续数据处理过程中就需要将其转换成分类型。
如果不了解字段的实际业务含义,仅以存储数据的格式为依据,分析人员可能会出现数据类型判断失误。数据库中以数值形式存储的1,业务含义不一定是数值型,也可以是分类型,例如性别,其实际业务含义是分类型的变量。
3. 数据类型
数据库中的数据类型一般可以分为整型、浮点型、字符型、日期型、时间型、日期时间型、时间戳型等,不同的数据库系统的数据类型定义和分类会有一定的差异。
不论是何种数据类型,本质上在计算机底层数据存储的都是数值型或者字符型,数值型是按数值的bit编码方式,而字符型是按ASCII编码方式(多语种符号有更多编码方式,例如Unicode、UTF8、GBK等),例如bit位00 000 000,如果是数值型变量则代表数字0,如果是字符型变量则代表空白,至于内存段的bit位00 000 000是数字0还是空白字符,取决于数据类型定义。
需要注意的是,不同的编程语言或数据系统所定义的数据类型集合以及计数起始点是不同的,在跨系统时需要考虑这种差异带来的潜在影响。例如SAS中的数据类型只有两种:数字型Num和字符型Char。SAS中所谓的日期型、时间型,均是数据格式的概念。例如对于日期变量,有的数据库系统是从1960年1月1日开始计数,有的数据库系统(SAS、Excel)是从1900年1月1日开始计数,在跨系统读取时可能会出现数值错误。
4. 数据格式
数据库或编程语言中的数据格式用于指定数据显示的形式,例如日期型可以显示为2020-07-11,也可以显示为2020/07/11。同一个日期在底层存储的是同一个数值,但可以显示为不同的格式,在SAS中定义了几十种数据显示格式。
需要注意的是,SAS中数据类型和数据格式这两个概念是有区别的。SAS中的数据类型只有两种:数值型和字符型。而数据格式有很多种,同一数值可以显示为不同格式,例如:SAS中变量取值为3.123,用format=10.2则显示为3.12,用format=10.3则显示为3.123,但底层物理存储的值是一样的。
形象地说,可以将数据格式视作数据的视图,而数据类型决定了数据的底层存储,同一底层数据存储值可以以不同的数据格式展现。
5. 结构化、半结构化、非结构化
数据按照存储形态可以分为结构化、半结构化、非结构化。
结构化是指数据有行列结构,通常以二维表的方式存储在数据库、数据文件或内存变量中。时序数据和空间数据,因为有固定结构,所以一般被当作结构化数据。
半结构化是指存在约定结构格式但没有显式的行列结构,最常见的是XML、JSON、HTML等格式的数据。半结构化数据可以通过解析转换成多结构化表。
非结构化是指没有约定结构,最常见的如图像、语音、视频、文本等。非结构化数据在计算机中也是有固定编码的,可以通过“特征提取”来提取结构化的特征。近些年出现的深度学习技术,更准确地说是表征学习技术,可以实现端到端的学习,不用依赖显式的特征提取。
需要强调的是,随着大数据和人工智能技术的发展,半结构化和非结构化数据在数据分析和数据挖掘领域的应用越来越普遍,对于分析建模师,有必要掌握半结构化和非结构化数据处理、特征提取和建模技术。
6. 数据维度
维度是人们观察事物的角度。从不同的维度观察数据,可能会得到不同的结果,同时也使人们可以更加全面和清楚地认识事物的本质。数据的维度是定义数据指标的角度,即指标是针对给定一组变量细分、计算出来的。维度可以简单理解为类似于计算指标SQL的group by语句中的一组变量。数据维度的示例如图4-1所示。
图4-1 数据维度示例
当数据有了维度的概念之后,便可对数据进行多维分析。常见的多维分析主要有钻取、切片、切块和旋转。钻取是改变维度的层次,即变换分析的粒度(类似于放大镜或镜头调整焦距),包括上钻和下钻。上钻是在某一维上将低层次的细节数据概括到高层次的汇总数据,减少了分析的维数。下钻则是相反,它是将高层次的汇总数据进行细化,深入到低层次的细节数据,增加了分析的维数。对于切片和切块,在多维分析中,如果在某一维度上限定了一个值,则称为对原有分析的一个切片。如果对多个维度进行限定,每个维度限定为一组取值范围,则称为对原有分析的一个切块。在多维分析中,维度都是按某一顺序显示的,变换维度的顺序和方向或交换两个维度的位置的操作称为旋转。
7. 数据粒度
数据粒度是指数据仓库中数据的细化和综合程度。根据数据粒度细化标准,细化程度越高,粒度越小,细化程度越低,粒度越大。根据数据仓库中的数据粒度,我们可以估计数据仓库存储空间的大小。
数据粒度可以形象地理解为比例尺、分辨率、放大镜。对于指定维度,例如日期维度,不同的粒度是指年、月、日等,越向下,数据粒度越细,同时数据存储量以及对数据库的处理能力要求就越高,可以从高粒度层次下钻(明细),也可以从低粒度层次上钻(汇总)。
4.1.2 常见数据问题
1. 数据PIT问题
数据PIT(Point In Time,时点)问题是建模过程中常见但是很容易被忽视的问题。对于离线建模,通常基于历史数据建模,所有数据都必须回溯到历史时点,使用历史时点的数据。这就要求银行在做数据存储时保留变更(修改和删除)的轨迹历史信息,而不是仅保留当前的最新状态信息,仅保留当前最新状态信息不能实现历史数据和状态的回溯。
忽视数据PIT问题,可能导致变量时间穿越,即用未来的数据预测未来的目标,这种情况会带来建模逻辑错误。
2. 数据回溯问题
数据可回溯是指可以回到历史时点得到当时时点的数据。离线建模经常遇到数据不可回溯问题,数据的不可回溯性包括如下3种情况。
1)时点状态数据原址更新,但未保存历史时点快照。
2)数据实时API接口服务用完即走,并未落库。
3)回溯时点之后数据库升级,例如数据只在回溯时点之后才开始采集。
数据回溯可能存在“伪回溯”问题,特别是在采购外部第三方数据前进行数据测试时可能会面临这个问题。“伪回溯”即表面上看数据回到建模时点,但数据加工逻辑中隐含地使用了当前的数据。在采购外部第三方数据前进行数据测试时需要保持警惕,避免出现“伪回溯”问题。“伪回溯”问题带来的后果是,采购前测试效果很好,上线后效果明显下降。
3. 热数据与冷数据
银行数据有冷数据和热数据之分。热数据是需要被计算节点频繁访问的在线类数据。冷数据是不需要经常访问的数据,比如企业备份数据、业务与操作日志数据、话单与统计数据。对于已经结清的账户,可以保存在单独的已关户账户表里,对应的流水数据也可以单独保存,这样有利于提高存量账户表数据处理性能。
在提取数据及进行数据处理时,需要有冷数据与热数据的意识,避免数据提取不全或者数据处理逻辑错误。例如建模会用到客户/账户信息表,一般是提取最新时点信息表,需要确保冷数据的客户/账户仍然保留在表里,否则会出现关联不上客户信息的情况。
4. 松耦合与弱连接
多数情况下,信贷业务数据都是紧耦合的,表和表通过明确的主键和外键进行关联,但在某些情况下,两个数据表之间可能不存在明显的业务关联意义,也就不存在显式的连接关系了。
1)人行征信数据:人行征信查询一般是独立的外部数据查询前置,信贷申请表与人行征信可能不是通过一个键进行关联的。
2)外部第三方数据:一般是根据用户实体和时间戳进行连接,但本身没有直接的业务关联。
3)设备行为信息:用户在设备上操作行为轨迹,与本笔业务之间没有直接的关系。