張紫云
公誠管理咨詢有限公司 湖北 武漢 430040
在財務(wù)數(shù)據(jù)的數(shù)據(jù)分析中,異常數(shù)據(jù)可來源于兩個方面,一方面是通過網(wǎng)絡(luò)爬取技術(shù)從互聯(lián)網(wǎng)上獲取的財務(wù)數(shù)據(jù),異常數(shù)據(jù)會產(chǎn)生于數(shù)據(jù)預(yù)處理和數(shù)據(jù)清洗過程中的錯誤操作;另一方面是來源于本地的財務(wù)數(shù)據(jù)庫中的財務(wù)數(shù)據(jù),異常數(shù)據(jù)可能源于一些財務(wù)造假,如編寫虛假利潤、虛構(gòu)交易等。對這些產(chǎn)生于客觀和主觀兩方面異常數(shù)據(jù)的檢測是財務(wù)審計工作的重要組成部分。
財務(wù)數(shù)據(jù)由數(shù)據(jù)對象構(gòu)成,每個數(shù)據(jù)對象表示一個實體,財務(wù)審計中的異常檢測,實質(zhì)是尋找觀測值和參考值之間的偏差,如果把顯著偏高一般水平的觀測數(shù)據(jù)當作離群點,那么尋找財務(wù)異常數(shù)據(jù)的過程就是離群點的檢測過程。
傳統(tǒng)統(tǒng)計學提供的描述性統(tǒng)計方法是檢測這些離群點的基本方法,但是在大數(shù)據(jù)環(huán)境下,數(shù)據(jù)的體量和維度在不斷增加,數(shù)據(jù)間的關(guān)系也日趨復(fù)雜,因此,借助大數(shù)據(jù)分析工具,采用數(shù)據(jù)挖掘和機器學習的方法來檢測財務(wù)異常數(shù)據(jù)就顯得十分必要,本文設(shè)計了一個基于Python計算生態(tài)的挖掘財務(wù)數(shù)據(jù)的原型系統(tǒng),其技術(shù)構(gòu)架為Python提供的開源工具包:numpy、pandas、matplotlib、scikit-learn,檢測方法可根據(jù)不同財務(wù)數(shù)據(jù)的特點和企業(yè)自身的實際需求,選取不同的方法,如基于高斯模型的檢測方法、本福特法則、回歸模型檢測法、KNN算法等[1]。該框架系統(tǒng)可作為中小企業(yè)、事務(wù)所的常規(guī)分析性審計的輔助工具。
基于統(tǒng)計學的離群點檢測方法中假設(shè)數(shù)據(jù)集中的正常數(shù)據(jù)對象由一個統(tǒng)計模型產(chǎn)生,如果某數(shù)據(jù)不符合該統(tǒng)計模型,則該數(shù)據(jù)對象是離群點,在基于統(tǒng)計學的離群點檢測過程中一般先設(shè)定數(shù)據(jù)集的分布模型如正態(tài)分布,波松分布和二項式分布等,然后根據(jù)模型進行不和諧檢測。
不和諧檢測通常會使用數(shù)據(jù)統(tǒng)計性描述方法,數(shù)據(jù)的描述性統(tǒng)計中數(shù)據(jù)的集中趨勢度量和散布度量是鑒別異常數(shù)據(jù)的重要指標。
中心趨勢在統(tǒng)計學中是指一組數(shù)據(jù)向某一中心值靠攏的程度,它反映了一組數(shù)據(jù)中心點的位置所在。中心區(qū)度量就是尋找數(shù)據(jù)水平的代表值或中心值,常用的中心趨勢度量包括均值、中位、眾數(shù)和中列數(shù)等[2]。
①均值:數(shù)據(jù)集“中心”的最常用的數(shù)值度量是(算術(shù))均值(Mean)。②中位數(shù):中位數(shù)(Median)又稱為中點數(shù)或中值。中位數(shù)是按順序排列的一組數(shù)據(jù)中居于中間位置的數(shù),即在這組數(shù)據(jù)中,有一半的數(shù)據(jù)比它大,另一半的數(shù)據(jù)比它小。③眾數(shù):眾數(shù)(Mode)是一組數(shù)據(jù)中出現(xiàn)次數(shù)最多的數(shù)值,可以對定性和定量型屬性確定眾數(shù)。④中列數(shù):中列數(shù)(Midrange)是數(shù)據(jù)集中的最大值和最小值的均值,也可以度量數(shù)值數(shù)據(jù)的中心趨勢。
數(shù)據(jù)散布度量用于評估數(shù)值數(shù)據(jù)散布或發(fā)散的程度。散布度量的測定是對統(tǒng)計資料分散狀況的測定,即找出各個變量值與集中趨勢的偏離程度。通過度量散布趨勢,可以清楚地了解一組變量值的分布情況。離散統(tǒng)計量越大,表示變量值與集中統(tǒng)計量的偏差越大,這組變量就越分散[3]。這時,如果用集中量數(shù)去做估計,所出現(xiàn)的誤差就較大。因此,散布趨勢可以看作是中心趨勢的補充說明。數(shù)據(jù)散布度量包括極差、分位數(shù)、四分位數(shù)、百分位數(shù)和四分位數(shù)極差。方差和標準差也可以描述數(shù)據(jù)分布的散布。
①極差:極差(Range)又稱為范圍誤差或全距,是一組觀測值的最大值與最小值之間的差距。極差是標志值變動的最大范圍,它是測定標志變動的最簡單的指標。②分位數(shù):又稱為分位點,是指將一個隨機變量的概率分布范圍分為幾個等份的數(shù)值點,常用的有中位數(shù)(即二分位數(shù))、四分位數(shù)和百分位數(shù)等。
第一四分位數(shù)和第三四分位數(shù)之間的距離是散布的一種簡單度量,它給出被數(shù)據(jù)的中間一半所覆蓋的范圍。該距離稱為四分位數(shù)極差(IQR)。
箱線圖使用數(shù)據(jù)中的5個統(tǒng)計量,最小值、第一四分位數(shù)Q1,中位數(shù)Q2、第三四分位數(shù)Q3和最大值來描述數(shù)據(jù)。箱線圖可以粗略地看出數(shù)據(jù)是否具有對稱性,分布的分散程度等信息,利用箱線圖可進行異常檢測,在檢測過程中,可根據(jù)經(jīng)驗,將最小值(大)值設(shè)置為與四分位數(shù)值間距為1.5IQR(IQR=Q3-Q2)的值,即:min=Q1-1.5IQR,max=Q3+1.5IQR。
小于min和max的值被認為是異常值,圖1是一個箱線圖檢測異常值的實例。
圖1 箱線圖檢測異常值實例
如果數(shù)據(jù)服從在高斯(正態(tài))分布,如果數(shù)據(jù)分布在三倍標準差準則之外的數(shù)據(jù)可視為異常數(shù)據(jù),在高斯模型中設(shè)σ代表標準差,μ代表均值,數(shù)值分布在(μ-σ,μ+σ)中的概率為0.6826;數(shù)值分布在(μ-2σ,μ+2σ)中的概率為0.9544,數(shù)值分布在(μ-3σ,μ+3σ)中的概率為0.9974;一般情況下可以認為,數(shù)據(jù)的取值幾乎全部集中在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個范圍的可能性僅占不到0.3%,如圖2所示。因此可認為如果數(shù)據(jù)服從高斯分布,離群點超過3倍的標準差,可視為異常。
圖2 高斯模型的數(shù)據(jù)分布
本福特法則的研究對象是大量數(shù)字中首位數(shù)字出現(xiàn)的概率,該法則認為在1-9這9個阿拉伯數(shù)字中數(shù)字i出現(xiàn)在首位的概率滿足以下公式:
表1表示了9個數(shù)字首位分布概率:
表1 9個數(shù)字首位分布概率
圖3顯示了采用本福特法則驗證某上市公司財務(wù)數(shù)據(jù)的結(jié) 果,可以看出理論值與實際值擬合度較高。
圖3 本福特法則檢驗異常數(shù)據(jù)的實例
本福特法則說明,較小的數(shù)字比大的數(shù)字出現(xiàn)的概率更高,本福特法則可以作為發(fā)現(xiàn)是否有財務(wù)造假的一種手段。在做實質(zhì)性科目底稿時,可以對銀行流水、應(yīng)收賬款、主營業(yè)務(wù)收入等科目進行檢查,看是否和本福特法則的概率分布有偏差,從而識別舞弊風險。
但本福特法則有其適用范圍,表2總結(jié)了其適用范圍。
表2 本福特法則的適用范圍
以上幾種檢測方法僅針對單一數(shù)據(jù),沒有考慮數(shù)據(jù)間的關(guān)系,也沒有考慮高維數(shù)據(jù)的異常檢測,數(shù)據(jù)挖掘和機器學習檢測方法可以在某種程度上彌補以上方法的不足,在具體算法上可采用回歸、聚類、決策樹等。以回歸分析為例,回歸分析研究的是數(shù)據(jù)(變量)間的關(guān)系,回歸分析也可用于數(shù)據(jù)異常數(shù)據(jù)的檢測,步驟如下:①利用正常數(shù)據(jù)集建立回歸模型,確定異常閾值;②輸入待檢測數(shù)據(jù);③超出異常閾值則可視為異常值。
科學計算和數(shù)據(jù)處理分析是Python的優(yōu)勢方向,Python計算生態(tài)中的擴展模塊numpy提供了高效的數(shù)值處理功能,numpy是Python的數(shù)字計算擴展,其內(nèi)部使用C語言編寫,對外采用Python語言進行封裝,因此基于numpy的Python程序可以達到接近C語言的處理速度,numpy是其他Python數(shù)據(jù)分析庫的基礎(chǔ)依賴庫,已經(jīng)成為科學計算事實上的標準庫,許多科學計算庫均基于numpy庫。
pandas是基于numpy的用于數(shù)據(jù)分析和處理的第三方庫,提供了標準的數(shù)據(jù)模型和大量便捷處理數(shù)據(jù)的函數(shù)和方法,可以實現(xiàn)大型數(shù)據(jù)集的處理和分析任務(wù),pandas提供的基本的數(shù)據(jù)類型Series、DataFrame和Panel以處理一維數(shù)組、二維數(shù)組和三維數(shù)據(jù)。
pandas中常用的描述性統(tǒng)計方法如表3所示:
表3 pandas中常用的描述性統(tǒng)計方法
以其中Describe方法為例,Describe方法可對每個數(shù)值型的列進行統(tǒng)計,通??捎糜跀?shù)據(jù)的初步觀察時使用。
Matplotlib是Python基于numpy的繪圖工具包,為數(shù)據(jù)分析提供了可視化環(huán)境。Scikit_learn是面向機器學習開源框架,其中的回歸、聚類、數(shù)據(jù)降維等功能也可用于數(shù)據(jù)異常檢測,圖4顯示的是采用線性回歸算法檢測異常數(shù)據(jù)的實例。
圖4 線性回歸算法檢測異常數(shù)據(jù)
對于存放在數(shù)據(jù)庫中的財務(wù)數(shù)據(jù),Python提供的專用的數(shù)據(jù)庫訪問模塊,表4是Python對一些常用的數(shù)據(jù)庫所提供的專用的數(shù)據(jù)庫訪問模塊:
表4 Python提供的數(shù)據(jù)庫模塊
在以上理論基礎(chǔ)和技術(shù)平臺基礎(chǔ)上,圖5給出了一個基于Python計算生態(tài)挖掘財務(wù)異常數(shù)據(jù)的邏輯構(gòu)架。
圖5 基于Python計算生態(tài)挖掘財務(wù)異常數(shù)據(jù)的邏輯構(gòu)架
該構(gòu)架包括數(shù)據(jù)預(yù)處理層、數(shù)據(jù)分析層、風險預(yù)警3層結(jié)構(gòu)。數(shù)據(jù)的來源可以是本地的財務(wù)數(shù)據(jù)庫,也可以是上市公司提供的標準財務(wù)數(shù)據(jù)[4]。在數(shù)據(jù)分析層,根據(jù)不同財務(wù)數(shù)據(jù)的特征和實際需求,選取不同的檢測方法,不同方法的風險值得分計算出財務(wù)異常檢測的綜合得分,最后根據(jù)財務(wù)數(shù)據(jù)的異常綜合評分給出風險預(yù)警信息。
以上原型框架建立在Python計算生態(tài)環(huán)境基礎(chǔ)上,既可以作為其他電子審計應(yīng)用系統(tǒng)的輔助方法也可獨立使用,Python工具包提供了傳統(tǒng)統(tǒng)計學方法、數(shù)據(jù)挖掘和機器學習算法,其中每一種方法都有其局限性,如本福特法則不適合預(yù)設(shè)有數(shù)據(jù)范圍、受人為控制的數(shù)據(jù),而對于數(shù)據(jù)挖掘和機器學習算法,前期數(shù)據(jù)預(yù)處理時間開銷大,面對高維、大規(guī)模數(shù)據(jù)集時,其計算量及其時間效率方面常無法令人滿意,對于財務(wù)審計來說需要權(quán)衡時間與審計結(jié)果的成本,靈活選擇。