Financial Stress Forecaster
Four quarters of operational data in; a stress index and an estimated runway out. Twenty-five features spanning operational trends, cost structure, cash burn and debt service. Includes a measured runway — cash divided by burn — alongside the modelled one, because where those two disagree is itself a signal.
Operational history
Q1 oldest, Q4 most recent. The right-hand column is the derived trend — that is what the model actually reads.
| Metric | Q1 | Q2 | Q3 | Q4 | Trend |
|---|
Signals
Lit signals are the ones currently contributing to the score.
What the model found — and what changed when I was challenged
This tool began as a trend-only model on operational proxies: receivable days, utilisation, inventory, headcount, bounces. Then a reader asked why cost structure, cash burn, operating cash flow and interest expense were missing.
They were missing because I had drawn the line at “no financial statements.” That line was wrong. Cash balance, burn and interest all sit in a bank feed — operational data, not accounting data. Worse, the tool was reporting a modelled runway derived from a hazard rate when runway is simply cash divided by burn. It was inferring something arithmetic.
| Model | Features | Gini (out-of-time) |
|---|---|---|
| Levels only | 11 | 0.468 |
| Trends only | 14 | 0.489 |
| Levels + trends | 25 | 0.518 |
Trends still lead levels (0.489 against 0.468), and combining them adds +0.050. Restricted to operational data alone — no cash, coverage or OCF — the gap widens: trends 0.236 against levels 0.191.
An honest caveat about that comparison
During this rebuild the level-versus-trend ordering flipped twice. Adding cash and coverage put levels ahead; fixing a units bug in the runway calculation put trends back ahead. The ordering is sensitive to how the financial features are scaled in the synthetic data generation — which means it is partly an artifact of my choices, not purely a property of the world.
What survived both flips is the narrower claim, and it is the one worth keeping: on operational data alone, trends beat levels in every configuration tested. Where you can also see cash and interest cover, those levels are powerful enough that the contest becomes close and the ranking becomes fragile. Trends are best understood as a substitute for balance-sheet visibility rather than a supplement to it — and in SME lending, not having that visibility is the normal case.
I am leaving this on the page rather than quietly reporting whichever ordering flattered the tool. A synthetic build can demonstrate a mechanism; it cannot settle an empirical question about the world.
What the added features do
Operating leverage enters as an interaction, not a level, and that is deliberate. Fixed costs at 70% are irrelevant while revenue grows and lethal when it falls, so the feature is fixed% × min(revenue trend, 0). It amplifies a decline rather than predicting one.
Interest coverage and operating cash margin turn out to be the two strongest single features in the model. That is the balance sheet reasserting itself: whatever the operational story, a firm that cannot cover its interest from EBITDA has a finite and calculable amount of time.
Cash runway is now measured, not inferred. The earlier version derived a runway from the hazard rate, which was a statistical estimate of something arithmetic. Cash divided by burn is simply the answer. It is the single largest correction in this build.
Two runways, and the gap between them
The tool reports both. Measured is cash ÷ current burn — precise, but it assumes burn holds steady. Modelled comes from the fitted hazard and reflects trajectory, covenant risk and everything else the model sees.
The gap between them is the useful part, and it reads in both directions.
Measured shorter than modelled — the common case, and what the stressed presets here show. Liquidity is the binding constraint: the cash runs out before the credit deterioration would otherwise have caught up. This is a treasury problem before it is a credit problem, and it is fixable with a facility, an equity injection or a receivables sale.
Modelled shorter than measured — rarer and more dangerous. The business has cash but the trajectory says something breaks first: a covenant, a supplier who stops shipping, a facility not renewed. Companies rarely fail on the day the cash hits zero. They fail when someone holding a contract decides not to wait.
How the modelled runway is computed
The model outputs a 12-month probability. Converting that to a median time-to-distress assumes a constant hazard across the window: h = −ln(1 − PD) / 12, then median months = ln(2) / h. It is a deliberately simple survival assumption and it degrades at the extremes — treat it as an ordering device, not a diary date. A firm at 14 months is not safe until month 13; it is a firm you should be talking to now.
The honest limitation
A Gini of 0.518 is materially weaker than the bureau-driven scorecards elsewhere on this site, which run 0.63–0.74. That is not a defect — it is the trade. Bureau data is more predictive because it is downstream: by the time a missed payment reaches a credit file, the operational deterioration that caused it is six to twelve months old.
Operational trend data buys lead time at the cost of precision. Used properly it does not replace a bureau score; it tells you which accounts to pull a bureau score on, and when. That is a monitoring tool, not an origination tool, and the two should never be confused.
Mapping to a supervisory ladder
The bands correspond loosely to the escalation stages in the early-warning framework: Watch is a dashboard entry, Elevated is a relationship-manager conversation inside fifteen days, Serious is a credit-committee item and a limit review, Acute is a structural intervention while the borrower is still solvent enough to have options. The point of forecasting stress at all is that every one of those actions is cheaper the earlier it happens.
What would change in production
More history — four quarters is the minimum for a slope, and eight would separate trend from seasonality, which this build cannot do. Sector-specific models, because a 20% inventory build means something different in agriculture than in software. Direct feeds from banking, GST or accounting APIs rather than typed inputs. And population stability monitoring on the trends themselves, which drift faster than levels do.
Educational model built on a synthetic quarterly panel. Not a production early-warning system, not credit advice, and not a substitute for a bureau file or a conversation with the borrower. Runs entirely in your browser — nothing is stored or transmitted.