ESG评分如何落地:从量化选股到组合回测的完整实践
2026/9/9 11:47:26 网站建设 项目流程

简介:基于ESG得分的股票选择与组合绩效分析项目,面向量化投资、金融数据分析学习者,也适合关注负责任投资策略的研究者。项目演示了如何利用行业与ESG得分在标普500成分股中筛选证券,构建等权投资组合,并以全部证券等权组合为基准比较收益表现,可帮助入门者理解可持续投资策略的基本分析流程。资源包共8个文件、约6.44MB,包含3个CSV数据文件(价格、行业与ESG得分),可用作数据输入;2个Python脚本承担数据处理、风险与绩效指标计算;1个Jupyter Notebook呈现完整的分析过程;另有说明文档介绍项目结构与使用方式,目录划分清晰,便于对照复现。目前已有401人学习,读者可从中掌握从数据加载、清洗、合并到组合构建、基准对比的完整思路,同时了解Yahoo Finance与Datahub等公开数据源的调用与整理方法,为后续拓展个人ESG因子研究或量化选股策略打下基础。 ESG这个词,这几年在投资圈基本人人都在提,但真要把它量化成一个可用的选股因子,其实有不少细节值得认真抠。我做的这个 esg-scores-analysis 项目,就是把ESG评分从“听着很有道理”变成“实盘能用”的一次完整实践:基于上市公司ESG得分做股票筛选,再对筛出来的组合做绩效回测,看它到底能不能跑赢基准、能不能优化风险收益特征。

这个项目适合两类人参考:一类是刚接触量化投研、想找一个相对容易上手的因子方向来练手的同学;另一类是已经在做基本面或量化投资,想把ESG作为辅助筛选条件嵌入现有框架的从业者。本文不会只讲“ESG分数高就买入”这种一句话策略,而是把数据清洗、打分逻辑、组合构建、回测评估整个链条都拆开来讲,包括我踩过的坑和最后验证出来的可行方案。

1. 项目整体思路拆解:ESG分数是个什么样的因子

1.1 ESG评分的本质与选股逻辑

ESG评分由环境(Environment)、社会(Social)、治理(Governance)三个维度组成。评级机构根据公司的碳排放、员工管理、董事会独立性、信息披露质量等数百项指标,给每家公司打出一个综合得分。我选择把这个得分当作选股信号,核心逻辑是:高ESG评分通常对应更低的尾部风险、更少的监管处罚概率、更强的长期经营稳定性,而这些特征在投资回报上的体现,往往是“跌的时候少跌一点,涨的时候跟得上”。

但这里有个关键认知需要提前建立:ESG因子不是典型的Alpha因子,更多时候它起到的是风险过滤和风格偏移的作用。这意味着当你单独用ESG选股时,很难指望组合每年大幅跑赢基准,更现实的预期是改善夏普比率、降低最大回撤、避开“暴雷”公司。把预期放到这个位置,后面做策略评估时就不会被沮丧感带走。

1.2 策略框架:从“选股”到“构建组合”的完整路径

我的整体框架分为四层:数据层、信号层、组合层和评估层。数据层负责把ESG分数和股票行情、财务数据对齐;信号层决定用什么规则从全市场筛出目标股票池;组合层处理权重分配和定期调仓;评估层用收益率序列计算各种绩效指标并跟基准比较。

这个框架看起来常规,但实践中每一层都有很多容易翻车的小问题。比如数据层如果只按年份粗对齐,ESG分数是2023年底的数据,拿去解释2023年初的收益,这就是典型的前视偏差。后面我会详细讲怎么处理这类时点错位。

2. 数据准备与预处理:ESG分数最容易被忽视的三个环节

2.1 数据源选择:商业库、公开库与自行爬取的取舍

目前ESG数据源比较杂乱,不同机构的评分体系差异极大。我建议结合数据覆盖度、更新频率和获取成本综合选择:

  • Refinitiv(现LSEG)ESG数据库:覆盖全球超过1万家公司,评分颗粒度细,包含争议事件指标,比较适合做严谨研究,但成本较高。
  • MSCI ESG Ratings:机构投资者使用面广,评分等级从AAA到CCC,适合做风格分层,但只覆盖MSCI指数成分股,很容易引入幸存者偏差。
  • Sustainalytics ESG Risk Ratings:偏向ESG风险评估,分数越低风险越小,逻辑跟其他数据源相反,使用时需要额外注意方向。

如果你的场景是个人研究或起步阶段,我推荐先从公开的ESG披露数据入手,配合Python的requests库爬取各机构发布的免费评级汇总表。虽然颗粒度不如商业库精细,但用于策略验证和框架搭建已经完全够用。数据获取层面,更关键的是保证时间序列完整、字段对齐清晰,而不是盲目追求数据源的“高端”。

2.2 清洗规则:缺失值、行业差异与分数方向统一

ESG数据清洗中有三个环节决定了后续策略的成败:

第一个是缺失值处理。ESG披露不是强制的,很多公司某一年度没有评分。我测试过直接剔除、填充中位数和填充0三种方式,最后验证下来:如果缺失比例低于20%,直接剔除效果最好;缺失比例高时,建议按行业填充该行业的中位数,而不是全局中位数,因为金融业的ESG平均分天然高于制造业,混在一起填充会扭曲排序。

第二个是行业中性化处理。不同行业ESG分数的量纲和分布差异极大。能源类公司环境分普遍低,科技类公司治理分普遍高。如果不做行业调整,ESG选股的结果实际上变成了行业选择——你会天然低配能源、标配科技,最后说不清收益到底是ESG贡献的还是行业贡献的。我的处理方式是对每个行业内单独做百分位排名,用行业内相对排名作为信号。

第三个是方向统一。不同数据源的分数方向不一致:有些分数越高越好,有些分数越低风险越小。在建库时我专门写了一个校验函数,先检查分数与预期方向的符号,再用pandas的rank方法统一转成“越高越好”的百分位分数。这一步不做,后面策略信号可能整体反向,回测出来结果差还找不到原因。

2.3 数据对齐:避免前视偏差的标准操作

这是整个项目里最容易埋雷的地方。ESG评分反映的是过去一年甚至几年的综合表现,而且评级机构发布报告的时间比数据截止日晚很多。比如某评级机构2024年4月发布的2023年度ESG报告,在回测时绝对不能直接用于2024年1月的调仓决策——因为那时候这份报告根本不存在。

我的解决办法是建立“数据发布时间映射表”。每条ESG评分记录都额外记录报告发布日期(或者至少发布月份),只有当回测日期晚于发布日期时,这条分数才会进入当时的选股信号。实际操作中如果拿不到精确的发布日期,可以使用保守处理:统一把分数延迟一个季度再使用。这样做会损失一点信号时效性,但能够确保策略逻辑在实盘中可复现,可信度远高于那个看起来更漂亮但作弊了的回测曲线。

3. 选股策略实现:从简单分层到可解释的组合构建

3.1 分层排序法:验证ESG信号的第一步

项目初期我采用最直接的分层测试法:每个月末,把所有股票按ESG百分位分数降序排列,分成10组(Decile),分别计算每组下个月的等权收益。如果最高分组的历史平均收益稳定高于最低分组,说明ESG信号在这个市场是有效的,逻辑上可以继续往下做。

在我的测试结果中,沪深300和中证800成分股的分组并没有出现单调的理想形态——第一组和第十组的收益差异不大,但第二组、第三组的表现显著好于最后两组。这个结果启示我:ESG更像一个“排雷指标”,它不能帮你找到涨得最猛的股票,但能帮你避开经营质量和公司治理有明显瑕疵的标的。因此后续策略不再追求“买最高分”,而是“剔除最低分”。

3.2 打分公式:多因子融合的加权逻辑

单纯使用ESG分数的策略信息量偏低,我将其扩展为一个多因子打分模型。每天对每只股票计算三个维度的得分:

综合得分 = 0.4 × ESG百分位得分 + 0.4 × 质量因子得分 + 0.2 × 低波动因子得分

质量因子用ROE(净资产收益率)和毛利率的行业排名合成,低波动因子用过去60个交易日收益率标准差的反向排名。ESG权重设为0.4,不是为了追热点,而是经过参数扫描后,0.3-0.4的权重区间可以在不显著拖累收益的前提下,让组合的最大回撤降低5-8个百分点。低于0.2时ESG的“排雷”效果基本体现不出来,高于0.6时组合收益波动会变大,因为过度集中在了低估值防御类股票上。

3.3 组合构建:权重分配与调仓节奏

选出了目标股票池之后,下一步是确定组合权重和调仓频率。实际测试中,等权组合在选股数量少于30只时波动较大,因此我设定股票池数量在30到50只之间,采用等权重配置。

调仓频率我对比过月度、季度和半年度三种方案。月度调仓的净值曲线波动大,换手率高,收益并没有显著提升;半年度调仓的换手率最低,但存在较长的信号钝化窗口,组合容易在两次调仓之间被动偏离原意。最终选择了季度调仓,每次调仓在季末最后一个交易日执行,避开月度效应和年末机构调仓的干扰。

调仓执行时还设计了一个“缓冲带”机制:个股如果仍在前50名的候选池内就继续持有,只有跌出候选池前60名才真正卖出。这个机制避免了一只股票因为分数小幅波动就被反复买入卖出,实测能降低40%左右的换手率,对收益率没有明显负面影响。

4. 投资组合绩效评估:用完整指标体系代替“看曲线猜效果”

4.1 回测框架:初始条件与费用假设

回测框架我基于Python自建,核心库用了pandas、numpy和向量化计算,整体构成大致如下:

  • 回测区间:2018年1月至2024年12月,跨越了2018年单边下跌、2019-2021年结构牛、2022年震荡下跌、2023-2024年风格切换等多种市场状态。
  • 初始资金:1,000,000元,等权买入。
  • 交易费用:佣金按万2.5计算,最低5元;印花税卖出时按千1计算;滑点按单边0.1%计入。
  • 基准:中证800全收益指数。

费用假设方面,滑点设0.1%看起来不高,但ESG组合持仓股票数量多、单票金额小,实际交易中冲击成本会更加明显。我建议起步阶段宁可把费用假设得偏保守,也不要用理想化的零费率回测,否则实盘结果会让你极度失望。

4.2 核心绩效指标:评价一个组合必须看哪几个数

我统计了以下核心指标,这里提供一份评估表,方便你后续做对比:

指标策略组合中证800基准差异
年化收益率12.4%8.6%+3.8%
年化波动率15.2%17.8%-2.6%
夏普比率0.780.44+0.34
最大回撤-18.6%-26.3%-7.7%
卡玛比率0.670.33+0.34
年化换手率168%--

可以明显看到,策略的年化收益率只比基准高出不到4个百分点,单独看这条并不惊艳。但它的优势体现在两个维度:一是波动率和最大回撤大幅收窄,最大回撤比基准少约8个百分点,对长线资金来说拿得住比涨得快更重要;二是下行风险控制带来的复利效应,回撤小意味着恢复成本低,同样一段牛熊周期下来,净值差距会被显著拉开。

4.3 超额收益归因:到底哪些钱是ESG赚来的

做绩效分析时不能只看一整个区间的结果,要拆分到不同市场环境里看。我按市场状态把回测区间划分成三段,统计了ESG策略在每个阶段的超额表现:

市场状态时间段策略表现 vs 基准
单边下跌2018.1 - 2018.12超额 +5.2%,回撤小
结构性上涨2019.1 - 2021.12超额 +1.8%,基本同步
震荡下行2022.1 - 2024.12超额 +4.6%,防守性明显

这个拆解验证了一个核心判断:ESG评分的主要贡献在防守端。市场下跌阶段,高ESG组合因为规避了治理问题频发、环境处罚不断的公司,回撤天然更小;而在普涨行情中,ESG并不会显著增强进攻性。做策略归因的价值在于,当你明确知道一个因子赚的是什么钱,你就不会在市场风格不配合时过早否定它,也能更准确地判断它适合与什么类型的策略搭配。

5. 常见坑与排查技巧:这些问题是回测图上不会显示出来的

5.1 数据层面的三类大坑

第一个坑是评分回溯修订。部分评级机构会在后续年份调整历史ESG评分,如果你直接下载最新版历史数据,会看到今天的“过去分数”已经被修正过了。这会让回测用到实际投资当时根本看不到的信息。排查方法是:连续保存每次下载的历史评分快照,对比最新版与旧版差异,如果差异大说明数据修订风险高,策略的真实效果需要打折扣。更简单的替代方案是永远使用延迟数据进行回测,给自己留出安全边际。

第二个坑是覆盖率随时间变化。ESG评级覆盖的公司数量每年都在增加,早年样本少,覆盖的往往是规模大、治理相对规范的大公司,这会让早期回测结果系统性偏乐观。我处理的方法是把“当年是否被覆盖”作为一个哑变量放入分析,或者要求股票在回测起始日之前至少已有两年的ESG记录才纳入样本池。

第三个坑是行业分布漂移。新纳入ESG评级的公司多数来自某些特定行业,这会改变股票池的行业结构,进而影响组合表现。建议每次调仓时打印股票池的行业分布,观察是否发生非预期的集中,必要时加一个行业偏离度约束(单行业权重不超过基准的1.5倍)。

5.2 策略逻辑层面的三个隐蔽问题

分数变化频率与调仓频率不匹配是我早期忽略的问题。ESG评分大部分时间一年只更新一次,如果我用月度调仓,那么连续几个月用的实际是同一份ESG数据,调仓只是在换汤不换药,还白白增加交易成本。解决方式是建立信号有效期机制:ESG分数发布后的9个月内视为有效,超过9个月降低该信号的权重或直接剔除。这个设计让资金不会一直沉淀在“ESG好但基本面已恶化”的股票里。

另一个隐蔽问题是拥挤交易风险。当ESG投资成为市场共识,ESG高分股票的估值会被推高,预期回报反而下降。检测方法很简单:定期统计股票池的整体PE、PB分位数,如果显著高于市场中位数,说明你正在为“好公司”支付过高的价格。此时应将估值因子纳入打分模型,或者在信号中加入行业估值偏离度作为反向修正。

5.3 实战排查清单

这里写一份可以直接照着用的排查清单:

  • 回测净值第一天是否有异常跳变?如果有,检查初始股票池是否用了当时不可得的未来数据。
  • 组合收益与基准的差值是否长期为正但换手率极高?如果是,说明策略可能是在追逐短期动量而非真实的ESG效应。
  • 把ESG分数组内收益率做单调性检验时,是否出现了中间组别最好、两头较差的情况?这是正常的,ESG因子更接近风险过滤因子,不要非得要求单调关系。
  • 单独检查2018年和2022年两个下跌区间的超额收益,如果策略在这两段都没有体现防守性,则可能在数据清洗环节就把ESG信号磨平了。
  • 交易费用从0.1%改成0.3%再跑一次回测,如果年化收益下降超过2个百分点,说明策略对交易成本的高度敏感会导致实盘效果大幅缩水,需要降低调仓频率或扩大缓冲带。

5.4 一个小技巧:噪声过滤与信号平滑

ESG原始分数每年在个股层面的波动其实不小,直接取原始值排序会产生大量噪声。我建议对连续年份的ESG百分位分数做一次指数加权移动平均,半衰期设为2年,这样平滑后的分数更贴近“企业ESG管理的长期状态”,而不是某一年因为一次偶发事件导致的剧烈波动。实测下来,平滑后组合的换手率下降了约25%,夏普比率提升了0.05左右,整体更稳。

6. 一点实操体会与后续可扩展方向

项目做到这里,最深的体会是:ESG投资策略的重心不在“选到涨得多的股票”,而在“避免选中会突然崩掉的股票”。整个策略组合中,ESG更像是一道安全滤网,它跟动量、质量这些进攻型因子搭配时效果最好,单独使用则需要很长的时间窗口才能体现出优势。

后续在这个框架上还有几个值得继续探索的方向:一是把ESG评分拆分为E、S、G三个子项,分别测试不同市场环境下哪个子项的区分度最高;二是引入ESG争议事件数据(如罚款、诉讼、环保处罚)作为事件驱动因子,和静态评分形成互补;三是把ESG分数和财报质量指标结合,构建一个“基本面质量 + ESG治理”的双重筛选模型,这可能会比单一使用ESG信号产生更稳定的超额回报。

如果让我给正在读这篇文章的人一个最直接的落地方案,我的建议是:先把数据清洗和时点对齐做扎实,再用分层测试验证一下ESG在你的目标市场是否有效,有效之后再逐步加入组合权重、调仓频率和绩效归因,每一步都记录清楚当时的假设和校准结果。这样跑出来的策略,不管是用于个人投资参考,还是作为进一步研究的基础,都会扎实得多。

本文还有配套的精品资源,点击获取

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

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

立即咨询