ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

内控评价报告数据实战:字段解析、研究应用与避坑指南

内控评价报告数据实战:字段解析、研究应用与避坑指南 做公司治理研究、搞审计论文选题或者在买方做尽调的时候最折磨人的往往不是找不到数据而是数据明明就在那里却没法直接用。就拿A股上市公司的内部控制评价报告来说每年几千家公司每家一份PDF少的十几页、多的几十上百页而且各个公司写报告的格式、用词、披露口径五花八门。你要是真打算手动把这些信息一条条挖出来做成可以跑回归的表格光清洗和整理就能耗掉你大半个月。这也是我第一次接触CnOpenData这套A股上市公司内部控制评价报告数据时第一反应是“这东西终于有人替我干了”。这套数据集的核心价值是把上市公司每年披露的内部控制评价报告从非结构化的PDF文本整理成一个个结构化的字段。你能直接看到某家公司某一年内控评价结论是“有效”还是“无效”有没有披露重大缺陷、重要缺陷、一般缺陷缺陷数量是多少整改措施是什么以及审计机构出具的内控审计意见类型。对于写论文的博士硕士、做公司治理和审计方向的研究人员还有做股票风险筛查的投资者来说这就是一个可以直接拿去用的基础数据底座。我大概是从研究“内部控制质量与盈余管理”这个课题开始用这套数据的陆陆续续用了一年多中间踩了不少坑。这篇就把我实际用下来的经验整理一下包括数据表的逻辑、关键字段怎么理解、分析时怎么用、有哪些容易掉进去的陷阱希望能帮后来的人省点时间。1. 这套数据到底在解决什么问题1.1 内控评价报告和审计报告先别搞混很多刚接触这个领域的人会把“内部控制评价报告”和“内部控制审计报告”当成一回事但实际上这两者完全是两个东西来源不同性质也不同。内部控制评价报告是上市公司董事会出具的属于公司“自我评价”。它回答的问题是管理层觉得自己的内控体系建设得怎么样有没有重大漏洞。听起来有点像学生自己给自己打分肯定有一定的“自夸”倾向但因为有监管要求也不能乱写写错了事后是要担责的。内部控制审计报告则是会计师事务所出具的属于“外部独立意见”。审计师要按审计准则去测试企业的内控设计和执行情况最后给出是否有效的结论。这个比公司自我评价的客观性要高很多也是市场上比较看重的一个信号。CnOpenData这套数据里通常会把两者相关的内容都覆盖到。以我拿到的版本为例它既包括了评价报告中的核心结论也整理了审计意见类型。研究的时候最好把这两类信息区分开因为它们对公司行为、市场反应的解释力是不一样的。1.2 明明年报公开可得为什么还需要加工数据A股上市公司的年报和专项报告都披露在巨潮资讯网和交易所官网上所有原始文件都是免费公开的。理论上只要你愿意可以手动下载每一家公司的内控评价报告然后逐份阅读、提取信息、录入表格。但问题恰恰出在“理论上”。第一个现实问题是量太大。A股现在五千多家上市公司哪怕只取近十年的数据也是几万份报告。每份报告就算只花十分钟提取关键信息一个人不眠不休也得干好几个月。第二个问题是格式不统一。有些公司老老实实按交易所模板写有“重大缺陷”“重要缺陷”“一般缺陷”分类有些公司则比较简略全文只有一段话“报告期内公司不存在内部控制重大缺陷”。第三个问题是非结构化。PDF里是排版文本字段不是现成的Excel列你想统计“有多少公司披露了重大缺陷”靠肉眼和CtrlF是干不动的。所以我一直觉得像CnOpenData这类数据库本质上做的是“把非结构化内容结构化”的工作。它把评价报告中的结论、缺陷情况、整改情况、审计意见等关键信息抽出来转成一行一行、一列一列的数据。你拿到手以后不需要再去跟PDF搏斗可以直接做描述性统计和模型分析。当然结构化过程中会不会出错肯定有可能。这也是我后面要专门讲“抽样核对”的原因。2. 数据结构与核心字段说明2.1 拿到的表通常有哪些字段每个版本的数据库字段可能会有微调我这里以我实际使用过的数据版本为例说说最核心、最高频用到的几个字段。证券代码和证券简称这是最基础的公司标识。分析时注意如果研究期间内公司变更过股票代码或简称建议统一用证券代码做主键简称只能当作辅助确认信息。报告年度通常指评价报告所对应的年度。比如2023年的内控评价报告反映的是公司在2023年度内部控制运行的有效性。这里要特别提醒报告年度和公告年度不是一回事很多报告是在次年三四月份才披露的后面讲合并匹配的时候我会再强调。内控评价结论是这套数据里最重要的字段之一。一般取值为“有效”或“无效”少部分公司可能列为“整体有效但存在重大缺陷”之类的表述。做实证研究时一般会把它变成一个哑变量结论有效记为1无效为0。不过实践中多数公司都是“有效”所以这个变量的变异度其实不大真正能拉开差距的是缺陷相关的变量。缺陷数据通常分成三列重大缺陷数量、重要缺陷数量、一般缺陷数量。有些版本还可能给出具体的缺陷描述或摘要。这是研究和应用中最常被使用的信息。内控审计意见类型。这个字段来自审计机构的意见常见的有标准无保留意见、带强调事项段的无保留意见、否定意见、无法表示意见。其中否定意见和无法表示意见是很强的负面信号。除了这些有些版本还会附带内部控制的评价范围、整改措施、缺陷认定标准等信息但这些通常是文本型字段使用前需要自己再做清洗。2.2 重大、重要、一般三类缺陷为什么关键无论在公司披露里还是学术研究里内控缺陷都按严重程度分成三类重大缺陷、重要缺陷、一般缺陷。很多刚入门的人觉得这只是措辞问题但实际上这是一个严格按“控制失效的潜在后果”划分的等级体系。重大缺陷指一个或多个控制缺陷的组合可能导致企业严重偏离控制目标。这里的关键词是“严重偏离”。比如财务报告舞弊、资金被大额占用、违规担保引发巨额损失这些通常会被认定为重大缺陷。存在重大缺陷基本意味着这家公司的内控体系在关键环节失效了这是风险等级最高的信号。重要缺陷严重程度和经济后果都低于重大缺陷但仍然值得关注它不会导致整体控制目标严重偏离可是已经影响到局部控制目标的实现。比如某一业务条线的审批流程形同虚设虽然没有造成重大损失但也说明流程有漏洞。一般缺陷是除了前两类之外的其他缺陷属于日常运行中常见的小问题比如某个岗位职责分工不够明确、某个系统参数设置不严谨等。大部分公司多多少少都会披露一些一般缺陷这反而是信息披露比较坦诚的表现。我在实际使用中一般会构造两个变量一个是“是否披露重大缺陷”另一个是“重大缺陷的具体数量”。因为重大缺陷的信息含量最高而且披露行为的变异性也最大。相比之下一般缺陷数量由于各公司的认定标准差异太大横向可比性比较差使用时要格外小心。2.3 从原始报告到结构化字段处理逻辑是怎样的CnOpenData这套数据的底层处理逻辑大致是先从交易所和巨潮资讯网下载原始PDF报告再利用关键词定位、章节切分和人工校验等方式把报告中的关键信息提取出来填到对应的字段里。这个过程中比较难处理的是那些不按模板出牌的报告。比如有些公司会在报告里写“报告期内公司内部控制不存在重大缺陷、重要缺陷”这时候重大缺陷数量和重要缺陷数量都应该记为0但文本里并没有一个明确的计数数字。再比如有些公司先写“公司认为内部控制整体有效”后面又补充了“存在一项重大缺陷”这段表述。这种情况下评价结论到底算“有效”还是“无效”不同机构的处理规则可能不完全一样。我自己的习惯是遇到这种情况会回到原始报告去看上下文以“是否存在重大缺陷”作为判断是否有效的最终依据。做研究之前我强烈建议抽样核对。具体做法是从数据集里随机抽取三四十条记录找到对应的原始PDF人工比对“结论、缺陷数量、审计意见”这三个核心字段是否一致。这一步看着笨但能帮你规避掉很多后续模型跑出来“莫名其妙的显著”。3. 高频分析场景与实操思路3.1 学术研究内控质量与盈余管理的检验如果你做公司金融或者审计方向的实证研究这个数据最常见的用法之一就是检验内控质量与财务信息质量的关系。理论基础很简单内控越差财务报告越容易存在有意或无意的错报盈余管理空间就越大。典型的回归设定是以操纵性应计利润绝对值比如用修正Jones模型算出来的ABSDA作为被解释变量以内控缺陷哑变量或缺陷数量作为核心解释变量再控制公司规模、资产负债率、总资产收益率、经营性现金流、审计费用、独立董事占比等常规变量。数据分析时可以按以下逻辑来组织先做全样本的OLS回归看缺陷变量的系数是否显著为正。如果显著为正说明披露内控缺陷的公司盈余管理程度也更高两者存在正向关联。再做细分样本回归比如按产权性质分国有和非国有、按行业分制造业和非制造业看这个效应在不同子样本里是否有差异。最后做内生性处理因为内控质量和盈余管理可能存在互为因果的关系——盈余管理压力大的公司内控建设也可能更敷衍。常见做法是用滞后期变量、倾向得分匹配PSM甚至两阶段工具变量回归来缓解这个问题。数据层面要注意内控缺陷是典型的“低频变量”。大多数公司大多数年份都是0缺陷如果直接做OLS残差容易出现偏态。我习惯把“是否披露重大缺陷”作为主要解释变量用Probit或Logit模型做辅助检验用缺陷数量做稳健性回归。3.2 投资与风险排查用缺陷信号辅助“排雷”学术之外这套数据在做个股风险筛查时也很有用。虽然内控信息本身不是高频数据但它提供的信号是其他财务数据里看不出来的。我常用的一个思路是关注“连续披露缺陷”或“缺陷严重程度攀升”的公司。比如某家公司连续两年都披露了重要缺陷第三年突然升级为重大缺陷即使它的利润表看起来还行你也要小心后续可能出现的坏消息。因为内控失效往往先于业绩变脸尤其是在资产减值、关联交易、资金占用这些环节内控缺陷最后都会以财务损失的形式暴露出来。还有一个信号是内控审计意见类型。如果一所公司当年的内控审计意见是否定意见或无法表示意见这基本等于第三方给它的内控体系投了不信任票。在组合管理里这样的公司即使估值好像很低也最好是回避或者至少做深度尽调再决定。当然也要说清楚局限性。内控报告披露和财务报告披露是同一个时间窗口也就是说等你看到“重大缺陷”的时候坏消息往往已经部分体现在股价里了。你不能把它当成一个能提前埋伏的领先指标而应该把它当成一个“排除项”用来过滤掉那些治理方面有明显硬伤的公司。3.3 趋势分析和行业对比的几个具体做法除了个股维度这套数据还适合做横截面和时序上的对比分析。最简单的描述统计就是计算每年“披露内控缺陷的公司比例”和“获得非标准内控审计意见的公司比例”然后看趋势。时间趋势上你会观察到两个比较明显的规律第一在监管强制要求内控评价和审计之后的前两三年缺陷披露比例会有一个脉冲式的上升很多公司首次披露积压的问题之后随着整改推进比例会慢慢回落。第二近年来的披露比例又重新走高因为交易所规则趋严市场对内控缺陷认定标准的颗粒度要求更细了。行业对比上金融保险业由于强监管内控体系相对完善缺陷披露比例通常低于其他行业制造业因为产业链长、子公司多控制环节复杂更容易出现一般缺陷而互联网和软件服务业虽然财务内控可能没问题但在信息系统控制、数据安全方面反而有新的挑战。做横向对比的时候有一个口径问题要特别小心一定要看统一时间窗口下的数据。比如你想比较制造业和金融业的重大缺陷比例必须把样本限制在同一报告年度内而且尽量等当年披露季结束之后再拉数据否则很多还没披露的公司会变成缺失值导致比例失真。4. 数据使用中的常见坑与排查经验4.1 报告标题和版本五花八门筛选别太死板A股公司关于内控评价的披露标题表面上看起来差不多实际上什么写法都有。有的是“内部控制评价报告”有的是“内部控制自我评价报告”还有“董事会对内部控制有效性的自我评价报告”、“内部控制评价暨审计报告”等等。如果你用字符串匹配去做自动筛选很容易因为关键词没匹配上而漏掉样本。我踩过的最尴尬的一次是早期筛选时用了“内部控制评价报告”作为精确匹配关键词结果漏掉了一批标题为“内部控制审计报告”和“评价报告修订版”的公司。后来学乖了筛选逻辑改成标题中必须包含“内控”或“内部控制”同时包含“评价”并且排除掉“审计计划”等无关文件。如果你是直接用别人整理好的数据这个问题可能不明显但如果自己去搜原始报告补漏一定要把关键词设置得宽泛些。4.2 “未披露缺陷”不等于“没有缺陷”这是最容易误读数据的地方之一。很多公司在评价报告里写的是“报告期内公司未发现内部控制重大缺陷”这句话的意思其实是“我披露了没有重大缺陷”这是一个披露行为而不是“这个变量缺失”。但在结构化数据里这个信息可能表现为两种形式一种是重大缺陷数量记为0另一种是因为原文没有具体数字数据加工方没有填值于是变成了空值。如果你不假思索地把空值和0混在一起处理后续做统计时就会出问题。我的处理习惯是单独构造一个哑变量命名为“是否披露了重大缺陷”只要报告中有明确的“不存在重大缺陷”或“重大缺陷数量为0”的表述这个哑变量就取1代表“有披露行为”如果再细分为“披露了存在重大缺陷”那又是另一个哑变量。这样既尊重原始披露的事实又不会丢失信息。4.3 跨年度跨市场合并时主键要选对当你把内控评价数据和其他财务数据、市场数据合并时主键的选取直接决定了会不会有重复和错配。很多初学者会直接用“公司简称年份”合并结果因为简称变更、重名、ST加星号前缀等问题导致合并结果错乱。比较稳妥的做法是用证券代码加报告年度作为合并主键。如果数据版本里没有证券代码那就先用证券名称去匹配一份公司代码表把代码补上。这里有个细节公司可能在一年内变更代码所以合并时要用“当时的代码当年的报告年度”而不是“现在的代码当年报告年度”。跨板块数据合并的时候还要注意上市时间。新上市公司当年一般不需要披露内控评价报告所以这类公司在你的样本里应该是缺失值而不是“无缺陷”。如果你把缺失值当成“没有披露缺陷”Thats a serious problem。4.4 自我评价结论与审计意见不一致时怎么办前面说过评价报告是公司自己写的审计报告是会计师出的两者可能不一致。最常见的不一致情形是董事会说“内控有效”但会计师出具了否定意见。这种情形在ST公司、被立案调查的公司里比较常见但对研究者来说是很有信息含量的事件。如果你遇到这类样本我建议不要强行合并成一个变量而是把它们当成两种独立的信号。你可以构造一个“信号一致性”变量如果自我评价结论和审计意见均为正面记为“一致正面”如果前者positive、后者negative记为“冲突”或“过度自信”。这种变量在研究市场反应和审计师变更时往往会有意想不到的解释力。此外要注意审计意见类型的口径。有的公司虽然内控审计意见是标准无保留意见但财务报告审计意见里带了“强调事项段”说明公司面临持续经营风险。这种情况下内控看起来没问题其实公司情况并不乐观。所以做分析时尽量把内控审计意见和财务报告审计意见分开看不要笼统地用一个“审计意见”字段。5. 进阶玩法多源数据结合与深度分析5.1 与财务数据合并时的滞后期设计把内控缺陷数据和其他公司特征数据合并时最重要的设计决策是滞后期怎么选。因为你看到的内控评价报告反映的是上一年度的内控情况而这些信息真正被市场和研究者知道是在披露日当天及以后。所以如果你要做“内控质量对未来业绩的预测”应该把t年的内控缺陷数据与t1年的财务业绩或者t1年的风险事件比如违规处罚、诉讼、资产减值进行关联分析。反过来如果是解释“什么样的公司容易出现内控缺陷”则用t-1年的财务和治理特征去预测t年的缺陷。滞后期选对了因果逻辑才顺。很多刚做实证的同学把同一年度的内控缺陷和ROE放同一个方程里做回归也没有错但解释起来会很别扭——到底是内控差导致了ROE低还是ROE差的公司更没心思搞内控根本说不清。至少做一个滞后期设计会显得你的研究设计更成熟。5.2 用文本字段做缺陷内容的二次分类CnOpenData里如果带有缺陷描述或缺陷摘要的文本信息不要浪费这类文本可以做很多有意思的二次分类。比如把重大缺陷的原因分成财务报告舞弊类、资金占用违规担保类、资产减值管理类、信息系统控制类、管理层凌驾控制类等。用Python做这个很简单核心思路是先定位到缺陷描述字段然后用定义好的关键词词典进行标注。你可以用下面这段逻辑做一个初步分类缺陷原因分类的具体流程可以这样来先读取数据中“重大缺陷描述”那个字段然后针对每个类别设置一组关键词比如“资金占用”“违规担保”属于“资金运作类”“虚假记载”“财务舞弊”“利润操纵”属于“财务报告类”“信息系统”“系统权限”属于“信息系统类”。如果一段文本命中多个类别就分成多列标记或者按优先级取最严重的那一个。当然这里的坑在于NLP文本非常不规范同一件事有几十种写法。我之前在做“违规资金占用”分类时关键词库从最初的10个词一路扩充到80多个最后还是会有漏网的。所以在做这类工作前先随机读50条原始文本摸清表达习惯再定关键词词典会比直接硬套通用词典靠谱得多。5.3 稳健性检验的常规做法与频率说明如果你拿这套数据发论文审稿人大概率会关心两个问题第一你的核心变量是不是稳健第二你的结果是不是受样本选择影响所以稳健性检验几乎是必须做的。我的建议是至少做以下几组更换核心变量的衡量方式。主回归用“是否披露重大缺陷”稳健性检验可以用“缺陷数量合计”或者“是否披露任意缺陷”看系数方向是否一致。换样本。剔除金融行业公司因为它们的报表结构和监管环境跟一般工商企业差异太大剔除当年新上市公司因为新上市公司内控报告的披露规范和存量公司不完全一致剔除ST和退市整理期公司看看结果是不是由极端风险样本驱动的。换估计方法。主回归用OLS稳健性可以用Logit、Probit、Tobit或者负二项回归。由于缺陷数量是非负整数且在0处堆积用负二项回归处理缺陷数量会比分OLS更让人信服。还有一点我觉得挺重要的就是频率问题。内控缺陷这种数据尤其是重大缺陷本来就是小概率事件。如果你在样本中看到“重大缺陷披露比例不到3%”这很正常不代表数据有问题。千万别为了“让显著结果更好看”去调整样本或拼凑变量那只会让论文在复现的时候崩掉。6. 实际操作中的重要提醒与我的个人习惯最后聊一点我自己长期使用这套数据的个人习惯算是一些土办法但确实帮我省掉过很多麻烦。第一下载数据后不要急着跑模型先做一轮“体检”。我一般会用表格透视统计一下每年有多少条记录、评价结论分布如何、缺陷数量是否异常集中、有没有空值或明显录入错误。体检结果如果异常先排查原因再进入正式分析。第二养成版本管理的习惯。数据更新之后字段口径可能微调旧文件和新文件不一定完全兼容。我会把每一次下载的版本标上日期并在分析脚本里注明数据来源版本号。这样如果后续有人问“你这个数据是哪一批的”我能立刻回答出来。第三必须保留“回头看原始报告”的通道。结构化数据再精细也不可能替代原始PDF。我自己的流程是每当模型里出现一个非常“出乎意料”的重大缺陷样本比如一家看起来很正常的白马股突然被标记为存在重大缺陷我就会把那一年它的原始内控评价报告调出来把相关段落读一遍看看是不是真的以及背后的背景信息是什么。这样的“异常值检查”看起来费时间但经常能发现数据里的个别字段错位问题也能帮你对研究对象形成更具体的认知。当年我第一次用这套数据做全样本回归的时候发现大量公司连续五六年“零缺陷、评价有效”当时的第一个念头是“这套数据是不是有问题”。后来去翻了原始报告才明白这就是A股内控披露的现实——大多数公司确实常年不提重大缺陷但这个“不提”本身恰恰就是你要研究的样本特征。从那之后我就养成了一个习惯任何结构化数据拿到手先看分布再看报告最后才谈模型。说回工具本身。CnOpenData这套A股上市公司内部控制评价报告数据给我的最大感受是它把一项原本极其琐碎的数据整理工作压缩到了几秒钟就能查询和下载的地步。如果你正在做公司治理、审计质量、风险管理相关的研究或者你需要批量扫描A股上市公司的内控风险信号这套数据可以帮你把精力集中在分析和判断上而不是消耗在“从几百页PDF里找一句话”这种纯体力劳动上。最后再补一句我在实践中的体会数据下载只是起点真正的功夫在下载之后怎么用、怎么和原始报告相互印证的那一部分。
返回列表