Prepare an evidence packet for a randomized routing rollout whose missing ticket outcomes leave the sign of the breach-rate effect unresolved.
Project: decide a routing policy with missing outcomes
Lock the population and assignment unit
The assigned units are branches, and eligible tickets are counted under a frozen deadline rule. Record the branch lottery, exposure window, ticket denominator and breach definition before outcome recovery. A ticket-level calculation does not change the branch-level assignment mechanism. If branches selected their own status, the packet must not call the contrast randomized. The assumption ledger keeps design claims separate from missing-outcome claims.
Audit every outcome status
For each assigned arm, list eligible, observed, breached and missing ticket counts. Reconcile observed plus missing to eligible. Separate missing due to logging failure from tickets never eligible; otherwise the denominator itself is wrong. Compute unrestricted rate bounds and the treated-minus-control effect interval. Show the complete-case contrast only as a descriptive comparison with a different missingness assumption. The rate lesson supplies the count formula.
Create a disclosed restriction set
Use recovered logs or a sampling audit to justify plausible breach-risk ranges for missing tickets in each arm. Keep the worst-case interval alongside every restricted interval. If evidence does not support a restriction, leave the interval wide. Do not describe assumed risks as measured facts. The risk-scenario lesson gives the arithmetic.
Put an action threshold next to the bounds
Translate ticket volume, value per prevented breach and rollout cost into a break-even effect. State whether all, none or only some effects in the defensible interval justify rollout. If unresolved, estimate how many missing ticket outcomes can be recovered and how much bound width each recovery could remove. That is a concrete next experiment, not a promise of a favorable answer. The decision lesson handles the endpoint logic.
Issue a bounded recommendation
The executable gate checks that arm counts and decision inputs are present and internally consistent. It does not validate randomization, produce a confidence interval or certify the risk restrictions. The review packet should include the assignment log, outcome frame, all bound sets, follow-up plan and unresolved assumptions. If the eligibility frame or assignment record is incomplete, stop before reporting a causal effect. The effect lesson explains that limit.
Implementation
def attrition_review_gate(packet):
required = {"assignment_log", "treated_counts", "control_counts",
"unrestricted_bounds", "restriction_ledger",
"decision_threshold", "follow_up_plan"}
missing = sorted(required - set(packet))
if missing:
raise ValueError("missing packet items: " + ", ".join(missing))
arm_missing = {}
for arm in ("treated", "control"):
assigned, observed, breaches = packet[arm + "_counts"]
if assigned <= 0 or not 0 <= breaches <= observed <= assigned:
raise ValueError("invalid " + arm + " counts")
arm_missing[arm] = assigned - observed
return {"packet_complete": True,
"missing_by_arm": arm_missing,
"has_follow_up_plan": bool(packet["follow_up_plan"])}
packet = {"assignment_log": "branch lottery retained",
"treated_counts": (50, 40, 15),
"control_counts": (50, 45, 20),
"unrestricted_bounds": (-.20, .10),
"restriction_ledger": {"treated": (.20, .60),
"control": (.10, .40)},
"decision_threshold": -.02,
"follow_up_plan": "recover four treated ticket outcomes"}
review = attrition_review_gate(packet)
assert review == {"packet_complete": True,
"missing_by_arm": {"treated": 10, "control": 5},
"has_follow_up_plan": True}Performance and operating cost
The gate is O(A) time and space for A packet fields, plus constant work for two arms. The substantial cost is reconstructing assignment and ticket histories, then obtaining missing outcomes under a documented follow-up process.
Common Mistakes
- Do not report a causal bound without a supported assignment design.
- Do not call a chosen risk restriction observed data.
- Do not treat packet completeness as statistical or operational approval.
