财务舞弊(本福特——KS验证) - Bard7 - 博客园

本福特——KS验证

       Amiram1(2015)发表文章Financial statement errors: evidence from the distributional properties of financial statement numbers, 其在文章中成功的将本福特定律应用于美国上市公司的年报数据,发现1、在同一年中,重修订的数据比原始谎报数据更符合本福特定律;2、统计越偏离本福特定律,该上市公司的持续盈利能力越低。文章中利用Kolmogorov–Smirnov(KS) 统计与Mean Absolute Deviation (MAD)两种检验方式来度量实际分布概率与本福特定律的偏差程度, KS的计算公式为:

KS=Max(|AD1−ED1|,|(AD1+AD2)−(ED1+ED2)|,…,|(AD1+AD2+…+AD9)−(ED1+ED2+…+ED9)|)

其中AD是统计数据的真实分布,ED为该数字在本福特定律中的期望概率。可以利用KS来检验该分布适合本福特定律,在5%的水平下,检验值为 1.36/srqt§,其中P为总的统计样本个数。如果该样本的KS值小于该检验值,可以认为符合本福特定律。

一、代码

from WindPy import w
from datetime import *
import math
from scipy import stats

#本福特定律中1-9的分布概率
exp = [0.301, 0.1761, 0.1249, 0.0969, 0.0792, 0.0669, 0.058, 0.0512, 0.0458]

#启动wind
w.start()

#这里按wind取数规则,将代码和日期设为变量
list=["600000.SH"]
rptDate="unit=1;rptDate=20161231;rptType=1"

def count_num(x):
    #取第一位数,并且按1-9返回出现次数的列表
    numC = [0] * 9
    for i in x.Data:
        if not math.isnan(i[0]):
             #wind空数据显示为"nan"
            num=int(str(abs(i[0]))[0])
            if num ==1:
                numC[0]+=1
            elif num==2:
                numC[1]+=1
            elif num==3:
                numC[2]+=1
            elif num==4:
                numC[3]+=1
            elif num==5:
                numC[4]+=1
            elif num==6:
                numC[5]+=1
            elif num==7:
                numC[6]+=1
            elif num==8:
                numC[7]+=1
            elif num==9:
                numC[8]+=1
    return numC

def ks(numC):
    #Kolmogorov–Smirnov(KS) 统计
    ks_value=0
    numT = sum(numC)
    p=1.36/(numT**0.5)
    for j in range(0, 9):
        numC[j] = numC[j] / numT
    ks = [0] * 9
    for i in range(0, 9):
        a = 0
        b = 0
        for j in range(0, i + 1):
            a = a + numC[j]
            b = b + exp[j]
        ks[i] = abs(a - b)
    Max=max(ks)
    if Max>p:
        #如果不符合ks,返回1,符合返回0
       ks_value=1
    return  ks_value

二、验证

1.舞弊公司

代码公司名称备注
300267.SZ尔康系统未报错
600074.SH保千里系统报错
300372.SZ欣泰系统报错
002323.SZ雅百特系统未报错
600654.SH中安消系统未报错

2.上证50公司

系统均未报错。

3.结论

符合本福特—KS验证,不一定没有问题。但不符合本福特—KS验证,应该存在问题。

发表评论