加载中…
个人资料
马步水
马步水
  • 博客等级:
  • 博客积分:0
  • 博客访问:877,588
  • 关注人气:168
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【原创】利用python爬虫技术实现基于本福特定律的上市公司报表真假检验方案(一)

(2016-11-13 14:52:32)
分类: Python
一、本福特定律
       做假账是很多公司,尤其是上市公司的主要工作,为了对付假账,人们想了很多办法。其中一个就是利用奔福德定律来检查各种数据是否有造假。
       本福特定律是说一堆从实际生活得出的数据中,以1为首位数字的数的出现机率约为总数的三成,接近期望值1/9的3倍,越大的数,以它为首几位的数出现的机率就越低。本福特定律说明在b进位制中,以数n起头的数出现的机率为logb(n 1) − logb(n) 。值得一提的是,本福特定律满足尺度不不变性,即如果我们换一套单位制,本福特定律仍然成立。本福特定律不但适用于个位数字,连多位的数也可用。在十进制首位数字的出现机率(%,小数点后一个位):1打头概率是30.1%,2是17.6%,3是12.5%,4是9.7%,5是7.9%,6是6.7%,7是5.8%,8是5.1%,9是4.6%。
       1935年,美国的一位叫做本福特的物理学家在图书馆翻阅对数表时发现,对数表的头几页比后面的页更脏一些,这说明头几页在平时被更多的人翻阅。本福特再进一步研究后发现,只要数据的样本足够多,数据中以1为开头的数字出现的频率并不是1/9,而是30.1%。而以2为首的数字出现的频率是17.6%,往后出现频率依次减少,9的出现频率最低,只有4.6%。
      本福特开始对其它数字进行调查,发现各种完全不相同的数据,比如人口、物理和化学常数、棒球统计表以及斐波纳契数列数字中,均有这个定律的身影。就是只要是由度量单位制获得的数据都符合这一定律,它的适用范围异常的广泛,几乎所有日常生活中没有人为规则的统计数据都满足这个定律。另一方面,任意获得的和受限数据通常都不符合本福特定律。比如,彩票数字、电话号码、汽油价格、日期和一组人的体重或者身高数据是比较随意的,或者是任意指定的,并不是由度量单位制获得的。
      1961年,一位美国科学家提出,本福特定律其实是数字累加造成的现象,即使没有单位的数字。比如,假设股票市场上的指数一开始是1000点,并以每年10%的程度上升,那么要用7年多时间,这个指数才能从1000点上升到2000点的水平;而由2000点上升到3000点只需要4年多时间;但是,如果要让指数从10000点上升到20000点,还需要等7年多的时间。因此我们看到,以1为开头的指数数据比以其他数字打头的指数数据要高很多。
      2001年,美国最大的能源交易商安然公司宣布破产,当时传出了该公司高层管理人员涉嫌做假账的传闻。事后人们发现,安然公司在2001年到2002年所公布的每股盈利数字就不符合本福特定律,这证明了安然的高层领导确实改动过这些数据。

二、实现思路
       如果不用计算机实现基于本福特定律的上市公司报表真假检验,就只能是下载每家上市公司从上市到现在的每年财务报表(3张表,资产负债表,利润表,现金流量表),然后手工记录每个数字的首数字是多少,然后统计每家公司的财务报表的首数字的分布概率。沪深3000多家公司,平均十年的财务报表,将近3万个报表,统计量太大,必须用计算机语言来实现自动取数和统计计算。大致思路如下:
     (1)获取沪深两市所有的股票编号和名称。
     (2)基于股票编号,到网站(我选择网易股票)上抓取每年的财务数据,并统计每家公司的财务报表首数字的分布概率。第二步是关键,可以细化为:
           2.1 统计资产负债表的首数字分布情况
                2.1.1 按照股票编号到网站上抓取各年的资产负债表数据
                2.1.2 处理每个单元格的数据,如果是数字,绝对值大于1,取首位,绝对值小于1,乘以1亿后,取首位。
                2.1.3 按照首位数字的情况,将对应的统计变量加一。然后循环到2.1.2直到结束。
           2.2 统计利润表的首数字分布情况
           2.3 统计现金流量表的首数字分布情况
           2.4 合并统计3张表的首数字分布情况 
     (3)输出分布概率到excel文件。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有