Skip to content

Module 7 — Decision Interpretation

Hoda Rezvanjoo edited this page May 28, 2026 · 1 revision

File: modules/module7.py · Result: Module7Result (per scenario) · Policy: Module7Policy (frozen dataclass)

Module 7 turns numerical outputs into a report a human can defend in a meeting. Per scenario, it produces:

  • An executive summary explaining the allocation logic
  • A classification (Corner-dominant / Concentrated / Balanced / Scenario-sensitive)
  • A confidence score on a 40–100 scale
  • Binding vs non-binding constraints with shadow prices
  • Plan A (LP optimum) and Plan B (risk-managed alternative)
  • Risks and recommendations
  • A forecast caveat on attribution and incrementality

Classification

Class Rule
Corner-dominant Top platform share ≥ corner_concentration (0.90) AND ≤ corner_max_nonzero_cells (2) funded cells
Concentrated Top platform share between balanced_concentration (0.75) and 0.90
Balanced Top platform share ≤ 0.75
Scenario-sensitive Top platform differs across scenarios

Confidence score

Starts at 100; deductions are applied per Module7Policy:

Trigger Penalty
Concentration ≥ 0.90 −20
Concentration ≥ 0.80 −12
Few funded cells −8
Unstable across scenarios −10
Missing forecast for a funded cell −18
Data-quality flag −12

The floor is confidence_floor = 40. The score never reads "100" — the engine has epistemic humility built in. Incrementality, attribution bias, and absence of causal learning are real limitations; a top score would deny that.

Plan B

Re-solves the LP under a diversification cap on the top platform's share (plan_b_top_platform_cap = 0.70 by default), reporting the efficiency trade-off vs. Plan A.

Plan B is surfaced prominently only when the trade-off is below plan_b_meaningful_tradeoff_pct = 5.0 — i.e. when diversification is cheap. Above that, the report still shows Plan B but defers to Plan A. This avoids overselling risk-management when concentration is genuinely earning its place.

Why policy is a frozen dataclass

Module7Policy exposes every threshold as a defaulted, named field. A risk-averse organisation passes a custom instance with corner_concentration=0.80 and plan_b_top_platform_cap=0.60 — no code fork, no monkey-patching, no hidden constants. The interpretation layer becomes a function of declared policy, which is the property that makes it auditable.

Clone this wiki locally