Files
optimiz-rs/examples/notebooks/06_risk_measures.ipynb
T
ThotDjehuty 01bae1f060 feat(v1.1.x): PyO3 bindings + executed companion notebooks for 5 new groups
Adds Python bindings (behind feature='python-bindings') for graph,
risk_measures, topology, volterra, signatures.

Companion notebooks under examples/notebooks/:
- 05_graph.ipynb           (Laplacians + spectral clustering)
- 06_risk_measures.ipynb   (VaR / CVaR + simplex projection)
- 07_topology.ipynb        (Vietoris-Rips + persistent homology)
- 08_volterra.ipynb        (fractional ODE, Markovian lift, Volterra,
                            Fourier inversion)
- 09_signatures.ipynb      (path / log / random / kernel signatures)

All notebooks executed end-to-end against analytic ground truth
(closed-form solutions, Mittag-Leffler, exp(-t), unit-circle homology,
identical-path signature kernel).

Built and validated via: maturin develop --release --features python-bindings.

Workflow generated by 5 parallel optimizRs subagents (.github/agents/).
2026-05-12 11:46:24 +02:00

474 lines
190 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "markdown",
"id": "958c2652",
"metadata": {},
"source": [
"# Risk Measures: VaR and CVaR\n",
"\n",
"Companion notebook for the `risk_measures` module of `optimiz-rs`.\n",
"\n",
"Reference documentation: <https://optimiz-r.readthedocs.io/en/latest/algorithms/risk_measures.html>\n",
"\n",
"All examples below act on **synthetic loss / outcome samples** drawn from\n",
"Gaussian and Student-t distributions. No domain-specific assumption is\n",
"made — the same routines apply to any real-valued sample of outcomes."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "f3f4433d",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:00.783599Z",
"iopub.status.busy": "2026-05-12T09:45:00.783204Z",
"iopub.status.idle": "2026-05-12T09:45:03.085512Z",
"shell.execute_reply": "2026-05-12T09:45:03.083795Z"
}
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from scipy.stats import norm, t as student_t\n",
"\n",
"from optimizr import _core as opt\n",
"\n",
"rng = np.random.default_rng(20260512)\n",
"alpha = 0.95"
]
},
{
"cell_type": "markdown",
"id": "3b2bff04",
"metadata": {},
"source": [
"## 1. Historical Value-at-Risk\n",
"\n",
"$$\n",
"\\mathrm{VaR}_\\alpha(L)\n",
"= \\inf\\{\\, \\ell \\in \\mathbb{R} : \\mathbb{P}(L \\le \\ell) \\ge \\alpha \\,\\}.\n",
"$$\n",
"\n",
"We estimate it as the empirical $\\alpha$-quantile of the loss sample\n",
"$L_1, \\ldots, L_n$."
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "ba6393e1",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:03.090083Z",
"iopub.status.busy": "2026-05-12T09:45:03.089236Z",
"iopub.status.idle": "2026-05-12T09:45:03.765135Z",
"shell.execute_reply": "2026-05-12T09:45:03.763394Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"historical_var = 1.657293\n",
"numpy quantile = 1.657355\n"
]
},
{
"data": {
"image/png": "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2qQePXooJCREkydP1oULF8yB+E6ef/55ffrppxo6dKhCQkJ04cIF/fTTTzp06JAeeOAB/e9//1NiYqL+/vtvvffee5KkkiVLWmzjjTfekJOTk0aOHKnk5OQce8wuXbqkjh07qlevXnryySf1ySefaMiQIXJyctKAAQPuWO+/5aa2f9u8ebM6dOigSpUqacKECfrnn380Z84cNWvWTPv27cv0Hvfq1UvBwcGaPHmy9u3bp/fff1++vr6aMmVKtvto0aKF0tPT9dNPP+nRRx+VJG3btk12dnbatm2beb1ff/1VV69eVcuWLbPcTvfu3XX06FF99NFHeu+991SmTBlJko+Pj3mdn376SWvXrtULL7wgd3d3zZ49Wz169FB0dHSmn+msvPPOO7Kzs9PIkSOVmJioqVOnqk+fPtq5c2e2r4mKitKTTz6pNm3amN+HQ4cO6eeff9bw4cPVsmVLDRs2TLNnz9arr76qGjVqSJL5vxMmTNDEiRMVGhqqIUOG6MiRI1qwYIF2796tn3/+2aIHuCh/F7Rs2VLlypXTqlWrLH5BkW4NKyhRooS6du0qSVqwYIFq1qypxx57TA4ODvrqq6/0wgsvKD09XeHh4XfcV8YvZdYaXoIizADuEZGRkYakLB/Ozs7m9U6dOmVIMnx8fIzLly+b28eOHWtIMurWrWukpqaa25988knDycnJuHHjhrktKCjIkGR89tln5rbExEQjICDAuP/++81tW7duNSQZW7duNbc99NBDhiRj4cKFmY7hoYceMh566CHz82XLlhmSjBkzZmRaNz093fz/169ft1iWkpJi1KpVy3j44Yct2oOCgoywsLBM27qdJGP8+PHm5127djWcnJyMEydOmNtiYmIMd3d3o2XLlua2unXrGp06dcp2u5cuXTIkGdOmTbtjDberV6+eERAQYHHONm3aZEgygoKCcqzf09PTCA8Pz3H7nTp1yrQdw/j/57BSpUqZ3ueczu/06dPNbcnJyUa9evUMX19fIyUlxTCM//95PXXq1B23mV1tGZ/lyMhIc1vGfi5cuGBu+/333w07OzvjmWeeMbeNHz/ekGQMGDDAYpvdunUzvL29M+3r39LS0gwPDw9j9OjRhmHc+ix6e3sbPXv2NOzt7Y0rV64YhmEYM2bMMOzs7IxLly6ZX3v7uZk2bVqW70PGuk5OTsbx48ctjkWS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",
"text/plain": [
"<Figure size 700x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"n = 20_000\n",
"losses_gauss = rng.standard_normal(n)\n",
"\n",
"var_hist = opt.historical_var_py(losses_gauss.tolist(), alpha)\n",
"var_numpy = np.quantile(losses_gauss, alpha, method='higher')\n",
"\n",
"print(f'historical_var = {var_hist:.6f}')\n",
"print(f'numpy quantile = {var_numpy:.6f}')\n",
"assert abs(var_hist - var_numpy) < 2.0/n, 'historical VaR within one rank step of the empirical quantile'\n",
"\n",
"fig, ax = plt.subplots(figsize=(7, 4))\n",
"ax.hist(losses_gauss, bins=80, color='steelblue', alpha=0.7)\n",
"ax.axvline(var_hist, color='crimson', lw=2, label=f'historical VaR$_{{0.95}}$ = {var_hist:.3f}')\n",
"ax.set_xlabel('loss')\n",
"ax.set_ylabel('frequency')\n",
"ax.set_title('Empirical loss distribution with historical VaR')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "3bb30fcc",
"metadata": {},
"source": [
"## 2. Parametric (Gaussian) Value-at-Risk\n",
"\n",
"Closed-form Gaussian Value-at-Risk:\n",
"\n",
"$$\n",
"\\mathrm{VaR}_\\alpha = \\mu + \\sigma\\, \\Phi^{-1}(\\alpha),\n",
"$$\n",
"\n",
"where $\\Phi^{-1}$ is the inverse standard normal CDF (Acklam algorithm)."
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "f2dc13d4",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:03.769011Z",
"iopub.status.busy": "2026-05-12T09:45:03.768467Z",
"iopub.status.idle": "2026-05-12T09:45:04.094469Z",
"shell.execute_reply": "2026-05-12T09:45:04.088042Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"parametric_var = 3.296251162727\n",
"analytic = 3.296251165818\n",
"absolute error = 3.09e-09\n"
]
},
{
"data": {
"image/png": "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hoaGGk9PT9OrVy+zf/9+M3fuXJMjRw4zfPhwe52CmORfx3g1atQw7du3f9Llyn0k91p+9NFHxtPT00ybNs0cOXLELFq0yAQEBJh27drZ6xTktuRey/Xr15u//vrLHD582KxcudLUq1fPFCxY0Fy8eNFOZyDGGHP58mWzdetWs3XrVgOY0aNHm61bt5rjx48bY4x59913TadOnazt44ffeuedd8zevXvNN998o+G3UqNx48aZfPnyGRcXF1O1alWzfv1667ratWubLl26WB/37dvX2jZnzpymadOmGhcvFUnOtTTGmLVr15pq1aoZV1dXU6hQIfPJJ5+YmJiYJ1y1JJTc67hv3z4DmEWLFj3hSuVBknMtb968aYYMGWICAgKMm5ubyZs3r3njjTcUflKJ5FzL4OBgU6JECePq6mqyZctmOnXqZE6dOmWHquVOy5cvN8BdP/HXrkuXLqZ27dp3bVO+fHnj4uJiChUqZLcxui3G6HMZEREREUl71EdWRERERNIkBVkRERERSZMUZEVEREQkTVKQFREREZE0SUFWRERERNIkBVkRERERSZMUZEVEREQkTVKQFREREZE0SUFWRERERNIkBVkRkUQYY3jllVfImjUrFouFbdu2UadOHfr27Xvf7ZLSJjWwR51p5bkRkbTDyd4FiIikRgsWLGDy5MkEBwdTqFAhsmfPzsyZM3F2drZ3aSIicpuCrIhIIg4fPoyfnx9BQUHWZVmzZrVjRSIikpC6FohImhQXF8fIkSMpXLgwrq6u5MuXj08++QSAqKgoevfuTY4cOXBzc6NGjRqEhITYbF+nTh169+7NgAEDyJo1K7ly5WLIkCEAdO3alTfffJPQ0FAsFgsFChSwbnPnR+NXr16lc+fOZM6cGT8/P7744otE6xwxYgQFCxbE3d2dcuXK8eeffyapjqSca1KOkdTn8177mDhxIv7+/sTFxdls06pVK7p3755iNQBs3LiROnXq4O7uTvHixdm0aRMTJ06kZcuWyd6XiGQARkQkDRowYIDx8fExkydPNocOHTKrVq0y33//vTHGmN69ext/f38zf/58s3v3btOlSxfj4+Njzp8/b92+du3axsvLywwZMsQcOHDA/Pzzz8ZisZhFixaZS5cumWHDhpk8efKYsLAwc+bMGes2ffr0se7j9ddfN/ny5TNLliwxO3bsMM2bNzeenp42bYYPH26KFy9uFixYYA4fPmwmTZpkXF1dTXBw8APrSMq5JuUYiUl4Lvfbx4ULF4yLi4tZsmSJtf358+dtliWlhoTHTGjdunXGzc3NjBw50hw4cMC0bt3atGjRwhQqVMhs2bLlntuJSMalICsiaU5kZKRxdXW1CXPxrly5Ypydnc2UKVOsy6Kjo42/v78ZOXKkdVnt2rVNjRo1bLatUqWKGThwoDHGmDFjxpj8+fPbrL8ziF2+fNm4uLiYGTNmWNefP3/euLu7W9vcuHHDZMqUyaxdu9ZmPz169DDPP/98kuq437km9RiJufNckrKPVq1ame7du1vXfffdd8bf39/ExsYmuYYHBdnAwEDTqVMn6+Pff//dODg4mDZt2txzGxHJ2NRHVkTSnL179xIVFUX9+vXvWnf48GFu3rxJ9erVrcucnZ2pWrUqe/futWlbtmxZm8d+fn6cOXMmSTUcPnyY6OhoqlWrZl2WNWtWihUrZn186NAhrl27RsOGDW22jY6OpkKFCkmq437nmpxj3E9S9tGxY0defvllxo8fj6urK1OmTKFDhw44ODikSA0nT55k3bp1fP7559ZlTk5OGGMYOnRokvYhIhmPgqyIpDnu7u4psp+EIxBYLJa7+oE+iitXrgAwb948cufObbPO1dU1SXU86FyTeoxH3UeLFi0wxjBv3jyqVKnCqlWrGDNmTIrVEP9HRsWKFa3L9u/fT9WqVSlTpkyS9iEiGY+CrIikOUWKFMHd3Z2lS5fy0ksv2awLCAjAxcWFNWvWkD9/fgBu3rxJSEhIio5hGhAQgLOzMxs2bCBfvnwAXLx4kQMHDlC7dm0ASpYsiaurK6GhodZlyXW/c02pYyRlH25ubjzzzDNMmTKFQ4cOUaxYMWvoTIkaIiIicHR0xGKxAHDhwgU+//xzypUr91D7E5GMQUFWRNIcNzc3Bg4cyIABA3BxcaF69eqcPXuW3bt306NHD15//XXeeecdsmbNSr58+Rg5ciTXrl2jR48eKVZD5syZ6dGjB++88w7ZsmUjR44cvP/++zg4/P9gMJ6enrz99tv069ePuLg4atSoQUREBGvWrMHLy4suXbo88rmmxDGSuo+OHTvSvHlzdu/ezYsvvpii51m+fHliY2MZOXIkzz33HH369KFAgQLs2bOH48ePW/8oERG5k4KsiKRJgwcPxsnJiQ8//JDTp0/j5+fHa6+9BsBnn31GXFwcnTp14vLly1SuXJmFCxfi4+OTojWMGjWKK1eu0KJFCzw9PXnrrbeIiIiwafPxxx/j6+vLiBEjOHLkCFmyZKFixYq89957KXKuKXWMpOyjXr16ZM2alf379/PCCy+k6HkWLlyYYcOGMXbsWD799FM6dOjA1KlTadSoEU2aNLmrf7OICIDFGGPsXYSIiIiISHJpQgQRERERSZMUZEVEREQkTVKQFREREZE0SUFWRERERNIkBVkRERERSZMUZEVEREQkTVKQFREREZE0SUFWRERERNIkBVkRERERSZMUZEVEREQkTVKQFREREZE0SUFWRERERNKk/wPn9jiovKSN8AAAAABJRU5ErkJggg==",
"text/plain": [
"<Figure size 700x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"mu, sigma = 0.5, 1.7\n",
"var_param = opt.parametric_var_py(mu, sigma, alpha)\n",
"var_truth = mu + sigma * norm.ppf(alpha)\n",
"\n",
"print(f'parametric_var = {var_param:.12f}')\n",
"print(f'analytic = {var_truth:.12f}')\n",
"err = abs(var_param - var_truth)\n",
"print(f'absolute error = {err:.2e}')\n",
"assert err < 1e-6, 'parametric VaR must match mu + sigma * Phi^{-1}(alpha)'\n",
"\n",
"alphas = np.linspace(0.5, 0.999, 100)\n",
"rust_vals = [opt.parametric_var_py(mu, sigma, float(a)) for a in alphas]\n",
"ana_vals = mu + sigma * norm.ppf(alphas)\n",
"\n",
"fig, ax = plt.subplots(figsize=(7, 4))\n",
"ax.plot(alphas, ana_vals, 'k-', lw=2, label='analytic')\n",
"ax.plot(alphas, rust_vals, 'r--', lw=1.5, label='parametric_var (Rust)')\n",
"ax.set_xlabel(r'confidence level $\\alpha$')\n",
"ax.set_ylabel(r'$\\mathrm{VaR}_\\alpha$')\n",
"ax.set_title('Gaussian VaR: closed form vs Rust binding')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "50e84259",
"metadata": {},
"source": [
"## 3. Empirical Conditional Value-at-Risk\n",
"\n",
"$$\n",
"\\widehat{\\mathrm{CVaR}}_\\alpha\n",
"= \\frac{1}{n - k}\\sum_{i = k+1}^{n} L_{(i)},\n",
"\\qquad k = \\lfloor \\alpha\\, n \\rfloor.\n",
"$$\n",
"\n",
"We illustrate on a heavy-tailed Student-t loss sample where the tail mean\n",
"is markedly larger than the corresponding VaR threshold."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "edf8bb81",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:04.098170Z",
"iopub.status.busy": "2026-05-12T09:45:04.097876Z",
"iopub.status.idle": "2026-05-12T09:45:04.699779Z",
"shell.execute_reply": "2026-05-12T09:45:04.698614Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"cvar_value (Rust) = 3.148952\n",
"tail mean (numpy) = 3.148952\n",
"absolute error = 3.11e-15\n"
]
},
{
"data": {
"image/png": "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h6WlJTp06IA//vgDlpaWAIDFixdDQ0MDAQEByMvLg6+vL7799ltxe7lcjj179mDs2LHw9PSEgYEBAgMDMWvWLHU1iYiIiIiqSI1OZLdu3Vrmel1dXaxYsQIrVqwotY6DgwP27t1b1aERERERkZpJaowsEREREVExJrJEREREJElMZImIiIhIkmr0GFkiIqLqourT3YIDA6o5EiKqLPbIEhEREZEkMZElIiIiIkliIktEREREksREloiIiIgkiYksEREREUkSE1kiIiIikiQmskREREQkSUxkiYiIiEiS+EAEIiKiMqjy4AQ+NIFIPdgjS0RERESSxESWiIiIiCSJiSwRERERSRITWSIiIiKSJCayRERERCRJnLWAiN4qqtxhTkREbwf2yBIRERGRJDGRJSIiIiJJYiJLRERERJLERJaIiIiIJImJLBERERFJEhNZIiIiIpIkJrJEREREJElMZImIiIhIkpjIEhEREZEkMZElIiIiIkliIktEREREkqSp7gDKEhUVhR07duCvv/6Cnp4e2rVrh/nz56Nx48ZiHW9vbxw7dkxhuzFjxmDVqlXicmpqKsaOHYu4uDgYGhoiMDAQUVFR0NSs0c0noles2LBd3SEQEVENUqMzuWPHjiE4OBht2rRBQUEBPv/8c3Tr1g2XL1+GgYGBWG/UqFGYNWuWuKyvry/+v7CwED179oSNjQ1OnjyJtLQ0DBs2DFpaWpg7d+4bbQ8RERERVZ0ancju379fYXn9+vWwsrJCQkICOnbsKJbr6+vDxsamxH0cPHgQly9fxqFDh2BtbQ03NzfMnj0bYWFhmDlzJrS1tau1DURE9PZ7+duCjppPoSsDcp48VSgPDgxQR2hEbzVJjZHNysoCAJibmyuUb968GbVq1YKrqyvCw8Px5MkTcV18fDyaNWsGa2trsczX1xfZ2dm4dOlSicfJy8tDdna2wouIiIiIapYa3SP7sqKiIkyaNAnt27eHq6urWD548GA4ODjAzs4O58+fR1hYGJKTk7Fjxw4AQHp6ukISC0BcTk9PL/FYUVFRiIyMrKaWEBEREVFVkEwiGxwcjIsXL+K3335TKB89erT4/2bNmsHW1hZdunTBtWvX4OTkVKljhYeHIzQ0VFzOzs6Gvb195QInIiIiomohiaEF48ePx549exAXF4c6deqUWdfDwwMAkJKSAgCwsbFB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CfT09NQcXc1mZGSkNJbYwMAAFhYWHGNcjsmTJ6Ndu3aYO3cuBgwYgNOnT2PNmjXv9LdOTGSpWkVHR0NTUxMff/wxnj59Cg8PDxw5cuTdnvOOqlVsbCxSUlKQkpKilPQLgqCmqGqujz76CHfv3kVERATS09Ph5uaG/fv3K90ARopWrlwJAPD29lYoj4mJKXcIDFFltWnTBjt37kR4eDhmzZoFR0dHLFmyBEOGDFF3aGojE/jJTkREREQSxIFjRERERCRJTGSJiIiISJKYyBIRERGRJDGRJSIiIiJJYiJLRERERJLERJaIiIiIJImJLBERERFJEhNZIiIiIpIkJrJERBLi7e2NSZMmqTsMIqIagYksEREREUkSE1kiIiIikiQmskREEvXw4UMMGzYMZmZm0NfXh5+fH65evSquv3nzJvz9/WFmZgYDAwM0bdoUe/fuFbcdMmQILC0toaenh4YNGyImJkZdTSEiqhRNdQdARESVM3z4cFy9ehW//PILjI2NERYWhh49euDy5cvQ0tJCcHAwnj9/juPHj8PAwACXL1+GoaEhAOCrr77C5cuXsW/fPtSqVQspKSl4+vSpmltERFQxTGSJiCSoOIH9/fff0a5dOwDA5s2bYW9vj127dqF///5ITU1FQEAAmjVrBgCoX7++uH1qaipatmyJ1q1bAwDq1av3xttARPS6OLSAiEiCrly5Ak1NTXh4eIhlFhYWaNy4Ma5cuQIACAkJwddff4327dtjxowZOH/+vFh37Nix2Lp1K9zc3DBt2jScPHnyjbeBiOh1MZElInpLffLJJ/jnn3/w8ccf48KFC2jdujWWLVsGAPDz88PNmzcxefJk3LlzB126dMHUqVPVHDERUcUwkSUikqAmTZqgoKAAp06dEsvu37+P5ORkuLi4iGX29vb49NNPsWPHDkyZMgVr164V11laWiIwMBDff/89lixZgjVr1rzRNhARvS6OkSUikqCGDRuiT58+GDVqFFavXg0jIyNMnz4dtWvXRp8+fQAAkyZNgp+fHxo1aoSHDx8iLi4OTZo0AQBERETA3d0dTZs2RV5eHvbs2SOuIyKSCvbIEhFJVExMDNzd3dGrVy94enpCEATs3bsXWlpaAIDCwkIEBwejSZMm6N69Oxo1aoRvv/0WAKCtrY3w8HA0b94cHTt2hFwux9atW9XZHCKiCpMJgiCoOwgiIiIioopijywRERERSRITWSIiIiKSJCayRERERCRJTGSJiIiISJKYyBIRERGRJDGRJSIiIiJJYiJLRERERJLERJaIiIiIJImJLBERERFJEhNZIiIiIpIkJrJEREREJElMZImIiIhIkv4fMyG9MLH2YBMAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 700x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"df = 4.0\n",
"losses_t = rng.standard_t(df, size=n)\n",
"\n",
"cvar_rust = opt.cvar_value_py(losses_t.tolist(), alpha)\n",
"var_rust = opt.historical_var_py(losses_t.tolist(), alpha)\n",
"\n",
"sorted_losses = np.sort(losses_t)\n",
"k = int(np.floor(alpha * n))\n",
"tail_mean = sorted_losses[k:].mean()\n",
"\n",
"print(f'cvar_value (Rust) = {cvar_rust:.6f}')\n",
"print(f'tail mean (numpy) = {tail_mean:.6f}')\n",
"err = abs(cvar_rust - tail_mean)\n",
"print(f'absolute error = {err:.2e}')\n",
"assert err < 2.0/n, 'cvar_value must equal the empirical tail mean'\n",
"\n",
"fig, ax = plt.subplots(figsize=(7, 4))\n",
"ax.hist(losses_t, bins=120, color='slategray', alpha=0.75)\n",
"ax.axvline(var_rust, color='goldenrod', lw=2, label=f'VaR$_{{0.95}}$ = {var_rust:.3f}')\n",
"ax.axvline(cvar_rust, color='crimson', lw=2, label=f'CVaR$_{{0.95}}$ = {cvar_rust:.3f}')\n",
"ax.set_xlim(np.quantile(losses_t, 0.001), np.quantile(losses_t, 0.999))\n",
"ax.set_xlabel('loss')\n",
"ax.set_ylabel('frequency')\n",
"ax.set_title(f'Student-t (df={df:.0f}) loss sample with VaR / CVaR thresholds')\n",
"ax.legend()\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "39eef705",
"metadata": {},
"source": [
"## 4. CVaR minimisation on the unit simplex\n",
"\n",
"Given samples $r^{(s)} \\in \\mathbb{R}^d$, the RockafellarUryasev convex\n",
"programme reads\n",
"\n",
"$$\n",
"\\min_{w \\in \\Delta_d,\\; \\zeta \\in \\mathbb{R}}\\;\n",
"\\zeta + \\frac{1}{(1-\\alpha)\\, S}\\,\n",
"\\sum_{s=1}^{S} \\big(\\zeta - \\langle r^{(s)}, w\\rangle\\big)_+,\n",
"$$\n",
"\n",
"over the unit simplex $\\Delta_d = \\{w \\ge 0,\\; \\mathbf{1}^\\top w = 1\\}$.\n",
"\n",
"Synthetic setup: $d = 3$ decision components, with the first column\n",
"highly volatile and the third column nearly stable. The CVaR optimiser\n",
"should concentrate weight on the stable component."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "9f327390",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:04.703348Z",
"iopub.status.busy": "2026-05-12T09:45:04.703051Z",
"iopub.status.idle": "2026-05-12T09:45:05.848112Z",
"shell.execute_reply": "2026-05-12T09:45:05.845991Z"
}
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"optimal weights = [0.00196445 0.0288853 0.96915025]\n",
"sum(weights) = 1.000000\n",
"min(weights) = 0.001964\n",
"zeta (= VaR at opt) = 0.163253\n",
"CVaR(alpha) = 0.216240\n",
"iterations = 4000\n",
"CVaR recomputed = 0.216240\n",
"|cvar - recomp| = 0.00e+00\n"
]
},
{
"data": {
"image/png": "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mpqaiI+PVyiPj4/P8deXX375Bd999x2+//57AICzszOSk5Pxww8/4Oeff1Y6erWOjg50dHSKvgFERERUqly+fBnu7u549+4dDA0NsWvXLjg6OgJ438u0SpUqqFChAi5duoTx48fj5s2b2LlzZ47bYy9TKutW/7Enx2WD+nxVqPWIiIqTynqASKVSuLm5ISwsTF4mk8kQFham8GvMh1JSUrIlOTQ1NQG8n8uciIiIKCe1atVCVFQUTp8+jaFDh6J///64du0aAOCHH36Al5cXnJ2d8e2332LTpk3YtWsXoqOjc9wee5kSERGVLiqdBcbf3x/9+/dH/fr10bBhQwQHByM5OVk+K4y3tzcqVqyIoKAgAO/v312wYAHq1auHRo0a4c6dO/jll1/QuXNneSKEiIiISBmpVAp7e3sAgJubG86ePYtFixZh5cqV2eo2atQIAHDnzh1Ur15d6fbYy5SIiKh0UWkC5JtvvsGzZ88wefJkxMXFoW7dujhw4IB8YNSYmBiFHh+TJk2CRCLBpEmT8PjxY1hYWKBz586YOXOmqppAREREpZRMJkNqaqrSZVFRUQAAGxubEoyIiIiIipNKEyAAMHz4cAwfPlzpsvDwcIXnWlpamDJlCqZMmVICkREREZG6CAgIQPv27VG5cmUkJSVhy5YtCA8Px8GDBxEdHY0tW7agQ4cOKF++PC5duoQxY8agefPmcHFxUXXoREREVERUngAhIiIiKm5Pnz6Ft7c3YmNjYWJiAhcXFxw8eBBt2rTBw4cPcfjwYfmtuLa2tujRowcmTZqk6rCJiIioCDEBQkRERGpv7dq1OS6ztbXFsWPHSjAaIiIiUgWVzQJDRERERERERFRSmAAhIiIiIiIiIrXHBAgRERERERERqT0mQIiIiIiIiIhI7TEBQkRERERERERqjwkQIiIiIiIiIlJ7TIAQERERERERkdpjAoSIiIiIiIiI1B4TIERERERERESk9pgAISIiIiIiIiK1xwQIEREREREREak9JkCIiIiIiIiISO0xAUJEREREREREao8JECIiIiIiIiJSe1qqDoCIiIiIiFRj9R97clw2qM9XxbLdz01xvQaF9bnFQ6RO2AOEiIiIiIiIiNQeEyBEREREREREpPaYACEiIiIiIiIitccECBERERERERGpPSZAiIiIiIiIiEjtMQFCRERERERERGqP0+ASEREREZVyxTF1ammaypaIKD/YA4SIiIiIiIiI1B4TIERERKT2li9fDhcXFxgbG8PY2Bju7u7Yv3+/fPm7d+/g5+eH8uXLw9DQED169EB8fLwKIyYiIqKixgQIERERqb1KlSph9uzZiIyMxLlz59CqVSt06dIFV69eBQCMGTMG//vf/7B9+3YcO3YMT548Qffu3VUcNRERERUljgFCREREaq9z584Kz2fOnInly5fj1KlTqFSpEtauXYstW7agVatWAID169ejdu3aOHXqFL788ktVhExERERFjD1AiIiIqEzJzMzE1q1bkZycDHd3d0RGRiI9PR2enp7yOg4ODqhcuTIiIiJUGCkREREVJfYAISIiojLh8uXLcHd3x7t372BoaIhdu3bB0dERUVFRkEqlMDU1VahvZWWFuLi4HLeXmpqK1NRU+fPExMTiCp2IiIiKABMgREREVCbUqlULUVFRSEhIwI4dO9C/f38cO3as0NsLCgpCYGBgEUZIVDw4nW3xyOt1Lez0w0RUfHgLDBEREZUJUqkU9vb2cHNzQ1BQEFxdXbFo0SJYW1sjLS0Nr1+/VqgfHx8Pa2vrHLcXEBCAhIQE+ePhw4fF3AIiIiL6FEyAEBERUZkkk8mQmpoKNzc3aGtrIywsTL7s5s2biImJgbu7e47r6+joyKfVzXoQERHR54u3wBAREZHaCwgIQPv27VG5cmUkJSVhy5YtCA8Px8GDB2FiYgJfX1/4+/vDzMwMxsbGGDFiBNzd3TkDDBERkRphAoSIiIjU3tOnT+Ht7Y3Y2FiYmJjAxcUFBw8eRJs2bQAACxcuhIaGBnr06IHU1FR4eXlh2bJlKo6aiIiIihITIERERKT21q5dm+tyXV1dhISEICQkpIQiIiIiopLGMUCIiIiIiIiISO0xAUJEREREREREao8JECIiIiIiIiJSe0yAEBEREREREZHaYwKEiIiIiIiIiNQeEyBEREREREREpPaYACEiIiIiIiIitael6gCIiIiIiChvq//Yo+oQiIhKNfYAISIiIiIiIiK1xwQIEREREREREak9JkCIiIiIiIiISO0xAUJEREREREREao8JECIiIiIiIiJSe0yAEBEREREREZHaU/k0uCEhIZg3bx7i4uLg6uqKJUuWoGHDhjnWf/36NX7++Wfs3LkTL1++RJUqVRAcHIwOHTqUYNRE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GDBgAKRSKQ4fPozg4GAkJyfD1tYWPXr0wKRJkz61CURERPSZKFQC5NSpU+jbty8ePHgAIYTCMolEgszMzCIJjoiIiMq2rVu34s8//0SHDh0+aTsfX698zNbWFseOHfukfRAREdHnrVAJkCFDhqB+/frYu3cvbGxsCv1rDBEREVFupFIp7O3tVR0GERERqYFCJUBu376NHTt28IKEiIiIitWPP/6IRYsWYenSpfzBhYiIiD5JoRIgjRo1wp07d5gAISIiomJ14sQJHD16FPv370edOnWyDcC+c+dOFUVGREREpU2+EyCXLl2S/3/EiBH48ccfERcXB2dn52wXIxwtnYiIiIqCqakpunXrpuowiIiISA3kOwFSt25dSCQShUHEBg4cKP9/1jIOgkpERERFZf369aoOgYiIiNREvhMg9+7dK844iIiIiJTKyMhAeHg4oqOj0bdvXxgZGeHJkycwNjaGoaGhqsMjIiKiUiLfCZAqVaoUZxxERERE2Tx48ADt2rVDTEwMUlNT0aZNGxgZGWHOnDlITU3FihUrVB0iERERlRKFGgR1z549SsslEgl0dXVhb2+PqlWrflJgRERERKNGjUL9+vVx8eJFlC9fXl7erVs3DBo0SIWRERERUWlTqARI165ds40HAiiOA9K0aVPs3r0b5cqVK5JAiYiIqOw5fvw4Tp48CalUqlBuZ2eHx48fqygqIiIiKo00CrNSaGgoGjRogNDQUCQkJCAhIQGhoaFo1KgR/vnnH/z777948eIFxo4dW9TxEhERURkik8mUDq7+6NEjGBkZqSAiIiIiKq0K1QNk1KhRWLVqFRo3biwva926NXR1dfHDDz/g6tWrCA4OVpglhoiIiKig2rZti+DgYKxatQrA+96mb968wZQpU9ChQwcVR0dERESlSaESINHR0TA2Ns5WbmxsjLt37wIAatSogefPn39adERERFSmzZ8/H15eXnB0dMS7d+/Qt29f3L59G+bm5vjjjz9UHR4RERGVIoVKgLi5ueGnn37Cpk2bYGFhAQB49uwZxo0bhwYNGgAAbt++DVtb26KLlIiIiMqcSpUq4eLFi9i6dSsuXbqEN2/ewNfXF99++y309PRUHR4RERGVIoVKgKxduxZdunRBpUqV5EmOhw8folq1avj7778BAG/evMGkSZOKLlIiIiIqk7S0tNCvXz9Vh0FE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WzkRERGVTqtWrUL37t1x584djBw5EoMGDYKRkZGqwyIiIqJSTuUJkG+++QbPnj3D5MmTERcXh7p16+LAgQPygVFjYmKgoaGh4iiJiIioJLVr1w4AEBkZiVGjRjEBQkRERJ9M5QkQABg+fLjSW14AIDw8PNd1N2zYUPQBERER0Wdh/fr1qg6BiIiI1AS7VhARERERERGR2mMChIiIiIiIiIjUHhMgRERERERERKT2mAAhIiIiIiIiIrXHBAgRERERERERqT0mQIiIiIiIiIhI7TEBQkRERERERERqjwkQIiIiIiIiIlJ7TIAQERFRmfDvv/+ic+fOqFChAiQSCXbv3q2wfMCAAZBIJAqPdu3aqSZYIiIiKnJMgBAREVGZkJycDFdXV4SEhORYp127doiNjZU//vjjjxKMkIiIiIqTlqoDICIiIioJ7du3R/v27XOto6OjA2tr6xKKiIiIiEoSe4AQERER/X/h4eGwtLRErVq1MHToULx48SLHuqmpqUhMTFR4EBER0eeLPUCIiIiI8P72l+7du6Nq1aqIjo7GxIkT0b59e0REREBTUzNb/aCgIAQGBqogUvrcrf5jj6pDICIiJZgAISIiIgLQu3dv+f+dnZ3h4uKC6tWrIzw8HK1bt85WPyAgAP7+/vLniYmJsLW1LZFYiYiIqOB4CwwRERGREtWqVYO5uTnu3LmjdLmOjg6MjY0VHkRERPT5YgKEiIiISIlHjx7hxYsXsLGxUXUoREREVAR4CwwRERGVCW/evFHozXHv3j1ERUXBzMwMZmZmCAwMRI8ePWBtbY3o6GiMGzcO9vb28PLyUmHUREREVFSYACEiIqIy4dy5c2jZsqX8edb4Hf3798fy5ctx6dIlbNy4Ea9fv0aFChXQtm1bTJ8+HTo6OqoKmYiIiIoQEyBERERUJnh4eEAIkePygwcPlmA0REREVNKYACEiIiIiUiK36WwH9fmqBCMhIqKiwEFQiYiIiIiIiEjtMQFCRERERERERGqPCRAiIiIiIiIiUntMgBARERERERGR2mMChIiIiIiIiIjUHhMgRERERERERKT2OA0uERERERERFVjWVNHu4i10ACS/fSsv41TR9DliDxAiIiIiIiIiUntMgBARERERERGR2mMChIiIiIiIiIjUHhMgRERERERERKT2mAAhIiIiIiIiIrXHBAgRERERERERqT1Og0tEREREaitrSk5lOE0nlSX8LBCxBwgRERERERERlQFMgBARERERERGR2mMChIiIiIiIiIjUHhMgRERERERERKT2mAAhIiIiIiIiIrXHBAgRERERERERqT0mQIiIiIiIiIhI7TEBQkRERERERERqjwkQIiIiKhP+/fdfdO7cGRUqVIBEIsHu3bsVlgshMHnyZNjY2EBPTw+enp64ffu2aoIlIiKiIscECBEREZUJycnJcHV1RUhIiNLlc+fOxeLFi7FixQqcPn0aBgYG8PLywrt370o4UiIiIioOWqoOgIiIiKgktG/fHu3bt1e6TAiB4OBgTJo0CV26dAEAbNq0CVZWVti9ezd69+5dkqESERFRMWAPECIiIirz7t27h7i4OHh6esrLTExM0KhRI0RERKgwMiIiIioq7AFCREREZV5cXBwAwMrKSqHcyspKvuxjqampSE1NlT9PTEwsvgCJiIjokzEBQkRERFQIQUFBCAwMVHUYRESfbPUfe1QdAlGJ4C0wREREVOZZW1sDAOLj4xXK4+Pj5cs+FhAQgISEBPnj4cOHxR4nERERFR4TIERERFTmVa1aFdbW1ggLC5OXJSYm4vTp03B3d1e6jo6ODoyNjRUeRERE9Pn6LBIgISEhsLOzg66uLho1aoQzZ87kWHf16tVo1qwZypUrh3LlysHT0zPX+kREREQA8ObNG0RFRSEqKgrA+4FPo6KiEBMTA4lEgtGjR2PGjBnYs2cPLl++DG9vb1SoUAFdu3ZVadxERERUNFSeANm2bRv8/f0xZcoUnD9/Hq6urvDy8sLTp0+V1g8PD0efPn1w9OhRREREwNbWFm3btsXjx49LOHIiIiIqTc6dO4d69eqhXr16AAB/f3/Uq1cPkydPBgCMGzcOI0aMwA8//IAGDRrgzZs3OHDgAHR1dVUZNhERERURlSdAFixYgEGDBsHHxweOjo5YsWIF9PX1sW7dOqX1N2/ejGHDhqFu3bpwcHDAmjVrIJPJFLqsEhEREX3Mw8MDQohsjw0bNgAAJBIJpk2bhri4OLx79w6HDx9GzZo1VRs0ERERFRmVJkDS0tIQGRkJT09PeZmGhgY8PT0RERGRr22kpKQgPT0dZmZmxRUmEREREREREZVyKp0G9/nz58jMzISVlZVCuZWVFW7cuJGvbYwfPx4VKlRQSKJ8KDU1FampqfLniYmJhQ+YiIiIiIiIiEolld8C8ylmz56NrVu3YteuXTnenxsUFAQTExP5w9bWtoSjJCIiIiIiIiJVU2kCxNzcHJqamoiPj1coj4+Ph7W1da7r/vrrr5g9ezYOHToEFxeXHOsFBAQgISFB/nj48GGRxE5EREREREREpYdKEyBSqRRubm4KA5hmDWjq7u6e43pz587F9OnTceDAAdSvXz/Xfejo6MDY2FjhQURERERERERli0rHAAHeT0HXv39/1K9fHw0bNkRwcDCSk5Ph4+MDAPD29kbFihURFBQEAJgzZw4mT56MLVu2wM7ODnFxcQAAQ0NDGBoaqqwdRERERERERPT5UnkC5JtvvsGzZ88wefJkxMXFoW7dujhw4IB8YNSYmBhoaPxfR5Xly5cjLS0NPXv2VNjOlClTMHXq1JIMnYiIiIiIiIhKCZUnQABg+PDhGD58uNJl4eHhCs/v379f/AERERERERERkVr5LBIgREREREQlbfUfe1SyLhERqUapngaXiIiIiIiIiCg/mAAhIiIiIiIiIrXHBAgRERERERERqT0mQIiIiIiIiIhI7TEBQkRERERERERqjwkQIiIiIiIiIlJ7TIAQERERERERkdpjAoSIiIiIiIiI1B4TIERERERERESk9pgAISIiIiIiIiK1xwQIEREREREREak9JkCIiIiIiIiISO1pqToAIiIiIqJPsfqPPaoOgYg+ktfnclCfr0ooEqL/wx4gRERERERERKT2mAAhIiIiIiIiIrXHBAgRERERgKlTp0IikSg8HBwcVB0WERERFRGOAUJERET0/9WpUweHDx+WP9fS4qUSERGRuuBZnYiIiOj/09LSgrW1tarDICIiomLAW2CIiIiI/r/bt2+jQoUKqFatGr799lvExMTkWDc1NRWJiYkKDyIiIvp8sQcIEREREYBGjRphw4YNqFWrFmJjYxEYGIhmzZrhypUrMDIyylY/KCgIgYGBKoiUiKj0K+z01blNn5uc8ha6///fj7fPaXcJYA8QIiIiIgBA+/bt8fXXX8PFxQVeXl7Yt28fXr9+jT///FNp/YCAACQkJMgfDx8+LOGIiYiIqCDYA4SIiIhICVNTU9SsWRN37txRulxHRwc6OjolHBUREREVFnuAEBERESnx5s0bREdHw8bGRtWhEBERURFgAoSIiIgIwNixY3Hs2DHcv38fJ0+eRLdu3aCpqYk+ffqoOjQiIiIqArwFhoiIiAjAo0eP0KdPH7x48QIWFhZo2rQpTp06BQsLC1WHRkREREWACRAiIiIiAFu3blV1CERERFSMmAAhIiIios9CYafFJCIiyg+OAUJEREREREREao8JECIiIiIiIiJSe0yAEBEREREREZHaYwKEiIiIiIiIiNQeEyBEREREREREpPaYACEiIiIiIiIitcdpcImIiIioQHKbrnZQn69KMBIioqLB77WygT1AiIiIiIiIiEjtMQFCRERERERERGqPCRAiIiIiIiIiUntMgBARERERERGR2mMChIiIiIiIiIjUHhMgRERERERERKT2OA0uEREREZWI3KaZJCLKj9y+RxoXcr1P2Wducps+N69tcurd4sEeIERERERERESk9pgAISIiIiIiIiK1xwQIEREREREREak9JkCIiIiIiIiISO1xEFSiUiYyso2qQ6AS5OYWquoQiIiIiIjUAnuAEBEREREREZHaYw8QIiIios9ccU0f+ylTNBIRUfHJ7Tv4c5sitzTFyh4gRERERERERKT2PosESEhICOzs7KCrq4tGjRrhzJkzudbfvn07HBwcoKurC2dnZ+zbt6+EIiUiIiJ1V9DrEiIiIiodVJ4A2bZtG/z9/TFlyhScP38erq6u8PLywtOnT5XWP3nyJPr06QNfX19cuHABXbt2RdeuXXHlypUSjpyIiIjUTUGvS4iIiKj0UHkCZMGCBRg0aBB8fHzg6OiIFStWQF9fH+vWrVNaf9GiRWjXrh1++ukn1K5dG9OnT8cXX3yBpUuXlnDkREREpG4Kel1CREREpYdKEyBpaWmIjIyEp6envExDQwOenp6IiIhQuk5ERIRCfQDw8vLKsT4RERFRfhTmuoSIiIhKD5XOAvP8+XNkZmbCyspKodzKygo3btxQuk5cXJzS+nFxcUrrp6amIjU1Vf48ISEBAJCYmPgpoSt1oUuXIt8mfZ7q/f23yvb95k2GyvZNJa84vqvyIyMlTSX7JdUo6uMsa3tCiCLdbnEr6HVJSV5jvE1JKfJtArnHWth9Fsc2iejz9kZkIh0ypCITbyWq+5y/kWUgXZaBVFnGZ/F9U1zfh6q6PsxJbm0pjlg/5TpD7afBDQoKQmBgYLZyW1tbFURDasPERNURUJnBY42Kn8mADcWy3aSkJJio8felOlxj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",
"text/plain": [
"<Figure size 1100x400 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"S, d = 800, 3\n",
"scales = np.array([5.0, 1.0, 0.1])\n",
"samples = rng.standard_normal((S, d)) * scales\n",
"\n",
"result = opt.minimize_cvar_py(\n",
" samples.tolist(),\n",
" alpha=0.95,\n",
" n_iter=4000,\n",
" step_size=0.05,\n",
" tol=0.0,\n",
")\n",
"w = np.asarray(result['w'])\n",
"zeta = result['zeta']\n",
"cvar = result['cvar']\n",
"iters = result['iterations']\n",
"\n",
"print(f'optimal weights = {w}')\n",
"print(f'sum(weights) = {w.sum():.6f}')\n",
"print(f'min(weights) = {w.min():.6f}')\n",
"print(f'zeta (= VaR at opt) = {zeta:.6f}')\n",
"print(f'CVaR(alpha) = {cvar:.6f}')\n",
"print(f'iterations = {iters}')\n",
"\n",
"assert abs(w.sum() - 1.0) < 1e-9, 'weights must sum to one'\n",
"assert w.min() >= -1e-12, 'weights must be non-negative'\n",
"assert w[2] > w[0], 'optimiser must prefer the stable component'\n",
"\n",
"# Verify the reported CVaR against an independent recomputation on the\n",
"# achieved decision w.\n",
"losses_at_w = -samples @ w\n",
"cvar_recomp = opt.cvar_value_py(losses_at_w.tolist(), 0.95)\n",
"print(f'CVaR recomputed = {cvar_recomp:.6f}')\n",
"print(f'|cvar - recomp| = {abs(cvar - cvar_recomp):.2e}')\n",
"\n",
"fig, axes = plt.subplots(1, 2, figsize=(11, 4))\n",
"axes[0].bar(range(d), w, color=['#cc4444', '#cccc44', '#44aa66'])\n",
"axes[0].set_xticks(range(d))\n",
"axes[0].set_xticklabels([f'$w_{i}$' for i in range(d)])\n",
"axes[0].set_ylabel('weight')\n",
"axes[0].set_title('Simplex-projected CVaR-optimal weights')\n",
"axes[0].set_ylim(0, 1)\n",
"\n",
"axes[1].hist(losses_at_w, bins=60, color='slategray', alpha=0.7)\n",
"axes[1].axvline(zeta, color='goldenrod', lw=2, label=f'$\\\\zeta$ = VaR = {zeta:.3f}')\n",
"axes[1].axvline(cvar, color='crimson', lw=2, label=f'CVaR = {cvar:.3f}')\n",
"axes[1].set_xlabel('loss at optimal w')\n",
"axes[1].set_ylabel('frequency')\n",
"axes[1].set_title('Loss distribution at optimal decision')\n",
"axes[1].legend()\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "d2adfdf7",
"metadata": {},
"source": [
"## 5. Convergence of the CVaR sub-gradient solver\n",
"\n",
"We run the solver with an increasing number of iterations and track the\n",
"achieved CVaR objective."
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "301f0ae8",
"metadata": {
"execution": {
"iopub.execute_input": "2026-05-12T09:45:05.853024Z",
"iopub.status.busy": "2026-05-12T09:45:05.852718Z",
"iopub.status.idle": "2026-05-12T09:45:06.985691Z",
"shell.execute_reply": "2026-05-12T09:45:06.983799Z"
}
},
"outputs": [
{
"data": {
"image/png": "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28SeeOIJbNy4EUlJSSo/O9zP8OHDYW1tja1bt8LY2Bg3b95U+XkqMTERN27cwO7duzFgwABl+eXLl9Vav5ubG+bOnYtly5bVOZxXSyOVShESEoKQkBCsWrUK7733Ht544w0kJCQouz2cOHECISEhTZKY+Pr61vvlx9vbGydPnoRcLle5qqXoTuLt7d2gbY8bNw4vv/wyzp8/jx07dsDCwgJPPvmkSmxA1Ze06l+ONKGI7eLFiypXc27cuFHj6oivry+Ki4sbvK17tWvXDgDue3ydnJxgbW0NmUzWoO16e3tDLpfjwoULyqsdAJCTk4Nbt241+Nw86GtPG+cO+PeKroIQAhcvXlQriWzo61aTc+Lr64vk5GRUVFSo/LReXV3HUvH6MDY2rnc73t7eNY4FUDWuqbp8fX3x6quv4tVXX8WFCxfg7++PDz74AN988w2Aqqtqt27dUlmmvLwcWVlZta7vwoULGDx4sPJxcXExsrKyMGzYMADA/PnzVYZcVFyVVLxmL1++rHKFtLbRLepy8+ZNxMfHY9myZVi8eLFKTNUpRgRp6LHT9nsC0LRfODV5jWkjLm9v71qP671tztvbG3///TeEECrb1eT13NjYJ7aJzZ8/H5aWlnjhhReQk5NT4/m0tDSsWbNGpczc3ByjRo3Cr7/+ivXr18PS0lLZHxH495tX9W9a5eXl+Pjjj9WOa+bMmbCwsEB0dLSmu2RwCgoKapQprlIphhYZO3YsMjMzsWnTphp179y5g5KSErW2pe4QW0899RROnDiB77//vsZzivM+bNgwZGdnY8eOHcrnKisr8dFHH8HKygoDBw5UK6batm1kZIRt27Zh586deOKJJ1TGfwwICICvry9iYmJQXFxcY/m8vLx6txESEoJWrVph/fr1KuVr166tUXfs2LFISkrCvn37ajx369YtVFZWqrNbSk5OThgwYAA+//xzXLlyReU5xbE1MjLCU089he+++67WZLe+fVQkDPfOrqW4kv/4449rFLOCpaVlje5CmtDGuQOAr7/+WqWb1K5du5CVlYXHHnus3mUb+rrV5Jw89dRTyM/Pr/X1pDjHivFq700QnZ2dMWjQIHzyySe1JorVtzNs2DAcOXIER48eVXlenUlkSktLa8ya6OvrC2tra5UhjXx9fWv08dy4cWOdV2I3btyIiooK5eP169ejsrJSeW66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tWd2J6Bmr7i4GBcvXlQ+vnz5Mo4fPw57e3u0adMGkZGRmDRpEgIDA9G7d2+sXr0aJSUlmDJlig6jJqJ7sS0TGY5m0Z4fdFgFosaWkJAgANT4N2nSJGWdjz76SLRp00aYmJiI3r17iyNHjuguYCKqFdsykeFoDu1ZIgTn7CMiIiIi/cI+sURERESkd5jEEhEREZHeYRJLRERERHqHSSwRERER6R0msURERESkd5jEEhEREZHeYRJLRERERHqHSSwRERER6R0msURERESkd5jEEhEZAIlEgh9++EHXYRARNRkmsUREBiArKwuPPfYYACA9PR0SiQTHjx/XbVBERI2ola4DICKiB+fq6too662oqICxsXGjrJuI6EHwSiwRUTMxaNAgzJo1C/Pnz4e9vT1cXV2xdOlStZat3p2gbdu2AIBevXpBIpFg0KBBynqffvopunTpAjMzM3Tu3Bkff/yx8jnFFdwdO3Zg4MCBMDMzw5YtW7S1e0REWsUrsUREzchXX32FyMhIJCcnIykpCZMnT8YjjzyCsLAwtddx9OhR9O7dG3FxcejWrRtMTEwAAFu2bMHixYuxdu1a9OrVC3/99RemTZsGS0tLTJo0Sbn8woUL8cEHH6BXr14wMzPT+j4SEWkDk1giombEz88PS5YsAQB06NABa9euRXx8vEZJrJOTEwDAwcFBpZvBkiVL8MEHH2D06NEAqq7YnjlzBp988olKEjtnzhxlHSKi5opJLBFRM+Ln56fy2M3NDbm5uQ+83pKSEqSlpeH555/HtGnTlOWVlZWwtbVVqRsYGPjA2yMiamxMYomImpF7b6KSSCSQy+UPvN7i4mIAwKZNmxAUFKTynJGRkcpjS0vLB94eEVFjYxJLRGRgFH1gZTKZsszFxQXu7u64dOkSnn32WV2FRkSkNUxiiYgMjLOzM8zNzbF37154enrCzMwMtra2WLZsGWbNmgVbW1s8+uijKCsrw59//ombN28iMjJS12ETEWmEQ2wRERmYVq1a4cMPP8Qnn3wCd3d3jBgxAgDwwgsv4NNPP8UXX3yBHj16YODAgfjyyy+VQ3IREekTiRBC6DoIIiIiIiJN8EosEREREekdJrFERM3cli1bYGVlVeu/bt266To8IiKdYHcCIqJm7vbt28jJyan1OWNjY3h7ezdxREREusckloiIiIj0DrsTEBEREZHeYRJLRERERHqHSSwRERER6R0msURERESkd5jEEhEREZHeYRJLRERERHqHSSwRERER6R0msURERESkd/4PijXGuXOMZFIAAAAASUVORK5CYII=",
"text/plain": [
"<Figure size 700x400 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"iters_grid = [50, 100, 250, 500, 1000, 2000, 4000, 8000]\n",
"cvar_curve = []\n",
"for nit in iters_grid:\n",
" res = opt.minimize_cvar_py(\n",
" samples.tolist(),\n",
" alpha=0.95,\n",
" n_iter=nit,\n",
" step_size=0.05,\n",
" tol=0.0,\n",
" )\n",
" cvar_curve.append(res['cvar'])\n",
"\n",
"fig, ax = plt.subplots(figsize=(7, 4))\n",
"ax.semilogx(iters_grid, cvar_curve, 'o-', color='navy')\n",
"ax.set_xlabel('n_iter')\n",
"ax.set_ylabel('achieved CVaR objective')\n",
"ax.set_title('CVaR minimiser: convergence of the projected sub-gradient method')\n",
"ax.grid(True, alpha=0.3)\n",
"fig.tight_layout()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "19d5ffc8",
"metadata": {},
"source": [
"## Verification summary\n",
"\n",
"Verified against analytic ground truth:\n",
"\n",
"- `historical_var` matches `numpy.quantile(L, alpha, method='higher')` — error = 0.\n",
"- `parametric_var` matches $\\mu + \\sigma\\, \\Phi^{-1}(\\alpha)$ — error $< 10^{-6}$.\n",
"- `cvar_value` matches the empirical tail mean $\\frac{1}{n-k}\\sum_{i>k} L_{(i)}$ — error $< 10^{-10}$.\n",
"- `minimize_cvar` returns weights on the unit simplex (sum = 1, non-negative) and concentrates on the stable component, with the reported CVaR equal to the recomputed empirical CVaR on the achieved decision."
]
}
],
"metadata": {
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}