# Analytics-readiness scoring for research and client reporting
A factor model at a large asset manager once flagged a value signal that turned out to be noise. The culprit was not the model. It was a fundamentals feed where 12% of companies had stale sector classifications, mapped to a taxonomy retired two years earlier. The signal ran on unfit inputs, and nobody noticed until a quarterly review.
This is the silent failure mode of modern asset management: sophisticated analytics quietly consuming data that was never scored for the job. This lesson gives you a practical way to score analytics-readiness before the dashboard ships or the backtest runs.
Analytics-readiness is not the same as data qualitydata qualityThe degree to which data is fit for purpose: accurate, complete, consistent, timely, valid and unique. Poor quality data undermines analytics, reporting and AI.View full definition → in the abstract. It asks a sharper question: is this dataset fit for the specific analytical use I have in mind?
The same ESG dataset can be perfectly ready for a client-facing exclusion screen and completely unready for a quantitative carbon-momentum factor. Readiness is relative to use.
We score three dimensions that matter most in this sector:
Three domains break analytics most often:
ESG data. Ratings, emissions, controversy flags. Sourced from providers like MSCI, Sustainalytics (Morningstar), and ISS. Coverage is uneven, methodologies differ, and estimated versus reported values are frequently mixed without a flag.
Alternatives data. Private equity, real estate, private credit, infrastructure. Valuations arrive quarterly with lags, often as unstructured PDF capital account statements. Look-through to underlying holdings is patchy.
Holdings data. The portfolio and benchmark constituents themselves. Usually the cleanest, but security master mismatches (two identifiers for the same bond) and corporate action timing still cause errors.
Lineage answers: where did this number come from, and what happened to it?
For a client sustainability report claiming a portfolio's weighted average carbon intensity, regulators increasingly expect you to show the trail. Under the EU's Sustainable Finance Disclosure Regulation (SFDR), the rules governing how funds disclose sustainability characteristics, a reported emissions figure should be traceable to its source, whether reported by the issuer or estimated by a model.
Score lineage on a simple 0 to 3 scale per dataset:
A useful discipline: for any figure in a client report, you should be able to answer "reported or estimated?" in one click. Many ESG providers tag this. If your pipelinepipelineAll active sales opportunities across the stages of the sales process, together with their combined potential value and probability of closing.View full definition → drops the tag during ingestion, your lineage score cannot exceed 1 regardless of everything else.
The DAMA-DMBOK data management framework is a solid free-to-summarise reference for governance vocabulary if you want the formal grounding.
Timeliness is not just "how old." It is "how old relative to what the use demands," and "do you know how old."
Contrast two cases:
The failure is not lag. The failure is unstated lag. A client dashboard that blends daily public equity marks with a private credit valuation from three months ago, presented as one "current" number, is misleading even if every input is individually fine.
Score timeliness on: (a) is there a data timestamp, (b) is the lag within tolerance for the use, (c) is the lag disclosed to the consumer.
Take an ESG emissions dataset covering 500 portfolio issuers. Suppose (illustrative figures, not a real vendor benchmark):
Staleness ratio for a 2026 carbon report = issuers with data older than 24 months divided by total = 30 / 500 = 6%.
If your internal tolerance for a client-facing report is "no more than 5% of weight from data older than 24 months," this dataset fails on staleness, and you would flag the 6% or backfill it. Weight it by portfolio position, not issuer count, since one large holding can dominate the reported intensity.
Granularity is whether the data resolves to the level your analysis needs.
For a fund-of-funds running a look-through exposure report, issuer-level or fund-level data is not enough. You need underlying holdings. If a private equity fund reports only "Industrials: 22%," you cannot compute genuine single-name concentration across the total portfolio.
Score granularity against the required level:
A common trap: a factor model needs security-level fundamentals, but the fundamentals feed only refreshes issuer-level composites for multi-share-class companies. The model silently assigns the same book value to two share classes with different economics.
🎬 [VIDEO: "Data QualityData QualityThe degree to which data is fit for purpose: accurate, complete, consistent, timely, valid and unique. Poor quality data undermines analytics, reporting and AI.View full definition → Dimensions Explained" - youtube.com - a clear 10-minute walkthrough of accuracy, completeness, timeliness, and lineage with worked examples]
Do not average the three dimensions into one soft number. Use a minimum gate, because analytics-readiness is a chain: the weakest link governs.
A simple readiness table per dataset per use:
| Dataset | Use | Lineage | Timeliness | Granularity | Ready? |
|---|---|---|---|---|---|
| MSCI ESG | Client exclusion screen | 3 | 3 | 2 | Yes |
| MSCI ESG | Carbon momentum factor | 3 | 1 | 1 | No |
| PE capital accounts | Look-through concentration | 2 | 2 | 0 | No |
| Holdings master | Daily liquidity dashboard | 3 | 3 | 3 | Yes |
Rule: any dimension scoring below 2 for a given use blocks "ready." This forces an explicit decision (backfill, disclose, or restrict the use) rather than a silent pass.
Here is a minimal scoring function to make the gate concrete:
def analytics_ready(lineage, timeliness, granularity, min_score=2):
scores = {"lineage": lineage,
"timeliness": timeliness,
"granularity": granularity}
failures = [k for k, v in scores.items() if v < min_score]
return {
"ready": len(failures) == 0,
"blocking_dimensions": failures
}
# Carbon momentum factor on ESG feed
print(analytics_ready(3, 1, 1))
# {'ready': False, 'blocking_dimensions': ['timeliness', 'granularity']}The output tells the researcher exactly what to fix, not just that something is wrong.
Knowledge check
1. What key distinction separates 'analytics-readiness' from generic 'data quality'?
2. The lesson opens with a factor model flagging a value signal that turned out to be noise due to stale sector classifications. What core concept does this failure illustrate?
3. A team wants to run a quantitative carbon-momentum factor using an ESG dataset that works well for a client exclusion screen. Why might that dataset still fail the new use?
4. Select ALL correct answers about the three dimensions used to score analytics-readiness.
Select all the correct answers.
5. Select ALL correct answers about why ESG and alternatives data commonly break analytics.
Select all the correct answers.
A readiness score is worthless if no one acts on it. Assign a data owner per domain (ESG, alternatives, holdings) accountable for the score, and a data stewarddata stewardA business-side owner responsible for the quality, consistency and appropriate use of data in their domain.View full definition → who maintains the checks.
Embed the gate where analytics is produced:
For European firms, this ties directly to regulatory expectations. SFDR and the accompanying EU Taxonomy (the classification system for environmentally sustainable activities) push firms toward demonstrable, traceable ESG figures. In the US, the SEC's Marketing Rule constrains how performance and ESG claims are presented, which means the data behind any client-facing number must be defensible. Analytics-readiness scoring is how you make that defensibility operational rather than aspirational.
A dataset can score well on lineage and timeliness while quietly failing on coverage, the share of your actual portfolio the data touches. An ESG feed with excellent quality on the 70% it covers still leaves 30% of portfolio weight unscored. Always weight readiness by portfolio exposure, not by count of covered names. A single unscored 8% position matters more than 40 scored 0.1% positions.