va-surrogates / README.md
ivanzoccolan's picture
Upload README.md with huggingface_hub
457e192 verified
|
Raw
History Blame Contribute Delete
2.56 kB
metadata
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 and the paper "Risk Management of Variable Annuity Guarantees via Sobolev-Trained Neural Networks" (Zoccolan, 2026).

Source library: 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

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