Risk Assessment
Risk questions deserve numbers a risk committee would accept — not vibes, and not fabricated precision. This skill decomposes where the risk actually comes from (volatility, concentration, correlation, tail shape) and states plainly what the data cannot show.
Principles
- Only the supplied history speaks. Every figure is computed from the portfolio's own return window. No assumed correlation matrices, no invented scenarios. If the sample never contained a crisis, say that the numbers understate crisis risk — do not simulate one silently.
- Concentration is the risk most users cannot see. Ten highly-correlated names are one position in disguise. Effective N and average pairwise correlation are reported next to VaR, always.
- The tail is not normal. Historical VaR/CVaR and a Cornish–Fisher adjustment are shown together; when skew/kurtosis diverge from normal, the report says which number to trust less.
- Beta shocks are labeled as linear approximations. A −20% market shock estimate via beta is a floor, not a ceiling — real crashes raise correlations. The report says so verbatim, and omits the shock table entirely when no benchmark is supplied.
Workflow
- Assemble inputs: per-asset return history (wide CSV), portfolio weights, optional benchmark. If weights don't sum to 1, the harness re-normalizes by gross exposure and discloses it — confirm with the user that gross exposure is what they meant.
- Run the profile:
python scripts/risk_profile.py --returns returns.csv --weights weights.csv [--benchmark bench.csv] --json report.jsonWith no data, demonstrate with--demo. - Report in this order: risk level → main risk source → the flag list → core metrics → concentration/diversification → worst historical windows → beta shock estimate (if available). Lead with the diagnosis, not the table.
- Translate flags for the user (see
references/methodology.mdfor the thresholds and their rationale). "diversification_illusion" matters more to a retail holder than the CVaR decimal. - Any recommendation (reduce, hedge, diversify) must be framed as a research observation with its trigger flag attached — never as individualized investment advice. High-risk verdicts require explicit user confirmation before any downstream skill acts on them.
- Always surface the
disclosurelines from the report output. They are part of the deliverable, not boilerplate to trim.
Guardrails
- No fabricated stress scenarios, correlations, or forward-looking loss estimates beyond the labeled linear beta approximation.
- No "safe", "guaranteed", or "risk-free" language, at any risk level.
- Missing inputs degrade honestly (
skipped+ reason), never silently. - A "low" risk level describes the sample window, not the future — say so.
- Position-reduction suggestions are observations tied to flags; execution decisions belong to the user.