您的位置: 网界网 > 周报全文 > 正文

[周报全文]让“脏数据”改头换面

2006年03月03日 10:58:52 | 作者:中国系统分析员协会 专业顾问 张振华 / 中国建设银行浙江省分行 熊晓南 | 来源:$page.getBroMedia() | 查看本文手机版

摘要:目前,基于数据仓库的商业智能应用已经成为国内许多企业的IT规划项目,并受到企业管理层的关注。

标签
ETL
脏数据
数据仓库


        目前,基于数据仓库的商业智能应用已经成为国内许多企业的IT规划项目,并受到企业管理层的关注。作为商业智能的基础,数据质量的好坏是影响商业智能应用效果的关键,但由于企业的信息化经过长期的积累和发展,数据质量参差不齐,脏数据的存在阻碍了商业智能应用的进程,下面将重点谈谈如何让脏数据改头换面。

数据的“往事”

        脏数据是指源系统中的数据不在给定的范围内或对于实际业务毫无意义,或是数据格式非法,以及在源系统中存在不规范的编码和含糊的业务逻辑。
        脏数据的存在主要是由于源系统的设计不够严密造成的。主要表现为:数据格式错误,数据不一致,数据重复、错误,业务逻辑的不合理,违反业务规则等。例如,未经验证的身份证号码、未经验证的日期字段等,还有账户开户日期晚于用户销户日期、交易处理的操作员号不存在、性别超过取值范围等。此外,也有因为源系统基于性能的考虑,放弃了外键约束,从而导致数据不一致的结果。
        目前,大多数的银行业务系统的输入界面是采用COBOL语言或C语言开发的,界面处理功能不是很强,一些要素被设计成“输入”而不是“选择”,如企业客户的信用等级被设计成输入,输入的正确与否完全由操作员的理解决定,这也是脏数据产生的原因之一。例如,如果被设计成“选择”就不会出现把AAA输成“1”或其他了。  

转换与清洗的实例

        下面以银行业务系统的客户的惟一标识—客户号为例来讲解如何转换与清洗数据。

        客户信息的处理是整个数据抽取、转换、清洗和装载(ETL)工作中最复杂的部分。目前业务系统中常见的客户信息处理的难点主要有以下两个方面。 

        客户的惟一标识混乱

        银行的客户号一般由证件类型与证件号组成,这里就有一个问题,如果客户有多种证件怎么办?或者说某个客户办了移民,有了新的身份,系统中怎样体现出他是同一个客户?这些问题,除了少部分是由于发证机关造成的(如身份证重号),大部分是由于操作人员的操作不规范造成的。主要表现在以下三个方面。

        A、客户身份证号问题
        最常见的问题是客户的身份证从15位更换为18位。首先操作人员只要能输入新的客户号,就认为是一个新的客户;其次,即使操作员知道客户的身份证升位了,但在银行的客户信息中,客户号是惟一标识,如果对惟一标识进行更新,作为增量反映到目标系统中,但没有记录原客户号,对于目标系统来说就是一条新记录,而删除原有的客户信息在实际操作中可能是不允许或做不到的,因为在这个客户号上可能还挂了许多账户,即便物理删除了这条客户记录,也不可能作为增量数据传输到分析系统,因为这条数据确实已经不存在了。所以在实际的业务操作中只是简单地增加一条客户信息,新开的账户就挂在新的客户信息上,这样业务系统中就登记了两条客户信息。

        在ETL处理时,对上面这种情况一般都直接转换为18位,但在首次全量处理时,必须通过比较姓名来真实证明两条记录是同一个客户。增量处理时需要同样的处理。这样做需要更多的系统时间。

        第二个客户身份证号问题是15位身份证号中有字母。如数字“0”被误写为字母“O”。

        第三个客户身份证号问题是长度不为15位与18位。

        第四个客户身份证号问题是同一身份证多个客户号。

        身份证号问题在ETL时要生成异常客户信息记录文件,再交由业务部门处理,如把原15位身份证上挂接的账户重新挂接到18位上,删除15位的客户信息,删除错误的客户信息,重新录入正确的客户信息,并进行账户挂接。

        B、多种证件问题
        多种证件也会导致一名客户有多个客户号,技术上没有能力来发现,只有依靠业务人员来收集、更新维护信息。如果通过建新表来保存这种关系,将增加数据处理、查询的难度。

        C、其他问题。有些账户上没有客户信息或虚编了客户号,比如1999年11月以前开设的账户,没有客户可以挂接,于是随意设了客户号,在汇总统计时要注意区分这种情况。

        多数据源导致多客户信息

        由于客观原因,银行可能有许多分散独立的业务系统,没有做到完全的集中,这些系统中都有客户信息。

        多数据源导致多客户信息,同一客户在不同系统中有不同的数据描述,或者详细程度不同,在一些系统中甚至可能没有明确的客户代码与客户信息。
在处理时,主要根据客户信息的详细程度与更新时间来考虑,并确定一个信息修改的原则。首先我们把来自最大的数据源——核心业务系统的客户信息作为基础,这些信息数据量大,虽然有很全面的数据结构,但大部分的字段内容为空,而来自个人信贷系统、银行卡系统等的客户信息数据量相对较少,有详细的内容,正常情况下客户记录应该是核心业务系统的一个子集。数据仓库系统应该综合所有系统的客户信息,客户记录数应该是并集,客户记录字段应该是一些重要字段的并集。

        然后确定不同数据源有公共字段的修改顺序。首先按信息的修改时间来判断,但最新的信息修改不一定有最全面的信息,如在柜面开户(+本站微信networkworldweixin),核心系统仅录入了身份证与姓名,没有录入地址等其他公共字段信息,而个人信贷系统或卡系统虽然建立的时间比较早,但有较全面的信息,不能用核心系统信息直接更新。所以公共字段的修改原则是在源数据与目标数据的字段不为空的情况下,以最新的信息为准。但这样做要耗费大量的系统资源,特别是在做全量数据初始化时,好在客户信息变化的频率不是很高,在实际全量数据初始化时往往是确定一个顺序,例如,以核心业务系统信息为基础,银行卡信息覆盖核心业务系统信息,然后再用贷款信息覆盖。

        增量处理时一种折衷的方法是,在目标系统中记录客户信息的来源系统,如果来自贷款系统,则不能用其他系统的增量信息更新,只能用贷款系统的增量信息更新,而贷款系统的信息可以修改来自其他系统的信息。

实施经验:转换与清洗的时机

        一般来说,转换与清洗发生在数据抽取之后,一些转换与清洗可以在抽取的同时去做。对于一些相对不繁忙的业务系统,如个人信贷系统,由于不是24小时运行,在每天完成正常的数据处理后,仍有很多时间空闲,在数据卸载时可以进行转换与清洗,这样做能够减少数据仓库的负载量。需要注意的是,不能对源系统进行清洗,因为源系统数据正确性的标准可能与目标系统不一样,对源系统的数据进行任何的修改与删除都是不允许的。当然源系统清理自身错误的数据对加快数据抽取会有好处。

数据清洗的六个步骤
数据仓库领域的权威W.H.Inmon博士把数据清洗的过程分为六个步骤:
步骤一:元素化(将非标准的数据统一格式化成数据元素)。
步骤二:标准化(将元素标准化,根据数据字典消除不一致的缩写等)。
步骤三:校验(对标准化的元素进行一致性校验,即在内容上修改错误)。
步骤四:匹配(在其他记录中寻找相似的记录,发现重复异常)。
步骤五:消除重复记录(根据匹配结果进行处理,可以删除部分记录或者把多个记录合并为一个更完整信息的记录)。
步骤六:档案化(将结果写入元数据存储中心。这样可以更好地进行后续的清理过程,使得用户容易理解数据库以及更好地进行切片、切块等操作)。

[责任编辑:程永来 cheng_yonglai@cnw.com.cn]