Supply Chain

For Both Executive and Technical Readers

Which resilience investments would have contained last quarter’s disruption, and which ones you are buying that a confounder is making look better than they are.

The Supply Chain plug-in, vocabulary, structure, and the questions your leaders ask, already mapped. Nothing here starts from a blank page.

Executive Summary · Supply Chain

The QuestionWhich resilience investments would have actually contained last quarter's disruption?

The MethodA causal model separating real resilience effect from confounders inflating some investments' apparent value.

The AnswerA ranked list of which investments earn their budget, and which are riding a confounder's coattails.

MOST FIRMS INVESTED IN SUPPLY-CHAIN RESILIENCE between 2018 and 2022. Buffer inventory, multi-sourcing, geographic diversification, capacity flexibility. The disruption came; some of those investments mattered, others didn’t. The honest accounting question, what did each of them buy you, and what would have happened if you hadn’t made them, has no standard answer.

The CFO question is harder than the CMO question. A CMO can ask “did this campaign produce revenue” and get measured (badly) by digital attribution. A CFO asking “did this resilience investment produce avoided loss” gets nothing, because avoided loss is structurally invisible. You can’t see the stockout that didn’t happen. You can only argue about the counterfactual.

Approach 1
Post-hoc narrative + KPI dashboards

Service level, fill rate, days-of-supply, OTIF. Useful for tracking, useless for attribution. The dashboard tells you outcomes; it doesn’t tell you which investment produced them.

Approach 2
Naive comparison with peers

“Our stockout rate was 3% during Q2 2020; competitors without buffers had 8%.” Confounded by industry segment, customer mix, supplier portfolio, geographic exposure. Same back-door problem as MMM regression.

Approach 3
Discrete-event simulation

Closest current practice gets to a counterfactual, but assumes the simulation captures all relevant dynamics. It typically misses the back-door confounders: firm-level resilience posture, market-state-dependent demand, supplier-relationship-driven access. The simulation answers a hypothetical that doesn’t quite match the world.

A Structural Causal Model names the latent confounders explicitly and parameterizes the analyst’s assumption about their strength. Three differences from simulation matter for a CFO conversation:

1. Explicit confounders

The SCM adds a ResiliencePosture latent node. The Rung-2 do-operator cuts the back-door and isolates buffer’s specific causal effect.

2. Explicit counterfactual reasoning

“What would have happened” is different from “what would happen.” The SCM’s twin-network procedure produces a firm-specific answer. Simulation produces a population expected value.

3. Explicit sensitivity analysis

Lambda, latent-to-decision strength, latent-to-outcome strength, each is an explicit parameter. The CFO conversation becomes “this is what we conclude under these assumptions” not “trust this number.”

The structural equations (all variables standardised, disruption severity fixed at 1.5):

MarketState (M) ~ N(0, 1)
ResiliencePosture (R) = 0.6·M + U_R
BufferInvestment (B) = 0.5·M + 0.7·R + U_B
MultiSourcing (MS) = 0.4·M + 0.6·R + U_MS
StockoutLoss (SL) = 3.0 − 1.20·B − 0.75·MS − 0.30·R + U_SL
CarryingCost (CC) = 0.40·B + U_CC
NetBenefit (NB) = −SL − CC

True buffer net effect on NetBenefit: +0.80 per standardised unit. Naive analysis reports +0.997, a 25% overstatement from the latent confounders.

The solution was to model the relationships between the variables that drive supply chain performance, and to be explicit about which variables cause which. We recognised, for example, that resilience posture is a confounder: firms that invest more in buffer stock also tend to invest more in supplier diversification and demand sensing, which means the observed correlation between any one of those investments and disruption outcomes overstates what that investment alone would deliver. Supplier concentration and demand volatility both influence the cost of a disruption, but through different mechanisms: one determines how many alternatives exist, the other determines how quickly the situation deteriorates. When you observe a variable in this model, you are effectively filtering the data to cases where that variable takes a particular value, and that filter ripples through the model, shifting related variables up and down accordingly. When you intervene on a variable, forcing it to a value regardless of what caused it, you break that ripple effect and get a cleaner answer: not what supply chains that look like this tend to produce, but what would happen if this specific investment were made When you abduct, you extract a particular case from the averages, locking in its idiosyncratic circumstances before asking what would have happened if one or more things had been different.

Rung 1: Association: what the data says

Firms with high buffer (B = +1) had NetBenefit of −1.68 vs baseline −3.00, meaning buffer inventory reduced losses but did not eliminate them. Looks valuable, but high-buffer firms are also high-posture firms, and posture independently improved outcomes.

E[NB | obs B = +1] = −1.68   (apparent benefit: +1.32)

Rung 2: Intervention: the structural effect

do(B = +1) cuts buffer’s inbound arrows. Latents revert to priors. Only the direct structural effect survives. Rung-1 vs Rung-2 gap: 1.65× naive overstatement.

E[NB | do(B = +1)] = −2.20   (structural benefit: +0.80)

Rung 3: Counterfactual: the CFO’s question

A specific firm observed B = +1.5 and NetBenefit = −1.2. What would NetBenefit have been if they’d set buffer to 0, holding all realised noise terms fixed? Abduct → action → predict.

E[NB* | obs(B=1.5, NB=−1.2), do(B*=0)] = −2.40

The buffer was worth +1.20 for this firm specifically. Quantitative, attribution-specific, assumption-visible.

A language model can speak fluently about any domain. It cannot know one. The .bayes file is the knowledge the LLM is missing: a causal map of the domain, auditable, versioned, and wrong in specific correctable ways.

Optionally open ResilienceInvestment-AllRungs.bayes in Bayes Server. The model is the thing; the software that runs it is a commodity. 12-node CLG network: MarketState, ResiliencePosture, BufferInvestment, MultiSourcing, StockoutLoss, CarryingCost, NetBenefit, plus five U-noise nodes.

The resilience SCM as a 12-node Bayes Server network

MarketState at top is the latent confounder. U-noise nodes enable Rung-3 inversion. NetBenefit marginal of −3.0 is the base disruption loss before mitigation.

Diagnostic: naive vs causal vs SCM

Naive OLS, no latents

Buffer coefficient: +0.997 (true: +0.800, bias: +24.6%). Latents absorb into the buffer coefficient.

Causal OLS, with latents (oracle)

Buffer coefficient: +0.829 (true: +0.800, bias: +0.029), within sampling noise when latents are observable.

SCM via Pearl’s ladder

Rung 1: +1.32. Rung 2: +0.80. Rung 3 (B=+1.5, NB=−1.2): NB* = −2.40. The Rung-2/Rung-1 gap is the confounding bias the naive analysis inherits.

ResilienceInvestment-AllRungs.bayes

The model is a file. Any capable LLM can load its XML and answer resilience-attribution questions in plain English.

We spent $30M on buffer inventory going into 2020. The board wants to know whether it paid off. What does the model say?
AnyChatRung 1 · association
Before I give you a number, I need to flag the confounding problem. Firms that invested heavily in buffer were also the firms with stronger resilience posture, better forecasting, stronger supplier relationships. Those same qualities independently reduced stockout losses. The observational comparison inflates the apparent value of the buffer by around 65%. The Rung-1 number looks good; the structural number is different.
What’s the structural number?
AnyChatRung 2 · do(BufferInvestment)
Running do(B = +1) severs the back-door from MarketState and ResiliencePosture. The structural benefit per unit is +0.80 in NetBenefit terms, vs +1.32 from naive analysis. A 65% overstatement. On $30M, the naive analysis might credit $20M of avoided loss that was really your posture, not the buffer.
Our buffer was B=+1.5 and our net benefit was −1.2. What would have happened if we’d set it to zero?
AnyChatRung 3 · abduct → counterfactual
I use your observed B=+1.5 and NB=−1.2 to anchor the U-noise terms to your firm’s realised disruption conditions. Then do(B=0) holding everything else fixed. Counterfactual NetBenefit: −2.40. The buffer was worth +1.20 for your firm specifically, not the population average of +0.80.
How do you know all this?
AnyChatRung 1 · provenance
I don’t know it, the model does. Causal structure elicited from domain knowledge about resilience posture, parameterized against historical data. Every number comes from ResilienceInvestment-AllRungs.bayes. Open it, change the confounder strength, watch conclusions move. The model is auditable. I’m just the interface.
Our supply chain team already runs scenario planning in their ERP. Why isn’t that sufficient?
AnyChatRung 3 · counterfactual ROI
ERP scenario planning runs forward from assumed parameters. It cannot answer whether the $30M buffer investment actually caused the resilience you observed in 2020, or whether you would have survived without it, because it has no counterfactual engine and no confounder model for demand shock correlation. The board’s question is a Rung 3 query: what would the outcome have been if the buffer had been zero? That requires abducting the 2020 disruption profile from the factual evidence, intervening to remove the buffer, and reading the counterfactual stockout and revenue loss. ERP gives you operational tracking. The model gives you the board’s answer.

Same model, three rungs. The audit trail is the .bayes file, not the simulation.

Is that all this simple model can answer?
AnyChat
A more sophisticated model can answer more complex questions. Still, even this intentionally simple model can answer more, like these:
  • Investment stacking. Does combining two resilience investments compound their effect or overlap?
  • Supplier concentration. Which single supplier failure would cause the most cascading disruption?
  • Confounder isolation. Is this investment's apparent value actually just capacity we would have added anyway?
  • Scenario planning. How would the network perform under a disruption twice the size of last quarter's?
  • Renewal decision. Is this investment still earning its keep given how the network has changed?
Same file, same audit trail, different questions asked.

Elicit the confounder structure from the people who know how the supply chain works. Parameterize from historical data. Deliver a defensible range, not a number to be accepted on faith, but an assumption-visible audit the CFO can challenge productively.

  • Corrected resilience ROI per investment type, structural, not observational
  • Firm-specific Rung-3 answer: what each investment was worth during your disruption
  • Sensitivity analysis: how the conclusion moves as confounder-strength assumptions change
  • The .bayes file, your SCM, openable and auditable
  • A documented configurator playbook for adapting to the next disruption period
ResilienceInvestment-AllRungs.bayes

This case study uses a synthetic dataset generated from a known structural causal model. No individual client or engagement is described.

The Deeper Trade

The model does not replace the expert who built it. It frees her from being the bottleneck for every routine version of this question, so she can spend her judgment on the cases that actually need it, and keep making the model better.