The pricing scenario runner turns the /simulate/pricing contract into a
persisted decision artifact. It evaluates a portfolio of incentive levels across
income segments, writes the scenario table, and adds sensitivity rows for margin
downside/upside and vulnerable-customer-share stress.
uv run python -m src.pricing.scenario_runs --run-date 2025-06-30With a custom incentive grid:
uv run python -m src.pricing.scenario_runs `
--run-date 2025-06-30 `
--incentives 0 2 4 6 8Default output:
artifacts/pricing/scenario_runs/run_date=2025-06-30/pricing_scenario_run.json
artifacts/pricing/scenario_runs/run_date=2025-06-30/pricing_scenario_run.md
artifacts/pricing/scenario_runs/run_date=2025-06-30/pricing_scenarios.csv
artifacts/pricing/scenario_runs/run_date=2025-06-30/pricing_sensitivity.csv
When neobank.duckdb exists and contains the dbt marts, the runner derives
segment priors from:
main_marts.fct_activationfor eligible customers, D7 activation, and vulnerable-customer share.main_marts.fct_user_clv_proxyfor expected monthly margin assumptions.main_marts.mart_pricing_recommendationsindirectly through the API scenario simulator when pricing-mart evidence is available.
If the DuckDB file is missing, the runner falls back to conservative synthetic segment priors so the public repo remains reproducible without generated data.
ship: candidate for a controlled rollout, subject to monitoring.iterate: candidate for a smaller experiment or cheaper incentive design.hold: stop state until economics or guardrails improve.
Review the sensitivity CSV before choosing a scenario. A scenario that looks good only in the base case but fails under margin downside or vulnerable-customer stress should stay in experiment design, not rollout.