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

圖1 箱線圖檢測異常值實例
如果數據服從在高斯(正態)分布,如果數據分布在三倍標準差準則之外的數據可視為異常數據,在高斯模型中設σ代表標準差,μ代表均值,數值分布在(μ-σ,μ+σ)中的概率為0.6826;數值分布在(μ-2σ,μ+2σ)中的概率為0.9544,數值分布在(μ-3σ,μ+3σ)中的概率為0.9974;一般情況下可以認為,數據的取值幾乎全部集中在(μ-3σ,μ+3σ)區間內,超出這個范圍的可能性僅占不到0.3%,如圖2所示。因此可認為如果數據服從高斯分布,離群點超過3倍的標準差,可視為異常。

圖2 高斯模型的數據分布
本福特法則的研究對象是大量數字中首位數字出現的概率,該法則認為在1-9這9個阿拉伯數字中數字i出現在首位的概率滿足以下公式:

表1表示了9個數字首位分布概率:

表1 9個數字首位分布概率
圖3顯示了采用本福特法則驗證某上市公司財務數據的結 果,可以看出理論值與實際值擬合度較高。

圖3 本福特法則檢驗異常數據的實例
本福特法則說明,較小的數字比大的數字出現的概率更高,本福特法則可以作為發現是否有財務造假的一種手段。在做實質性科目底稿時,可以對銀行流水、應收賬款、主營業務收入等科目進行檢查,看是否和本福特法則的概率分布有偏差,從而識別舞弊風險。
但本福特法則有其適用范圍,表2總結了其適用范圍。

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

表3 pandas中常用的描述性統計方法
以其中Describe方法為例,Describe方法可對每個數值型的列進行統計,通常可用于數據的初步觀察時使用。
Matplotlib是Python基于numpy的繪圖工具包,為數據分析提供了可視化環境。Scikit_learn是面向機器學習開源框架,其中的回歸、聚類、數據降維等功能也可用于數據異常檢測,圖4顯示的是采用線性回歸算法檢測異常數據的實例。

圖4 線性回歸算法檢測異常數據
對于存放在數據庫中的財務數據,Python提供的專用的數據庫訪問模塊,表4是Python對一些常用的數據庫所提供的專用的數據庫訪問模塊:

表4 Python提供的數據庫模塊
在以上理論基礎和技術平臺基礎上,圖5給出了一個基于Python計算生態挖掘財務異常數據的邏輯構架。

圖5 基于Python計算生態挖掘財務異常數據的邏輯構架
該構架包括數據預處理層、數據分析層、風險預警3層結構。數據的來源可以是本地的財務數據庫,也可以是上市公司提供的標準財務數據[4]。在數據分析層,根據不同財務數據的特征和實際需求,選取不同的檢測方法,不同方法的風險值得分計算出財務異常檢測的綜合得分,最后根據財務數據的異常綜合評分給出風險預警信息。
以上原型框架建立在Python計算生態環境基礎上,既可以作為其他電子審計應用系統的輔助方法也可獨立使用,Python工具包提供了傳統統計學方法、數據挖掘和機器學習算法,其中每一種方法都有其局限性,如本福特法則不適合預設有數據范圍、受人為控制的數據,而對于數據挖掘和機器學習算法,前期數據預處理時間開銷大,面對高維、大規模數據集時,其計算量及其時間效率方面常無法令人滿意,對于財務審計來說需要權衡時間與審計結果的成本,靈活選擇。