riskprism is an open-source, Barra-style fundamental factor risk model for US equities: a market factor, nine styles and thirty industries, estimated from daily cross-sections of roughly three thousand names. Built entirely on a redistributable data chain — SEC EDGAR fundamentals and market prices — and published as versioned artifacts under MIT.
| No. | Property | Value | Remark |
|---|
Values print from the current weekly build; superseded builds remain published and reproducible.
The full model as versioned parquet artifacts — exposures, factor covariance, specific risk, daily factor-return history. No key, no signup; reproduce or extend any build from source.
A hosted JSON API and an MCP server exposing portfolio risk, factor exposures, stress tests and coverage checks — with every build mirrored as plain markdown at /model.md.
Paste a book into the explorer: total volatility, factor decomposition and first-order stress tests, computed in the browser from the published artifacts.
Each week the model writes down volatility forecasts for a panel of test portfolios — factor portfolios, traded ETFs, and portfolios optimized against the model itself — then is graded on realized outcomes. Every build re-scores the entire history under the current methodology; nothing is cherry-picked.
| Dimension | riskprism | Commercial typical | Position |
|---|---|---|---|
| Estimation universe | ~2,800 liquid names | ~2,900 (Axioma AXUS4) | At parity |
| Estimation frequency | Daily cross-sections | Daily | At parity |
| Validation | Public, reproducible, re-scored weekly | Whitepaper snapshots | Advantage |
| Factor breadth | 40 factors | 70–80 factors | Near parity |
| Live track record | ~3y replayed, weeks live | 25–30 years | Time |
Gaps that cannot be closed with public, redistributable data are listed as explicit non-goals. Roadmap and non-goals →
A fundamental multi-factor model of US equity returns at medium horizon: exposures formed weekly, factor returns estimated daily, outputs annualized. This page is the factsheet for the current build; the complete methodology, every parameter, and the decision history behind each choice are published alongside it.
| Factor | Class | Definition | Ann. vol |
|---|
Raw descriptors are winsorized at ±3σ and standardized to cap-weighted mean 0, standard deviation 1, each week. A stock's exposure answers: how many standard deviations from the market is it on this dimension? Annualized volatilities print live from the current build's factor covariance.
EWMA on daily factor returns — 84-day volatility and 252-day correlation half-lives (~730 effective observations) — with Newey-West variance adjustment, correlation regularization, PSD repair, and a volatility regime adjustment multiplier.
Per-stock EWMA residual volatility, Newey-West adjusted, blended with a structural characteristics prior by history length, then Bayesian-shrunk toward size-decile means — with its own regime multiplier.
Price ≥ $2, median dollar volume ≥ $1M, 26+ weeks of history. Coverage extends to every name alive at the build date; names outside estimation take specific risk from the structural prior, and the stock page discloses how much.
| Next | Scope |
|---|---|
| v0.7 — beta split | Shipped 2026-08-22 — beta significant in 84% of daily cross-sections, R² 0.159 → 0.178, every scoreboard aggregate improved |
| v0.8 — styles | Shipped 2026-08-22 — growth added (42% significant), leverage rebuilt as a composite (bias 1.50 → 1.11); dividend yield measured and rejected |
| v0.9 — FF30 + coverage | Shipped 2026-08-22 — 30 Fama-French industries (K = 40, R² ~0.21) and coverage 2,987 → 6,307 names, estimation pinned at the liquid ~2,800 |
| v1.0 — stability | Frozen schema, PyPI, versioned registry, one year of live weekly record |
Analyst-estimate descriptors, GICS industries and ESG factors are excluded deliberately: no public, redistributable, point-in-time source clears the bar. A redistributable data chain is the point.
Each week the model writes down a volatility forecast for every portfolio on the test panel, using only information available at the time, and is graded against what happened. Every build re-scores the entire history under the current methodology. This page is the complete record — including the cases built to make the model fail.
Each baseline needs the portfolio's own return history; the factor model prices any weight vector cold. Matching the univariate baselines on their home turf is the bar.
The vendors' forecasts are proprietary and their licenses forbid published benchmarks, so they cannot sit in the table above. What we can do is conform to them: each row runs this model under that vendor's published test protocol, next to what the vendor reports about itself. Periods and universes still differ — that caveat is stated, not engineered away.
Sources: Menchero, Orr & Wang, The Barra US Equity Model (USE4), Methodology & Empirical Notes, MSCI Model Insight, 2011 · Axioma US Equity Factor Risk Models factsheet, 2016 · Bloomberg MAC3. Two of USE4's documented remedies — the volatility regime adjustment and Bayesian specific-risk shrinkage — already run inside this model. The full decision history: DECISIONS.md.
Full per-portfolio results — bias statistics, exceedance rates, forecast and realized volatility, vol ratios. Recomputed weekly; the underlying panel ships with the artifacts as validation.parquet.
One per line: TICKER WEIGHT — % or decimals, negative for shorts. Updates as you type.
All computation runs in the browser on the published artifacts. Nothing leaves the page.
Enter positions or pick a preset to see the portfolio's risk decomposition.
Weight × marginal contribution; sums to total volatility.
Exposure × shock; convexity and specific returns excluded.
At each historical formation date the point-in-time model forecasts the horizon's volatility band, then reality lands somewhere. Weights held fixed (rebalanced weekly); realized returns reconstructed from factor returns + residuals of covered names.
Every weekly build is published in full: versioned parquet artifacts, a Python library, a hosted JSON API, an MCP server for agents, and a plain-markdown mirror of the model card. No key, no signup.
pip install riskprism mkdir -p artifacts && curl -L https://github.com/wanxinwanxin/risk-prism/releases/latest/download/riskprism-artifacts.tar.gz | tar xz -C artifacts
Exposures, factor covariance, specific risk, daily factor-return history, residuals, estimation metadata, and the point-in-time EDGAR fundamentals store. The install includes the MCP server (riskprism-mcp) out of the box.
from riskprism import RiskModel
model = RiskModel.load("artifacts")
model.portfolio_risk({"AAPL": 0.4, "MSFT": 0.3, "XOM": 0.3})
model.stress_test({"AAPL": 1.0}, {"market": -0.10})
Weights are portfolio weights, shorts negative; volatilities are annualized decimals. Pass optimized=True to apply the Shepard correction for portfolios optimized against the model.
curl -s -X POST https://risk-prism-production.up.railway.app/api/v1/portfolio-risk \
-H 'content-type: application/json' \
-d '{"weights": {"AAPL": 0.4, "MSFT": 0.4, "XOM": 0.2}}'
Interactive docs at /api/docs, OpenAPI spec at /api/openapi.json. Every risk endpoint accepts ?horizon=medium|short — the short variant halves the risk half-lives on the same regressions.
{ "mcpServers": { "riskprism": {
"type": "http",
"url": "https://risk-prism-production.up.railway.app/mcp"
} } }
Streamable HTTP, stateless, serving the newest weekly build — same six tools as the local server. For a local surface: riskprism-mcp with RISKPRISM_ARTIFACTS pointing at a downloaded artifacts directory (01).
| REST endpoint | MCP tool | Returns |
|---|---|---|
| GET /api/v1/meta | get_model_info | Model version, as-of date, factor list, coverage count |
| POST /api/v1/portfolio-risk | get_portfolio_risk | Total / factor / specific vol, exposures, contributions |
| GET /api/v1/assets/{ticker} | get_factor_exposures | Per-asset exposures and vol decomposition |
| POST /api/v1/stress-test | stress_test | First-order P&L under factor shocks |
| GET /api/v1/coverage | check_coverage | Which tickers the current build covers |
| GET /api/v1/factors | — | Factor vols and the full K×K covariance matrix |
| GET /api/v1/registry | list_model_versions | Catalog of published model builds, artifact URLs |
The plain-markdown mirror of this build lives at /model.md, indexed by /llms.txt — model card, factor definitions, correlations, and the full coverage list. No DOM parsing required. Point-in-time weekly snapshots are served as static JSON under /history/index.json.
Or rebuild the model yourself — the weekly GitHub Action runs exactly this:
riskprism-build --max-names 8000 --out artifacts
| METHODOLOGY.md | Full methodology and every parameter of the current build |
| DECISIONS.md | The decision history — every remedy adopted or rejected, with measured evidence |
| ROADMAP.md | The gap to the commercial models, and which parts of it are closable |
| API.md | The hosted JSON API — endpoints, payloads, examples |
| model.md | The machine-readable model card for this build |