☰
从公告到面板数据:A股股权激励数据集构建全流程指南
2026/10/15 6:22:39 网站建设 项目流程

我前阵子接了个活儿,要整理一份A股上市公司股权激励数据,时间跨度从2005年一直拉到2024年。听起来像是个跑数的小任务,真做起来才发现,这活儿比想象中麻烦得多——早期公告格式五花八门、样本量小到可怜、很多激励方案中途夭折,光是把“到底哪些公司做过股权激励”这件事说清楚,就要花掉一大半时间。写这篇文章,是想把这套从原始披露到可用数据集的完整链路记录下来。如果你正在做股权激励课题,或者想用这批数据做研究、做量化分析,应该能帮你省下不少时间,尤其是那些数据库里查不到、只有翻公告才能发现的细节,我尽量一次讲透。

1. 先弄明白:你需要的股权激励数据,精确到哪个颗粒度

做任何数据项目,第一步都不是急着下载,而是把字段和口径定清楚。股权激励这条线尤其如此,因为上市公司之间的披露习惯差异极大,同一个意思,有的公司写“期权授予”,有的写“限制性股票解锁”,还有的混合在一起。如果你连“一条完整的股权激励记录应该包含什么”都没定义好,后面清洗一万遍也白搭。

1.1 一条完整记录应该包含的字段

字段类型分析用途
证券代码公司标识合并多期方案、关联行情和财务数据的关键
证券简称辅助标识核对更名、模糊检索
首次公告日期时间标识事件研究的零时刻
激励方式分类变量股票期权、限制性股票、混合等
激励对象人数数值衡量激励覆盖面
授予数量数值计算激励强度的分子
总股本数值计算激励强度的分母
授予价格或行权价格数值估计激励成本与折价幅度
定价折扣比例反映激励力度的另一维度
有效期、锁定期数值判断方案时间结构
分期解锁或行权安排结构化文本解读解锁节奏
业绩考核门槛文本后续业绩兑现判断依据
股份来源分类定向增发、回购、存量股份等
方案状态分类实施中、完成、终止、未通过
方案期数顺序编号标注同一公司的第几期方案

这十六个字段是我做完这份数据后,认为“不能再少了”的最低粒度。前几项好理解,后面几个字段容易被忽略,我单独说说。

“授予数量”和“总股本”要配套使用,因为激励强度常用的算法就是授予数量占当时总股本的比例。这里有个细节:总股本要用方案公告时的数据,不能用最新口径。早年很多公司做过增发、送转,如果你用今天的股本做分母,比例会明显偏小,跨期比较就失真了。

“业绩考核门槛”是最容易被数据库简化掉的字段。很多库只给“考核期三年”这类描述,但具体是净利润增速不低于多少、净资产收益率不低于多少,这些指标和数值直接影响日后的达标判断。我不建议把这字段当文本存起来就完事,最好拆成“考核指标类别”和“目标数值”两列。

“方案状态”也很关键。有些公司董事会刚发了预案,后来股东大会没通过;有些方案实施到一半,因为股价倒挂被终止。这些状态如果不记录,你的样本里就会混入“纸面方案”和“真实落地方案”,做研究时结论可能完全跑偏。

1.2 口径边界:什么算股权激励,什么不算

这个坑我一开始就踩了。很多人把员工持股计划也算进股权激励,理由都是“反正是拿股票给员工”。但从研究角度,这两类最好分开。

激励类型是否纳入本研究样本理由
股票期权纳入经典股权激励,等待期加行权条件
限制性股票纳入主流形式,折扣买入加解锁考核
股票增值权视情况纳入境内上市公司用得少,多见于部分特殊场景
业绩股票谨慎纳入与业绩目标直接挂钩,部分研究会单独处理
员工持股计划剔除资金来源、锁定期、考核机制差异明显

为什么要剔除员工持股?因为它的逻辑是“员工出钱买自家股票”或公司出资帮员工持股,绝大多数不设业绩考核门槛,行权期结构也不同。混进股权激励样本后,你的“激励强度”均值会被显著拉高,做激励与业绩关系研究时,结论甚至可能反转。

我见过不少论文把股权激励和员工持股放在一起讨论,然后得出“激励占比逐年上升”的结论,其实里面一大半是员工持股。如果你研究的是广义的“员工股权安排”,那就单独建一个扩展样本,但必须加一个“方案类型”标记,方便随时拆分。

另外要留意混合激励。有些公司同一期方案里既有期权又有限制性股票,申报的时候往往归为“其他”或混在同一份公告里。我的处理方式是按三种类别记录:纯期权、纯限制性股票、混合方案。混合方案做分析时,根据研究问题决定整体保留还是拆分到两类里。不拆的话,“期权样本”和“限制性股票样本”会互相污染,分组比较就不干净了。

2. 数据来源怎么选:数据库、披露平台和公告原文一个都不能少

很多人以为股权激励数据从数据库导出来就是干净的。我一开始也这么想,结果拿某行情数据终端导了一版,又拿某财经数据库导了一版,两个版本对不上:同一家公司同一期方案,一家标“实施完成”,另一家标“已终止”;一家记录的激励股数是“授予总量”,另一家直接写“首次授予量”。没办法,最后只能回到披露原文去核对。

2.1 三类数据源的定位与取舍

第一类是专业金融数据终端。它的优势是字段齐全、查询方便,适合快速摸清全市场样本的粗轮廓。缺点是早期数据质量不稳定,尤其2010年以前的方案,漏记、错记、状态更新不及时都比较常见;而且有些库只收录“成功实施”的方案,终止的干脆不显示。

第二类是官方指定信息披露平台。它聚合了上市公司全部公告原文,是核对股权激励方案的最终依据。缺点是检索和批量下载的效率低,适合逐家逐期核查,不适合直接拿来做全样本。

第三类是公司定期报告和相关公告的细读。这一层最容易被忽略,但又最关键。比如业绩考核门槛,很多数据库要么不收录,要么只给一个概括,具体指标和数值得回公告文本里抠。再比如预留股份的授予情况,后续进展往往只出现在公司临时公告里,数据库很少跟踪到这一步。

我建议的分层使用策略是:先用终端下载全量字段作为母本,再以披露平台的公告清单为骨架做样本增删核查,最后针对疑点和关键变量逐条回看公告原文。三条腿走路,才算稳。

2.2 公告日期这个字段的坑

“公告日期”是一个典型的跨库不一致字段。围绕一个股权激励方案,实际有四个关键日期:董事会预案公告日、股东大会通过日、正式授予日、股份上市流通日。

很多数据库只给一个“公告日期”,你根本不知道它指的是哪一天。如果做事件研究,这里差别很大——信息第一次公开的时点是董事会预案公告日,市场在那一天就会反应;等到授予日再算超额收益,价格早就消化完了。

我的做法是同时保留“方案首次披露日”和“授予日”两个字段。前者用于事件研究,后者用于后续解锁或行权的时间轴计算。不同数据库偏好不同,有的喜欢存股东大会日期,有的存授予日,你要做的是统一映射,而不是拿来就用。

2.3 早期样本为什么特别难核

2005年到2010年之间,披露格式很不统一。有的公司在年报里简单提一句“拟实施股权激励”,半年后才有正式方案;有的公司方案调整了好几次,公告标题却差不多,下载脚本很容易抓到旧版本。这一时期的股本数据也和现在不一样,总股本经常变动,计算比例必须回到当期股本。

我的办法是对早期样本做至少30%抽检,用披露平台里的公告编号做唯一锚点,防止把修订前后的同一期方案当成两期。公告编号是信息披露体系里相对稳定的标识,比公告标题可靠得多。

3. 清洗链路:从20年公告文本到整洁面板数据的关键步骤

数据源拿到了,口径定好了,接下来就是最磨人的清洗环节。这一节我把自己的处理链路完整拆一遍,你可以直接当工作流模板用。

3.1 第一步:建立公告清单,按公司加年度粗去重

先去披露平台把标题里含“股权激励”“限制性股票”“股票期权”“激励计划”字样的公告全部检索出来,得到原始公告清单。20年跨度大概涉及上万份公告,第一步先按“证券代码加年份”粗去重,把明显重复的进展类公告归并到同一方案下。

粗去重之后,再人工扫一遍清单,标记出“预案”“修订稿”“授予结果”“解除限售公告”等不同阶段。这一步的目的是确定方案的发起点和终点,为后面设计主键打基础。

3.2 第二步:字段提取,正则和人工各扫一遍

结构化字段可以从公告表格里直接解析,比如授予数量、授予价格、激励对象人数。但这些字段在公告里的写法不统一,有的写“万股”,有的写“股”,有的写“万元认购”,直接正则提取很容易出错。我通常分三档处理:

结构化字段用规则提取,半结构化字段用关键词加上下文判断,非结构化字段只能人工阅读后手工补录。下面是一个最基础的提取示例,适合快速从一份公告文本里抠出价格和数量:

import re import pandas as pd text = "本激励计划拟授予的限制性股票数量为500万股,授予价格为8.5元/股。其中首次授予450万股,预留50万股。" price = re.search(r"授予价格[为是:]\s*([0-9.]+)\s*元", text) count = re.search(r"数量[为是:]\s*([0-9.]+)\s*万(?:股|份)", text) row = { "price": float(price.group(1)) if price else None, "count_wan": float(count.group(1)) if count else None } pd.DataFrame([row])

注意这只是最初级的正则,真实公告里会有“不超过500万股”“每股8.5元”“授予价格待定”等说法,一套正则根本覆盖不完。我的经验是维护一份规则清单,把常见句式都写进去,跑完后抽检人工确认,再根据漏报和误报迭代规则。反复三轮之后,提取准确率基本能到九成以上。

3.3 第三步:多期方案、修订方案和主键设计

一个公司在一年里可能同时推两期方案,也有公司把上一期终止后立刻推新一期。若只用“公司加年度”去重,会把重叠出现的两期样本误并成一条。我用的主键是“证券代码加首次公告日期加方案期号”,其中方案期号按公司内部出现的顺序编号。

凡是出现“修订”“调整”字样的公告,都回到它对应的期号下,并保留两个版本:原始口径和最新口径,同时记录修订日期。这样既能让别人复现历史状态,也能用最新口径做相对稳健的横向比较。

3.4 第四步:状态补齐与异常值过滤

“终止”“停止行权”“回购注销”“未获通过”这些状态标记,如果漏了,样本就只剩成功者了。我用关键词扫描加人工确认两步走,先对所有公告文本批量扫描,命中后再逐条人工确认,避免把“因部分激励对象离职而终止其份额”这种局部情况错判成整期方案终止。

数量和价格字段出现极端值时也必须回公告复核。我遇到过一份数据把授予价写成0.85元,实际是8.5元,小数点被人为或系统漏掉了;也遇到过把股数单位混用,导致个别公司激励比例超过总股本的情况。这类异常值不能简单剔除,要找到原始公告确认,再决定是修正还是删除。

4. 2005-2024年数据长什么样:三个不该忽略的阶段特征

清洗完,数据终于可以看了。如果把二十年的股权激励样本逐年摊开,会发现非常明显的阶段特征。这些特征直接影响你怎么用这批数据,所以专门写一节。

4.1 样本量:从每年几十家到每年数百家

早期年份的样本量很小,全年新增的股权激励方案基本可以数完。那个阶段上市公司数量本身有限,推出激励计划是相对少见的行为,样本主要集中在大型成熟公司;到了中后期,推出股权激励的公司数量逐年走高,覆盖面明显扩大,中小公司逐渐成为主力。

样本量变化对研究设计的影响很直接。做早期阶段的分析时,统计检验力天然受限,分组后每组可能只有个位数,这时候更适合用案例研究或者描述性统计。如果硬要把二十年的数据混在一起做面板回归,不控制“年份”这个维度,结果很容易被后期的大样本主导。

4.2 激励方式:从以期权为主到以限制性股票为主

阶段典型特征对数据处理的影响
2005-2009样本稀少,股票期权占比高,披露格式杂建议逐条人工核对,重点关注终止样本
2010-2015数量快速上升,限制性股票增多关注股本变动与预留股份处理
2016-2020数量井喷,方案披露趋于标准化注意同一公司多期方案并存
2021-2024更多新形式出现,条款差异化明显注意方案设计细节的编码与归类

不同的激励方式背后,公司面临的会计成本、税务节奏和员工心理都不一样。做分析时不能只看“有没有激励”,还要看“用什么方式激励”。我在这份数据里看到很典型的趋势:早期股票期权占比很高,后来限制性股票逐渐成为主流,近几年的新增方案里,限制性股票的占比已经远超期权。

这个切换不是纯研究问题,而是现实约束变化的结果,但作为数据使用者,你只需要知道一件事:如果不区分激励方式,直接比较二十年间的“激励强度”,会存在明显的结构性混杂。

4.3 不能忽视的“失败样本”

我统计了一下自己整理的这份数据,明确标注终止、失效、未过的方案占到整体方案的一定比例,早期年份占比更高。如果研究激励与业绩关系时只留成功样本,变量就被人为截断了,相当于只看了“活下来的方案”,忽略了“死掉的方案”。

失败样本的价值在于,它们是研究“什么条件下激励做不成”的天然素材。比如股价长期低于行权价导致期权失去价值、业绩目标定得过高导致无法解锁、公司内部治理出问题导致方案搁浅,这些场景都可以用失败样本来识别。

实操上,我建议建一个“状态”字段,至少区分五类:实施完成、实施中、主动终止、未获通过、其他失效。做“是否成功”分析时,把前两类归为成功,后面三类归为失败;做“是否实施”分析时,再把实施中和实施完成划入已实施。定义不同,结果完全不同,但字段必须先留好。

5. 数据能用来做什么:三个我优先尝试的分析方向

这批数据整理完,最终是要用的。下面三个方向是我在实际项目中会优先尝试的,算抛砖引玉。

5.1 激励强度与激励广度指标

最朴素的指标有两个:

激励强度等于授予股份数除以方案公告时总股本。这一个数字能快速反映方案对公司股权的稀释程度,跨公司比较时也相对可比。计算时一定要用公告时点的股本,后面因为回购、增发导致股本变化,不该回头改分子分母。

激励广度等于激励对象人数除以公司员工总数,用来衡量方案惠及范围。有的公司只激励核心高管,有的公司覆盖几千名骨干员工,这两类方案对不同人群的行为影响逻辑完全不同。

有些研究会把价格因素加进去,比如用授予价相对市价的折扣率来衡量“让利程度”。折扣越大,激励对象的感知价值越强,但公司承担的会计成本也越高。这个指标在数据库里往往缺失,需要自己从公告里补。

5.2 公告的市场反应

想做短期市场反应,事件研究法是标准操作:以董事会预案公告日为事件日,计算前后一个或多个交易日区间的超额收益。这个分析的成败,几乎完全取决于事件日定得准不准。

我建议至少留三列日期,分别是董事会预案公告日、股东大会通过日和授予日。做事件研究用第一列,做后续时间轴用第三列。把“首次公告日”单独拉出来,分别验证不同窗口期的超额收益,基本能看出市场对激励计划的解读是正面还是负面。

5.3 激励方式与后续业绩

把激励方式作为解释变量,观察方案落地后两到三年的业绩表现,这是实证研究里比较常见的做法。做这类分析时,核心问题还是样本选择:必须把终止方案单列出来,或者至少做一次包含终止样本的稳健性检验,否则你只是在比较“成功方案的激励效果”,研究结论推广不出去。

另外,业绩考核门槛本身也是很好的研究对象。有的方案要求净利润翻倍,有的只要求不亏损,门槛高低和后续实际达标情况之间的差距,恰好能反映激励方案的设计质量。

6. 整理完这批数据后,我最想提醒的三件事

第一件,保留原始公告的下载路径。每一个来源的公告编号、页码、下载时间都记下来,不然过两个月想复核,又要重新翻一遍。特别是一份公告里有多个价格、多期授予计划时,字段表格里看起来是同一行,真实来源可能分散在三份不同公告里。

第二件,任何一步做了人工调整,都写变更日志。我对早期样本手工补了几十个字段,当时觉得“这么明显的数不会记错”,后来复查时发现至少有两处确实是我看走眼了。有变更日志,至少能知道当时为什么这么改,改之前是什么值,改完之后是否影响后续计算。

第三件,做研究前先想清楚“成功”和“失败”的定义。同一份数据,定义不同,结论可能完全相反。把定义直接写成变量字段,而不是留在分析脚本的注释里,这样一年后再打开数据,还能复现当初的样本划分逻辑。

最后再分享一个小技巧:清洗时我用了一套关键词扫描规则来识别终止类公告,比逐条阅读省力不少。比如同时出现“回购注销”和“激励对象离职”时,很可能只是个别对象退出;同时出现“终止实施”“终止本激励计划”“不再执行”时,才是整期方案终结。这类规则需要反复迭代,建议从一开始就存成可复用的脚本,等下一批数据进来时,直接套用再微调就好。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询