Reading a causal graph: what your model knows
IDEAS FOR THE FUTURE SIMMIS. These articles connect implemented research foundations to longer term product direction. They do not describe universal behaviour in the current Simmis product.
Christian’s research has implemented causal modelling primitives in Spindel. This article examines how that research represents causal assumptions and how prediction could later build on a governed organizational record. We follow one running decision throughout. Should we hire three engineers in Q3 rather than Q4?
Two things can be correlated without either causing the other. Ice cream sales and drowning deaths both rise in summer. Heat contributes to both patterns, while ice cream sales do not explain the drowning deaths. A policy that targeted ice cream sales would therefore mistake correlation for cause.
This distinction matters when a team asks what would happen after a decision. The historical question asks what tended to happen when hiring rose. The decision question asks what would happen to velocity if the team hired three engineers in Q3. The second question requires causal assumptions about the intervention.
Causal graphs are how this research encodes the difference.
What a causal graph is
A directed acyclic graph (DAG) contains nodes, which represent variables, and directed edges, which represent assumed causal relationships. The graph contains no directed cycles. An arrow from A to B states that A directly influences B within the model. The arrow is an assumption to test and challenge, not proof by itself.
Observing high revenue does not establish that price was high because season may affect both variables. An intervention that sets price to a specific value removes the modelled influence of season on price. The remaining graph can then support an estimate of the causal effect, assuming its structure and parameters are adequate.
Confounders: why correlation misleads
A confounder is a variable that causally influences both an apparent cause and an apparent effect. X and Y may then move together because both are downstream of Z, even when X does not cause Y.
Business data often contains the same problem. Teams that hold more retrospectives may ship faster, but team maturity could influence both. Marketing spend may correlate with revenue because spending raises revenue, because revenue enables spending, or because another variable affects both. A causal graph requires the modeller to state which direction each assumed influence runs.
Intervention: the do-operator
Judea Pearl introduced the do operator to formalize the difference between observing and intervening (Pearl, Causality, 2009, with an accessible account in The Book of Why, 2018). P(Y | X=x) is the probability of Y given that we observe X equals x. P(Y | do(X=x)) is the probability of Y when we set X to x, regardless of the variables that would otherwise have caused X.
Within the model, intervening on X cuts its incoming arrows and sets its value. This operation removes the modelled influence of confounders on X.
The do operator distinguishes an observational prediction from a modelled intervention. A prediction that revenue will be high when prices are high conditions on an observation. A claim that revenue will increase if the company raises prices requires an interventional distribution and the causal assumptions that support it.
The do-operator, in code
In Spindel, intervene! implements the do operator as a first class effect. It pins a node and severs its incoming edges in the model.
require('[org.replikativ.spindel.inference.effects :refer [observe intervene!]])
;; Two different questions about the same model:
;; observe asks, "given the claim succeeded, was the agreement on file?"
;; do(...) asks, "if we FILE the agreement, does the claim succeed?"
spin(intervene!([:evidence :loan-agreement] true) adjudicate(debt-test record))
(require '[org.replikativ.spindel.inference.effects :refer [observe intervene!]])
;; Two different questions about the same model:
;; observe asks, "given the claim succeeded, was the agreement on file?"
;; do(...) asks, "if we FILE the agreement, does the claim succeed?"
(spin
(intervene! [:evidence :loan-agreement] true) ; do(file the agreement)
(adjudicate debt-test record)) ; outcome under the action
This mechanism also underlies the legal dispute simulator research. The “produce the signed loan agreement” button represents a do() intervention on the evidence, and the displayed win probability comes from the resulting interventional distribution.
What the model encodes
Simmis research represents a modelled domain as a DAG. Nodes are quantities such as headcount, velocity, burn rate, release dates, and compliance review windows. Edges are causal assumptions proposed from domain knowledge, historical data, and observed patterns in how an organization works.
With suitable parameters and evidence, this graph could support an estimate that the compliance review constrains the release more than engineering capacity. The graph alone cannot establish that conclusion. It only shows that hire timing affects the release through modelled paths while compliance review provides another path.
Why this changes “what if”
Many forecasting tools find patterns in observational data and project them forward. Those patterns may support predictions when the data generating process remains stable. They do not by themselves identify what a deliberate intervention will cause.
Answering an interventional question requires causal assumptions. Observational prediction alone cannot establish what an intervention will cause. A sufficiently specified and identified model can estimate consequences for the interventions represented within it, and a decision support system should make those assumptions inspectable.
In this research framing, the Q3 hiring question calls for P(release date | do(hire timing = Q3)) rather than P(release date | hire timing = Q3). The interventional quantity corresponds to the modelled decision.
For Simmis, prediction remains a later use of the governed organizational record. The nearer term control loop preserves the basis, attempt, decision, and outcome from which organizational models could later be built and challenged.
Further reading
- Pearl, Causality: Models, Reasoning, and Inference (2nd ed., 2009). The formal treatment.
- Pearl & Mackenzie, The Book of Why (2018). The accessible introduction.
- The do operator as a runtime effect. See
intervene!in Spindel (inference/effects.cljc).
See how Simmis lets teams delegate consequential work without losing control of what becomes official.
simmis