A neural yield-curve model can give a sensible point forecast and a disastrous Monte Carlo mean. In Mohanty's paper, the two differ by a factor of roughly 100,000 while the headline scores look fine. Anyone using its scenarios for risk should compare those means first.
The curve model and its test
Mohanty models daily Treasury yield changes at eleven maturities, from 1 month to 30 years. The yields are fitted zero-coupon rates reconstructed from the Federal Reserve's Gürkaynak, Sack and Wright curve parameters. The panel contains 16,170 daily dates, from June 14, 1961 to April 10, 2026. Each change is standardized using its pre-window mean and standard deviation.
A two-layer, 64-unit LSTM reads the previous 60 change vectors. Its location head produces the point forecast; its 24-dimensional context conditions a normalizing flow that models the residual around that forecast. Eight affine coupling layers transform the residual. To make a scenario, the model draws a latent vector, runs it backwards through the flow, then adds the location head's output. Mohanty uses those joint curve scenarios for Monte Carlo means and tail averages.
The original flow has a learnable Student-t base and clamps each coupling log-scale to [-3, 3]. The stabilized flow uses a standard Gaussian base and the smooth bound s = 0.5 tanh(s_raw/0.5). Under that rule, a coupling multiplies a coordinate by a factor between e^-0.5 and e^0.5. Mohanty evaluates one-step-ahead forecasts on five 60-date windows starting in 2002, 2008, 2014, 2020 and 2026, fitting one model per fold. A sixth window, April 13 to July 8, 2026, uses frozen fold-5 checkpoints. Mohanty recorded the plan locally before downloading its data. The plan was not publicly preregistered, and local timestamps cannot independently verify that sequence. Comparators include fixed-pool 252-day historical simulation, VARs and other flows.
Behrmann and coauthors documented exploding inverses in invertible networks; Andrade proposed controls on affine-coupling scales. The paper cites both. Mohanty's addition is a frozen, equal-sample demonstration on rates data in which the failure escapes the standard density score.
A draw the log score missed
Each model generated 600,000 vectors on the new window. The original flow's largest absolute standardized coordinate reached 3.43×10^7. Coordinates above 20 made up 9.79×10^-5 of the sample, roughly 650 wild values among 6.6 million generated coordinates.
A few hundred were enough. The scenario-mean MSE was 33,908.95, against 0.3376 for the location head. The training-mean baseline was 0.33730. The point forecast looked ordinary; the simulation around it was unusable.
The clamp still allowed an inverse coupling to multiply a coordinate by as much as e^3, about 20.09, across eight layers. Translations and ActNorm parameters had no bounds. They remain unbounded in the stabilized model, whose scale rule therefore places no cap on the full output. Mohanty's layer audit found large latent draws acting together with inverse scale factors and translations. In the development stress audit, which used up to 50,000 samples per origin, the largest value reached about 7.07×10^10. Eighteen of the twenty largest walk-forward extremes fell at the reconstructed 20-year coordinate; its early values can run beyond the maturities supporting the fit. The new window's largest draw occurred at the extrapolated 3-month point. Yet the 3-year coordinate reached 5.97×10^6, placing the failure inside the supported range as well.
The original flow scored -38.77 on joint negative log likelihood, better than the stabilized flow's -37.42. Mohanty says average log score failed to flag the tail problem. There is another reason to treat that score cautiously: as Mohanty concedes, eleven coordinates drawn from a low-dimensional fitted curve complicate joint density scores. An NLL near -38 in eleven dimensions describes density concentrated on a thin surface. I read the -38.77 chiefly as a reward for matching the fitted curve's structure, with little to say about rare far-out mass.
How far did the tighter flow get?
With equal sample counts, the stabilized flow's maximum was 14.72, against 3.43×10^7 for the original. It generated no coordinate above 20. Across the five development windows, its 3 million vectors had fold maxima from 13.24 to 17.33, with nothing non-finite. That reduction is substantial.
The empirical comparison is less comforting. The largest realized standardized move in any development window was 5.25, in 2020. Historical simulation's new-window maximum was 3.71. A draw of 14.72 still extends about four times beyond that empirical pool.
Mohanty is clear about the attribution problem. The base and the scale bound changed together, so the comparison cannot isolate either effect. Screens on folds 1 and 2 suggest both mattered. Removing the bound caused a non-finite training loss. A Student-t base with the tight bound and a Gaussian base with a loose bound each produced larger extremes, though those runs differed in training length or sample counts. There is one model per fold. A seeding-order bug leaves deterministic training reproduction unestablished, while checkpoint evaluation does replay. The threshold of 20 was chosen during development. Another comparator, an LSTM-conditional RealNVP with different layer counts and scale controls, reached 1502.52 on the development windows. The extreme-draw problem extends beyond this architecture.
Historical simulation on unseen dates
The 252-day historical simulation led on the new window. Its Energy Score, which measures the joint scenario cloud against the realized curve change with lower values preferred, was 1.1348. The original flow scored 1.1613 and the stabilized flow 1.1645. Historical simulation also led on marginal CRPS: 0.2927 against 0.3022 and 0.2981. Its 90% coverage was 91.52%, compared with 96.82% for the stabilized flow. Stabilized-flow intervals were 36% wider than historical simulation's, 2.326 versus 1.712. The original flow's interval width was 2.101 at 95.91% coverage.
Historical simulation had a timing advantage, which Mohanty discloses. Its pool used the 252 changes immediately before April 13; neural-model training ended before January 15. A quarterly refit might close some of the gap. The paper does not show that happening.
Results on the development windows are much closer. Energy Score was 1.5040 for historical simulation and 1.5112 for the stabilized flow, a difference of 0.0072 with a block-10 interval of [-0.0305, 0.0406]. Average coverage favored the flow, 92.85% versus 85.64%. But its coverage fell to 87.12% in 2008 and 85.61% in 2020. The stabilized location head beat the training-mean baseline by 0.0061 standardized MSE (0.97%), with an interval of [-0.0176, 0.0035]. On raw RMSE, the baseline led by 6.279 bp to 6.320 bp.
Our SHY, IEF and TLT adaptation
Mohanty's paper trades nothing. We built an adaptation using eleven FRED constant-maturity yields, from 1-month to 30-year, in place of the reconstructed zero-coupon panel. The positions are in SHY, IEF and TLT. This is not a replication: the paper evaluates forecasts on reconstructed Gürkaynak-Sack-Wright yields, whereas we feed FRED yields into an ETF exposure rule. Its reported tail failure reaches our rule only through a 1% VaR trigger. The paper's own risk appendix also trains on eleven FRED constant-maturity series. The flow's sampling mechanism carries over unchanged, and its extremes matter here only when they push estimated VaR past the trigger.
We refit the stabilized flow monthly, training from 2010 with the paper's LSTM size, 8 couplings, Gaussian base and 50 plus 500 epochs. Each day it draws 10,000 joint scenarios. Separate regressions for each ETF, fitted on 252 historical pairs apiece, convert those scenarios into ETF losses. When one-day 99% VaR for the equal-weight book exceeds 1%, exposure falls to 0.5; it returns to 1.0 below 0.8%. Historical simulation follows the same exposure rule for comparison. We charge $0.004 a share on every fill.
Our run covers 2020-01-01 to 2024-07-01. Annualized metrics begin on 2023-07-03. Mohanty reports no trading returns, so there is no paper Sharpe to compare with ours. The nearest paper result uses a 3-month bill price proxy: frozen 95% VaR recorded 12 breaches in 252 and rejected independence (p = 0.013), while monthly refitting recorded 16 breaches with every p above 0.05. Losses on a priced 3-month bill differ from ETF P&L.
I distrust our figures for three specific reasons. The measured year starts in mid-2023, leaving the 2022 sell-off inside the run but outside the scored year, precisely when a VaR trigger should earn its keep. Exposure can only switch between 0.5 and 1.0 of an equal-weight bond book, so volatility of 4.73% and beta to SPY of 0.14 mostly describe Treasury duration. And the reported metrics neither separate flow returns from historical-simulation returns nor include an ETF VaR calibration test. They cannot settle which scenario model forecasts better. This was one seed and one automated pass: total return was -0.04% and Sharpe -0.01 over the scored year. Those figures speak first to our implementation, and there is no paper Sharpe beside them.
Check the mean before using the scenarios
Compare the Monte Carlo mean with the location head on every date, and track the share of generated coordinates past a fixed threshold. The original flow's 33,908.95 scenario-mean MSE against the head's 0.3376 would have set off either check immediately. Its -38.77 log score gave no such warning.
I would skip the model for now. Mohanty's abstract claims no forecasting advantage, and the frozen comparison does replay as stated there. On its clean new window, historical simulation scored 1.1348 against the stabilized flow's 1.1645. Across 300 selected development dates, the flow tied historical simulation on Energy Score (interval [-0.0305, 0.0406]) and came closer to 90% average coverage, though it fell below 90% in 2008 and 2020. Mohanty calls for longer evaluations and matched comparisons across training seeds beyond 300 selected dates. I would add 2022, which none of the five windows includes. A matched ablation across seeds, showing the stabilized flow beat historical simulation on Energy Score through a full walk-forward that includes 2022, would change my view.
Our backtest stops at 2024-07-01, and everything after that date is deliberately left untouched so the same strategy can be checked out of sample later.