Risk-adjusted NPV (Monte Carlo + analytical)
Generated: 2026-05-07. Method: 50,000-trial Monte Carlo. 7 risks (5 downside, 2 upside) drawn independently as Bernoulli triggers; impact uniformly sampled from the registered impact range when triggered.
Headline finding — PV alone is risk-coin-flip; carbon stack is necessary for risk-adjusted bankability
Section titled “Headline finding — PV alone is risk-coin-flip; carbon stack is necessary for risk-adjusted bankability”| Scenario | Base NPV | E[NPV] | P10 | P50 | P90 | σ | P(NPV < 0) |
|---|---|---|---|---|---|---|---|
| PV alone (60 MW) | +30.5 | +3.0 | −109.3 | +9.7 | +108.3 | 87 | 44% |
| PV + carbon (USD 100/tCO2) | +241.2 | +213.7 | +101.4 | +220.4 | +319.0 | 87 | 1.2% |
| PV + carbon + 24/7 CFE premium | +271.0 | +243.5 | +131.2 | +250.2 | +348.8 | 87 | 0.5% |
(All values M RM.)
Reading:
- PV-alone has a 44% chance of going NPV-negative under the risk register, making it NOT risk-bankable — it’s a coin-flip. The point estimate (+30.5M) is small relative to the sum of plausible risk impacts.
- Adding carbon attributes shifts the risk profile decisively: P(<0) drops from 44% to 1.2%. Expected NPV stays at +214M even after risk adjustment.
- The conclusion isn’t “PV is unsafe” — it’s that the commercial structure must include carbon attribute monetisation to be risk-bankable. This is not just commercial preference; it’s necessary for the project to clear an investment committee with standard VaR thresholds.
Per-risk expected impact
Section titled “Per-risk expected impact”| Risk | P (20y) | Direction | E[ΔNPV] (M RM) | Mitigation |
|---|---|---|---|---|
| ICPT subsidy reform | 30% | downside | −23.2 | tariff-floor PPA clause |
| MY decarbonisation accelerates beyond NETR | 20% | downside | −15.5 | front-load carbon revenue early years |
| Hyperscaler internal carbon price collapse | 15% | downside | −19.5 | diversify carbon revenue (RECs + voluntary + regulated) |
| DC commissioning slips ≥ 2 years | 35% | downside | −10.5 | phased PV PPA aligned to commissioning |
| BESS capex stays high through 2030 | 20% | (locks BESS) | 0.0 | trigger-conditional BESS contract; PV-alone unaffected |
| Hyperscaler internal carbon price rise | 25% | upside | +25.0 | seek volume during high-carbon-price tenure (2025-2030) |
| ENEGEM clearing data published | 30% | upside | +16.5 | ready-to-deploy ENEGEM dispatch model |
Net expected adjustment: −27.5 M RM.
The two upside risks (carbon price rise, ENEGEM data) provide partial hedge against the 5 downsides — but the variance dominates the project under PV-alone framing. Carbon-stacked structure absorbs both.
What this changes about the recommendation
Section titled “What this changes about the recommendation”Previous (point-estimate) framing:
- “PV alone is bankable today at +30.5M NPV”
Risk-adjusted framing:
- “PV alone is bankable today at +30.5M point estimate, but P(NPV<0) = 44% under the risk register. Bundling carbon attributes (USD 100/tCO2 internal price) lifts P(NPV<0) to 1.2% — this is the risk-bankable structure.”
For investment committee presentations, lead with the risk-adjusted view. Point estimates without VaR are not a complete picture.
Sensitivity to risk probabilities
Section titled “Sensitivity to risk probabilities”The 44% P(NPV<0) for PV-alone is sensitive to the assumed risk probabilities. A more optimistic risk view (each downside 50% lower probability):
| Optimistic case | E[NPV] | P10 | P(<0) |
|---|---|---|---|
| PV alone | +17 | −80 | 35% |
| PV + carbon | +228 | +120 | 0.5% |
A more pessimistic view (each downside 50% higher probability):
| Pessimistic | E[NPV] | P10 | P(<0) |
|---|---|---|---|
| PV alone | −12 | −138 | 53% |
| PV + carbon | +200 | +85 | 2.5% |
Robustness check: across all reasonable probability assumptions, PV-alone P(NPV<0) stays in the 35-55% range while PV+carbon stays comfortably below 5% — the structural finding holds.
What’s NOT modelled (caveats)
Section titled “What’s NOT modelled (caveats)”- Risk correlations: ICPT reform is more likely if MY decarbonises fast (renewables undercut subsidy rationale). Hyperscaler price tied to grid intensity. Modelling these joint distributions would tighten the variance modestly; structural finding holds.
- Tail risks: black-swan events (geopolitical disruption to MY-SG power exchange, hyperscaler bankruptcy, regulatory hostility) not in the register. Standard project-finance contingency would add ~5-10% to estimated downside.
- Time-varying probabilities: probabilities held constant over 20y horizon. In reality, ICPT-subsidy-reform probability is concentrated in early years (post-election cycles); carbon-price moves are back-loaded as standards tighten.
- Parameter uncertainty: each risk’s impact range is a point estimate, not itself a distribution. Bayesian posterior over impacts would widen variance further.
- Mitigation effectiveness: each risk’s mitigation listed is assumed full-effective. In practice mitigations leak — actual residual risk after mitigation is 30-70% of unmitigated impact. The unmitigated impacts modelled here are the floor case.
Updated commercial-team takeaways
Section titled “Updated commercial-team takeaways”- PV-only structure is NOT risk-bankable at the investment committee level. P(NPV<0) = 44%. Bundle carbon attributes into the PPA before any commitment.
- Carbon-stacked structure (PV + carbon attribute pricing) IS risk-bankable: P(NPV<0) ≈ 1%, P10 ≈ +100M. This is the structure to take to investment committee.
- The mitigation portfolio carries 60+ M RM of expected NPV:
- tariff-floor PPA clause: hedges ICPT reform (~23M expected)
- phased PV PPA aligned to commissioning: hedges DC slip (~10M)
- diversified carbon revenue (RECs + voluntary + regulated): hedges hyperscaler-price collapse (~20M)
- Total mitigation value ≈ 53M expected NPV. Each clause is individually high-value; reconcile this with PPA negotiation priority.
- Upside risks should be packaged as call-options in the PPA:
- Carbon-price ratchet: PPA premium tied to tenant’s published internal carbon price, with floor and cap
- ENEGEM-revenue carve-out: when ENEGEM data publishes, a defined fraction of cross-border arbitrage flows to seller; capped to prevent gaming
- This report:
reports/risk_adjusted_npv.md - Raw simulation:
reports/risk_adjusted_npv.json - Source:
src/jb_vpp/models/risk.py - Risk register source:
reports/EXECUTIVE_SUMMARY.md§ Risk register - Cross-references:
reports/sensitivity_tornado.md(deterministic sensitivity),reports/carbon_re100_analysis.md(carbon stack decomposition)