| --- |
| license: cc-by-nc-4.0 |
| tags: |
| - finance |
| - variable-annuity |
| - sobolev-training |
| - greeks |
| - neural-network-surrogate |
| - pytorch |
| --- |
| |
| # VA Surrogates — Sobolev-Trained Neural Networks for Variable Annuity Greeks |
|
|
| PyTorch surrogate models for variable annuity (VA) guarantee pricing and Greek estimation, trained with the Sobolev loss (derivative supervision via AAD). Companion to the dataset [ivanzoccolan/va-riders](https://huggingface.co/datasets/ivanzoccolan/va-riders) and the paper *"Risk Management of Variable Annuity Guarantees via Sobolev-Trained Neural Networks"* (Zoccolan, 2026). |
|
|
| Source library: [ActuaLib](https://github.com/IvanZoccolan/ActuaLib). Training script: `scripts/sobolev_va_training.py`. |
|
|
| ## Contents |
|
|
| `prod_v2/bs06bir06_<RIDER>_<RULE>/` |
|
|
| | File | Description | |
| |------|-------------| |
| | `sobolev_model.pt` | Sobolev-trained surrogate (βS=0.6, βIR=0.6, p_w=0.1) | |
| | `vanilla_model.pt` | Price-only baseline (βS=0, βIR=0) | |
| | `summary.json` | Out-of-sample metrics (rel-RMSE for price, delta, rho) | |
| | `summary_report.pdf` | Visual report: price, equity delta, IR Greeks | |
|
|
| **Coverage:** 9 riders × 3 benefit-base rules = 27 model pairs. |
|
|
| **Riders:** GMDB, GMMB, GMAB, GMWB, GMIB, GMDB_AB, GMDB_MB, GMDB_WB, GMDB_IB |
|
|
| **Benefit-base rules:** `rop` (return of premium), `ratchet` (annual step-up), `rollup` (annual roll-up) |
|
|
| ## Architecture |
|
|
| - Feedforward, 6 hidden layers, width 256, Softplus activation, no skip connections |
| - Input: outer market state (spot prices, discount factors, fund values) + policy contract features |
| - Output: fair market value (FMV); gradients give equity delta and IR rho via autodiff |
| - Optimizer: Adam, cosine annealing lr 1e-3 → 1e-5, 300 epochs, batch size 512 |
|
|
| ## Training Data |
|
|
| | Split | Outer paths | Inner paths | Policies | RNG seed | |
| |-------|------------|-------------|----------|----------| |
| | `trainJ` | 20,000 | 100 | 180 | `20260402` | |
| | `test` | 100,000 | 1,000 | 180 | `20260401` | |
|
|
| 20 policies per rider per rule, sampled by Latin Hypercube over age, maturity, policy age, AV/GB ratio, fees, withdrawal/annuity rates. |
|
|
| ## Loss Function |
|
|
| Sobolev loss with λ-normalisation per Greek component: |
|
|
| L = p_w · L_price + βS · L_delta + βIR · L_rho |
|
|
| Production configuration: βS=0.6, βIR=0.6, p_w=0.1. Vanilla baseline: βS=0, βIR=0, p_w=1.0. |
|
|
| ## Loading a Model |
|
|
| ```python |
| import torch |
| |
| model = torch.load( |
| "prod_v2/bs06bir06_GMDB_WB_rollup/sobolev_model.pt", |
| map_location="cpu", |
| weights_only=False, |
| ) |
| model.eval() |
| |
| Companion Dataset |
| |
| ivanzoccolan/va-riders |
| |