Both are now built into the toolkit, not just drawn as exhibits. Three findings worth your time, in order of how much they should change your thinking:
Default remains off (loss_trend=0.0, an exact no-op) until you
choose a basis. Poll questions Q1–Q3 are exactly these decisions.
Through Call #3 every model reported CLV in this form:
A margin that varies by year cannot be factored out of a discounted sum, so that form is structurally incapable of carrying a tenure-varying loss ratio. The identity we now use is:
The decomposition introduces no new estimation: each year's expected renewals is the
difference of the cumulative number the model already reported, so it sums back to
DERT(H) exactly (measured error 0.0 on all six families), and when
mt ≡ 1 it collapses to the old formula to the cent.
| Term | Meaning | Where it comes from |
|---|---|---|
nt | Discounted expected renewals occurring in future year t | Differenced from each model's own DERT — BG/NBD, Pareto/NBD, Cox PH, Weibull AFT, Markov, hybrid |
P | Average annual premium per customer | Observed book |
e | Renewal expense ratio (0.20) | Split-expense convention, §2.2 — acquisition is sunk |
L | Customer's own average annual loss | Observed book (already embeds their realized tenure experience) |
mt | Tenure loss multiplier — the new term | Fitted curve, indexed relative to the customer's own current tenure (§2) |
X | Cross-sell + upsell per renewal ($150 + $100) | Constrained variant only — firewalled from filing exhibits (NY §2304) |
H | Horizon (5 years default) | Assumption |
The gradient is not assumed. retention_adjusted_loss_ratio() measures it directly
on the book: loss ratio by tenure year, against a pooled 0.5246 and a survival-weighted
lifetime 0.5742.
Raw yearly ratios are noisy — tenure 6 jumps back to 0.5174 on a thin $7.9M of premium. Pricing off that would be indefensible, so the shipped curve is a premium-weighted log-linear fit:
The floor matters: selection wear-off is not unlimited, and an unfloored exponential would eventually price a 25-year customer at an implausibly low loss ratio. This is the actuarial analog of a selected development pattern with a tail cut-off — smooth the observations, then stop extrapolating where credibility runs out.
The multiplier is indexed relative to each customer's own current tenure,
mt = curve[τ+t] / curve[τ], not on absolute tenure. This is the
crux. A customer's L is their own realized average loss, so it already
contains the improvement they have lived through. Multiplying it by an absolute-tenure discount
would credit the same improvement twice.
| Customer | Observed loss ratio | What the curve adds |
|---|---|---|
| First-year | ~0.63 | The full forward glide toward the mature level, if they persist |
| Ten-year | ~0.42 | Almost nothing further — their advantage is already in the 0.42 |
So the honest reading of your point is: tenure value is mostly already in the observed loss; what the curve adds is the expected further improvement for the not-yet-mature.
Exactly the exhibit you asked for. Persistence is stated, not modelled, so every cell below can be checked with a calculator and no model is involved.
Assumptions (public-benchmark anchored): annual premium $1,450, loss ratio 0.66, renewal expense 0.20, acquisition expense 0.40, discount 8%.
| Year | Margin | Discount factor | Discounted | Cumulative — short | Cumulative — lifer |
|---|---|---|---|---|---|
| 0 (acquisition) | −580.00 | 1.000000 | −580.00 | −580.00 | −580.00 |
| 1 | 203.00 | 0.925926 | 187.96 | −392.04 | −392.04 |
| 2 | 203.00 | 0.857339 | 174.04 | lapsed | −218.00 |
| 3 | 203.00 | 0.793832 | 161.15 | — | −56.85 |
| 4 | 203.00 | 0.735030 | 149.21 | — | +92.36 ← breakeven |
| 5 | 203.00 | 0.680583 | 138.16 | — | +230.52 |
| 6 | 203.00 | 0.630170 | 127.92 | — | +358.44 |
| 7 | 203.00 | 0.583490 | 118.45 | — | +476.89 |
| 8 | 203.00 | 0.540269 | 109.67 | — | +586.56 |
| 9 | 203.00 | 0.500249 | 101.55 | — | +688.11 |
| 10 | 203.00 | 0.463193 | 94.03 | −$392.04 | +$782.14 |
| Policyholder | Renewal terms | Premium | Loss | Expense | CLV | Loss ratio |
|---|---|---|---|---|---|---|
| Short-1 | 1 | 1,450 | 957 | 870 | −392.04 | 0.6600 |
| Short-2 | 1 | 1,450 | 957 | 870 | −392.04 | 0.6600 |
| Lifer-1 … Lifer-5 (each) | 10 | 14,500 | 9,570 | 3,480 | +782.14 | 0.6600 |
| COHORT TOTAL (7 policyholders) | 52 | 75,400 | 49,764 | 19,140 | +3,126.62 | 0.6600 |
The profit lens you asked for. Two of seven policyholders destroy value, yet the cohort earns +$3,127. An identical loss ratio of 0.66 on every single policy produces CLVs ranging from −$392 to +$782 — persistence, not loss experience, is doing the work. A book written entirely of one-renewal policyholders at a "profitable" 0.66 loss ratio would lose money.
| Policyholder | Loss (flat) | Loss (tenure-credited) | CLV (flat) | CLV (credited) | Effective LR |
|---|---|---|---|---|---|
| Short-1 / Short-2 (each) | 957.00 | 916.59 | −392.04 | −354.62 | 0.6321 |
| Lifer-1 … Lifer-5 (each) | 9,570.00 | 7,608.20 | +782.14 | +1,959.92 | 0.5247 |
| COHORT TOTAL | 49,764.00 | 39,874.18 | +3,126.62 | +9,090.36 | 0.5288 |
The ten-year renewer's loss ratio glides 0.6321 → 0.4289 across the ten terms, and their value more than doubles ($782 → $1,960). Cohort value rises +190.7%.
Reproduce: python docs/calls/phase4_cohort_scenario_data.py §B ·
cas_clv.cohorts.mark_cohort(), micro_cohort_walkthrough()
You said: "then you can extrapolate that." Here is the extrapolation on 5,000 synthetic customers, 32,728 policy terms, valued on the hybrid headline model at a 5-year horizon.
| Tenure cohort | Customers | Mean CLV | P25 | Median | P75 | Loss ratio | Share of value |
|---|---|---|---|---|---|---|---|
| 1 yr | 919 | 1,870.71 | 146.36 | 630.09 | 4,649.52 | 0.6468 | 9.8% |
| 2–3 yrs | 1,350 | 1,570.73 | 0.00 | 0.00 | 4,504.36 | 0.6034 | 12.1% |
| 4–5 yrs | 943 | 3,111.95 | 0.00 | 2,318.81 | 5,855.88 | 0.5593 | 16.8% |
| 6–9 yrs | 1,268 | 5,275.14 | 1,126.73 | 4,852.23 | 8,993.79 | 0.5290 | 38.3% |
| 10+ yrs | 520 | 7,706.53 | 2,869.66 | 5,791.40 | 11,688.08 | 0.4564 | 22.9% |
The direct answer to your question: mean CLV rises 4.1× (from $1,871 to $7,707) while the loss ratio falls 0.647 → 0.456. The 10+ cohort is 10.4% of customers but 22.9% of book value.
Two honest caveats visible in the table. The 2–3 year cohort's mean is below the 1-year cohort's — early lapses concentrate there, and its P25 and median are both $0.00 (lapsed customers carry zero residual value). And the bands are enormous relative to the means: the 1-year cohort spans $146–$4,650. A single customer's CLV is not a quotable number; a cohort with its band is.
| Cohort | Premium PV | Loss PV | Expense PV | Cross-sell PV | CLV PV | − Acquisition | Net of acquisition |
|---|---|---|---|---|---|---|---|
| 1 yr | 4,777,782 | −2,439,652 | −955,557 | 336,610 | 1,719,184 | −1,241,583 | 477,601 |
| 2–3 yrs | 7,854,853 | −4,711,201 | −1,570,971 | 547,810 | 2,120,492 | −1,873,437 | 247,054 |
| 4–5 yrs | 9,302,226 | −5,079,461 | −1,860,445 | 572,249 | 2,934,568 | −1,482,415 | 1,452,153 |
| 6–9 yrs | 20,430,762 | −10,750,928 | −4,086,152 | 1,095,202 | 6,688,883 | −2,341,004 | 4,347,880 |
| 10+ yrs | 10,182,886 | −4,623,002 | −2,036,577 | 484,090 | 4,007,397 | −1,088,307 | 2,919,089 |
Net of acquisition cost, the 1-year cohort retains only $477.6K of $1.72M of gross value (28%), while the 10+ cohort keeps $2.92M of $4.01M (73%). The 2–3 year cohort is the thinnest of all at $247K net on $2.12M gross (12%) — it has paid the acquisition cost but not yet earned it back. That trough is where retention spend has the highest return.
Reproduce: §C of the companion script · cohort_clv_summary(),
cohort_profit_bridge()
If the tenure credit is applied on a revenue-neutral filing basis — rescaled so total expected book loss is unchanged, which is what makes it a relativity rather than a rate decrease — then value moves between cohorts and the book total does not move at all ($17,470,511 either way, neutral by construction).
And the direction is the opposite of a loyalty discount:
Why. Relative indexing means the improvement still ahead is what gets credited. Long-tenured customers have almost none left (they are at the curve floor); newer customers have plenty. Rescaling to revenue-neutrality then lifts everyone's multiplier to restore the book total — which, for the cohort with no forward improvement to offset it, means their loss goes up relative to flat.
The two bases and what each is for:
| Basis | What it assumes | Book CLV | Use for |
|---|---|---|---|
Filingtenure_loss_normalize=True (default) |
The gradient is a relativity: same total loss, distributed by tenure | $17.47M unchanged |
Rate relativities, filing exhibits. rate_adequacy_check unaffected by construction. |
Planningtenure_loss_normalize=False |
The gradient is real and forward-looking: the maturing book's loss genuinely falls | $20.09M +$2.62M |
Acquisition budgets, retention-spend ROI, planning. Must not enter an unfiled indication. |
On the planning basis the entire uplift is exactly the modelled loss saving: expected discounted loss falls $27.60M → $24.99M (−$2.62M) and book CLV rises by the same $2.62M. Nothing else moves — that identity is asserted in the test suite.
Reproduce: §D of the companion script · diagnostics: decomposition error 0.0, negative increments clamped 0, loss-weighted mean multiplier 1.000000, mean effective LR year 1 0.6151 → final 0.5307.
Also from Call #3: "it won't be a static model which will give you one number and that's it. It's more about you have a few levers to change and basis those changes, you can see how this value will evolve." Seven named scenarios now ship, and there is a live planner where you can move the levers yourself.
| Scenario | What it assumes | Book CLV | vs base |
|---|---|---|---|
base | Model as configured | 17,470,511 | 1.00 |
soft_market | Price competition: weaker margins, retention supported by price | 17,555,664 | 1.00 |
tenure_loss_credit | Full measured tenure gradient (filing basis) | 17,470,511 | 1.00 |
hard_market | Rate hardening: better margins, more shopping, weaker retention | 15,013,753 | 0.86 |
adverse_retention | Book-wide 15% deterioration in retention | 12,391,567 | 0.71 |
recession | Lapse pressure + expense stress + no cross-sell | 8,001,896 | 0.46 |
long_horizon | Ten-year valuation view | 28,750,972 | 1.65 |
The result worth flagging: persistence dominates everything else. The soft market — worse margins and worse expenses — comes out marginally ahead of base, because its +3% retention outweighs the margin loss. Meanwhile the hard market's better margins cannot offset an 8% retention decline. CLV is far more sensitive to how long customers stay than to what you earn per year while they do. This is asserted in the test suite so it cannot regress silently.
Reading across model families at fixed scenario answers the question you would reasonably ask next — whether these movements survive changing the model.
| Scenario | BG/NBD | Pareto/NBD | Cox PH | Weibull AFT | Markov | Hybrid | Max/min spread |
|---|---|---|---|---|---|---|---|
base | 17.49M | 16.97M | 17.49M | 16.29M | 15.64M | 17.47M | 1.118 |
soft_market | 17.49M | 17.02M | 17.55M | 16.33M | 15.69M | 17.56M | 1.119 |
hard_market | 15.07M | 14.60M | 15.04M | 14.01M | 13.45M | 15.01M | 1.120 |
adverse_retention | 12.41M | 12.04M | 12.41M | 11.55M | 11.10M | 12.39M | 1.118 |
recession | 7.53M | 7.54M | 7.92M | 7.39M | 7.08M | 8.00M | 1.131 |
Model choice contributes a stable ~12% spread, and it does not interact with the scenario (1.118 → 1.131 across all five). Scenario effects — up to −54% for recession — are several times larger. Practically: getting the assumptions right matters far more than getting the model right, and all six families agree on the direction of every scenario. That is the strongest argument we have for the transparent, defensible model at filing.
Reproduce: §E of the companion script · cas_clv.scenarios.run_scenarios(),
scenario_comparison() · full grid: docs/sensitivity_appendix.md
Every previously published figure is unchanged. loss_trend=0.0 is the default and
reproduces the flat result to the cent on all six model families — asserted, not asserted
loosely: pd.testing.assert_frame_equal on the whole prediction frame.
Σt nt = DERT(H) with maximum absolute error 0.0 across all six families. Zero negative increments needed clamping on this book, though the guard remains because the hybrid and Markov engines are not guaranteed monotone in horizon.
Loss-weighted mean multiplier = 1.000000 on the filing basis, so total expected
discounted loss is preserved exactly and rate_adequacy_check is untouched.
Premium-weighted R² = 0.887 against the observed multipliers. The floor at 0.70 stops extrapolation where credibility runs out. What would falsify it: if the fitted gradient does not reproduce across carriers and periods, the curve is book-specific and must be a user input rather than a shipped default — which is exactly what the NAIC five-year reproducibility test (§8) is for, and why we are asking you to choose the curve source (Q2).
Tenure is not a protected class, but a tenure relativity can proxy for one (age correlates
with tenure). disparate_impact_test continues to pass on every region cohort with a
minimum adverse-impact ratio of 0.98 against the 0.80 threshold. We would want this re-run on
age bands before any filing use — flagged as an open item, not claimed as clear.
| Term | Meaning |
|---|---|
| CLV | Customer lifetime value — discounted expected future profit from a customer. |
| DERT | Discounted expected residual transactions: expected future renewals, discounted, for a customer who is currently in force. |
| nt | Discounted expected renewals occurring specifically in future year t (the per-year decomposition). |
| mt | Tenure loss multiplier applied to the customer's own loss in future year t. |
| τ (tau) | The customer's attained tenure — policy years already completed at the valuation date. |
| loss_trend | Blend weight, 0.0 (flat loss ratio) to 1.0 (full fitted curve). Default 0.0. |
| Filing basis | Tenure curve rescaled to be revenue-neutral — a relativity. tenure_loss_normalize=True. |
| Planning basis | Tenure curve applied at its own level — a genuine level change. tenure_loss_normalize=False. |
| Unconstrained CLV | Premium − loss − expense only. The filing-defensible base (cross-sell term = 0). |
| Constrained CLV | Unconstrained + cross-sell + upsell. Business-planning view; excluded from indications (NY §2304). |
| Net of acquisition | Constrained CLV minus the one-off acquisition expense — the inception / new-business view. |
| Residual CLV | Value of an in-force customer going forward; acquisition cost is sunk and not re-charged. |
| P25 / P75 | 25th and 75th percentile of CLV within a cohort — the interquartile band. |
| Loss ratio | Incurred loss ÷ earned premium. |
| Pooled loss ratio | Book-wide loss ÷ book-wide premium, ignoring tenure (0.5246 here). |
| Lifetime loss ratio | Loss ratio weighted by expected survival to each tenure year (0.5742 here). |
| BG/NBD | Beta-Geometric / Negative Binomial Distribution — probabilistic buy-till-you-die renewal model (Fader–Hardie–Lee 2005). |
| Pareto/NBD | The original buy-till-you-die benchmark (Schmittlein–Morrison–Colombo 1987). |
| Cox PH | Cox proportional hazards survival model of time-to-lapse. |
| Weibull AFT | Weibull accelerated failure time survival model. |
| Markov / HMM | Multi-state model over product-portfolio states; HMM uses latent (decoded) states. |
| Hybrid | BG/NBD supplies the probabilistic per-year base; gradient boosting learns only the residual. The POG-selected headline. |
| R² | Share of variance explained — here, premium-weighted, of the fitted curve against observed multipliers. |
| MAE | Mean absolute error. |
| Four-fifths rule | Adverse-impact screen: a group's favourable-outcome rate below 0.80× the reference group's is flagged. |
| NAIC | National Association of Insurance Commissioners. |
| NY §2304 | New York rate-regulation provision constraining price optimization. |
| POG | Project Oversight Group — this committee. |
Every figure on this page is generated, not transcribed. Regenerate all of them with:
set_seed(42) throughout. Synthetic book: 5,000 customers,
32,728 policy terms, 5,617 claims.cas_clv.cohorts —
mark_cohort, micro_cohort_walkthrough,
micro_cohort_summary, build_cohorts,
cohort_clv_summary, cohort_profit_bridge;
cas_clv.scenarios — run_scenarios,
scenario_comparison, sensitivity_appendix;
cas_clv.models — predict_clv (per-year path),
tenure_loss_diagnostics; cas_clv.ratemaking —
retention_adjusted_loss_ratio.retention_adjusted_loss_ratio(), smoothed by premium-weighted log-linear fit;
constants live in models.DEFAULT_TENURE_LOSS_CURVE with the fit recorded in the
module docstring. No hand-entered numbers.pytest 108 passed · ruff clean ·
mypy clean. New tests: exact no-op per family, per-year sum identity, revenue
neutrality, relative-indexing behaviour, and the loss-saving identity on the planning basis.#2a78d6 + green #008300 (all-pairs CVD ΔE 26.5, normal-vision
29.0), ordinal blue ramp steps 250–650, diverging blue↔red for the signed exhibit.
Validated with the palette checker rather than by eye.Companion materials: call brief · decision poll · interactive scenario planner · Jul-16 case studies