识别财务舞弊的“机器之眼”:本福特定律建模
市值风云
原创 
手把手教你筛选财务舞弊的公司。


上市公司造假的手段,主要可以分为三类:

其一,收入类造假,如伪造合同虚构收入的万福生科;
其二,成本费用类造假,如通过少计成本虚增利润的三峡新材;
其三,关联交易造假,如隐瞒与关联方之间的交易,导致利润总额虚增的康欣新材。


在大A股这充满诱惑的市场,遍地都是娇嫩的韭菜,只要通过会计分录,简简单单便能割走大把钱财,让揣着镰刀的老板,如何按耐得住心中的悸动呢。


而对于财务造假的识别,一直是一个难题,每一家上市公司看起来都是那么眉清目秀婀娜多姿,没有谁脸上写着“造假”两个字。



别说普通的投资者,就是在资本市场浸淫多年且具备专业财务技能的业内人士,也很难识破财务舞弊。


在互联网技术突飞猛进的当今社会,风云君曾想是否可以利用互联网技术来提高财务舞弊识别效率,甚至开发一种简单实用的财务舞弊辅助识别工具?


 一、本福特定律 

本福特定律,是一个有关于首位数字在数值数据集的频率分布,此定律已经存在很长的一段时间,但到了最近几年才被频繁地讨论和使用。

本福特定律命名来源于20世纪的英国科学家本福特,他使用的前提限制为,数据必须为自然数据,所以人为制造的数据,像手机号码、身分证字号都不适用这个定律。


本福特定律指出在这些自然数据中,如信用卡付费帐单、财务报表等,第一个首位数字1(例如:1 ,123,1234)的出现次数约为30.1%,首位数字是2的比例约为17.6%,后面数字出现的机率将逐渐变小,到首位字母为9时,数字出现机率已经小于5%。


本福特定律:P(d)=



这个结论与常人的直观结论不同,一般来说我们会认为1~9每个数字,出现的机率皆为1/9,但本福特定律指出,在自然数据下,首字母的分布,并不是这样的。


据说本福特是在翻对数表时发现这个定律的,像图书馆的书一样,前面几页的颜色总是特别深,越到后面颜色越浅,书页越新,因而让本福特想到,是不是1为首字母的数会是最多的呢,从而得出这个定律。


 二、手把手教你用python建模 

接下来科普点技术。

大A股3000多家上市公司,算上每年IPO的企业,若是一家一家用excel建模,那得到何年何月才能做完呢?


俗话说授人以鱼不如授人以渔,今天风云君便手把手教大家,如何用python建模,来检验上市公司报表的首位字母是否满足本福特定律。


ps:对于不想学的老板们,看到这边就可以直接跳到最下面的留言区,只要阅读量过万,留言区便会将源码奉上。

步骤一:安装python3


步骤二:安装这次所需要的库



os:主要用来抓取档案位置
pandas:主要用来进行运算
stats:主要用来做卡方检定


步骤三:定义函数(ps:此代码以东方财富choice数据提供的excel为基准建立)


1、将重复代码定义成函数,可以使代码易读性上升,修改运用起来也会比较容易。取财务报表每个单元格的首位数字,以中国平安为例:



我们得取出每个数字的首位字母,以营业收入27,712,000,000为例,会得到首位字母为2,以此类推,因此写一个函数来执行这个动作。



2、统计首位字母出得次数



3、计算出每张报表里,他的数字分布。


从东方财富choice上下载上市公司数据会分成三个excel,分别是现金流量表、资产负债表和利润表,所以我们要分别计算出各表首字母出现的次数。



4、将三张表数字加总


我们将三张表通过函数,分别计算出他的分布结果,并将结果放入下面三个list中


profitsheet_num=[]
cash_flow_num=[]
Assetsheet_num=[]



5、计算依照本福特定律,财务报表中各个首字母的期望次数



6、卡方检定



至此,函数也就定义完毕了


步骤四:将会用到的东西,设定好



步骤五:从文件资料中取出上市公司的代码


文件资料档名:(ps:这是额外写一个程式,批量更改档名后的结果,源代码将在破万阅读后,放在留言区)




步骤六:读入代码进行计算



步骤七:将结果存在dataframe后打印结果,并输出成excel。



 三、上证50及舞弊公司测试结果 


卡方检验


虚无假设:财报首字母分布符合本福特定律
对立假设:财报首字母分布不符合本符特定律


本次我们抓取前4季的数据,第二行的601668,其代表意义为,在这4季度中,601688无法拒绝虚无假设的季度有4季,可以拒绝虚无假设的季度为0季。亦即它的分布决大部分符合本福特定律。


我们整理出上证50与五家有舞弊行为的公司的无法拒绝虚无假设的均值作为比较


上证五十样本为:北京银行、工商银行、光大银行、国泰君安、华泰证券、交通银行、洛阳钼业、农业银行、上海银行、新华保险、浙商证券、中国电建、中国核电、中国建筑、中国交建、中国平安、中国人寿、中国石油、中国太保、中国铁建、中国银河、中国银行、中国中车、中国中铁、中国重工、宝钢股份、保利地产、北方稀土、大秦铁路、东方证券、贵州茅台、海通证券、华夏幸福、江苏银行、康美药业、绿地控股、民生银行、南方航空、浦发银行、山东黄金、上汽集团、万华化学、伊利股份、兴业银行、招商银行、招商证券、中国联通、中国神华、中国石化、中信证券。


舞弊五家样本为:保千里、尔康制药、欣泰电器、雅百特、中安消。



上表中,可以发现上证五十季度资料平均值,符合本福特定律的季度数,不管在最近一年、两年、三年、四年,都高于舞弊五家的季度均值,但考量到均值差异并不是十分明显,我们推断可能是受到样本的数据量较小影响所致。


所以我们初步认为,本福特定律这个工具在实际应用中是可以起到一个初步筛选的作用,但是在实际判别时,还得深入的研究上市公司的基本面及财务数据,需运用专业的财务知识进行更严谨的分析。



点赞16
收藏137
分享
举报
评论 38
表情
x
😊😍😘😳😡😓😭😲😁😱😖😉😏😜😰😢😚😄😪😣😔😠😌😝😂😥😃😨😒😷😞👿👽😁😄😇😯😕😂😅😈😐😠😀😃😆😉😑😬😮😥😨😟😢😣😦😩😱😵😴😤😧😰😶😷😝😙😎😖😞😛😋😭😔😒😜😗😚😌😪😏🙋🙅🙎😼😻🙌🙆🙏😸😽😫🙍🙇😁😄😇😯😕😂😅😈😐😠😀😃😆😉😑😬😮😥😨😟😢😣😦😩😱😵😴😤😧😰😶😷😝😙😎😖😞😛😋😭😔😒😜😗😚😌😪😏🙋🙅🙎😼😻🙌🙆🙏😸😽😫🙍🙇😺😹😿😾🙉👶👨👵🙀🙊👦👩😄😃😀😉😚😗😙😜😝😛😁😔😌😒😞😣😢😂😭😪😥😰😅😩😫😨😱😠😤😖😆😋😷😎😴😵😟😦😧😈👿😮😬😐😕😯😶😇😏😑👲👳👮👷💂👶👦👧👨👩👴👵👱👼👸😺😸😻😽😼🙀😿😹😾👹👺🙈🙉🙊💀👽👀👃👄👂💔💘💝💜💛💚💙💩👍👎👊👌💪👆👇👈👉👐🙏🙌👏👧👦👩👨👶👵👴👳👳👳👲👸👸👷💂👮🙆🙅💇🙅💇💆💁💁👯👫👫🎎🚶🏃💃💑💏👼💀🐱🐶🐭🐹🐰🐺🐸🐯🐨🐻🐷🐮🐗🐵🐙🐛🐔🐧🐦🐍🐴🐠🐳🐬🌙🌊🌻🌺🌹🔥🎵💦💤🌷🌸💐🍀🌾🍃🍂🎃👻🎅🌵🌴🎍🍁🎄🔔🎉🎈💿📷🎥📬💡🔑🔒🔓📺💻🛀💰🔫💊💣🏈🏀🎾🎿🏄🏊🏆👾🎤🎸👙👑🌂👜💄💅💍🎁💎🎂🍰🍺🍻🍸🍵🍶🍔🍟🍝🍜🍧🍦🍡🍙🍘🍞🍛🍚🍲🍱🍣🍎🍓🍉🍆🍅🍊🚀🚄🚉🚃🚗🚕🚓🚒🚑🚙🚲🏁🚹🚺😺😹😿😾🙉👶👨👵🙀🙊👦👩💏🙈💩👧👴💑👪👫👬👭👮💂👸👱💃👤👷👯🎅👲💆👥💁👰👼👳💇💅👺👿👀👣💋👻👽💀👂👄👹👾💪👃👅💙💚💓💖💝👍💛💔💗💞👎💜💕💘💟👌👊👇👋👈👏👆👉👐🔰👟🎩👖👙💄👑🎓👔👗👠👞👒👓👕👘👡👢💼👛💲💶💱👚🎒💰💵💷💹👜👝💳💴💸🔫🔪💊🔕🔭🔋📗💣🚬🚪🔮🔌📘💉🔔🔬🔦📜📙📚📑📖🎃🎁🎆📔📓📰🎄🎂🎇📒📕📛🎀🎈🎉🎊🎌🎎📟📠📨🎍🎐📱📦📩🎏🎋📲📞📪📫📮📯📡📏📭📤📢💬📐📬📥📣💭📝📍📌💺💾📅📁📄📎💻💿📇📂📊💽📆📋📃📈📉🎢🎨📷🎭🎲🎠🎬📹🎫🎰🎡🎪🎥🎦🎮🃏🎴📺📼🎵🎻🎺🀄📻🎧🎶🎹🎸🎯📀🎤🎼🎷🐕🐈🐁🐢🐓🐤🐶🐱🐭🐇🐔🐥🐩🐀🐹🐰🐣🐦🐏🐺🐄🐗🐽🐼🐑🐃🐮🐖🐸🐧🐐🐂🐴🐷🐍🐘🐨🐆🐫🐳🐠🐚🐒🐯🐪🐋🐡🐬🐵🐻🐊🐟🐙🐌🐛🐞🐾🍻🍶🍼🐜🐲🍸🍷🍴🐝🐉🍺🍹🍵🍨🍧🍰🍬🍯🍟🍖🍦🍪🍭🍳🍝🍗🍩🍫🍮🍔🍕🍤🍣🍜🍛🍢🍠🍏🍱🍙🍲🍡🍌🍊🍞🍚🍥🍘🍎🍋🍄🍇🍐🍓🌴🌴🍅🍈🍑🍍🌲🌵🍆🍉🍒🌰🌳🌷🌸🍁🌺🌽🌹🍂🌻🌾🌈🌁🍀🍃🌼🌿🌂🌀🌙🌚🌑🌔💧🌞🌛🌒🌕🌝🌜🌓🌖🌗🌄🌆🌉🌎🌐🌘🌅🌃🌊🌏🌟🎑🌇🌌🌋🌍🌠🏠🏣🏦🏩🏯🏡🏤🏧🏪🏰🏢🏥🏨🏫🏬🏭🗻🗾🏮🔨🛁🚾🗼🗿💈🔩🛀🎽🗽🔧🚿🚽🎣🎱🎿🏂🏂🏆🏈🎳🎾🏀🏃🏇🏉🏁🏄🐎🏊🚂🚅🚋🚎🚑🚃🚆🚈🚌🚏🚒🚄🚇🚊🚍🚐🚓🚔🚗🚚🚝🚠🚣🚕🚘🚛🚞🚡🚁🚖🚙🚜🚢🚢🛂🛅🚳🚷🚀🛃🚴🚸🚤🅿🛄🚲🚵🚉🚶🚥🚦💎🚧💌💐🚨💍💒💏🙈💩👧👴💑👪👫👬👭👮💂👸👱💃👤👷👯🎅👲💆👥💁👰👼👳💇💅👺👿👀👣💋👻👽💀👂👄👹👾💪👃👅💙💚💓💖💝👍💛💔💗💞👎💜💕💘💟👌👊👇👋👈👏👆👉👐🔰👟🎩👖👙💄👑🎓👔👗👠👞👒👓👕👘👡👢💼👛💲💶💱👚🎒💰💵💷💹👜👝💳💴💸🔫🔪💊🔕🔭🔋📗💣🚬🚪🔮🔌📘💉🔔🔬🔦📜📙📚📑📖🎃🎁🎆📔📓📰🎄🎂🎇📒📕📛🎀🎈🎉🎊🎌🎎📟📠📨🎍🎐📱📦📩🎏🎋📲📞📪📫📮📯📡📏📭📤📢💬📐📬📥📣💭📝📍📌💺💾📅📁📄📎💻💿📇📂📊💽📆📋📃📈📉🎢🎨📷🎭🎲🎠🎬📹🎫🎰🎡🎪🎥🎦🎮🃏🎴📺📼🎵🎻🎺🀄📻🎧🎶🎹🎸🎯📀🎤🎼🎷🐕🐈🐁🐢🐓🐤🐶🐱🐭🐇🐔🐥🐩🐀🐹🐰🐣🐦🐏🐺🐄🐗🐽🐼🐑🐃🐮🐖🐸🐧🐐🐂🐴🐷🐍🐘🐨🐆🐫🐳🐠🐚🐒🐯🐪🐋🐡🐬🐵🐻🐊🐟🐙🐌🐛🐞🐾🍻🍶🍼🐜🐲🍸🍷🍴🐝🐉🍺🍹🍵🍨🍧🍰🍬🍯🍟🍖🍦🍪🍭🍳🍝🍗🍩🍫💩🔥🌟💫💥💢💦💧💤💨👂👀👃👅👄👍👎👌👊👋👐👆👇👉👈🙌🙏👏💪🚶🏃💃👫👪👬👭💏💑👯🙆🙅💁🙋💆💇💅👰🙎🙍🙇🎩👑👒👟👞👡👠👢👕👔👚👗🎽👖👘👙💼👜👝👛👓🎀🌂💄💛💙💜💚💔💗💓💕💖💞💘💌💋💍💎👤👥💬👣💭🐶🐺🐱🐭🐹🐰🐸🐯🐨🐻🐷🐽🐮🐗🐵🐒🐴🐑🐘🐼🐧🐦🐤🐥🐣🐔🐍🐢🐛🐝🐜🐞🐌🐙🐚🐠🐟🐬🐳🐋🐄🐏🐀🐃🐅🐇🐉🐎🐐🐓🐕🐖🐁🐂🐲🐡🐊🐫🐪🐆🐈🐩🐾💐🌸🌷🍀🌹🌻🌺🍁🍃🍂🌿🌾🍄🌵🌴🌲🌳🌰🌱🌼🌐🌞🌝🌚🌑🌒🌓🌔🌕🌖🌗🌘🌜🌛🌙🌍🌎🌏🌋🌌🌠🌀🌁🌈🌊🎍💝🎎🎒🎓🎏🎆🎇🎐🎑🎃👻🎅🎄🎁🎋🎉🎊🎈🎌🔮🎥📷📹📼💿📀💽💾💻📱📞📟📠📡📺📻🔊🔉🔈🔇🔔🔕📢📣🔓🔒🔏🔐🔑🔎💡🔦🔆🔅🔌🔋🔍🛁🛀🚿🚽🔧🔩🔨🚪🚬💣🔫🔪💊💉💰💴💵💷💶💳💸📲📧📥📤📩📨📯📫📪📬📭📮📦📝📄📃📑📊📈📉📜📋📅📆📇📁📂📌📎📏📐📕📗📘📙📓📔📒📚📖🔖📛🔬🔭📰🎨🎬🎤🎧🎼🎵🎶🎹🎻🎺🎷🎸👾🎮🃏🎴🀄🎲🎯🏈🏀🎾🎱🏉🎳🚵🚴🏁🏇🏆🎿🏂🏊🏄🎣🍵🍶🍼🍺🍻🍸🍹🍷🍴🍕🍔🍟🍗🍖🍝🍛🍤🍱🍣🍥🍙🍘🍚🍜🍲🍢🍡🍳🍞🍩🍮🍦🍨🍧🎂🍰🍪🍫🍬🍭🍯🍎🍏🍊🍋🍒🍇🍉🍓🍑🍈🍌🍐🍍🍠🍆🍅🌽🏠🏡🏫🏢🏣🏥🏦🏪🏩🏨💒🏬🏤🌇🌆🏯🏰🏭🗼🗾🗻🌄🌅🌃🗽🌉🎠🎡🎢🚢🚤🚣🚀💺🚁🚂🚊🚉🚞🚆🚄🚅🚈🚇🚝🚋🚃🚎🚌🚍🚙🚘🚗🚕🚖🚛🚚🚨🚓🚔🚒🚑🚐🚲🚡🚟🚠🚜💈🚏🎫🚦🚥🚧🔰🏮🎰🗿🎪🎭📍🚩
表情
取消 发布
评论  38
晨曦_1
2018-03-02 11:21
之前我一直是对比同行业其他公司财报,原来还有更简单的方法,人外有人[强]看了三遍
不规范昵称hu5na
2018-03-02 16:20
就怕上证50也有假,国企上海物贸连续三年作假。
不规范昵称6wmy4
2018-02-28 11:36
太高端
merci
2018-02-27 22:11
这文章是卖萌的吧[尴尬]
antediluvian
2018-02-27 20:36
出软件,我买还不行吗?
[偷笑][偷笑]
1
回复
2018-02-28 00:04
就喜欢你豪气掏钱的神态![阴险]
回复
simonskyfall
2018-03-05 20:14
先贊!回家问媳妇去
midy
2018-02-28 12:28
好腻害[强]
jar
2018-02-28 07:03
如果定律是错的呢?
踏歌而行
2018-02-28 02:36
虽然不懂,但看起来高大上的感觉,支持原创,感谢你们让我得已相信自己走A股的路正在拓宽,此道不孤也[得意]
mygdsg
2018-02-28 02:29
强烈支持!
谢_4
2018-02-27 23:53
机器代替不了人工
2018-02-28 00:55
但可以减少重复劳动
1
回复
新雷神
2018-02-27 22:44
用这种方法,结论不可信啊。
2018-02-27 23:20
样本太少
回复
王振宇
2018-02-27 22:28
可否分享一下全部代码
2018-02-28 00:54
1
回复
醉友
2022-07-26 07:24
山东
2、统计首位字母出得次数 def Count_num(num_count, input): output = Get_First_num(input) num_count[output - 1] += 1
卡匹迪恩
2019-03-17 00:36
不明觉厉
王维
2018-12-03 00:03
不是容易的事
趋势线
2018-08-07 20:30
过万了么
cooljinli
2018-03-08 20:50
直接说啥时候开始卖软件吧
钓鱼人Gy
2018-03-01 07:51
身(分)证号,错别字(分)份
超人_3
2018-02-28 19:11
太高深了[强]
wine
2018-02-28 09:18
看不懂!
冷门
2018-02-28 06:23
犯第一类错误和第二类错误的几率是多少?
Icerivers
2018-02-28 01:17
[偷笑]发现没写过python也能看懂代码,感谢大学老师。
lhb1985888
2018-02-28 00:24
这个挺有创意的!
Flex
2018-02-27 23:20
鼓励一下[龇牙]
王振宇
2018-02-27 20:55
样本量太小
赖宇亮
2018-02-27 20:37
作者最后也承认了,这种方法只能娱乐一下。
落花吹雪
2018-02-27 20:07
许多地方看不懂,知识严重不够用
mh96669
2018-02-27 19:58
快过万吧
总有庄家想套我
2018-02-27 19:57
[龇牙]