做固收数据和债券研究的人大概都碰到过这种场面:会上有人问一句"绿色债券现在存量多少、都分布在哪些品种里",你打开终端拉了一张表,数字看起来挺整齐,散会之后另一个人用另一套筛选条件又拉了一遍,两个数差了两千多亿。标题里说的"绿色债券基本资料-债券分类",乍看只是把债券分类字段和绿色标签拼在一张台账上,实际动手就会发现,这是一项口径工程:绿色债券并不是一个独立的债券品种,它是横切在所有品种之上的一个属性标签,而"债券分类"这套分类树本身又有品种、主体、行业、评级好几个维度,两者一交叉,坑就全出来了。
这篇内容想解决的就是这件事:怎么把绿色债券的基本资料整理成一张口径自洽、可复核、能直接拿去支撑分析的底表。适合两类人看——刚接手债券数据库维护、第一次做绿色债券专题的分析师,可以照着这里的字段清单和判定流程直接落地;已经做了几年、每次出报告都要重新跟人核对一遍口径的老手,可以在第四部分的排查清单里找到几个常见错位的成因。我会按"为什么这么设计—字段怎么理解—怎么取数怎么算—出问题怎么查"的顺序讲,中间穿插我自己踩过的坑和几个能直接抄走的计算口径。
1. 先想清楚:绿色债券的资料整理为什么绕不开"分类"
1.1 一个反复上演的场景:三个版本的绿色债券余额
某资管机构的固收团队做过一次内部盘点,A同学按终端里"绿色债券"这个标签直接筛,得到一个数;B导师习惯按债券品种逐个核对募集说明书,得到第二个数;等到给管理层汇报时,风控那边按发行主体的绿色属性又算了一遍,第三个数字又不一样。三个数没有一个是错的,差别全在口径上:A同学筛出来的标签里混进了可持续发展挂钩债券,这类债券募集资金用途并不限定于绿色项目;B导师手工核的那版把几只绿色资产支持证券漏掉了,因为证券端的简称里根本看不出"绿"字;风控那版用的是主体口径,只要发行人是绿色产业主体,它发的所有债都算了进去,规模自然虚高。
这个场景说明一件事:绿色债券的"资料整理"从来不是取数问题,而是分类口径问题。你在动手拉数据之前,如果没把"什么算绿色债券""按债项还是按主体""存量还是发行量"这三件事定死,后面所有的汇总、排序、做图都是白费。
1.2 关键判断:绿色债券是标签,不是品种
做数据结构设计时,最容易犯的错是把"绿色债券"当成债券分类树上的一个节点,跟"中期票据""公司债"并列塞进去。这个做法在展示层面看着方便,实际会制造两个麻烦。
第一,它破坏了品种维度的完整性。一只绿色中期票据,它的品种属性是中期票据,绿色属性是贴标绿债,这两个信息是正交的。你把绿色当成品种,统计"中期票据发行量"的时候就会漏掉它,统计"绿色债券品种分布"的时候又会得到一堆无意义的结果。第二,它堵死了扩展空间。今天加"碳中和债",明天加"蓝色债券",后天加"转型债券",如果每次都往品种树里塞节点,这棵树很快就没法看了。
我一般的处理方式是主表加附表:主表放债券的静态要素(代码、简称、品种、主体、规模、票面、期限、评级、担保),附表单放绿色属性(是否贴标、绿色类别、募集资金投向、是否经第三方评估、披露情况)。两张表用债券代码做关联,一对零或一对一。这样做的好处是,品种维度的统计永远干净,绿色维度的筛选随时可以加条件,两边互不干扰。
1.3 三套口径的取舍:终端标签、监管口径、发行人自述
实际操作中你会遇到三套口径,它们的严格程度和覆盖范围都不一样。
终端标签是最省事的,字段直接给你,但它是二手信息,更新有滞后,边界也有自己的处理习惯,比如某些挂钩类产品会被归到绿色大类下。监管口径是最权威的,核心看募集资金投向绿色项目的比例是否达到约定门槛(业内常见是70%以上,部分品种要求全部投向绿色项目),但它需要你逐个翻发行文件,工作量极大。发行人自述最宽松,很多主体在年报里把"从事绿色产业"直接等同于"绿色债券发行主体",这个口径拿来写宣传稿可以,拿来做数据统计一定出事。
我的做法是:用终端标签做初筛,用募集说明书做终审,主体属性只作为辅助分析维度而不进入主口径。具体来说,终端标签筛出来的池子先全收,再逐只核对资金用途,把不符合的剔掉、把漏掉的补进来,最后在附表里单独留一列记录"判定依据",写清楚是靠简称关键词、靠品种、靠募集说明书哪一页判定的。这一列在后续被人质疑时能救命。
提醒一句:不要为了追求"池子大"而放宽口径。绿色债券统计里,多算十只的麻烦远大于少算十只——少算的补上就行,多算的会在交叉核对时反复被挑战,最后整张表都要重做。
2. 拆解终端里的债券分类字段:每一层分别在说什么
2.1 第一层:品种分类树与绿色债券的分布特征
债券品种分类是最基础的一层,各家终端的叫法略有差异,但主干结构基本一致:
| 大类 | 常见品种 | 绿色债券的分布特点 |
|---|---|---|
| 利率债 | 国债、地方债、政策性金融债 | 地方债中的绿色项目专项品种是主要来源,单只规模大、占比高,但贴标比例不稳定 |
| 金融债 | 政策性金融债、商业银行债、非银金融债 | 绿色金融债是贴标绿债的主力,认定相对规范,信息披露完整度高 |
| 信用债-企业类 | 企业债、公司债、中期票据、短期融资券、超短期融资券、定向工具 | 数量最多、单只规模偏小,绿色标签的准确性最参差,必须逐只核 |
| 信用债-结构化 | 资产支持证券、资产支持票据 | 绿色ABS识别难度最高,证券端简称通常不含"绿"字,要靠底层资产判断 |
| 含权类 | 可转债、可交换债 | 极少贴标,但不为零,筛选时容易被忽略 |
这张表最实用的一点是:它告诉你哪个格子必须逐只核对,哪个格子可以批量处理。绿色金融债和信息披露完整的绿色公司债,通常可以直接采信终端标签;绿色ABS和定向工具,几乎每一只都得回到发行文件去看底层资产和资金用途,因为这两类产品的简称命名没有统一规范。
2.2 第二层:发行主体属性与行业归属
主体属性这一层包含几个常用字段:企业性质(国有、民营、外资、公众企业)、行业分类、主体评级、是否上市。行业分类在不同终端里会有好几套并行,宽口径的一级行业(比如把制造业全归一类)适合做宏观汇总,细口径的三级行业适合做行业专题。
这里有个容易混淆的点值得单独说:主体属性是给发行人打的标签,不是给债券打的。一只由绿色产业主体发行的普通公司债,如果募集资金用于补充流动资金,它在债项口径上不是绿色债券。反过来,一家传统行业主体发行了募集资金全部投向节能改造项目的债券,它是绿色债券,但它的主体行业标签依然是传统行业。
我在做行业分布统计时踩过一次坑:直接把"主体行业=环保"的发行人发行的全部债券算作绿色债券,结果规模比逐只核对高出近四成。后来改成债项口径,同一批数据掉下来一大截,但每一只都能拿出资金用途说明,反而更经得起问。
2.3 第三层:绿色属性标签的细分与边界
这一层是整张表的核心,也是最容易出错的地方。常见的绿色相关标签有这么几类,含义和边界差别很大:
- 贴标绿色债券:募集资金专门用于符合条件的绿色项目,有明确的资金用途承诺和存续期管理要求。这是最严格的一类,是绿色债券统计的主口径。
- 碳中和债:贴标绿债下的一个子类,资金投向聚焦碳减排效益明显的项目。它同时是绿色债券,统计时容易和母类重复计数,做汇总必须去重。
- 蓝色债券:投向海洋资源保护和可持续利用相关项目,属于绿色债券的一个细分方向,规模小但确实存在。
- 可持续发展债券:资金用途兼顾环境和社会效益,严格说和纯绿色债券有重叠但不完全等同,是否纳入绿色债券口径要看你的统计目的。
- 可持续发展挂钩债券:票面利率与预设的可持续绩效目标挂钩,资金用途不限定于绿色项目,这是它和绿色债券最本质的区别。很多统计把它并入绿色债券,我认为不妥,至少要在附表里单独标出来,让看数的人自己决定要不要剔除。
- 转型债券:投向高碳行业减排转型项目,属于转型金融范畴,和绿色债券是并列关系而非包含关系。
把这几类的边界理清楚,你就明白为什么第一部分的三个数字会打架了——挂钩类和转型类被混进绿色口径,是最常见的规模虚高来源。
2.4 字段之间的联动关系与三个典型误读
单看字段都懂,放在一起就容易读错。我见过最多的三个误读是这样的:
第一个是把"绿色债券类型"字段当成唯一判据。很多终端的这个字段只对贴标产品填值,未贴标但实质绿色的债券是空的,你直接按非空筛选,会把一批实质绿债漏掉。
第二个是把主体的绿色认定和债项的绿色认定混为一谈。有些终端会在主体信息里给一个绿色产业标记,这个标记反映的是主营业务,不是资金用途,用它来筛债券一定出错。
第三个是忽略含权条款对期限统计的影响。绿色债券里有相当比例带回售权或赎回权,终端给的"期限"字段可能是发行期限,也可能是行权期限,两个口径做加权平均会得到完全不同的结果。做期限分析时,我一般两个都留着,列名写清楚"发行期限"和"行权期限",绝不混用。
3. 实操:从零搭一张能用的绿色债券基本资料表
3.1 先定字段:一张主表加三张附表
字段设计的原则是"够用就好,别贪多"。我自己的模板里,主表控制在二十个字段以内,附表按用途拆成三张。
主表字段清单:
| 字段 | 说明 | 常见坑 |
|---|---|---|
| 债券代码 | 主键,唯一标识 | 银行间和交易所代码规则不同,跨市场债券有两个代码,需要建映射 |
| 债券简称 | 辅助识别 | 简称会变,历史简称要留痕 |
| 发行主体 | 发行人全称 | 主体更名频繁,建议同时保留统一社会信用代码 |
| 债券类型 | 品种分类 | 不同终端分类粒度不同,要做一次归一 |
| 起息日 / 到期日 | 期限计算基础 | 到期日要区分法定到期日和行权日 |
| 发行规模 | 单位统一为亿元 | 有的字段是万元,有的是元,务必确认 |
| 票面利率 | 百分比数值 | 浮息债的票面是首期值,不能直接参与加权 |
| 期限 | 年,两位小数 | 用实际天数除以365,不要用"整年数"字段 |
| 债项评级 / 主体评级 | 分级 | 无评级不等于低评级,要区分空值和C |
| 担保方式 | 增信情况 | 分类口径各终端不一,需要归一 |
| 是否贴标绿债 | 0/1 | 判定依据要单独存一列 |
三张附表分别是:绿色属性表(绿色类别、募集资金投向、是否经第三方评估、认证类型、存续期披露情况)、主体信息表(企业性质、行业、注册地所属区域、是否为上市公司)、条款表(含权类型、回售日、赎回日、调整票面条款)。
3.2 取数与清洗:几个必须做的动作
取数环节没什么技巧,按品种分批拉、按年分批拉都行,关键在于清洗。下面这段是我常用的处理脚本骨架,字段名按你自己的表改一下就能跑:
import pandas as pd df = pd.read_excel("bond_master_raw.xlsx") # 1) 规模统一到亿元 # 先确认原始单位,这里假设原始字段是元 df["size_yi"] = df["issue_size"] / 1e8 # 2) 期限统一:按起息日到到期日的实际天数折算年 df["term_year"] = ( pd.to_datetime(df["maturity_date"]) - pd.to_datetime(df["value_date"]) ).dt.days / 365 # 3) 票面利率:浮息债首期票面单独标记,不参与加权 df["is_floating"] = df["coupon_type"].str.contains("浮", na=False) df["coupon_valid"] = df["coupon"].where(~df["is_floating"]) # 4) 按年做加权平均票面 def weighted_coupon(g): m = g["coupon_valid"].notna() & g["size_yi"].gt(0) if g.loc[m, "size_yi"].sum() == 0: return None return (g.loc[m, "coupon_valid"] * g.loc[m, "size_yi"]).sum() / g.loc[m, "size_yi"].sum() annual = df.groupby("issue_year").apply(weighted_coupon).round(4)清洗里最费时间的三件事,我按踩坑频率排个序:单位不统一(同一个字段不同年份的导出单位不一样,这个最阴)、日期为空(部分定向工具到期日缺失,期限算不出来,要单独标注而不是填0)、主体更名(同一家发行人三年内改了两次名,按名称去重会算成三家)。
3.3 绿色属性的判定流程:五步走,优先级不能乱
这一步是整张表的核心工序。我固定的顺序是这样的:
第一步,简称关键词初筛。含"绿色""碳中和""蓝色""GN""G"等标识的先全部捞出来。这一步只做加法不做减法,宁滥勿缺。
第二步,按品种补漏。绿色金融债、绿色资产支持证券这两个品类,简称里常常没有关键词,必须按品种标签单独捞一遍。绿色ABS还要往下一层看底层资产,基础资产是清洁能源收益权、绿色建筑相关应收款的,才算。
第三步,查募集资金用途。这是决定性的一步。看募集说明书里"募集资金用途"章节,确认投向绿色项目的金额占比是否达到约定门槛。这一步做完,前面两步捞出来的池子通常会砍掉一小半。
第四步,查第三方评估认证。有独立评估认证的,可信度更高,但不是必要条件——没有认证的贴标绿债依然算绿色债券,只是要在附表里标记"无第三方认证",方便后续做质量分层。
第五步,看存续期披露。已经发行超过一年的债券,看有没有年度绿色债券评估报告或资金使用情况说明。这一列不是判定条件,是质量指标,我在做"绿色债券信息披露完整度"这类分析时会用到。
实操心得:这五步不要图快合并。我曾经为了赶一份周报,把第三步和第四步并成一步,用"有第三方认证"直接代替"资金用途核查",结果把两只认证报告里写明资金用途为"补充营运资金"的债券算了进去,被复核的人一眼看出来。核查资金用途这一步没有捷径。
3.4 几个能直接抄的计算口径
数据整理完,接下来就是算指标。这几个公式是我反复用、反复被问的,写清楚免得每次都解释一遍。
加权平均票面利率:按发行规模加权,不用简单算术平均。原因很简单,一只50亿的绿色金融债和一只2亿的绿色中票对市场的影响完全不同,算术平均会让小券的话语权被放大。
$$\text{加权票面} = \frac{\sum(\text{票面}_i \times \text{规模}_i)}{\sum \text{规模}_i}$$
加权平均期限:同样按规模加权,但要明确用的是发行期限还是行权期限。做发行市场分析用发行期限,做久期管理用行权期限。
绿色债券发行占比:
total_by_year = df.groupby("issue_year")["size_yi"].sum() green_by_year = df[df["is_green"] == 1].groupby("issue_year")["size_yi"].sum() green_ratio = (green_by_year / total_by_year * 100).round(2)这里的分母用什么很关键。用"全部债券发行量"做分母,得到的比例会被利率债稀释到很低;用"信用债发行量"做分母,得到的比例更能反映真实的市场结构。两个都算一遍,报告里写清楚分母是什么。
绿色溢价(greenium):衡量绿色债券是否比同条件普通债券发行成本更低。计算方式是拿绿色债券的发行票面减去同期、同评级、同期限普通债券的发行票面,得到一个差值。差值长期为负,说明绿色债券存在发行成本优势;差值接近零或为正,说明这个优势不明显甚至不存在。
计算时要注意两个细节:一是配对样本要够,单只对单只的比较容易受个体因素干扰,我一般做同一发行人内部的配对(同一主体既发过绿债也发过普通债),样本干净得多;二是要剔除浮息债和含特殊条款的券,否则比出来的差异可能是条款差异而不是绿色属性带来的。
4. 常见问题与排查实录
4.1 同一只债在不同表里"身份"不一致
这个问题几乎每次做交叉核对都会遇到。表现是:主表里标了绿色,绿色属性附表里没有对应记录,或者反过来。原因通常有三个:一是两次取数的时间点不同,中间终端更新了标签;二是主键没对齐,跨市场债券用了不同代码;三是人工补录时只改了其中一张表。
排查顺序建议从主键开始。先把两张表的债券代码做一次全外连接,看有没有一边有、一边没有的;再看代码能对上但属性不一致的,逐个回原始文件确认;最后把结论落成一条规则写进流程文档,比如"标签更新后必须同步刷新附表并记录更新时间"。
4.2 漏标与错标:绿色标签的三个高频错位
错位一,挂钩类被当成绿色类。可持续发展挂钩债券的资金用途不限定,很多终端把它放进绿色债券大类的下拉选项里,直接按大类筛选就会混进来。解决办法是在附表里单独设"是否资金用途限定"这一列,做统计时先按这一列过滤。
错位二,绿色ABS的证券端被漏掉。资产支持证券的命名规则是按层级和期次来的,比如"某绿色1A1",简称里看不出绿色,只有底层资产是绿色的。这类必须从底层资产穿透判断,终端标签只能作为线索。
错位三,同一只债的绿色类别在不同年份被改过。这种情况多见于早期发行的债券,随着认定标准细化被重新归类。做时间序列分析时,如果不同年份用了不同版本的分类,同比数据的可比性会出问题。我一般的处理是以最新口径回溯重算全部历史数据,而不是用当年的口径算当年。
4.3 主体口径与债项口径混用导致的规模虚高
前面提过一次,这里专门展开。主体口径的逻辑是"发行人主营业务属于绿色产业,则其发行的债券全部计入",债项口径的逻辑是"这只债券的募集资金投向绿色项目"。两者算出来的规模差距可以很大,尤其是大型综合类发行人,它可能一年发几十只债,其中只有一兩只贴标。
在什么情况下可以用主体口径?做发行人层面的绿色金融敞口分析时可以用,但要明确标注"按主体口径"。什么情况下绝对不能用?向社会披露绿色债券市场规模、做绿色债券占比统计、计算绿色溢价,这三类必须用债项口径。
4.4 存量与发行量的时间口径
发行量是按起息日统计的当期新发规模,存量是某个时点上尚未到期的余额。这两个数字经常被混着用,尤其是在做"绿色债券市场规模"这类表述时。
存量的计算要处理三种情况:已到期的不计、含权债在行权后被回售的部分要扣减、提前偿还的部分要扣减。后两种情况在数据里往往没有直接字段,需要结合条款表和公告。我的经验是,如果只是做趋势分析,用"发行量累计减去到期量"的近似算法足够;如果要对外披露精确存量,必须逐只核对回售和提前偿还情况,这部分工作量大概占总工作量的三成。
4.5 常见问题速查表
| 现象 | 可能原因 | 排查动作 |
|---|---|---|
| 绿色债券规模明显偏高 | 混入了挂钩类或转型类 | 检查"是否资金用途限定"字段 |
| 某年数据突然断层 | 该年取数单位与其他年份不一致 | 核对规模字段原始单位 |
| 期限加权结果异常 | 含权债用了发行期限而非行权期限 | 分别用两套期限重算对比 |
| 主体数量对不上 | 发行人更名未合并 | 用统一社会信用代码去重 |
| 绿色ABS数量偏少 | 只按简称筛选 | 按品种标签补捞并穿透底层资产 |
| 票面均值失真 | 浮息债首期票面参与计算 | 剔除或单独标记浮息债 |
| 存量与发行量对不上 | 未扣减回售与提前偿还 | 逐只核对含权条款与公告 |
5. 让这份资料真正"耐看"的几条经验
5.1 建一张内部映射表,比什么技巧都管用
不同终端、不同年份、不同部门导出的分类字段,名字和粒度都不一样。今天叫"中期票据",明天叫"中票",后天又拆出一个"定向工具"的子类。如果每次分析都重新做一次归一,你的时间会全部耗在重复劳动上。
我一般的做法是维护一张映射表:左边是所有见过的原始取值(去重后的全集),中间是归一后的标准值,右边是映射规则和备注。这张表一旦建起来,后面所有的取数脚本都引用它,新出现的取值往里加一行就行。这张表看起来不起眼,但它能把每次做专题的时间从两天压到半天。
5.2 留痕与版本:别相信自己的记忆
数据表迭代几版之后,你绝对不会记得第三版为什么把某只债剔掉了。所以每一次判定都要留依据:判定来源(简称关键词/品种标签/募集说明书/第三方报告)、判定人、判定日期、备注说明。这四列加进附表,成本几乎为零,但能省掉无数次"这只为什么不算"的来回追问。
版本管理上,我的习惯是文件名带日期加版本号,不覆盖旧文件,同时在主表里加一列"数据截止日"。这个字段看着多余,但当你半年后回看一份报告,想确认当时用的是哪一版数据时,它就是唯一线索。
5.3 与外部披露做勾稽,是最有效的质检
自己做的表,自己查错很难查出来。最有效的质检方式是用另一套数据源做勾稽:拿交易所和银行间市场的公开披露信息,随机抽二十只债券,逐只核对代码、规模、票面、期限、绿色属性五项,看能对上几只。对上率低于九成,说明取数或清洗环节出了问题,回去查;对上率九成五以上,基本可以放心用。
这个动作我一般放在出报告前的最后一步,成本大概两三个小时,但它拦下过好几次致命的错误,包括一次规模单位错位导致的十倍偏差。
5.4 关于第三方评估认证这一列怎么用
很多人把"是否经第三方评估认证"当成绿色债券的判定条件,这个理解需要纠正一下:它是质量指标,不是准入条件。没有第三方认证的贴标绿债,只要募集资金用途符合要求,依然是绿色债券。
但这一列在分析里很有价值。你可以用它做分层:有认证的一组、无认证的一组,分别看发行利率、认购倍数、存续期信息披露频率,能看出市场对认证的定价反应。我做过一次粗略统计,有认证的那一组发行利差平均比无认证的低几个基点,虽然样本不算大,但方向上是一致的。
注意:做这类分层分析时,一定要控制主体评级和期限这两个变量,否则你比出来的可能是评级差异而不是认证差异。
5.5 后续可以往哪扩展
这套底表搭好之后,其实可以支撑很多延伸分析:绿色债券的行业分布演变、发行主体的地域集中度、不同品种的绿色溢价差异、存续期信息披露的完整度评分,甚至可以做绿色债券与非绿债券在二级市场的流动性对比。底表的口径越干净,这些延伸分析的可信度就越高。
我个人在实际操作中的体会是,这类资料整理工作最容易被低估——它看起来只是"拉数",实际上一半时间在定口径、三成时间在核对、两成时间才在拉数和算数。刚入行的时候我总觉得核对是浪费时间,后来发现,一份能被反复引用、经得起追问的底表,价值远高于十份赶出来的快报。把口径定死、把依据留下、把版本管住,这三件事做到位,后面所有的分析都是水到渠成的事。