大数据审计(基于Python) 课件 第十二章-审计规则知识库_第1页
大数据审计(基于Python) 课件 第十二章-审计规则知识库_第2页
大数据审计(基于Python) 课件 第十二章-审计规则知识库_第3页
大数据审计(基于Python) 课件 第十二章-审计规则知识库_第4页
大数据审计(基于Python) 课件 第十二章-审计规则知识库_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十二章审计应用:审计规则知识库利用一阶谓词逻辑法表示知识利用一阶谓词逻辑法表示知识1概述和特点2谓词、个体和量词3联结词4谓词公式及示例1概述和特点概述和特点命题谓词刻画个体词的性质个体可以独立存在的事或物原子命题

不包含其他命题作为其组成部分的命题,即在结构上不能再分解出其他命题的命题。又称简单命题。原子命题不能带有非,或,且,如果,那么等联结词。概述和特点自然性确定性易用性可编程性接近于自然语言的形式语言,易于被人理解和接受。适用于精确性知识的表示,不适用于不确定性知识的表示。“非真即假,非假即真”较容易地转换为计算机的内部形式,易于模块化,便于对知识的添加、删除和修改。用谓词逻辑对问题进行表示以后,求解问题就是要以此表示为基础进行相应的推理,便于在计算机上编程实现。2谓词、个体和量词谓词和个体

一般来说,定义谓词的字母或字符串需要与其本身的谓词语义相近,以便于读取和识别。命题的一般形式

量词

量词用于刻画谓词与个体之间的关系

示例

3联结词联结词

用于联结两个谓词公式,组成一个复杂的复合命题的工具。联结词4谓词公式谓词公式定义及规则用谓词联结符号将一些谓词联结起来所形成的公式。也称合式公式。谓词公式

谓词公式有下述演算规则,得到的演算后的公式也称合式公式谓词公式表示知识的步骤(1)定义谓词及个体,确定每个谓词及个体的确切含义。(2)根据所要表达的事物或概念,为每个谓词中的变元赋以特定的值。(3)根据所要表达的知识的语义,用适当的联结符号将各个谓词联结起来。示例1、小明为y公司首席财务官(CFO),他辞职了,则该公司有财务造假嫌疑。2、小红为y公司审计委员会(auditcommittee)成员,她辞职了,则该公司可能进行了财务舞弊。

示例1、小明为y公司首席财务官(CFO),他辞职了,则该公司有财务造假嫌疑。2、小红为y公司审计委员会(auditcommittee)成员,她辞职了,则该公司可能进行了财务舞弊。

示例1、小明为y公司首席财务官(CFO),他辞职了,则该公司有财务造假嫌疑。2、小红为y公司审计委员会(auditcommittee)成员,她辞职了,则该公司可能进行了财务舞弊。

审计规则知识库的设计审计规则知识库的设计1知识库概述2知识库设计1知识库概述知识库概述

知识库的概念来自两个不同的领域,一个是人工智能及其知识工程领域,另一个是传统的数据库领域。知识库是由人工智能和数据库两项计算机相关领域的有机结合。知识库是基于知识且具有智能性的系统(或专家系统)。并不是所有具有智能的程序都拥有知识库,只有基于知识的系统才拥有知识库。

在本节中的知识库是基于审计规则的知识系统。点击添加章节标题为什么需要知识库呢?知识库的功能是什么?·知识库可以使信息有序化。知识库将杂乱无章的知识进行有序化,方便信息和知识的检索,提高知识利用效率。·知识库是可更新和共享的。在知识更新迭代的时候,可以在知识库种存入新知识、摈弃旧知识,实现动态更新,使整个知识体系更加完善。2知识库设计审计规则表概述

此表用于存放完整的审计规则数据。此表分为如下字段:(1)ID此字段为序号字段,设为主键,便于读取数据和应用数据。(2)审计规则此字段存放完整的审计规则。(3)谓词逻辑此字段可存放审计规则的谓词逻辑表达式。新设计规则表概述

此表用于存放审计规则的多种条件和结论。此表分为如下字段:(1)ID此字段为序号字段,设为主键,便于读取数据和应用数据。(2)条件1、2、3、4这是分开的4种字段。这些字段为一条审计规则的多种条件。如果审计规则的条件只有一种则将其存放在条件1,条件2、3、4为空;若有两种条件则将其分别存放在条件1、2,条件3、4为空。以此类推,直至条件被分配完成。(3)结论此字段存放审计规则对应的结论。(4)备注此字段存放相关备注。可对审计规则进行注释,便于阅读。(5)谓词逻辑此字段存放审计规则多种条件合并之后的谓词逻辑表达式。便于数据的清洗、合并。谓词逻辑表概述

此表用于存放最终的审计规则的谓词逻辑表达式。此表分为如下字段:(1)结论此字段用于存放审计规则的结论,设为主键,结论互不相同。(2)谓词逻辑此字段存放最终的审计规则谓词逻辑表达式。审计规则知识库程序示例审计规则知识库程序示例1整体流程2准备工作3程序示例4结果展示1整体流程整体流程规则合并流程图规则生成流程图2准备工作制定谓词逻辑表达式(1)首席财务官辞职:若公司首席财务官(CFO)辞职,则该公司有财务造假嫌疑。(2)审计委员会成员辞职:若公司审计委员会(auditcommittee)成员辞职,则该公

司可能进行了财务舞弊。(3)首席财务官换位:若公司首席财务官(CFO)换位,则该公司有财务造假嫌疑。

制定谓词逻辑表达式

数据库设计(1)设计一张名为“审计规则”的表。“ID”为主键。“审计规则”字段中放入相应的审计规则。“谓词逻辑”字段存放其谓词逻辑表达式。数据库设计(2)设计一张名为“新审计规则”的数据表,其中“ID”字段为主键,“条件1”、“条件2”、“条件3”、“条件4”字段存放一条审计规则的不同条件,“结论”字段存放一条审计规则的结论,“备注”字段存放备注,“谓词逻辑”字段存放该条审计规则的条件谓词逻辑表达式。数据库设计(3)设计一张名为“谓词逻辑”的表。“结论”字段存放规则的结论。“谓词逻辑”字段存放合并后的用谓词逻辑表示的知识。3程序示例连接数据库

选用pymysql库进行python与MySQL数据库的连接。调用pymysql.connect函数与数据库进行连接,注意connect函数有四个重要参数,user(用户名)、passwords(数据库密码)、host(数据库地址)、name(数据库名称)。这里定义了一个connectMysql函数封装了python与数据库连接的操作,需要传入host、user、passwords、name四个参数,使用try、except捕获异常,若无异常返回整个数据库,若有异常则返回失败原因。#连接数据库defconnectMysql(host,user,passwords,name):

globaldatabase

try:

database=pymysql.connect(user=user,password=passwords,host=host,database=name)

print("数据库连接成功!")

returndatabase

exceptpymysql.Errorase:

print("数据库连接失败:"+str(e))更新替换数据表

将“审计规则”表中的规则,按规则的特性分为一个或多个条件与一个结论。首先读取“审计规则”表中的“审计规则”字段。接着,按照“,”或“。”或“则”分为条件与结论。再将分完的结果按照相应的字段名更新到“新审计规则表中”。这里定义了一个update_new_table函数封装此过程,需传入database数据库数据,使用try、except捕获异常操作。#更新数据表defupdate_new_table(database):

globalresult

#读取原始数据表

try:

cursor=database.cursor()

mysqlQuery='SELECT审计规则FROM审计规则;'

cursor.execute(mysqlQuery)

result=cursor.fetchall()

result=np.array(result)

exceptpymysql.Errorase:

print("数据库查询失败:"+str(e))

#存储数据

res,condition,conclusion=[],[],[]

#按”,“分条件和结论

foriinrange(len(result)):

res.append(re.split(r'[,,。则]',result[i][0]))

#储存条件和结果

foriinrange(len(res)):

conclusion.append(res[i][-2])

condition.append(res[i][0:len(res[i])-2])

#插入新数据

try:

cursor=database.cursor()

#mysqlQuery='UPDATE审计规则newSET结论=%sWHEREID=%s;'

mysqlQuery='REPLACEINTO新审计规则(ID,条件1,条件2,条件3,条件4,结论)VALUES(%s,%s,%s,%s,%s,%s);'

foriinrange(len(conclusion)):

iflen(condition[i])==4:

Value=(i,condition[i][0],condition[i][1],condition[i][2],condition[i][3],conclusion[i])

cursor.execute(mysqlQuery,Value)

elif

len(condition[i])==3:

Value=(i,condition[i][0],condition[i][1],condition[i][2],"",conclusion[i])

cursor.execute(mysqlQuery,Value)

elif

len(condition[i])==2:

Value=(i,condition[i][0],condition[i][1],"","",conclusion[i])

cursor.execute(mysqlQuery,Value)

elif

len(condition[i])==1:

Value=(i,condition[i][0],"","","",conclusion[i])

cursor.execute(mysqlQuery,Value)

print("替换成功")

exceptpymysql.Errorase:

print("数据库替换失败:"+str(e))查询数据表

对于数据库的所有操作都是有一个规范的。首先用cursor函数建立一个该数据库的游标cursor,这是所有数据库内操作的开始。再写入MySQL的查询语句(这里建立了一个名为审计规则的数据表),利用execute函数执行MySQL语句,用fetchall函数取出全部内容,返回result。此处将上述操作封装在selectData函数中,需传入数据库形式的参数,若执行出错则返回出错信息。#选择数据defselectData(database):

try:

cursor=database.cursor()

mysqlQuery='SELECT条件1,条件2,条件3,条件4,结论FROM新审计规则;'

cursor.execute(mysqlQuery)

result=cursor.fetchall()

returnnp.array(result)

exceptpymysql.Errorase:

print("数据库查询失败:"+str(e))判断数据是否为正确规则首先定义名为suspected_financialFraud的类,再利用find函数对数据表中的数据进行查找判断。classsuspected_financialFraud:

def__init__(self,db,str,conclusion):

self.str=str

self.db=db

self.conclusion=conclusion#判断结论是否为财务造假

deffind_conclusion(self):

ifself.conclusion.find("财务造假")!=-1orself.conclusion.find("造假")!=-1orself.conclusion.find("造假嫌疑")!=-1orself.conclusion.find("财务舞弊")!=-1:

return"->suspected_financialFraud(y)"

else:

return"NONE"

#判断是否为辞职

defis_resignation(self):

ifself.str.find("辞职")!=-1orself.str.find("离职")!=-1:

returnTrue

else:

returnFalse

#判断是否为CFO

defis_CFO(self):

ifself.str.find("CFO")!=-1:

returnTrue

else:

returnFalse

#判断是否为审计委员会成员

defis_AC(self):

ifself.str.find("审计委员会")!=-1:

returnTrue

else:

returnFalse判断数据是否为正确规则在find_condition函数中进行条件的判断整合,返回对应规则的谓词逻辑表达式。#添加判断条件

deffind_condition(self):

ifself.is_resignation()andself.is_CFO():

return"resignation(CFO(x,y))"

elif

self.is_resignation()andself.is_AC():

return"resignation(AC(x,y))"

elif

self.str.find("更换")!=-1andself.is_CFO():

return"replace(CFO(x,y))"

else:

return"NONE"更新、清洗合并规则

首先需要将判断后的返回值传入数据表中,更新数据表中的数据。这里用一个updateData的函数封装更新数据表的操作,需传入参数database(数据库)、predicate(对应条件)、id(序号)。利用MySQL中update语句更新表中相对应的数据。这里是更新“审计规则”这个数据表中“谓词逻辑”字段下的值。这里的MySQL语句需要传入两个值predicate和id,分别表示对应的判断结果和其id值。创建一个Value将这两个值写入MySQL语句中,再用execute函数执行MySQL语句,用commit函数更新数据表。利用try、except语句,若出错则进行rollback回滚操作和返回出错原因。#更新新审计规则表中的谓词逻辑defupdateData(database,predicate,id):

try:

curses=database.cursor()

mysqlQuery='UPDATE新审计规则SET谓词逻辑=%sWHEREID=%s;'

Value=(predicate,id)

curses.execute(mysqlQuery,Value)

mit()

print("数据库更新成功!")

exceptpymysql.Errorase:

print("数据库更新失败:"+str(e))

database.rollback()更新、清洗合并规则其次进行去重查询操作。可以用一条select

distinct语句查询“谓词逻辑”字段中不重复的数据。#

去重查询defselect_distinctData(database):

try:

cursor=database.cursor()

mysqlQuery='SELECTDISTINCT谓词逻辑FROM新审计规则WHERE谓词逻辑!="";'

cursor.execute(mysqlQuery)

result=cursor.fetchall()

print("数据库去重查询成功!")

returnresult

exceptpymysql.Errorase:

print("数据库去重查询失败:"+str(e))更新、清洗合并规则

接着进行数据的合并更新操作,将去重的结果用for循环语句在其末尾添加“∨”使其成为一个完整的谓词逻辑表达式,并更新另外一张“谓词逻辑”表中的数据。更新时需传入需要更新的谓词逻辑表达式的结论名称predicate和结论conclusion。#更新谓词逻辑结果表defupdatePredicatedata(database,predicate,conclusion):

try:

curses=database.cursor()

mysqlQuery='UPDATE谓词逻辑SET谓词逻辑=%sWHERE结论=%s;'

Value=(predicate,conclusion)

curses.execute(mysqlQuery,Value)

mit()

print("数据库谓词逻辑表更新成功!")

exceptpymysql.Errorase:

print("数据库谓词逻辑表更新失败:"+str(e))

database.rollback()更新、清洗合并规则

最后将上述函数整合为在suspected_financialFraud类里的updateDatabase函数。遍历每一条记录,判断值是否为所需的规则,进行数据库的更新和合并操作。#更新数据库

defupd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论