USC graduate in International Business, Finance & Business Analytics. I build decision tools for global operations, supply chain, and finance — models that end in a number someone can act on, not another dashboard.
Three engines that each model one risk channel in depth — and one flagship that connects them, because real shocks never travel alone.
flowchart LR
fx["fx-risk-terminal<br/>FX: VaR, Expected Shortfall,<br/>Monte Carlo, hedging"] --> gos
lane["export-lane-risk-monitor<br/>Trade lanes: freight, tariffs,<br/>chokepoint stress"] --> gos
feed["feedstock-margin-monitor<br/>Feedstock: crack spreads,<br/>BOM cost index"] --> gos
gos["global-ops-simulator<br/>Compound-shock propagation<br/>+ costed playbook"]
Flagship — global-ops-simulator
Model a multinational's footprint as a dependency graph, hit it with compound shocks (tariffs, oil, FX, chokepoints), watch the cascade propagate live, get a playbook ranked in euros.
The point in one number: in the flagship scenario, summing the individual risk channels predicts a +€1.6M gain — the compound model shows the true −€756k loss. Interactions between shocks don't just change the magnitude; they flip the sign.
- Deterministic propagation DAG with lags and betas — every figure auditable by hand (worked example in the README)
- A playbook that also shows what it rejects: transshipping via Mexico to dodge a US tariff fails USMCA rules of origin, and the tool says so
- Nearshoring answered as a decision boundary, not a forecast: it pays iff the tariff regime holds above τ* = 10.1%
- 79 unit tests, CI, runs fully offline —
pip install flask && python app.py
| Repo | What it models in depth |
|---|---|
| fx-risk-terminal | Multi-currency FX risk: VaR three ways, Expected Shortfall, Monte Carlo, stress testing, minimum-variance hedging — pure-Python quant core |
| export-lane-risk-monitor | Cost-to-serve for an exporter shipping Barcelona → 7 markets: FX, fuel, tariffs, maritime-chokepoint stress, with backtesting |
| feedstock-margin-monitor | Petrochemical feedstock margins for coatings: crack spreads, BOM cost index, percentile/vol/curve analytics, daily LLM narrative, FRED-PPI backtest — automated daily via GitHub Actions |
Spec before code — the flagship was built from a frozen SPEC.md, and everywhere the spec was silent is marked SPEC-GAP in source instead of silently improvised. Honest Limitations sections in every README. Tests written with each phase, not after. Demos that run offline with zero API keys.
Stack: Python · Flask · SQL · vanilla JS + Chart.js · Excel/VBA · AI-assisted development (Claude Code)