Skip to content

lifecycle: simulation-level difficulty scaling (advanced = genuinely harder world) #129

Description

@shaypal5

Context

LTV-Po adds difficulty-tier snapshot distortions for the lifecycle scheme (noise / missingness / outliers per tier, resolved from b2b_saas_ltv_v1/difficulty_profiles.yaml). That makes higher tiers noisier, but the simulated world is identical across tiers — the motif-calibrated churn / expansion / payment rates don't change with difficulty.

This issue tracks the deeper piece (decided to defer in the Po planning): make advanced a genuinely harder prediction problem, not just a noisier snapshot.

Proposed work

  • Scale the lifecycle mechanism parameters by difficulty tier — e.g. compress the latent→hazard signal (weaker per-trait weights), raise baseline churn variance, or flatten the motif separation — so a model genuinely discriminates worse on advanced even with clean features.
  • Keep it motif-calibrated: the engine-calibration test bands (tests/schemes/lifecycle/test_engine.py) must be re-derived per tier, or the scaling must stay within them.
  • Surface the tier effect in the LTV-Pp validation harness (per-tier × per-window regression-metric bands), which is the natural place to assert "advanced is measurably harder."

Why deferred

LTV-Po ships the recipe + distortion tiers (the user-visible difficulty knob works for snapshots). Simulation-level scaling is a modeling-quality refinement that belongs with the difficulty-band validation in LTV-Pp, not the recipe-wiring PR.

Surfaced during LTV-Pn.4a / Po planning; build_world currently applies no difficulty to the simulation (documented in its docstring).

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions