◇ OpenCyber Academy
Master's · Chapter 4 · English

Chapter 4 — Competing explanations of response outcomes

Open, free learning for anyone who wants to protect people and technology. No account is required to read this text or its worked answers.

Chapter 4 — Competing explanations of response outcomes

Lesson map

Lesson 04 published. Map, example, EX021.

flowchart TD
  N0["Learning outcomes and connection"]
  N1["4.1 Multiple working hypotheses and strong inference"]
  N2["4.2 The historical puzzle at MRSS synthetic"]
  N3["4.3 A rival table"]
  N4["4.4 Causal diagrams"]
  N5["4.5 Discriminating tools and their assumptions"]
  N6["4.6 Competing explanations in a documented study"]
  N7["4.8 Practical activity: the rubric, the senior hires"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
  N7 --> EX["Worked example"]
  EX --> Q["Exercise EX021"]

Logical drawing

flowchart LR
  N0["Learning outcomes and connection"]
  N1["4.1 Multiple working hypotheses and strong inference"]
  N2["4.2 The historical puzzle at MRSS synthetic"]
  N3["4.3 A rival table"]
  N4["4.4 Causal diagrams"]
  N5["4.5 Discriminating tools and their assumptions"]
  N6["4.6 Competing explanations in a documented study"]
  N7["4.8 Practical activity: the rubric, the senior hires"]
  N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX021"]
[Learning outcomes and connection]
    |
    v
[4.1 Multiple working hypotheses and strong inference]
    |
    v
[4.2 The historical puzzle at MRSS synthetic]
    |
    v
[4.3 A rival table]
    |
    v
[4.4 Causal diagrams]
    |
    v
[4.5 Discriminating tools and their assumptions]
    |
    v
[4.6 Competing explanations in a documented study]
    |
    v
[4.8 Practical activity: the rubric, the senior hires]
    |
    v
[Worked example] --> [Exercise EX021]

Learning outcomes and connection

After this chapter you should be able to:

  1. Apply the method of multiple working hypotheses to an incident-response outcome and write a rival table whose rows make different predictions.
  2. Draw a causal diagram for a historical response dataset and identify confounders, mediators and variables you must not adjust for.
  3. Use difference-in-differences, stratification and standardization to challenge a favoured claim, stating the assumption each relies on.
  4. Design negative controls and sensitivity analyses that would embarrass the favoured explanation if it were wrong.
  5. Explain why the historical strand of the Triage Rubric Study is reported as context, while the causal test is the controlled tabletop.

The chapter builds on the design choice of Chapter 3 and prepares Chapter 5, where the rival table becomes part of the proposal.

4.1 Multiple working hypotheses and strong inference

In 1890 the geologist T. C. Chamberlin warned that a researcher with a single favoured hypothesis comes to see only the evidence that supports it, and recommended holding several working hypotheses at once (Chamberlin, reprinted 1965). Platt (1964) turned the idea into strong inference: devise alternative hypotheses, devise an observation whose possible outcomes exclude one or more of them, carry it out, and repeat. The value of a rival is not that it is likely; it is that it predicts something different from your hypothesis, so that an observation can tell them apart.

In incident response, outcomes have many causes besides the practice being studied. When under-triage falls after a rubric is introduced, the candidates include the rubric, but also new staff, a change in the kinds of incidents arriving, a change in telemetry that makes impact more visible, a change in how severity is recorded, regression from an unusually bad period, attention from being studied, and plain chance. Your job is to list them, say what each predicts, and find data that discriminate.

4.2 The historical puzzle at MRSS (synthetic)

MRSS's East team adopted SEV-4 on 1 January 2025. Its under-triage of high-impact tickets — judged against a panel review of a random sample of tickets after closure — fell. West did not adopt the rubric. The MRSS manager's slide reads: "East under-triage 9% vs West 18%: the rubric halves missed incidents."

What else happened? In January 2025 East also absorbed three senior analysts from a closed contract, raising its share of senior analysts from about a third to about two-thirds. East also handles a different mix of incidents: more school-network alerts with noisy signals, fewer of the quiet-impact incidents (a scheduled job silently failing at the water authority, a payroll export copied to an unusual destination) that are easiest to under-rate.

4.3 A rival table

Explanation Mechanism Prediction that differs from the rubric hypothesis Data that discriminate
H0: Rubric Structured questions force attention to impact East improves after adoption relative to West; improvement concentrated in quiet-impact cases; misrouting unchanged DiD on under-triage; subgroup by case type; negative-control outcome
R1: Seniority Senior analysts under-triage less Improvement tracks the share of senior analysts; also improves outcomes the rubric does not touch (routing) Stratify by seniority; misrouting as negative control
R2: Case mix East sees fewer hard, quiet cases East lower than West even before adoption; difference shrinks after standardizing case type Pre-period comparison; standardization
R3: Secular trend Both teams improve with tooling, training or attention West also improves; DiD smaller than the crude before–after change West's change over the same period
R4: Recording change Severity field or panel sampling changed in 2025 Change appears in tickets but not in independent panel review; abrupt at a configuration date Audit trail of field definitions; panel method unchanged
R5: Regression to the mean Adoption followed a bad quarter Pre-period unusually high relative to longer history Longer pre-period series
R6: Chance Sampling variation in a few hundred reviewed tickets Interval includes zero; effect unstable across samples Uncertainty intervals; resampling

Two features make this table useful. Each row predicts something specific, and the last column names data that the study can actually obtain. A rival table that says only "confounding may exist" is not a rival table.

4.4 Causal diagrams

A causal diagram (a directed acyclic graph) draws variables as nodes and assumed causal effects as arrows. It is a compact way to state assumptions and to decide what to adjust for. Tools such as dagitty (Textor et al. 2017) check diagrams formally; for a master's project a careful hand drawing is enough.

                 Team (East/West) ──────────────┐
                    │          │                 │
                    v          v                 v
   Contract closure → Seniority  Case mix (quiet share)   Rubric adoption
                    │          │                 │
                    └────┬─────┴─────────────────┘
                         v
                  Under-triage  <── Severity recording practice
                         │
                         v
                  Panel-reviewed outcome

Reading the diagram: seniority and case mix both affect under-triage and are associated with the team, and therefore with rubric adoption; they are confounders of the rubric–outcome relationship and must be accounted for. Recording practice affects the measured outcome; if it changed with adoption it is a confounder too, which is why the outcome is panel review rather than the ticket's own field. A variable that the rubric itself changes on the way to the outcome — for example, "time spent reading the asset inventory" — is a mediator; adjusting for it would remove part of the effect you want to estimate. A variable caused by both the rubric and the outcome (for example, "ticket later reopened") is a collider; adjusting for it can create spurious associations. The diagram is an assumption, not a finding: say where you are unsure.

4.5 Discriminating tools and their assumptions

4.6 Competing explanations in a documented study

The surgical safety checklist study of Haynes et al. (2009) reported lower complication and death rates after a checklist was introduced in eight hospitals. Its design — before and after, without a concurrent control group — is common in operational improvement work, and the rivals a reader must consider are exactly those in §4.3: secular improvement, changes in the case mix or recording, and the effect of being observed. The point here is not to judge that study, which later research has extended and debated; it is that the same reasoning applies whenever a security team reports "after adopting the playbook, metric X improved". The incident-response literature has few controlled studies, so the habit of asking "what else changed?" is a core research skill.

4.7 Worked example: building the rival table into the proposal (synthetic)

The student's first draft proposal said: "Historical data from MRSS show that the rubric halved under-triage." Her supervisor asked for the rival table. Working through it changed three things.

First, the historical strand was demoted: its role became to describe the problem (under-triage of quiet-impact incidents occurs and matters) and to test whether the historical data are consistent with a rubric effect after accounting for seniority and case mix — not to estimate the effect. Second, the controlled tabletop became the primary causal test, because its design breaks the link between rubric use and seniority (each analyst uses both conditions) and between rubric use and case mix (case sets are matched and counterbalanced). Third, the tabletop inherited a prediction from the rival table: if the rubric works by drawing attention to impact, its effect should be concentrated in quiet-impact cases. That subgroup analysis was predeclared.

4.8 Practical activity: the rubric, the senior hires and the case mix

Lab 4 generates synthetic panel-reviewed high-impact tickets for East and West in 2024 and 2025 (1,500 per team per year). The generator encodes a true rubric effect of −3 percentage points in East in 2025, a seniority effect of −10 points, a quiet-impact effect of +22 points and a small improvement in both teams in 2025. Routing errors depend on seniority but not on the rubric. Save it as lab4_rivals.py.

# Lab 4 - competing explanations for a fall in under-triage after a rubric was adopted (offline, stdlib only)
# Synthetic historical tickets from two fictional teams at Marlow Regional Shared Services (MRSS).
# East adopted the SEV-4 rubric on 2025-01-01 and, in the same month, gained senior analysts; West changed nothing.
# Only high-impact tickets (panel-reviewed reference severity 3-4) are generated; outcome = under-triaged (0/1).
import random
def make_tickets(seed=404, rubric_effect=-0.03):
    rng = random.Random(seed); rows = []
    for team in ("East", "West"):
        for year in (2024, 2025):
            n = 1500
            senior_share = {("East", 2024): 0.35, ("East", 2025): 0.65,
                            ("West", 2024): 0.35, ("West", 2025): 0.38}[(team, year)]
            quiet_share = {"East": 0.40, "West": 0.55}[team]          # quiet-impact cases are harder
            for _ in range(n):
                senior = rng.random() < senior_share
                quiet = rng.random() < quiet_share
                p = 0.10 + (0.22 if quiet else 0) + (-0.10 if senior else 0) + (-0.02 if year == 2025 else 0)
                if team == "East" and year == 2025:
                    p += rubric_effect
                under = rng.random() < max(p, 0.01)
                misrouted = rng.random() < (0.08 if senior else 0.14)   # rubric does not touch routing
                rows.append(dict(team=team, year=year, senior=senior, quiet=quiet, under=under, misrouted=misrouted))
    return rows
def rate(rows, key="under", **f):
    s = [r for r in rows if all(r[k] == v for k, v in f.items())]
    return sum(r[key] for r in s) / len(s), len(s)
if __name__ == "__main__":
    T = make_tickets()
    e25, _ = rate(T, team="East", year=2025); w25, _ = rate(T, team="West", year=2025)
    e24, _ = rate(T, team="East", year=2024); w24, _ = rate(T, team="West", year=2024)
    print(f"A crude 2025 contrast   East {e25:.3f}  West {w25:.3f}  difference {e25 - w25:+.3f}")
    print(f"B East before/after     2024 {e24:.3f}  2025 {e25:.3f}  change {e25 - e24:+.3f}")
    print(f"C difference-in-diff    East change {e25 - e24:+.3f} minus West change {w25 - w24:+.3f} = {(e25 - e24) - (w25 - w24):+.3f}")
    # D: stratify by seniority and case type, then standardize to the pooled 2024 mix (both teams)
    base = [r for r in T if r["year"] == 2024]
    strata = [(s, q) for s in (False, True) for q in (False, True)]
    w = {k: sum(1 for r in base if (r["senior"], r["quiet"]) == k) / len(base) for k in strata}
    def std(team, year):
        return sum(w[k] * rate(T, team=team, year=year, senior=k[0], quiet=k[1])[0] for k in strata)
    sd = (std("East", 2025) - std("East", 2024)) - (std("West", 2025) - std("West", 2024))
    print(f"D standardized DiD      (seniority x case type held at the 2024 mix) = {sd:+.3f}")
    em25, _ = rate(T, "misrouted", team="East", year=2025); em24, _ = rate(T, "misrouted", team="East", year=2024)
    wm25, _ = rate(T, "misrouted", team="West", year=2025); wm24, _ = rate(T, "misrouted", team="West", year=2024)
    print(f"E negative control      misrouting DiD = {(em25 - em24) - (wm25 - wm24):+.3f}  (rubric cannot affect routing)")
    print(f"  senior share          East 2024 {rate(T, 'senior', team='East', year=2024)[0]:.2f} -> 2025 {rate(T, 'senior', team='East', year=2025)[0]:.2f};"
          f"  West {rate(T, 'senior', team='West', year=2024)[0]:.2f} -> {rate(T, 'senior', team='West', year=2025)[0]:.2f}")
    print(f"  quiet-impact share    East {rate(T, 'quiet', team='East')[0]:.2f}  West {rate(T, 'quiet', team='West')[0]:.2f}")
    print(f"  generator truth       rubric effect on East 2025 = -0.030 (absolute risk)")

Expected output:

A crude 2025 contrast   East 0.093  West 0.179  difference -0.086
B East before/after     2024 0.159  2025 0.093  change -0.066
C difference-in-diff    East change -0.066 minus West change -0.013 = -0.053
D standardized DiD      (seniority x case type held at the 2024 mix) = -0.038
E negative control      misrouting DiD = -0.017  (rubric cannot affect routing)
  senior share          East 2024 0.34 -> 2025 0.65;  West 0.33 -> 0.38
  quiet-impact share    East 0.42  West 0.55
  generator truth       rubric effect on East 2025 = -0.030 (absolute risk)

How to read it. The manager's crude 2025 comparison (A) says the rubric is associated with an 8.6-point reduction; East's before–after change (B) says 6.6 points. Both mix the rubric with other things. The crude contrast is inflated by case mix: East handles fewer quiet-impact cases (42% versus 55%), so it would have lower under-triage without any rubric. The before–after change includes the improvement common to both teams. Difference-in-differences (C) removes the common change and the stable team difference, giving −5.3 points — still too large, because East's senior hires are an East-specific co-intervention that DiD cannot remove. Standardizing to the 2024 mix of seniority and case type (D) gives −3.8 points, close to the generator's true −3.0. The negative-control outcome (E) is the warning light: misrouting, which the rubric cannot affect, shows a "DiD effect" of −1.7 points in East — exactly what an East-specific seniority change would produce. Note also that even with 1,500 tickets per team per year the remaining gap between D and the truth is within sampling noise; with the few hundred tickets a real panel could review, the DiD would be imprecise as well as biased.

The conclusion the student writes is calibrated: "The historical data are consistent with a modest rubric effect after accounting for seniority and case mix, but they cannot separate the rubric from the simultaneous senior hires with confidence; the negative-control outcome indicates residual confounding. The causal question is therefore addressed by the controlled study."

4.9 The tabletop as the answer to the rival table

Return to the rival table and ask what the crossover tabletop does to each row. R1 (seniority) and R2 (case mix) are broken by design: every analyst does both conditions on matched case sets. R3 (secular trend) becomes a period effect, balanced by order and estimable. R4 (recording) is controlled because the outcome is computed from the analyst's rating against a fixed reference, not from a ticket field. R5 (regression to the mean) does not arise, because nobody was selected for a bad period. R6 (chance) remains and is handled with intervals. New rivals appear that the historical data did not have: carryover, observers' expectations, participants guessing the hypothesis, and the artificiality of fictional cases. The tabletop does not abolish rivals; it trades a set it cannot control for a set it can.

4.10 Common errors and limits

The limit is that observational adjustment handles only what you measured and modelled correctly. That is why a design that removes rivals by construction is worth its artificiality for a causal question — and why its own new rivals must be listed too.

Exercises — chapter 4

EX021 — Rival table for a different claim. Objective: write discriminating rivals. Inputs: the claim "after MRSS moved to 12-hour shifts, mean time to contain fell by 20%". Constraints: at least five rivals; each with a distinct prediction. Steps: complete the four columns of §4.3 for each. Expected evidence: a table. Rubric: 3 = rivals specific (case mix, staffing level, tooling, recording of "contained", censoring, regression), predictions distinct and data obtainable; 2 = one rival non-discriminating; 1 = generic; 0 = none.

EX022 — Causal diagram. Objective: encode assumptions and adjustment decisions. Inputs: §4.4. Constraints: add two variables: "telemetry coverage of the affected service" and "ticket reopened". Steps: (1) redraw the diagram with them; (2) classify every variable as confounder, mediator, collider or other with respect to rubric → under-triage; (3) state the adjustment set. Expected evidence: the diagram and a table. Rubric: 3 = telemetry correctly placed (a confounder if it differs by team and affects triage, or an effect modifier), reopened identified as a collider or post-outcome variable not to adjust for, adjustment set justified; 2 = one misclassification; 1 = diagram without reasoning; 0 = none.

EX023 — Run and modify Lab 4. Objective: see when DiD works. Inputs: Lab 4. Constraints: offline. Steps: (1) run it; (2) change East's 2025 senior share from 0.65 to 0.38 (the same as West's), rerun and report lines A–E; (3) explain why DiD and standardized DiD now agree with each other and with the truth more closely; (4) explain what happened to the negative control. Expected evidence: outputs and a 150-word explanation. Rubric: 3 = outputs correct, the parallel-trends logic explained, negative control's movement towards zero linked to removing the co-intervention; 2 = one error; 1 = not run; 0 = none.

EX024 — Negative controls. Objective: design negative controls for the tabletop. Inputs: the tabletop design of Chapter 3. Constraints: at least two negative controls, one outcome and one exposure. Steps: for each, state what it is, why the rubric cannot affect it (or why it cannot be the cause), and what a non-null result would mean. Expected evidence: a half page. Rubric: 3 = controls plausible (for example, accuracy on a set of identification questions unrelated to severity; a "sham" condition with an unrelated checklist), interpretation of non-null results specific; 2 = one control implausible; 1 = definitions only; 0 = none.

EX025 — Sensitivity statement. Objective: reason about unmeasured confounding. Inputs: Lab 4 output; suppose seniority were unmeasured. Constraints: use only numbers from the lab or the generator description. Steps: (1) estimate how much of DiD (C) the senior hires could explain, given a seniority effect of −10 points and the change in East's senior share relative to West's; (2) state what remains; (3) write a two-sentence sensitivity statement. Expected evidence: the calculation and statement. Rubric: 3 = calculation ≈ −10 × (0.31 − 0.05) ≈ −2.6 points, remainder ≈ −2.7 points, statement calibrated; 2 = arithmetic slip; 1 = no number; 0 = none.

EX026 — Rivals for the tabletop. Objective: list the rivals a controlled design introduces. Inputs: §4.9. Constraints: at least four rivals specific to the tabletop. Steps: for each, give its prediction, a mitigation in the protocol and a check in the analysis. Expected evidence: a table. Rubric: 3 = carryover, observer expectation, demand characteristics, fidelity failure and artificiality covered with concrete checks; 2 = one missing check; 1 = names only; 0 = none.

Chapter synthesis

An outcome that improves after a change has many possible causes. Hold several working hypotheses, and write each as a mechanism with a distinct prediction and data that can test it. Draw a causal diagram to decide what to adjust for, and avoid adjusting for mediators and colliders. Difference-in-differences removes common shocks and stable differences but not co-interventions; standardization removes only measured confounding; negative controls warn of what remains. When the historical data cannot separate the favoured explanation from its rivals, say so and choose a design that breaks the links — then list the new rivals that design introduces.

Continue studying — chapter 04 of 08

← Chapter 03 · Course chapter index · Chapter 05 →

Continue to the next authored lesson.

Worked answers

EX021 — Rival table for a different claim.

Explanation Mechanism Distinct prediction Data
12-hour shifts Fewer handovers lose less context Improvement concentrated in incidents spanning former shift boundaries Time to contain by whether an incident crossed an old boundary
Staffing level More analysts on shift Improvement tracks headcount per shift, including in incidents not crossing boundaries Rosters
Case mix Fewer complex incidents Mix of incident types changed; improvement vanishes after standardizing Type distribution before and after
Tooling New EDR or SOAR at the same time Improvement begins at the tool's deployment date, not the shift change Change calendar
Recording of "contained" Definition loosened Gap between "contained" and independent evidence of containment grows Sample audit against host evidence
Censoring More incidents left open past the reporting cut-off Open-count rises; share contained within fixed time unchanged Open incidents at cut-off
Regression to the mean Change followed an unusually bad quarter Pre-period atypical against longer history Two years of quarterly data

EX022 — Causal diagram. Add telemetry coverage of the affected service: it affects under-triage (impact is visible or not) and may differ by team (East's school networks are better instrumented), so it is a confounder of team/rubric → outcome and belongs in the adjustment set if measured; it may also modify the rubric's effect (the rubric helps most where impact is not visible in telemetry). Add ticket reopened: it is influenced by under-triage (missed cases reopen) and may be influenced by the rubric; it is post-outcome and a collider on some paths — do not adjust for it. Classification: seniority — confounder; case mix — confounder; recording practice — confounder of the measured outcome; telemetry — confounder/effect modifier; asset-inventory lookup time — mediator; reopened — post-outcome collider. Adjustment set: {seniority, case mix, telemetry coverage}, with recording practice handled by using the panel-reviewed outcome.

EX023 — Run and modify Lab 4. With East's 2025 senior share set to 0.38:

A crude 2025 contrast   East 0.106  West 0.179  difference -0.073
B East before/after     2024 0.159  2025 0.106  change -0.053
C difference-in-diff    East change -0.053 minus West change -0.013 = -0.039
D standardized DiD      (seniority x case type held at the 2024 mix) = -0.044
E negative control      misrouting DiD = -0.002  (rubric cannot affect routing)
  senior share          East 2024 0.34 -> 2025 0.38;  West 0.33 -> 0.38
  quiet-impact share    East 0.42  West 0.55
  generator truth       rubric effect on East 2025 = -0.030 (absolute risk)

With the East-specific seniority change removed, parallel trends hold by construction (both teams change seniority equally), so DiD (−3.9 points) and standardized DiD (−4.4) now agree with each other to within sampling noise (each has a standard error of roughly two points with 1,500 tickets per cell) and are close to the true −3.0. The crude contrast remains biased by case mix (East has fewer quiet cases). The negative control falls to −0.2 points, essentially zero: it was signalling the co-intervention, and with the co-intervention gone the warning disappears.

EX024 — Negative controls. Negative-control outcome: include in each session four "identification" questions per period (for example, "which service owns this host?", answerable from the case packet) whose accuracy the rubric should not change; a rubric "effect" on them would suggest that rubric sessions differed in attention or time allowed, not that the rubric improved severity judgement. Negative-control exposure: a small sham arm — an equally long unrelated checklist (for example, about formatting the ticket) — given to a subset; if the sham reduces under-triage as much as SEV-4, the effect comes from slowing down or from being observed, not from the rubric's content. A non-null negative control would be reported and would weaken the causal interpretation; a null one supports but does not prove it.

EX025 — Sensitivity statement. East's senior share rose by 0.31 (0.34 → 0.65) and West's by 0.05 (0.33 → 0.38), a relative change of 0.26. With a seniority effect of −10 points, the senior hires alone would produce a DiD of about −10 × 0.26 ≈ −2.6 points. The observed DiD is −5.3 points, leaving about −2.7 points attributable to the rubric (close to the generator's −3.0). Statement: "If seniority were unmeasured, a seniority effect of the size seen in West could account for about half of East's difference-in-differences. The data therefore cannot distinguish a rubric effect of about three points from one near zero unless seniority is measured and adjusted for."

EX026 — Rivals for the tabletop.

Rival Prediction Mitigation Check
Carryover Rubric-first analysts' usual period better than usual-first analysts' usual period Balanced sequences Descriptive carryover comparison; first-period parallel estimate
Observer expectation Times recorded differently by condition Two observers on a sample; observers not told hypothesis Inter-observer timing agreement by condition
Demand characteristics Participants rate higher when given a rubric because they infer the hypothesis Neutral instructions; rubric presented as one of two methods Over-triage of low-impact cases; noisy-case null
Fidelity failure Rubric completed after deciding Facilitator check Rubric completion time stamp (added after this study, see §6.9)
Artificiality Effects larger than in live work Realistic case materials; time limit Discussed as directional limitation