Quantitative Foundation
Architecting reproducible scores from SEC disclosure language
Disclosure Alpha applies a deterministic pipeline to 10-K and 10-Q HTML: section extraction,
text metrics, boolean risk flags, and year-over-year diffs, producing nine headline-weighted component scores
(ten computed overall, including specificity_quality_score)
and an overall disclosure risk score (0–100). Default scoring model:
deterministic_scoring_v2. No LLM required. Same engine across CLI, Python SDK,
HTTP API, and MCP.
Risk Factor Analysis
Measures language signals in Item 1A and related risk disclosures. Higher component scores (0–100) indicate more disclosure risk or deterioration in that dimension.
Language Signals
- · risk_factor_intensity_score: Item 1A tone & volatility
- · boilerplate_risk_score: vague, templated risk language
- · legal_regulatory_risk_score: litigation & regulatory tone
- · tone_negativity_score: cross-section negative tone
Change & Event Signals
- · disclosure_change_score: YoY lexical & semantic diffs
- · event_severity_score: material event severity (diff-only)
- · liquidity_stress_score: covenant & liquidity stress language
- · internal_controls_risk_score: ICFR weakness signals
MD&A Parsing
Extracts Management Discussion & Analysis sections from 10-K and 10-Q filings and computes
mdna_uncertainty_score from uncertainty, demand stress,
and forward-looking language patterns.
Component Weighting
Nine weighted components combine into overall_disclosure_risk_score.
When components are missing (null), weights renormalize over present
components only. specificity_quality_score is also returned but excluded
from headline weights (higher = more specific language).
overall_disclosure_risk_score = Σ (weighti × componenti)
adjusted by score_coverage_ratio when sections are missing
Understanding scores →Headline component weights (deterministic_scoring_v2)
| Variable | Description | Default Value |
|---|---|---|
| risk_factor_intensity_score | Risk-factor tone & volatility | 20% |
| boilerplate_risk_score | Boilerplate & vague risk language | 10% |
| tone_negativity_score | Cross-section negative tone | 5% |
| legal_regulatory_risk_score | Legal & regulatory risk language | 10% |
| mdna_uncertainty_score | MD&A uncertainty & demand stress | 15% |
| liquidity_stress_score | Liquidity & covenant stress | 10% |
| disclosure_change_score | Year-over-year disclosure change | 15% |
| event_severity_score | Material event severity | 5% |
| internal_controls_risk_score | Internal controls weakness signals | 5% |
Text Extraction Pipeline
One deterministic pipeline shared across all integration surfaces. Given the same input HTML and version strings, scores are fully reproducible.
Model Parameters
Every score response includes artifact version strings for audit and reproduction.
| Variable | Description | Default Value |
|---|---|---|
| parser_version | Section extractor from filing HTML | section_extractor_v1 |
| metrics_engine_version | Deterministic text metrics engine | text_metrics_v4 |
| scoring_model_version | Component weighting & aggregation (default) | deterministic_scoring_v2 |
| dictionary_version | Built-in word lists & phrase dictionaries | built_in_dictionaries_v3 |
Scoring Components
| Variable | Description | Default Value |
|---|---|---|
| risk_factor_intensity_score | Risk-factor tone & volatility | 0–100 |
| boilerplate_risk_score | Boilerplate & vague risk language | 0–100 |
| tone_negativity_score | Cross-section negative tone | 0–100 |
| legal_regulatory_risk_score | Legal & regulatory risk language | 0–100 |
| mdna_uncertainty_score | MD&A uncertainty & demand stress | 0–100 |
| liquidity_stress_score | Liquidity & covenant stress | 0–100 |
| disclosure_change_score | Year-over-year disclosure change | 0–100 |
| event_severity_score | Material event severity | 0–100 |
| internal_controls_risk_score | Internal controls weakness signals | 0–100 |
Reproduction scripts and corpus layout: data/validation/ on GitHub →
Research & Validation
Validated on a fixed S&P 500 corpus using the same deterministic engine
(deterministic_scoring_v2) as the open-source product.
Corpus scoring used Item 1A risk-factor text.
S&P 500 FY2025 score distribution
Each dot is one sampled firm (20 per quintile, 100 total) on the 0–100 overall disclosure risk scale.
n=502 (universe 503) · 20 per quintile
0–100 scale · precomputed
20 firms sampled per quintile from the validation corpus. Larger dots match featured ticker examples. Evidence ↗
- Corpus
- 478 S&P 500 FY2025 Item 1A extractions (universe n=503)
- Specificity construct validity
- Spearman ρ ≈ 0.87 vs NER entity density (n=478)
- Boilerplate construct validity
- Spearman ρ ≈ 0.92 vs ls_boilerplate_word_ratio on boilerplate_combined_ratio (text_metrics_v4, n=478); phrase-only v3 was ≈0.74
- Post-filing volatility association
- Q5/Q1 ≈ 1.15 on n=435 cohort (90-day realized vol)
Validation used Item 1A text for corpus scoring, not the full multi-section matrix. Construct checks (n=478, per-section metrics on Item 1A) and the post-filing volatility association (n=435, overall_disclosure_risk_score) use different cohorts — see Evidence and validation ↗.
- Not investment advice or a trading signal
- Not a substitute for reading the filing
- Construct checks (n=478, Item 1A metrics) and vol association (n=435, overall_disclosure_risk_score) use different cohorts
- Boilerplate validation correlates with an LS-style proxy — not a full replication of the Lang & Stice-Lawrence paper measure
- Earnings-surprise prediction is not claimed
- deterministic_scoring_v1 and v2 headline scales are not directly comparable
Glossary · Why deterministic scoring · Evidence and validation on ReadTheDocs ↗ · Research foundation ↗
Ready to install and score your first filing?