esg-data-signal-research-and-vendor-comparison · v1.0.0 · 2026-07-30 · sha256 76256115b93a66d4
esg-data-signal-research-and-vendor-comparison v1.0.0A
Immutable. This exact content is served forever at /api/v1/blob/76256115b93a66d4.
---
name: esg-data-signal-research-and-vendor-comparison
description: Quantitative alternative data engine for normalizing cross-vendor ESG
ratings (MSCI, Sustainalytics, Refinitiv), calculating consensus scores and vendor
disagreement dispersion, and generating ESG factor overlay signals.
domain: Quantitative Research & Alternative Data
subdomain: ESG Data & Factor Investing
tags:
- esg-data
- alternative-data
- msci-esg
- sustainalytics
- refinitiv-esg
- vendor-reconciliation
- greenwashing-risk
brokers_frameworks:
- MSCI ESG Data
- Sustainalytics Risk API
- Python Dataclasses
version: 1.0.0
author: algo-trading-skills-contributors
license: Apache-2.0
---
## When to Use
Use this skill in sustainable quantitative investing, multi-factor portfolio construction, and ESG risk overlay models. ESG ratings across major data providers (MSCI, Sustainalytics, Refinitiv) exhibit low cross-vendor correlation ($r \approx 0.30 - 0.50$). This module normalizes vendor-specific scales, computes a multi-vendor consensus ESG score, quantifies vendor disagreement dispersion ($\sigma_{\text{esg}}$), and detects greenwashing or rating noise.
## Prerequisites
- Security identifier (`ticker`, `isin`, `sector`).
- Raw vendor ESG data scores (e.g. MSCI letter rating `'AAA'`, Sustainalytics risk score `15.0`, Refinitiv score `82.0`).
- Exclusion sector flags (`has_controversial_weapons`: True/False).
## Workflow
1. **Vendor Score Normalization**:
- MSCI: Convert AAA-CCC scale to $[0.0, 1.0]$ percentile score ($\text{AAA}=1.0, \text{CCC}=0.0$).
- Sustainalytics: Convert risk score to $[0.0, 1.0]$ inverse scale ($1.0 - \frac{\text{Risk}}{100}$).
- Refinitiv: Scale 0-100 to $[0.0, 1.0]$ ($\frac{\text{Score}}{100}$).
2. **Consensus & Dispersion Calculation**:
- $\text{Consensus Score} = \bar{S} = \frac{1}{K} \sum S_k$.
- $\text{Vendor Dispersion} = \sigma_{\text{esg}} = \sqrt{\frac{1}{K} \sum (S_k - \bar{S})^2}$.
- If $\sigma_{\text{esg}} > 0.25 \implies$ Flag `HIGH_VENDOR_DISAGREEMENT`.
3. **Exclusion & Trading Signal Emission**:
- If `has_controversial_weapons` $\implies$ Flag `EXCLUDED_SECTOR`.
- If $\bar{S} \ge 0.75$ and $\sigma_{\text{esg}} \le 0.20 \implies$ Flag `BULLISH_ESG_LEADER`.
- If $\bar{S} \le 0.30 \implies$ Flag `BEARISH_ESG_LAGGARD`.
4. **Audit Report Generation**: Output structured `EsgSignalAuditReport`.
> Full procedure: see `references/workflows.md`.
> Standards reference: see `references/standards.md`.
> Printable pre-flight checklist: see `assets/checklist.md`.
## Common Pitfalls
- **Naively Averaging Un-Normalized Ratings**: Averaging MSCI letter ratings directly with Sustainalytics risk numbers, corrupting composite factor scores.
- **Ignoring Vendor Disagreement**: Treating companies with high vendor disagreement ($\sigma_{\text{esg}} > 0.25$) as confident ESG leaders, absorbing subjective vendor rating noise.
- **Survivorship Bias in Historical Data**: Using current ESG vendor coverage universes to backtest historical strategy performance.
## Verification
- Instantiate `EsgDataSignalEngine`. Input MSCI `'AAA'` ($1.0$), Sustainalytics `15.0` ($0.85$), Refinitiv `85.0` ($0.85$). Compute consensus score ($0.90$) and low dispersion ($0.07$). Verify engine emits `BULLISH_ESG_LEADER`. Submit conflicting ratings (MSCI `'AAA'` vs Sustainalytics `60.0`). Verify engine flags `HIGH_VENDOR_DISAGREEMENT`.
- Run `python scripts/test_esg_data_signal_research_and_vendor_comparison.py`.
## Related Skills
- `alternative-data-vendor-due-diligence-checklist`
- `data-vendor-cross-validation-for-backtests`
---