Lesson map
Lesson 06 published. Map, example, EX026.
flowchart TD
N0["Learning outcomes"]
N1["6.1 The change"]
N2["6.2 Evaluation design"]
N3["6.3 Measure"]
N4["Lab — bootstrap difference in medians"]
N5["6.4 Reading the result"]
N6["6.5 Accuracy"]
N7["6.6 Confounding"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7
N7 --> EX["Worked example"]
EX --> Q["Exercise EX026"]
Logical drawing
flowchart LR
N0["Learning outcomes"]
N1["6.1 The change"]
N2["6.2 Evaluation design"]
N3["6.3 Measure"]
N4["Lab — bootstrap difference in medians"]
N5["6.4 Reading the result"]
N6["6.5 Accuracy"]
N7["6.6 Confounding"]
N0 --> N1 --> N2 --> N3 --> N4 --> N5 --> N6 --> N7 --> Q["EX026"]
[Learning outcomes]
|
v
[6.1 The change]
|
v
[6.2 Evaluation design]
|
v
[6.3 Measure]
|
v
[Lab — bootstrap difference in medians]
|
v
[6.4 Reading the result]
|
v
[6.5 Accuracy]
|
v
[6.6 Confounding]
|
v
[Worked example] --> [Exercise EX026]
Learning outcomes
You will (1) design a controlled evaluation of a SOC process change; (2) analyse skewed operational data with medians and bootstrap intervals; (3) guard against confounding; (4) report effects with uncertainty.
6.1 The change
Daniel's team writes a new triage playbook for claims-export alerts that starts with three automated enrichment lookups — assignment data, contractor status and export destination — before analyst review. The three lookups answer the questions analysts ask most often on claims-export alerts: whether the records were assigned, whether the contractor is still active, and whether the export went to an expected destination. Putting the answers in front of the analyst before review is meant to shorten triage without changing who decides. The evaluation then tests whether triage actually shortened for claims-export alerts, without changing who made the decision.
6.2 Evaluation design
For four weeks, alerts are assigned alternately to the old and new playbook by alert number, so busy and quiet periods fall into both groups. Analysts rotate between playbooks. Sixteen alerts fall in each group. Assigning by alert number removes the team's choice of which alerts get the new playbook, which could otherwise favour easy alerts. Rotation spreads analyst skill across both groups. The design was written before the first alert was assigned, and the sample of 32 alerts was fixed by the four-week window rather than chosen after looking at results.
6.3 Measure
Triage time in minutes from pickup to decision, plus decision accuracy checked by a senior analyst. Triage time is taken from case-system fields, so it does not depend on analysts' memory. The senior analyst checking accuracy reviews each decision against the evidence without knowing in advance which playbook was used, as far as the case notes allow. Measuring accuracy beside speed guards against a playbook that is faster only because it skips checks, which would show up as more wrong decisions in that group.
Lab — bootstrap difference in medians
"""Bootstrap interval for the difference in median triage minutes between two playbooks (synthetic)."""
import random, statistics
random.seed(42)
old = [18, 22, 25, 19, 30, 27, 21, 24, 35, 20, 26, 23, 29, 31, 22, 28]
new = [14, 17, 16, 21, 15, 19, 18, 13, 25, 16, 20, 17, 22, 15, 19, 18]
obs = statistics.median(old) - statistics.median(new)
diffs = []
for _ in range(5000):
a = [random.choice(old) for _ in old]; b = [random.choice(new) for _ in new]
diffs.append(statistics.median(a) - statistics.median(b))
diffs.sort()
print(f"median old={statistics.median(old)} new={statistics.median(new)} difference={obs}")
print(f"bootstrap 95% interval [{diffs[124]}, {diffs[4874]}]")
Run with python3 lab_bootstrap.py. Verified output:
median old=24.5 new=17.5 difference=7.0
bootstrap 95% interval [3.5, 11.0]
6.4 Reading the result
The median triage time fell from 24.5 to 17.5 minutes, a difference of 7.0. The bootstrap 95% interval for the difference is 3.5 to 11.0 minutes, which excludes zero. Medians suit skewed times; bootstrapping gives an interval without assuming a distribution. With only 16 alerts per group, the interval is wide: the true saving could be as small as 3.5 minutes or as large as 11. Daniel reports the interval with the point estimate so that the board does not read 7.0 minutes as a precise figure. The three-month recheck adds alerts and should narrow it.
6.5 Accuracy
The senior analyst found one wrong decision in each group, so faster triage did not cost accuracy in this sample. One error per group in 16 alerts is too few to show that accuracy is equal; it shows only that the sample gives no sign of a loss. Daniel's report therefore says equal accuracy in this sample and plans to recheck error rates after three months of routine use, when more alerts will have been handled under the new playbook and novelty will have worn off.
6.6 Confounding
Alternating assignment protects against time-of-day effects; rotation protects against one fast analyst using one playbook. Remaining risk: analysts knew which playbook they used and may have tried harder with the new one. Daniel states this risk in his report and plans a recheck after three months, when the new playbook has become routine and any novelty effect has faded. If the saving shrinks markedly by then, part of the original gain was probably effort rather than enrichment. Blinding analysts was not possible, because the enrichment results are visible on the screen, so the recheck is the best available control.
Practical significance
A 7-minute saving per alert across about 400 claims-export alerts a month frees roughly 47 analyst hours, enough to fund a weekly threat-hunting session.
Next step
After three months the team repeats the measurement on routine data.
Worked example
Daniel's report: "The new playbook reduced median triage time by 7.0 minutes (95% bootstrap interval 3.5–11.0) over 32 alerts, with equal accuracy. Analysts were not blind to condition; we will recheck after three months of routine use."
Synthetic case. Times come from the lab script.
Errors and limits
Thirty-two alerts give a wide interval; operational change may wear off or improve with familiarity.
Exercises
- EX026 — Assignment. How were alerts assigned and why?
Show marking criteria
Rubric: 3 = alternating by number; spreads busy/quiet periods; 2 = partial; 1 = random choice by analyst; 0 = none. - EX027 — Lab result. Report medians, difference and interval.
Show marking criteria
Rubric: 3 = 24.5, 17.5, 7.0, [3.5, 11.0]; 2 = partial; 1 = wrong; 0 = none. - EX028 — Why bootstrap. Why use medians and bootstrap here?
Show marking criteria
Rubric: 3 = skewed times; no distribution assumption; 2 = partial; 1 = habit; 0 = none. - EX029 — Accuracy check. Did speed cost accuracy?
Show marking criteria
Rubric: 3 = no; one error per group; 2 = partial; 1 = unknown; 0 = none. - EX030 — Remaining confound. What confounding risk remains?
Show marking criteria
Rubric: 3 = analysts not blind; may try harder with new; 2 = partial; 1 = vague; 0 = none.
Synthesis
Controlled operational evaluations need fair assignment, robust statistics, accuracy checks and honest notes on confounding.
Continue studying — chapter 06 of 12
← Chapter 05 (draft) · Course chapter index · Chapter 07 (draft) →