張紫云
公誠(chéng)管理咨詢(xún)有限公司 湖北 武漢 430040
在財(cái)務(wù)數(shù)據(jù)的數(shù)據(jù)分析中,異常數(shù)據(jù)可來(lái)源于兩個(gè)方面,一方面是通過(guò)網(wǎng)絡(luò)爬取技術(shù)從互聯(lián)網(wǎng)上獲取的財(cái)務(wù)數(shù)據(jù),異常數(shù)據(jù)會(huì)產(chǎn)生于數(shù)據(jù)預(yù)處理和數(shù)據(jù)清洗過(guò)程中的錯(cuò)誤操作;另一方面是來(lái)源于本地的財(cái)務(wù)數(shù)據(jù)庫(kù)中的財(cái)務(wù)數(shù)據(jù),異常數(shù)據(jù)可能源于一些財(cái)務(wù)造假,如編寫(xiě)虛假利潤(rùn)、虛構(gòu)交易等。對(duì)這些產(chǎn)生于客觀和主觀兩方面異常數(shù)據(jù)的檢測(cè)是財(cái)務(wù)審計(jì)工作的重要組成部分。
財(cái)務(wù)數(shù)據(jù)由數(shù)據(jù)對(duì)象構(gòu)成,每個(gè)數(shù)據(jù)對(duì)象表示一個(gè)實(shí)體,財(cái)務(wù)審計(jì)中的異常檢測(cè),實(shí)質(zhì)是尋找觀測(cè)值和參考值之間的偏差,如果把顯著偏高一般水平的觀測(cè)數(shù)據(jù)當(dāng)作離群點(diǎn),那么尋找財(cái)務(wù)異常數(shù)據(jù)的過(guò)程就是離群點(diǎn)的檢測(cè)過(guò)程。
傳統(tǒng)統(tǒng)計(jì)學(xué)提供的描述性統(tǒng)計(jì)方法是檢測(cè)這些離群點(diǎn)的基本方法,但是在大數(shù)據(jù)環(huán)境下,數(shù)據(jù)的體量和維度在不斷增加,數(shù)據(jù)間的關(guān)系也日趨復(fù)雜,因此,借助大數(shù)據(jù)分析工具,采用數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)的方法來(lái)檢測(cè)財(cái)務(wù)異常數(shù)據(jù)就顯得十分必要,本文設(shè)計(jì)了一個(gè)基于Python計(jì)算生態(tài)的挖掘財(cái)務(wù)數(shù)據(jù)的原型系統(tǒng),其技術(shù)構(gòu)架為Python提供的開(kāi)源工具包:numpy、pandas、matplotlib、scikit-learn,檢測(cè)方法可根據(jù)不同財(cái)務(wù)數(shù)據(jù)的特點(diǎn)和企業(yè)自身的實(shí)際需求,選取不同的方法,如基于高斯模型的檢測(cè)方法、本福特法則、回歸模型檢測(cè)法、KNN算法等[1]。該框架系統(tǒng)可作為中小企業(yè)、事務(wù)所的常規(guī)分析性審計(jì)的輔助工具。
基于統(tǒng)計(jì)學(xué)的離群點(diǎn)檢測(cè)方法中假設(shè)數(shù)據(jù)集中的正常數(shù)據(jù)對(duì)象由一個(gè)統(tǒng)計(jì)模型產(chǎn)生,如果某數(shù)據(jù)不符合該統(tǒng)計(jì)模型,則該數(shù)據(jù)對(duì)象是離群點(diǎn),在基于統(tǒng)計(jì)學(xué)的離群點(diǎn)檢測(cè)過(guò)程中一般先設(shè)定數(shù)據(jù)集的分布模型如正態(tài)分布,波松分布和二項(xiàng)式分布等,然后根據(jù)模型進(jìn)行不和諧檢測(cè)。
不和諧檢測(cè)通常會(huì)使用數(shù)據(jù)統(tǒng)計(jì)性描述方法,數(shù)據(jù)的描述性統(tǒng)計(jì)中數(shù)據(jù)的集中趨勢(shì)度量和散布度量是鑒別異常數(shù)據(jù)的重要指標(biāo)。
中心趨勢(shì)在統(tǒng)計(jì)學(xué)中是指一組數(shù)據(jù)向某一中心值靠攏的程度,它反映了一組數(shù)據(jù)中心點(diǎn)的位置所在。中心區(qū)度量就是尋找數(shù)據(jù)水平的代表值或中心值,常用的中心趨勢(shì)度量包括均值、中位、眾數(shù)和中列數(shù)等[2]。
①均值:數(shù)據(jù)集“中心”的最常用的數(shù)值度量是(算術(shù))均值(Mean)。②中位數(shù):中位數(shù)(Median)又稱(chēng)為中點(diǎn)數(shù)或中值。中位數(shù)是按順序排列的一組數(shù)據(jù)中居于中間位置的數(shù),即在這組數(shù)據(jù)中,有一半的數(shù)據(jù)比它大,另一半的數(shù)據(jù)比它小。③眾數(shù):眾數(shù)(Mode)是一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的數(shù)值,可以對(duì)定性和定量型屬性確定眾數(shù)。④中列數(shù):中列數(shù)(Midrange)是數(shù)據(jù)集中的最大值和最小值的均值,也可以度量數(shù)值數(shù)據(jù)的中心趨勢(shì)。
數(shù)據(jù)散布度量用于評(píng)估數(shù)值數(shù)據(jù)散布或發(fā)散的程度。散布度量的測(cè)定是對(duì)統(tǒng)計(jì)資料分散狀況的測(cè)定,即找出各個(gè)變量值與集中趨勢(shì)的偏離程度。通過(guò)度量散布趨勢(shì),可以清楚地了解一組變量值的分布情況。離散統(tǒng)計(jì)量越大,表示變量值與集中統(tǒng)計(jì)量的偏差越大,這組變量就越分散[3]。這時(shí),如果用集中量數(shù)去做估計(jì),所出現(xiàn)的誤差就較大。因此,散布趨勢(shì)可以看作是中心趨勢(shì)的補(bǔ)充說(shuō)明。數(shù)據(jù)散布度量包括極差、分位數(shù)、四分位數(shù)、百分位數(shù)和四分位數(shù)極差。方差和標(biāo)準(zhǔn)差也可以描述數(shù)據(jù)分布的散布。
①極差:極差(Range)又稱(chēng)為范圍誤差或全距,是一組觀測(cè)值的最大值與最小值之間的差距。極差是標(biāo)志值變動(dòng)的最大范圍,它是測(cè)定標(biāo)志變動(dòng)的最簡(jiǎn)單的指標(biāo)。②分位數(shù):又稱(chēng)為分位點(diǎn),是指將一個(gè)隨機(jī)變量的概率分布范圍分為幾個(gè)等份的數(shù)值點(diǎn),常用的有中位數(shù)(即二分位數(shù))、四分位數(shù)和百分位數(shù)等。
第一四分位數(shù)和第三四分位數(shù)之間的距離是散布的一種簡(jiǎn)單度量,它給出被數(shù)據(jù)的中間一半所覆蓋的范圍。該距離稱(chēng)為四分位數(shù)極差(IQR)。
箱線圖使用數(shù)據(jù)中的5個(gè)統(tǒng)計(jì)量,最小值、第一四分位數(shù)Q1,中位數(shù)Q2、第三四分位數(shù)Q3和最大值來(lái)描述數(shù)據(jù)。箱線圖可以粗略地看出數(shù)據(jù)是否具有對(duì)稱(chēng)性,分布的分散程度等信息,利用箱線圖可進(jìn)行異常檢測(cè),在檢測(cè)過(guò)程中,可根據(jù)經(jīng)驗(yàn),將最小值(大)值設(shè)置為與四分位數(shù)值間距為1.5IQR(IQR=Q3-Q2)的值,即:min=Q1-1.5IQR,max=Q3+1.5IQR。
小于min和max的值被認(rèn)為是異常值,圖1是一個(gè)箱線圖檢測(cè)異常值的實(shí)例。

圖1 箱線圖檢測(cè)異常值實(shí)例
如果數(shù)據(jù)服從在高斯(正態(tài))分布,如果數(shù)據(jù)分布在三倍標(biāo)準(zhǔn)差準(zhǔn)則之外的數(shù)據(jù)可視為異常數(shù)據(jù),在高斯模型中設(shè)σ代表標(biāo)準(zhǔn)差,μ代表均值,數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6826;數(shù)值分布在(μ-2σ,μ+2σ)中的概率為0.9544,數(shù)值分布在(μ-3σ,μ+3σ)中的概率為0.9974;一般情況下可以認(rèn)為,數(shù)據(jù)的取值幾乎全部集中在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個(gè)范圍的可能性?xún)H占不到0.3%,如圖2所示。因此可認(rèn)為如果數(shù)據(jù)服從高斯分布,離群點(diǎn)超過(guò)3倍的標(biāo)準(zhǔn)差,可視為異常。

圖2 高斯模型的數(shù)據(jù)分布
本福特法則的研究對(duì)象是大量數(shù)字中首位數(shù)字出現(xiàn)的概率,該法則認(rèn)為在1-9這9個(gè)阿拉伯?dāng)?shù)字中數(shù)字i出現(xiàn)在首位的概率滿(mǎn)足以下公式:

表1表示了9個(gè)數(shù)字首位分布概率:

表1 9個(gè)數(shù)字首位分布概率
圖3顯示了采用本福特法則驗(yàn)證某上市公司財(cái)務(wù)數(shù)據(jù)的結(jié) 果,可以看出理論值與實(shí)際值擬合度較高。

圖3 本福特法則檢驗(yàn)異常數(shù)據(jù)的實(shí)例
本福特法則說(shuō)明,較小的數(shù)字比大的數(shù)字出現(xiàn)的概率更高,本福特法則可以作為發(fā)現(xiàn)是否有財(cái)務(wù)造假的一種手段。在做實(shí)質(zhì)性科目底稿時(shí),可以對(duì)銀行流水、應(yīng)收賬款、主營(yíng)業(yè)務(wù)收入等科目進(jìn)行檢查,看是否和本福特法則的概率分布有偏差,從而識(shí)別舞弊風(fēng)險(xiǎn)。
但本福特法則有其適用范圍,表2總結(jié)了其適用范圍。

表2 本福特法則的適用范圍
以上幾種檢測(cè)方法僅針對(duì)單一數(shù)據(jù),沒(méi)有考慮數(shù)據(jù)間的關(guān)系,也沒(méi)有考慮高維數(shù)據(jù)的異常檢測(cè),數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)檢測(cè)方法可以在某種程度上彌補(bǔ)以上方法的不足,在具體算法上可采用回歸、聚類(lèi)、決策樹(shù)等。以回歸分析為例,回歸分析研究的是數(shù)據(jù)(變量)間的關(guān)系,回歸分析也可用于數(shù)據(jù)異常數(shù)據(jù)的檢測(cè),步驟如下:①利用正常數(shù)據(jù)集建立回歸模型,確定異常閾值;②輸入待檢測(cè)數(shù)據(jù);③超出異常閾值則可視為異常值。
科學(xué)計(jì)算和數(shù)據(jù)處理分析是Python的優(yōu)勢(shì)方向,Python計(jì)算生態(tài)中的擴(kuò)展模塊numpy提供了高效的數(shù)值處理功能,numpy是Python的數(shù)字計(jì)算擴(kuò)展,其內(nèi)部使用C語(yǔ)言編寫(xiě),對(duì)外采用Python語(yǔ)言進(jìn)行封裝,因此基于numpy的Python程序可以達(dá)到接近C語(yǔ)言的處理速度,numpy是其他Python數(shù)據(jù)分析庫(kù)的基礎(chǔ)依賴(lài)庫(kù),已經(jīng)成為科學(xué)計(jì)算事實(shí)上的標(biāo)準(zhǔn)庫(kù),許多科學(xué)計(jì)算庫(kù)均基于numpy庫(kù)。
pandas是基于numpy的用于數(shù)據(jù)分析和處理的第三方庫(kù),提供了標(biāo)準(zhǔn)的數(shù)據(jù)模型和大量便捷處理數(shù)據(jù)的函數(shù)和方法,可以實(shí)現(xiàn)大型數(shù)據(jù)集的處理和分析任務(wù),pandas提供的基本的數(shù)據(jù)類(lèi)型Series、DataFrame和Panel以處理一維數(shù)組、二維數(shù)組和三維數(shù)據(jù)。
pandas中常用的描述性統(tǒng)計(jì)方法如表3所示:

表3 pandas中常用的描述性統(tǒng)計(jì)方法
以其中Describe方法為例,Describe方法可對(duì)每個(gè)數(shù)值型的列進(jìn)行統(tǒng)計(jì),通??捎糜跀?shù)據(jù)的初步觀察時(shí)使用。
Matplotlib是Python基于numpy的繪圖工具包,為數(shù)據(jù)分析提供了可視化環(huán)境。Scikit_learn是面向機(jī)器學(xué)習(xí)開(kāi)源框架,其中的回歸、聚類(lèi)、數(shù)據(jù)降維等功能也可用于數(shù)據(jù)異常檢測(cè),圖4顯示的是采用線性回歸算法檢測(cè)異常數(shù)據(jù)的實(shí)例。

圖4 線性回歸算法檢測(cè)異常數(shù)據(jù)
對(duì)于存放在數(shù)據(jù)庫(kù)中的財(cái)務(wù)數(shù)據(jù),Python提供的專(zhuān)用的數(shù)據(jù)庫(kù)訪問(wèn)模塊,表4是Python對(duì)一些常用的數(shù)據(jù)庫(kù)所提供的專(zhuān)用的數(shù)據(jù)庫(kù)訪問(wèn)模塊:

表4 Python提供的數(shù)據(jù)庫(kù)模塊
在以上理論基礎(chǔ)和技術(shù)平臺(tái)基礎(chǔ)上,圖5給出了一個(gè)基于Python計(jì)算生態(tài)挖掘財(cái)務(wù)異常數(shù)據(jù)的邏輯構(gòu)架。

圖5 基于Python計(jì)算生態(tài)挖掘財(cái)務(wù)異常數(shù)據(jù)的邏輯構(gòu)架
該構(gòu)架包括數(shù)據(jù)預(yù)處理層、數(shù)據(jù)分析層、風(fēng)險(xiǎn)預(yù)警3層結(jié)構(gòu)。數(shù)據(jù)的來(lái)源可以是本地的財(cái)務(wù)數(shù)據(jù)庫(kù),也可以是上市公司提供的標(biāo)準(zhǔn)財(cái)務(wù)數(shù)據(jù)[4]。在數(shù)據(jù)分析層,根據(jù)不同財(cái)務(wù)數(shù)據(jù)的特征和實(shí)際需求,選取不同的檢測(cè)方法,不同方法的風(fēng)險(xiǎn)值得分計(jì)算出財(cái)務(wù)異常檢測(cè)的綜合得分,最后根據(jù)財(cái)務(wù)數(shù)據(jù)的異常綜合評(píng)分給出風(fēng)險(xiǎn)預(yù)警信息。
以上原型框架建立在Python計(jì)算生態(tài)環(huán)境基礎(chǔ)上,既可以作為其他電子審計(jì)應(yīng)用系統(tǒng)的輔助方法也可獨(dú)立使用,Python工具包提供了傳統(tǒng)統(tǒng)計(jì)學(xué)方法、數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)算法,其中每一種方法都有其局限性,如本福特法則不適合預(yù)設(shè)有數(shù)據(jù)范圍、受人為控制的數(shù)據(jù),而對(duì)于數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)算法,前期數(shù)據(jù)預(yù)處理時(shí)間開(kāi)銷(xiāo)大,面對(duì)高維、大規(guī)模數(shù)據(jù)集時(shí),其計(jì)算量及其時(shí)間效率方面常無(wú)法令人滿(mǎn)意,對(duì)于財(cái)務(wù)審計(jì)來(lái)說(shuō)需要權(quán)衡時(shí)間與審計(jì)結(jié)果的成本,靈活選擇。