-
Notifications
You must be signed in to change notification settings - Fork 1
Module 7 — Decision Interpretation
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
| 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 |
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.
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.
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.