知道吗?在实际生活工作中,自然数1~9的出现概率并不是相同,除数字1始终占据约三分之一的出现频率外,数字2的出现频率为17.6%,3出现的频率为12.5%,依次递减,9的出现频率是4.6%。1938年,物理学家法兰克·本福特发现了这一现象,并通过数据验证了它。Benford法则,即F(d) = log[1 + (1/d)],此公式中F代表频率,D代表待求证数字。利用Benford法则进行审计分析对于数量多、个体数值较为平均的审计数据样本,是一个较好的补充。
近期常州市审计局在实施的审计项目中通过ASL语言和自动审计模块,将Benford法则分析功能集成至AO现场审计实施系统,以人机交互和图表展现的方式简化Benford法则分析功能的实现,降低审计人员实施Benford法则分析的门槛,使得审计人员能更直观、便捷、高效地进行该项审计活动。
Benford法则应用于审计疑点发现的现实意义
传统的审计分析方法在使用中过滤了大量的详细交易信息,而这些信息常常隐含了舞弊活动。Benford法则是数据式审计模式下,基于详细交易数据的分析性复核方法,这种方法通过分析数据的统计规律发现异常,从而定位异常,以便后续审计查证工作。Benford法则对审计人员的审计专业经验和专业判断依赖程度不高,非常适合普通审计人员使用。运用Benford法则进行分析和检测,可以提高审计数据的质量,使有效审查数据量大大缩小,提高审计工作效率,在一定程度上降低审计风险。
数据准备
以“某事业单位财务帐套凭证表(base)”为例,对表中“借”字段进行分析。需事先准备“标准概率表(sheet)”作为Benford法则分析过程的参照标准。“标准概率表(sheet)”是根据美国国家标准和技术学院(NIST)给出的Benford法则定义“对于许多种类的统计数据,其首位数字是数字d的概率为lg(1+1/d),d=(1,2,3,..9)”,事先计算出的1至9999在自然界中的数字分布频率,其中(a)字段是1至9999的数值,(b)字段是数值对应的分布频率。
实施步骤
(一)对被审计数据进行分析,初步判断该数据是否符合Benford法则的分析条件,选择待分析的目标字段。
(二)编写审计方法,对被审计数据进行整理,形成审计分析中间表。该步骤,需对本方法涉及的测试数据“某事业单位财务帐套凭证表(base)”的“借”字段去0,去NULL值,为便于后续步骤取数值位,将“借”字段所有财务发生额数据乘以100,去除小数点。本步骤涉及的ASL语句如下:
var
sqlt;
begin
ExecuteUpdate( 'ALTER TABLE base add COLUMN Id COUNTER (1, 1)' );
executeupdate('alter table base alter column id integer');
createtemptable( 'tmp', 'SELECT base.ID, abs(base.借)*100 AS j FROM base WHERE ((Not (base.借) Is Null And (base.借)<>0))' );
createtemptable('yd','select top 1 * from tmp');
createtemptable('blt','select top 1 id as num,j as bl from tmp');
executeupdate('alter table blt add column bz double');
executeupdate('alter table blt add column bfb double');
end.
(三)对测试数据进行首位有效数字Benford法则的符合性测试,根据输出柱状图,初步发现测试线索和重点,并可根据需要,将计算比率与标准比率的差异率输出至“未落实疑点”。该步骤具体操作和示例如下:
①执行方法后,弹出输入框,如下图所示,第一阶段先对首位数值1~9进行符合性测试,这边输入占位符“_”。
②输入“_”后,点击“确定”后,输出首位数值1~9的计算概率与标准概率对比柱状图,如下图所示,通过观察,可以看出首位数字为“1、5、7”的数据与标准标准概率差异较大。同时,审计人员也可根据自身习惯,将图表显示类型调整为:线性图、饼图和散列图。
③关闭柱状图显示后,弹出输入框,如下图,审计人员根据实际情况,选择是否输出1~9的计算概率与标准概率的差异率表至“未落实疑点”。
④本例,输入“_”占位符后,点击“确定”后,输出首位数值1~9的计算概率与标准概率的差异率表至“未落实疑点”。
(四)重复(三)步骤,对上一步骤了解的测试重点和线索,通过输入不同参数进行进一步挖掘。如上一步骤发现首位数字为“1、5、7”的数据与标准标准概率差异较大。以重点测试以5为首的头两位数字为例,输入参数为“5_”可以输出首两位数值50~59的数据的计算概率与标准概率对比柱状图。
需要介绍的是,本步骤在对发现的线索输出计算比率与标准比率的差异率外,还同时输出疑点记录至“未落实疑点”。
(五)在(四)步骤的基础上,重复执行,对上一步骤了解的测试重点和线索,通过输入上不同参数进行进一步挖掘。本方法设计可分析之自左向右4位数字的数据。根据直观判断或差异率的精确判断,输出疑点记录至“未落实疑点”。
(三)至(五)步骤涉及的ASL语言如下:
var
num,bl,sqlt,sqlnum,eofnum;
begin
executeupdate('delete from blt');
executeupdate('delete from yd');
num:=newread('输入疑点数字,用符号“_”占位,例 _,2_,4__');
sqlt:=-1;
sqlnum:=-1;
bl:=0; sqlnum:=createq('select cstr(a) as a1 from sheet where a like "'+num+'"',sqlnum); eofnum:=qeof(sqlnum);
while eofnum<>1 do
begin
num:=qfdvalue(sqlnum,'a1')+'%';
sqlt:=createq('select cstr((select count(1) from tmp where j like "'+num+'")/count(1)) as bl from tmp',sqlt);
ExecuteUpdate('insert into blt (num,bl) values('+qfdvalue(sqlnum,'a1')+','+qfdvalue(sqlt,'bl')+')');
eofnum:=qmov(sqlnum,1); eofnum:=qeof(sqlnum);
end;
executeupdate('update blt inner join sheet on blt.num=sheet.a set blt.bz=sheet.b');
executeupdate('update blt set bfb=abs(bl-bz)');
sqlt:=createq('SELECT num, bl, bz FROM blt',sqlt);
oputchart(sqlt,'num','bl,clred;bz,clgreen');
sqlt:=createq('select num as 数字,bl as 计算概率,bz as 标准概率,bfb as 差异率 from blt order by bfb desc',sqlt); eofnum:=qeof(sqlt);
while eofnum<>1 do
begin
addtransrslt(sqlt,'比例记录');
eofnum:=qmov(sqlt,1); eofnum:=qeof(sqlt);
end;
transbatch(sqlt,'比例');
num:=newread('输入需要放到疑点库中的开头数字,不需要则输入0');
if num>0 then
begin
ExecuteUpdate('insert into yd select * from tmp where j like "'+num+'%"');
sqlt:=createq('SELECT 年,月,日,摘要,凭证号,借 FROM base INNER JOIN yd ON base.Id = yd.ID',sqlt);
eofnum:=qeof(sqlt);
while eofnum<>1 do
begin
addtransrslt(sqlt,'疑点记录');
eofnum:=qmov(sqlt,1); eofnum:=qeof(sqlt);
end;
TransBatch(sqlt,'疑点');
end;
end.
(六)对输出至“未落实疑点”的数据进行分析。在必要的情况下对照原始凭证,分析出现的异常情况,落实发现的问题。
延伸建议
本文介绍的技术方法适用于符合Benford法则的适用条件的一切财务数据和业务数据。此外,利用Benford法则对电子数据进行分析和检测后,被检测出来的异常数据是否真正存在问题,还需要根据审阅法、复算法、函证法等审计常规技术进一步确认。
最后,Benford法则不是一个万用的检测器,不能够期待一种方法能够解决所有问题。但是,这种方法和许多已有的审计方法一样,如果应用得当,能够在提高审计效率的同时很好地控制审计数据质量,降低审计风险。
周建东(江苏省常州市审计局)
BEGIN FOR t IN (SELECT table_n…
SELECT table_name, to_number(e…
第一步.安装Oracle可以前往本站数据审计工具板块下载。第
1. 创建数据库在Oracle中,通常不直接创建整个数据库,
B/S开发框架 中MySQL和SQL Server从语法和语…