浅谈计算机审计中电子数据的清洗
随着信息技术的发展和普及,审计工作已经离不开计算机审计。电子数据审计作为计算机审计的一个重要组成部分,其有关理论、技术、方法得到了广泛地研究、推广和应用,在审计实务中发挥了越来越重要的作用。
众所周知,电子数据审计的基本步骤包括数据提取、数据清洗、数据转换、数据分析等四个基本步骤。其中数据清洗是转换和分析的基础,一定程度上决定着计算机审计的最终质量,数据清洗在电子数据采集中具有重要作用。因此,本文在阐述了数据清洗原理的基础上,提出电子数据采集中常见问题的数据清洗方法。
一、数据清洗原理
数据清洗(data cleaning),简单地讲,就是从数据源中清除错误和不一致,即利用有关技术如数理统计、数据挖掘或预定义的清洗规则等,从数据中检测和消除错误数据、不完整数据和重复数据等,从而提高数据的质量。业务知识与清洗规则的制定在相当程度上取决于审计人员的经验积累与综合判断能力。因此,审计人员应按以下标准评价审计数据的质量。
(一)准确性:数据值与假定正确的值的一致程度。
(二)完整性:需要值的属性中无值缺失的程度。
(三)一致性:数据对一组约束的满足程度。
(四)惟一性:数据记录(及码值)的惟一性。
(五)效性:维护的数据足够严格以满足分类准则的接受要求。
二、数据清洗的必要性
从被审计单位采集到的审计数据千差万别,为了能更好的服务于审计分析和审计查证的需要,必须对采集的电子数据进行全面的清洗。
(一)被审计单位信息系统的多样性带来了数据不一致性。开展计算机审计必然面临各式各样的迥然相异的被审计单位信息系统。被审计单位信息系统的差异,必然给审计工作带来数据的不一致性问题。主要有以下表现形式:
1.同一字段在不同的应用中具有不同的数据类型。如字段“借贷方标志”在A应用中的类型为“字符型”,取值为“Credit/Debit”,在B应用中的类型为“数值型”,取值为“0/1”,在C应用中类型又为“布尔型”,取值为“True/False”。
2.同一字段在不同的应用中具有不同的名字。如A应用中的字段“Balance”在B应用中名称称为“Bal”,在C应用中又变成了“Currbal”。
3.同名字段,不同含义。如字段“月折旧额”在A应用中表示用直线折旧法提取的月折旧额,在B应用中表示用加速折旧法提取的月折旧额,等等。
4.同一信息,在不同的应用中有不同的格式。如字段“日期”在A应用中的格式为“YYYY-MM—DD”,在B应用中格式为“MM/DD/YY”,在C应用中格式为“DDMMYY”。
5.同一信息,在不同的应用中有不同的表达方式。如对于借贷方发生额的记录,在A应用中设计为 “借方发生额”与“贷方发生额” 两个字段,在B应用中设计为 “借贷方标志”与“借贷方发生额”两个字段。 对于这些不一致的数据,必须进行转换后才能供审计软件分析之用。数据的不一致性是多种多样的,对每种情况都必须专门处理。
(二)被审计系统的安全性措施给审计工作带来障碍。基于安全性考虑,被审计单位的系统一般都采取一定的加密措施,有系统级的加密措施和数据级的加密措施。特别对具有一定含义的数据库的表与字段的名称,一般都要进行映射或转换。例如,将表命名为T1,T2…; 将字段命名为F1,F2 …。对于这样的数据,不进行含义的对照与清洗就不明白表或字段的经济含义,审计人员是无法处理的,各种各样的加密措施不胜枚举,这些都给计算机审计带来了障碍,也给数据清洗带来挑战。
(三)审计目的的不同决定了审计数据的范围和要求不同。被审计单位的信息系统规模不一,数据量相差悬殊。审计人员不可能也没有必要将被审计单位的所有数据都采集过来。审计工作有自己的目的和要求,需要处理的往往是某一时段或某一方面发生的数据。这样就要求审计人员选取一定范围的、满足一定要求的审计数据。例如,在关税审计业务中,关心的只是与税收征管有关的报关单、加工贸易、减免税、货运舱单、税单等相关数据库的数据,而对于操作员授权管理等系统控制数据库,在不对系统进行评价时,可以不采集。同时,审计目的不同,对原始数据的要求也不同。在对银行贷款利率执行情况检查时,需要带有计息标志和利率信息的每一笔贷款的明细数据,如果这样的信息分布在被审计系统的若干张表中,换句话说,如果被审计单位不能提供完全满足审计要求的数据,就有必要对采集到的数据进行清洗转换。
(四)数据清洗是数据分析、处理的前提。计算机软件设计一般都是基于一定的数据结构,专用的审计软件更是如此。在输入数据不满足软件处理的需求时,必须对它进行清洗,对于一些通用的审计软件,对输入数据的适应性相对强一些,但这并不意味着它可以处理不经清洗的任意数据,审计软件中有很多特定的分析方法和专用工具,这些方法和专用工具往往要求一定的数据结构。例如,在计算机固定资产折旧时,就需要用到“资产原值”、“月折旧率”、“入账日期”等信息,如果这些信息不能完全满足,就无法计算。
三、数据清洗的主要步骤
(一)定义和确定错误的类型。
1.数据分析。数据分析是数据清洗的前提与基础,通过详尽的数据分析来检测数据中的错误或不一致情况,除了手动检查数据或者数据样本之外,还可以使用分析程序来获得关于数据属性的元数据,从而发现数据集中存在的质量问题。
2.定义清洗转换规则。根据上一步进行数据分析得到的结果来定义清洗转换规则与工作流。根据数据源的个数,数据源中不一致数据和“脏数据”多少的程度,需要执行大量的数据转换和清洗步骤。要尽可能的为模式相关的数据清洗和转换指定一种查询和匹配语言,从而使转换代码的自动生成变成可能。
(二)搜寻并识别错误的实例。
1.自动检测属性错误。检测数据集中的属性错误,需要花费大量的人力、物力和时间,而且这个过程本身很容易出错,所以需要利用高的方法自动检测数据集中的属性错误,方法主要有:基于统计的方法、聚类方法、关联规则的方法。
2.检测重复记录的算法。消除重复记录可以针对两个数据集或者一个合并后的数据集,首先需要检测出标识同一个现实实体的重复记录,即匹配过程。检测重复记录的算法主要有:基本的字段匹配算法,递归的字段匹配算法,Smith—Waterman算法,Cosine相似度函数。
(三)纠正所发现的错误。在数据源上执行预先定义好的并且已经得到验证的清洗转换规则和工作流。当直接在源数据上进行清洗时,需要备份源数据,以防需要撤销上一次或几次的清洗操作。清洗时根据“脏数据”存在形式的不同,执行一系列的转换步骤来解决模式层和实例层的数据质量问题。为处理单数据源问题并且为其与其他数据源的合并做好准备,一般在各个数据源上应该分别进行几种类型的转换,主要包括:
1.从自由格式的属性字段中抽取值(属性分离)。自由格式的属性一般包含着很多的信息,而这些信息有时候需要细化成多个属性,从而进一步支持后面重复记录的清洗。
2. 确认和改正。这一步骤处理输入和拼写错误,并尽可能地使其自动化。基于字典查询的拼写检查对于发现拼写错误是很有用的。
3. 标准化。为了使记录实例匹配和合并变得更方便,应该把属性值转换成一个一致和统一的格式。
(四)数据回流。当数据被清洗后,干净的数据应该替换数据源中原来的“脏数据”。这样可以提高原系统的数据质量,还可避免将来再次抽取数据后进行重复的清洗工作。
四、数据清洗的主要方法
(一)空缺值的清洗。
对于空缺值的清洗可以采取忽略元组,人工填写空缺值,使用一个全局变量填充空缺值,使用属性的平均值、中问值、最大值、最小值或更为复杂的概率统计函数值来填充空缺值。
(二)噪声数据的清洗。
分箱(Binning),通过考察属性值的周围值来平滑属性的值。属性值被分布到一些等深或等宽的“箱”中,用箱中属性值的平均值或中值来替换“箱”中的属性值;计算机和人工检查相结合,计算机检测可疑数据,然后对它们进行人工判断;使用简单规则库检测和修正错误;使用不同属性间的约束检测和修正错误;使用外部数据源检测和修正错误。
(三)不一致数据的清洗。
对于有些事务,所记录的数据可能存在不一致。有些数据不一致,可以使用其他材料人工加以更正。例如,数据输入时的错误可以使用纸上的记录加以更正。知识工程工具也可以用来检测违反限制的数据。例如,知道属性间的函数依赖,可以查找违反函数依赖的值。此外,数据集成也可能产生数据不一致。
(四)重复数据的清洗。
目前消除重复记录的基本思想是“排序和合并”,先将数据库中的记录排序,然后通过比较邻近记录是否相似来检测记录是否重复。消除重复记录的算法主要有:优先队列算法,近邻排序算法(Sorted—Neighborhood Method),多趟近邻排序(Multi—Pass Sorted—Neighborhood)。