尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

A股内控评价报告:从文本到实证研究的关键指南

A股内控评价报告:从文本到实证研究的关键指南 研究公司治理、财务会计和审计方向的人只要做过A股实证论文大概率都绕不过一个头疼的问题上市公司的内部控制评价报告到底怎么找、怎么读、怎么转成能跑回归的数据。这个问题的答案过去只能靠人工下载几百份PDF一篇篇翻现在则有专门的结构化数据集可用CnOpenData的A股上市公司内部控制评价报告数据就是其中之一。这个数据集解决的核心问题很简单把A股上市公司每年对外披露的内部控制自我评价报告从非结构化的文本表格整理成可以直接用于统计分析的面板数据。它覆盖了公司代码、年份、评价结论、缺陷等级、缺陷数量、整改情况等关键字段基本可以支撑起公司治理、内部控制有效性、审计质量、信息披露质量这几条主流研究线。适合正在写硕博论文的学生、做实证研究的青年教师以及需要快速摸底企业内控状况的金融机构风控人员参考使用。1. 先搞清楚A股内部控制评价报告到底是个什么东西1.1 一份报告背后的制度逻辑在展开数据本身之前得先说清楚这份报告是什么。内部控制往简单了讲就是公司为了保证经营效率、财务报告可靠、合规经营而设计的一套内部机制包括控制环境、风险评估、控制活动、信息与沟通、内部监督五个要素。A股上市公司被要求每年开展内部控制自我评价并对外披露评价报告这属于信息披露义务的一部分。报告的核心内容是公司董事会要表明对内控有效性的结论同时披露在评价过程中是否发现了内部控制缺陷缺陷属于重大缺陷、重要缺陷还是一般缺陷以及对应的整改情况。与外部的内控审计报告相比这份评价报告是公司自己对自己做的体检立场相对主观但信息量非常丰富尤其是缺陷披露部分能看出很多财务数据看不出来的治理问题。从研究角度看这份报告的价值在于它提供了“管理层视角的内控质量衡量指标”。学者们既可以直接用评价结论是否有效做因变量也可以用缺陷数量、缺陷等级做解释变量去解释盈余质量、审计收费、违规概率、融资成本等问题。正是因为用途广它才值得被做成一个专门的数据库。1.2 为什么这个数据值得被结构化原始状态下内控评价报告都是以PDF或Word形式披露的少则十几页多则几十页。数量上A股几千家公司每年披露时间跨度拉长就是几万份文件。文件格式还不统一有些公司用表格有些纯文字叙述缺陷认定标准的表述五花八门就算只整理“缺陷数量”这一个字段靠人工统计也是巨大工程。更重要的是报告里的关键信息经常藏在段落里比如结论可能是“公司不存在财务报告内部控制重大缺陷”而不是明明白白写一个“有效”或“无效”的选项。不做文本解析原始数据根本没法直接用。CnOpenData这类数据服务商做的事情就是把这些非结构化内容抽出来转成一行行的规范字段。研究者拿到手之后省掉的是最繁琐的下载、清理、编码环节把时间花在真正的分析上。1.3 谁最适合用这份数据说实话这份数据不是万能的但它的受众面比想象中宽会计、金融、公司治理方向的硕博研究生做实证论文时缺一个覆盖广、标准化程度高的内控变量这是最直接的用途。做审计研究的人需要把内控自评结果与内控审计意见、财务重述、盈余管理放在一起做匹配分析。银行信贷部门或评级机构的风控人员想要快速批量摸清一组企业的内控风险水平结构化数据比翻原文高效得多。做量化策略的私募研究者想把内控缺陷披露作为负面事件纳入选股或排雷模型字段化的数据可以直接入库。当然如果你是第一次做内控相关研究直接拿着整理好的数据之前最好还是抽几份原始报告读一读建立“文本感觉”否则后面处理变量的时候很容易踩坑。这个我后面单独展开讲。2. 核心字段与研究应用场景拆解2.1 一份结构化的内控评价数据通常长什么样CnOpenData的数据集我没法把每个字段都背下来但内控评价报告这类数据服务商的字段设计逻辑高度一致通常包含以下模块字段类型常见字段示例说明公司标识证券代码、公司简称用于匹配其他数据库的唯一键时间标识报告年度、披露日期、董事会决议日期区分报告期与披露期面板数据建模的关键报告基本信息报告名称、报告类型首次/更新、页码判断报告版本是否完整评价结论内控是否有效、是否财务报告内控有效、是否非财务报告内控有效核心因变量之一三者的含义差别很大缺陷信息重大缺陷数量、重要缺陷数量、一般缺陷数量、缺陷描述文本缺陷等级的分类是研究中最常用的解释变量整改信息是否整改完成、整改措施描述治理修复研究的关键字段审计链接是否同时披露内控审计报告、内控审计意见类型可单独做审计意见与自评结论的对比研究这里要特别提醒一点同一家公司在同一年度可能存在“财务报告内控有效性”和“非财务报告内控有效性”两个结论这两个结论并不一定相同。财务报告内控主要与财务信息生成流程相关非财务报告内控管的是合规、资产安全、经营效率等更宽的内容。研究时如果不区分直接把“整体有效”当成“内控没毛病”结论很容易出问题。2.2 基于这些字段能做什么研究字段摆在那里能跑出什么结果才是关键。根据我接触过的研究设计最常出现的几条路数包括第一内控缺陷披露的影响因素研究。这类研究一般把“是否披露了内控缺陷”或“缺陷严重程度”作为被解释变量解释变量包括股权集中度、董事会独立性、审计委员会特征、管理层持股、机构投资者占比、审计师类型等。核心逻辑是回答“什么公司更愿意承认自己有内控问题”本质上是在研究治理机制与信息披露意愿的关系。第二内控评价有效性与经济后果研究。把内控有效性作为解释变量去解释股价崩盘风险、债务融资成本、盈余管理程度、审计收费、并购绩效等一系列公司后果。这里的关键是处理好内生性。内控好的公司往往同时体量大、盈利好、治理成熟直接用OLS容易被质疑遗漏变量因此不少研究会使用倾向得分匹配、工具变量或双重差分配合政策冲击比如强制披露范围的调整来识别因果关系。第三内控缺陷整改与公司修复研究。把报告中的整改字段用起来观察缺陷修复后公司绩效、审计意见、违规概率是否改善。这类研究对文本信息依赖度更高光是“是否整改”这个字段不够最好能结合缺陷描述和整改措施描述做一些文本分析比如区分是实质性整改还是文字上的“整改完毕”。第四内控自评与内控审计意见的比较研究。公司的自评结论和注册会计师出具的内控审计意见经常不一致这种差异本身就是很好的研究素材。有的公司自评整体有效审计师却出具否定意见说明自评可信度存疑有的公司自评发现问题但审计师认为内控整体有效又涉及审计师判断的独立性。2.3 字段拼接与指标构造的基本逻辑拿到原始字段后直接使用的情况其实不多多数研究需要构造自己的核心指标。我常用的几个构造逻辑如下缺陷披露哑变量只要报告期内披露了任何等级的缺陷数量大于0或者“缺陷描述”字段非空赋值为1否则为0。这个变量风险最简单也最常用缺点是会掩盖严重程度的差异。缺陷程度加权变量把重大缺陷、重要缺陷、一般缺陷分别赋权重比如按3比2比1加权求和构造一个连续变量。权重的主观性比较强稳健性检验时可以换不同权重看看结论是否稳定。自我评价有效性变量以“财务报告内控有效”或“整体有效”为准确认为1无效为0。需要注意样本中无效的占比通常极低直接用0和1做因变量可能面临稀有事件偏差建议搭配补充对数或改用其他能充分反映风险的指标。整改效果变量如果数据里有当年缺陷数量和上年缺陷数量可以构造“缺陷减少”变量反映公司是否真正修复了问题。变量构造的核心原则是每个变量都要能讲清楚它的经济含义不能因为字段多就随便生成几十个相关性极高的指标硬塞进模型。字段拼接这种事结构清晰比花哨重要。3. 数据处理实操从原始报告到可分析面板3.1 原始报告怎么变成结构化数据如果你拿到的是CnOpenData已经整理好的数据这一步已经替你完成了大半。但任何结构化数据都有出错的风险所以我还是建议了解原始报告的整理逻辑这样至少知道哪些字段容易出问题。原始PDF转结构化数据的基本流程无非三步文本抽取、模式匹配、人工核验。文本抽取常用Python的pdfplumber或camelot把PDF中的文字和表格一起提取出来。但内控评价报告的排版不统一有的公司把缺陷信息放在表格里有的写在段落里有的同时在两处都出现导致文本抽取后经常出现重复或缺失。模式匹配这一步主要是靠正则表达式和关键词库去定位关键句子。比如“未发现重大缺陷”“不存在重大缺陷”“未发现财务报告内部控制重大缺陷”这些表述虽然不同但语义都指向“无重大缺陷”。常见的处理方式是维护一个关键词字典先把每份报告转成纯文本再逐句匹配抽取出结论所在的那句话然后再按句子的模式判断结论类型。我自己写这类正则时吃过几次亏比如“不存在重大缺陷”和“不存在重要缺陷”只差一个字如果你用“不存在.*缺陷”去匹配两个句子都会命中最后必须再对匹配结果做二次语义判断。如果你打算直接使用整理好的数据我的建议是至少抽样十份原始报告逐个字段对照检查。重点看缺陷数量字段有些公司报告里写“存在1项重大缺陷、3项重要缺陷”整理后可能被拆成多行有些公司只写了“存在若干缺陷”没有精确数字整理方可能取值为空或者0这两种情况的含义完全不同。3.2 面板数据的关键键值处理内控评价数据最终要和你手里的财务数据、治理数据、市场数据合并键值的准确性直接影响样本量。最常见的键值是“证券代码报告年度”但实际操作中至少有三个坑股票代码变更借壳上市、吸收合并、退市整理期都可能出现代码变更。处理方式是用数据库里的“证券代码”配合“公司简称”再和Wind或CSMAR的证券代码变更表做交叉核对不能默认代码不变。报告年度和披露年度混淆内控评价报告报告的是上一个年度的内控情况但实际披露可能发生在次年三四月份。做面板数据时“报告年度”才是你该对齐的年份而不是披露日所在的自然年。不然你会发现2023年披露的报告内容讲的是2022年一不留神就把数据错配到2023年。多版本报告有的公司因为更正或补充一年内可能披露两版内控评价报告。合并时建议只保留最终版或者至少标记版本号防止重复计样本。我处理键值的习惯是合并后立刻做一层逻辑校验同一键值下是否有重复记录、关键字段是否缺失、结论字段的取值是否在设定范围内。这些校验看着基础但真能拦住大量低级错误。3.3 与财务数据、审计数据合并的细节内控数据单独用的时候不多更多时候要跟财务数据和审计数据合并。合并时最需要留意的是口径问题。比如内控审计意见来自注册会计师出具的内控审计报告字段通常包括“标准无保留意见”“带强调事项段的无保留意见”“否定意见”“无法表示意见”。内控自评结论则是董事会对内控有效性的自我判断。两者之间的差异是研究重点但如果你直接把自评结论的“有效”当成“审计无保留意见”的替代逻辑就错了。这两套意见的生成主体、依据标准、责任边界都不一样合并时必须保持字段独立。再比如与财务数据合并时内控缺陷往往与财务重述、业绩下滑、违规处罚高度相关。你要是只保留有内控报告的公司样本就相当于做了一个隐性的筛选因为退市风险大、治理很差的公司可能披露不及时甚至不披露。做样本筛选时要么用Heckman两步法处理样本选择要么至少报告一下样本公司和无报告公司在主要财务指标上的差异让读者对样本选择心里有数。再补充一点小技巧如果你后续要用到缺陷描述做文本分析建议不要只保留结构化字段而是把报告中的“缺陷描述”“整改措施”“评价结论”这三个原始文本字段单独存下来。文本数据不占多少空间但有了它们你后续如果想换一种分类方式或做语义分析就不用重新去下载原始报告了。4. 常见坑与排查技巧实录4.1 内控评价结论和内控审计意见不是一回事这是我这几年见得最多的低级错误但也是最容易在论文里被审稿人抓住的问题。内控评价结论是公司董事会自己给出的强调的是“公司按照标准进行了评价内控有效”内控审计意见是外部审计师独立发表的强调的是“注册会计师是否认为公司在所有重大方面保持了有效的内部控制”。实际操作中两者不一致的案例大量存在。一种典型情况是公司自评认为整体有效但未披露重大缺陷审计师却出具否定意见理由是审计师发现了一个自评漏掉或轻描淡写的重大缺陷。这种不一致本身就是内控信息质量低的表现。研究时如果混用两个变量很可能得出一个被严重高估的内控有效比例从而扭曲所有与内控有效性相关的回归结果。遇到这种情况我通常建议大家把两个变量同时放进模型先分别跑再构造一个“自评与审计一致与否”的变量做交叉分析往往会有意外发现。4.2 各公司缺陷认定标准差异很大内控缺陷分重大、重要、一般三个等级但它们不是按绝对金额统一划定的。监管框架给出的是原则性标准具体量化标准由公司自己定这就造成一个现象同样是5000万元的资产损失在一家资产规模几百亿的大型国企可能被认定为一般缺陷在一家小市值公司可能就构成重大缺陷。这意味着什么意味着不同公司之间单纯比较“缺陷数量”或“是否有重大缺陷”并不完全等价。如果样本里同时包含大型和小型公司缺陷变量的横截面可比性值得警惕。我的处理经验是在基准回归中用标准化后的缺陷变量稳健性检验时改用缺陷原始描述进行人工再分类或者引入公司规模作为交互项看看缺陷认定差异是否影响核心结论。对于自动化程度要求更高的研究也可以用文本相似度算法给每家公司披露的认定标准做聚类把认定标准相近的公司分在一起再比较。4.3 缺失样本不是随机的内控评价报告并不是每一家公司每一年都有。早年A股强制披露范围较窄很多公司并不出具内控评价报告后来要求逐步扩大但有些公司依然拖延披露还有部分ST、退市整理期的公司信息披露质量极差根本找不到最新报告。如果忽略了这种非随机缺失回归样本可能就是系统性偏向“治理较好、规模较大、风险较低”的公司实证结论天然被高估。处理方法上最基本的要看样本覆盖年度和行业分布对比有样本和无样本公司的资产规模、亏损概率、ST状态进一步可以做Heckman选择模型或者用年度行业均值填充并加缺失变量标记至少要让读者知道缺失的存在和潜在影响。不要指望数据服务商保证100%覆盖任何整理数据都有覆盖边界研究者自己要验证边界。4.4 “若干缺陷”到底算几个缺陷文本解析中最麻烦的问题之一是报告里大量出现“存在若干内部控制缺陷”“发现少许一般缺陷”这类模糊表述。整理成结构化数据时有些服务商可能把“若干”解析成空值有些直接填0有些填一个默认最小值处理规则直接影响缺陷变量的分布。排查方法很简单统计“缺陷数量”字段为0的样本比例再和原始报告抽样对比。如果0占比高得异常十有八九是解析规则把模糊表述归零了。这种情况下比较稳妥的处理方式是放弃精确数量改用“是否披露缺陷”的哑变量或者结合文本特征给模糊表述单独标记一个分类。毕竟做研究追求的是信度和效度平衡与其用一个看似精确但实际不可靠的连续变量不如老老实实降级到分类变量。4.5 报告期时点不一致内控评价报告通常以12月31日为评价基准日披露时间在次年3月到6月之间。但个别公司可能出现中期报告、专项报告或更新版报告不同报告的基准日不同。如果你把一份6月30日的半年度内控评价信息和年度报告混在一起做面板时间口径就乱了。建议收到数据后先看“报告期”字段而不是只看年份。把非年度或非12月31日为基准的报告单独标记不在主回归里混用。如果是做事件研究还要把“披露日”和“报告期”分开因为市场只能对披露事件做出反应用的是披露日而公司内控状态本身对应的是报告期用的是基准日两个时点不能互相替代。4.6 数据中的“幽灵重复”结构化数据在合并过程中容易因为来源不同产生重复行。比如同一年度同一家公司一条来自公告原文的解析另一条来自年报中董事会报告的重复披露。合并后的表看着行数没爆但去重后才发现核心字段存在冲突。我的排查办法是先按证券代码报告年度报告类型分组统计组内行数超过1行的一律拿出来人工检查。再用结论字段的取值分布做个直觉校验比如“评价有效”占比是否在90%以上缺陷披露占比是否在20%到60%之间如果偏离常识很多大概率是数据结构有问题。做研究不是数据越多越好干净一致才是第一位的。5. 数据引用与合规使用的几个小提醒5.1 学术引用和版权规范使用任何商业数据库都涉及版权和引用规范。CnOpenData这类平台提供结构化数据但原始报告内容来源于公开披露信息数据的组织、排版、清洗过程属于数据库制作者的智力成果。在论文里使用要注明数据来源实证研究中通常会在数据来源段落写“内部控制评价数据来自CnOpenData数据库财务数据来自CSMAR/Wind”等说明这样既尊重数据提供方的劳动也方便读者和评审者追溯原始资料。另外注意阅读数据使用许可。部分数据库不允许把整理后的数据完整公开分享论文只报告汇总统计和回归结果不违法违规。千万不要因为“报告是公开的”就直接把别人整理好的全量数据打包挂到网上这既可能侵权也容易给数据源厂商造成麻烦。做研究的人守规矩路才能走长。5.2 理解数据的边界结构化数据永远是原始报告的压缩版本它在移除格式噪音的同时也可能过滤掉一部分语境信息。比如缺陷数量是一个数字但它背后的缺陷性质、涉及的业务环节、管理层对问题的定性措辞都只能从原始文本里读到。我做内控研究时的习惯是核心结论必须结合文本示例来佐证。回归结果告诉你有缺陷的公司盈余管理程度更高这是统计关系但要说明为什么最好能从报告里摘出几段典型的缺陷描述展示企业是怎么描述内控不足的。这种“定量为主、文本佐证”的模式既发挥结构化数据的高效性又弥补纯数值数据的语境损失。5.3 第一手核验永远不能省最后再强调一遍任何整理好的数据都不能替代原始核验。特别是关键因变量比如“是否存在重大缺陷”“内控是否无效”这类字段直接决定论文结论你至少要抽样核查50到100条记录。当年我自己拿内控数据做复现时随机抽了30份报告逐行核对结果发现两条记录的“重大缺陷数量”都被错误解析成0。30条里发现2条错误比例不低。从那以后凡是涉及重大缺陷、审计意见这些核心变量我必做抽样核验。核验的路径也不复杂拿到CnOpenData数据后随机抽一家公司一个年度去官方公告渠道下载对应的PDF报告打开找到缺陷披露段落与数据字段逐一比对记录不一致的地方。如果错误率低于2%且错误无明显系统性基本可以放心使用如果错误集中在某些年份或某些行业就要单独排查原因。6. 实操心得与个人经验数据做到最后拼的其实不是跑模型的手速而是对数据生成过程的理解程度。用内控评价数据这两年我自己的体会可以浓缩成三条。第一条尽量保留原始报告标识。处理时在数据集里同时保留“披露日期”和“报告期”并给每条记录加上一个原始的“公告名称”字段。这样万一后续做事件研究或样本复核不用每次翻回去重新匹配。第二条内控数据跟着治理结构走才有解释力。单独的缺陷数量在模型里估计出来效果很有限一旦加上股权集中度、两职合一、审计委员会规模这些治理变量做交互解释力度会明显改善。这也提醒我们买数据不要只看单个库内控、财务、治理、审计数据要配合着选。第三条做内控量化研究耐心和洁癖缺一不可。清洗一个“缺陷描述”文本字段控制一个“报告版本”变量看似无关紧要但最终论文的稳健性与可信度就藏在这些细节里。善用结构化数据同时敬畏原始文本这套方法论本身比任何单一数据集都值钱。
返回列表