{
  "schema_version": 1,
  "data_kind": "synthetic",
  "seeds": [
    42,
    43,
    44
  ],
  "quick_smoke_run": false,
  "environment": {
    "python": "3.12.3",
    "numpy": "2.5.2",
    "torch": "2.14.0+cpu",
    "device": "cpu",
    "threads": 1
  },
  "projects": {
    "08": {
      "title": "Does learned hedging help?",
      "metric": "95% expected shortfall",
      "unit": "USD per call",
      "direction": "lower",
      "summary": "Neural hedge has higher 95% expected shortfall than delta hedge in 3 of 3 held-out seeds. Lower values are better.",
      "strategies": [
        {
          "id": "neural",
          "label": "Neural hedge",
          "values": [
            {
              "seed": 42,
              "value": 1.3536523312795905
            },
            {
              "seed": 43,
              "value": 1.3577723265625534
            },
            {
              "seed": 44,
              "value": 1.29714455245994
            }
          ],
          "minimum": 1.29714455245994,
          "maximum": 1.3577723265625534
        },
        {
          "id": "delta",
          "label": "Delta hedge",
          "values": [
            {
              "seed": 42,
              "value": 1.116775353788398
            },
            {
              "seed": 43,
              "value": 1.2129575697472317
            },
            {
              "seed": 44,
              "value": 1.242479136912152
            }
          ],
          "minimum": 1.116775353788398,
          "maximum": 1.242479136912152
        },
        {
          "id": "unhedged",
          "label": "Unhedged",
          "values": [
            {
              "seed": 42,
              "value": 10.221964325755833
            },
            {
              "seed": 43,
              "value": 10.063776271417735
            },
            {
              "seed": 44,
              "value": 9.824518915265797
            }
          ],
          "minimum": 9.824518915265797,
          "maximum": 10.221964325755833
        }
      ],
      "limitations": [
        "Synthetic zero-rate GBM; no jumps or stochastic volatility.",
        "CVaR optimization does not guarantee lower held-out tail loss.",
        "Policies and premium use training volatility under stress."
      ],
      "settings": {
        "seed": 42,
        "epochs": 100,
        "paths": 512,
        "steps": 30,
        "volatility": 0.2,
        "cost": 0.001,
        "spot": 100.0,
        "strike": 100.0,
        "maturity": 0.0821917808219178,
        "learning_rate": 0.003,
        "hidden": 32,
        "confidence": 0.95
      }
    },
    "10": {
      "title": "Does the network model add value?",
      "metric": "Brier score",
      "unit": "score",
      "direction": "lower",
      "summary": "Graph convolution has higher brier score than one-round structural in 3 of 3 held-out seeds. Lower values are better.",
      "strategies": [
        {
          "id": "gcn",
          "label": "Graph convolution",
          "values": [
            {
              "seed": 42,
              "value": 0.039180513471364975
            },
            {
              "seed": 43,
              "value": 0.052903056144714355
            },
            {
              "seed": 44,
              "value": 0.04167355224490166
            }
          ],
          "minimum": 0.039180513471364975,
          "maximum": 0.052903056144714355
        },
        {
          "id": "logistic_node_features",
          "label": "Node logistic model",
          "values": [
            {
              "seed": 42,
              "value": 0.10901910811662674
            },
            {
              "seed": 43,
              "value": 0.10048618912696838
            },
            {
              "seed": 44,
              "value": 0.10236164182424545
            }
          ],
          "minimum": 0.10048618912696838,
          "maximum": 0.10901910811662674
        },
        {
          "id": "one_round_structural",
          "label": "One-round structural",
          "values": [
            {
              "seed": 42,
              "value": 0.029165363487473183
            },
            {
              "seed": 43,
              "value": 0.03267689574048924
            },
            {
              "seed": 44,
              "value": 0.028839545806684987
            }
          ],
          "minimum": 0.028839545806684987,
          "maximum": 0.03267689574048924
        }
      ],
      "limitations": [
        "Synthetic Eisenberg\u2013Noe labels; this is a simulator surrogate.",
        "Independent graph holdout tests simulated topology generalization only.",
        "One-round structural probabilities use a fixed illustrative logistic scale."
      ],
      "settings": {
        "seed": 42,
        "epochs": 100,
        "graphs": 48,
        "nodes": 32
      }
    },
    "13": {
      "title": "Does learned allocation control the tail?",
      "metric": "Daily 95% expected shortfall",
      "unit": "%",
      "direction": "lower",
      "summary": "PPO allocation has higher daily 95% expected shortfall than inverse volatility in 3 of 3 held-out seeds. Lower values are better.",
      "strategies": [
        {
          "id": "ppo",
          "label": "PPO allocation",
          "values": [
            {
              "seed": 42,
              "value": 2.6560300029814234
            },
            {
              "seed": 43,
              "value": 2.507044687769109
            },
            {
              "seed": 44,
              "value": 2.4423893657512954
            }
          ],
          "minimum": 2.4423893657512954,
          "maximum": 2.6560300029814234
        },
        {
          "id": "equal_weight",
          "label": "Equal weight",
          "values": [
            {
              "seed": 42,
              "value": 2.642750949598848
            },
            {
              "seed": 43,
              "value": 2.5196650764542103
            },
            {
              "seed": 44,
              "value": 2.5604324531741436
            }
          ],
          "minimum": 2.5196650764542103,
          "maximum": 2.642750949598848
        },
        {
          "id": "inverse_volatility",
          "label": "Inverse volatility",
          "values": [
            {
              "seed": 42,
              "value": 2.02577408550167
            },
            {
              "seed": 43,
              "value": 1.8640670943994224
            },
            {
              "seed": 44,
              "value": 1.9116839161142702
            }
          ],
          "minimum": 1.8640670943994224,
          "maximum": 2.02577408550167
        }
      ],
      "limitations": [
        "Synthetic regime simulation; no empirical investment-performance claim.",
        "Rolling-CVaR reward penalty is not a guaranteed risk constraint.",
        "Deterministic Dirichlet mean evaluated; stochastic actions used in training.",
        "Inverse volatility is not full covariance-aware risk parity."
      ],
      "settings": {
        "seed": 42,
        "updates": 30,
        "episodes": 8,
        "horizon": 64,
        "lookback": 20,
        "assets": 3,
        "cost": 0.001,
        "cvar_budget": 0.015,
        "penalty": 2.0,
        "confidence": 0.95,
        "gamma": 0.99,
        "clip": 0.2,
        "learning_rate": 0.0003
      }
    }
  },
  "interpretation": "Fixed CPU research budgets; not evidence of convergence. All saved seeds are shown.",
  "reproduce": "OMP_NUM_THREADS=1 .venv/bin/python -m risk_analyst.learning"
}
