Why
Local-volatility calibration is an inverse problem: infer a stable volatility surface from noisy observations while respecting the governing financial PDE.
Tech stack
- Python
- PyTorch
- PINNs
- Neural ODEs
- Autograd
Key metrics
2–3 orders lower surface MSE
3 noise levels tested
What I built
- Implemented inverse PINN and neural-adjoint solvers for Black-Scholes and Dupire constraints.
- Built controlled experiments at 0%, 1%, and 5% noise with fixed evaluation grids.
- Compared surface error, smoothness, training time, and stability against simpler baselines.
How it works
- Noisy option observations
- Neural volatility surface
- Autograd PDE residuals
- Boundary and data losses
- Recovered surface
- Baseline comparison
Evaluation
- Use the same observations, grid, noise seed, and error calculation for every solver.
- Report surface MSE with training time and failure behavior instead of treating fit alone as success.
| Measure | Result | Boundary |
|---|---|---|
| Surface MSE | 2–3 orders lower | Across controlled 0%, 1%, and 5% noise settings |
| Recovered surface | Smoother than simpler baselines | Evaluated on a fixed grid |
| Compute cost | Higher training time | Accuracy and stability came with a clear cost |
Limitations
- Results come from controlled synthetic-noise experiments, not live market calibration.
- PINN training is slower and sensitive to loss weighting and optimization.
- The public repository and full experiment artifact are not yet linked.
Links and reproducibility
- Freeze the observation grid, noise seeds, solver settings, and evaluation grid before comparison.
- Publish surface-error tables, training curves, runtime, and failed runs with the source.