← Project hub

Superseded, 27 September 2026. This page is the record of round-1 review response (17 Aug) as presented, and keeps the figures and vocabulary of that date. In paper v5.2 (27 September 2026): the 3+ product relativity is 0.9683 on 9.44 expected years against 6.53 for mono-line (was 0.9646 on 8.62 against 5.11); the ten-year renewer is $1,093.62, breaking even in year 2 (was $782.14, year 4); unconstrained / constrained CLV are now base / with-growth; filing / planning basis are now the revenue-neutral / level-effect basis. The current state is on the project hub.

Response to POG Review — Paper v2.0 → v3.0

Reviewer: AJ Robinson (Allstate), Project Oversight Group Review received: 13 August 2026 (CAS_CLV_Paper_v2.0_AJR.docx, 18 comments) Response: 17 August 2026 · Pramod Misra Manuscript: v3.0 (paper/paper.md; rendered paper/build/CAS_CLV_Paper_v3.0.{docx,pdf}, 48 pp)


Summary

Eighteen comments, all addressed. Fourteen are substantive and four clerical. Five drove changes to the toolkit itself, not only to the prose — which means v3.0 changes reported numbers, unlike v2.0. The changed-numbers table is first, before the point-by-point responses, because anyone holding a v2.0 draft needs it before anything else.

Four comments identified things that were wrong, not merely unclear, and I am grateful for each:

One comment (c41) produced the single most useful new result in the paper, described under its entry below.


Changed numbers, v2.0 → v3.0

Quantity § v2.0 v3.0 Cause
Mean 5-yr CLV, with growth (BG/NBD, basis C) 3.2 \$3,498.71 \$3,181.52 c16
Growth gap per customer 3.2, 6.3, 8.4 \$693.40 \$376.21 c16
— of which one-time cross-sale 3.2 — \$98.85 new
— of which recurring upsell uplift 3.2 — \$277.36 new
Book total CLV, basis C, filing basis 3.5 \$17,470,511 \$16,111,118 c16
Book total CLV, planning basis 3.5 \$20.09M \$18.73M c16
Planning-basis uplift 3.5 +\$2,615,287 +\$2,615,287 unchanged
Credibility, all five quintiles 6.1 0.9614 (uniform) 1.0000 / 0.7168 / 0.8419 / 0.7213 / 1.0000 c39
Indicated relativities 6.1 2.8489 … 0.3581 unchanged —
1-yr cohort mean CLV 8.2 \$1,870.71 \$1,710.82 c16
1-yr cohort P25 / P75 8.2 \$146.36 / \$4,649.52 \$129.99 / \$4,310.54 c16
2–3 yr cohort share at exactly \$0 8.2 not reported 34.59% c55
2–3 yr cohort value kept net of acquisition 8.2 11.7% 0.3% c16
10+ yr cohort value kept 8.2 72.8% 71.3% c16
10+ yr cohort filing-basis change 3.5 −7.0% −7.4% c16
Cross-family CLV spread, base scenario 10.1 1.1182 1.1169 c16
Test count 12 108 122 new tests

Unchanged in method and in result: the six model families and their parameter fits, the tenure loss curve (4.22%/yr, floored at 0.70), the disparate-impact screen, the §9 economic-value comparison and its negative result, the §9.5 withdrawals, and every basis-A and basis-B figure. The cross-sell correction only reaches figures computed on basis C, which is the growth basis.

Two new limitations: L12 (upsell double-counts against a premium-trend projection) and L13 (no regulator has reviewed the retention weighting). Two new exhibits: Exhibit 11 (segment-level retention-adjusted loss ratio) and Exhibit 12 (the micro cohort with the tenure gradient applied).


Point-by-point

c9 — "I'm confused as to why insurance isn't contractual." · §2.1 · Accepted

You are right, and the v2.0 sentence was sloppy. On the contractual / non-contractual taxonomy alone, annual insurance is contractual, and the subscription analogy holds in both directions you raise: a monthly subscriber's defection is also learned at renewal, and can also lapse and return. The claim that insurance is "neither" was doing no work.

§2.1 is rewritten to drop that claim and to say what actually separates the two cases — a conjunction of three features, none of which is observability:

  1. The renewal decision is discrete and infrequent — one decision point a year, so a book of 5,000 households yields ~5,000 churn observations a year against a monthly subscription's ~60,000 over the same window. That is an order of magnitude less event data for the same calendar exposure.
  2. The exit is causally heterogeneous — anniversary non-renewal, mid-term cancellation and carrier-initiated non-renewal are different events with different covariate signatures, which the taxonomy's single "churn" label collapses (this is L10).
  3. Decisively for pricing, the cost of serving the relationship is itself stochastic and moves with the same tenure that drives retention. A subscription's marginal cost is roughly known and roughly flat; an insurance renewal's loss cost is a random variable whose expectation shifts with attained tenure.

The third is the one Firestone and Hindawi (2013) singled out, and it is the honest reason insurance CLV is harder — not observability. The revised passage also draws the practical consequence: because both the latent-churn and the observed-duration families are defensible here for different reasons, this paper implements and compares both rather than selecting on taxonomy.

c12 — "Define what you mean by growth value" · §3.1 · Accepted

Defined at first use in §3.1, before it is used: value arising from a deliberate business-development action rather than from the renewal of the relationship as currently written — selling the household something it does not have today. The definition explicitly excludes premium growth from rate change or trend (that is $P_i(t)$) and the value of existing coverage persisting (that is $S_i(t)$), with a forward reference to §3.2 for the full form.

c14 — "Should the naming convention be flipped?" · §3.2 · Accepted, with a modification

Accepted that the names were wrong; modified in that I did not flip them.

The intended sense was "constrained to an explicit growth programme." Your reading — "constrained" means regulatorily constrained, hence the filing-safe variant — is the opposite, and on reflection it is also the reading most actuaries will reach first. Since the word is genuinely ambiguous in the direction it points, flipping it would leave the same ambiguity pointing the other way. The pair is instead renamed to the neutral:

The old column names are emitted as deprecated aliases for one release, so existing notebooks, the project hub and any code POG members have run continue to work unchanged. §3.2 carries a short note recording the change and why, so a reader of v2.0 is not confused. This amends the binding 2026-07-02 two-variant decision, and I would like it minuted as an amendment adopted on review rather than left as drift.

c15 — "Would upsell already be incorporated in future premium/loss expectations?" · §3.2 · Accepted

A real ambiguity in the exposition, and the answer depends on something v2.0 never stated.

In this framework, no — $P_i(t)$ and $L_i(t)$ are carried forward at the customer's current premium and loss level. A limit increase in term $n$ is therefore not inside them, and the upsell term is a genuine addition rather than a duplicate. §3.2 now says so explicitly.

But your instinct identifies a real trap, so the converse now carries a numbered limitation (L12): a user who does project premium trend, rate change or coverage growth into $P_i(t)$ directly must set upsell_value = 0, or the same uplift is counted twice. The toolkit cannot detect this — it cannot see what assumptions produced the premium column it is handed — so the default of zero means the error requires an affirmative act, but nothing prevents it.

Separately, and prompted by this comment, upsell is now modelled as what it actually is: a permanent step-up in annual margin from the upgrade year onward, rather than a flat per-term addition. See c16.

c16 — "How would one calculate cross-sell value? Is \$150 per term? That seems very high." · §3.2 · Accepted — this was a defect

You were right on both counts, and this is the change I am most grateful for.

The defect. cross_sell_value was folded into the per-term net margin and then multiplied by discounted expected renewals. On the reference book that valued a \$150 cross-sale at \$150 × 2.7736 = \$416.04 per customer — i.e. it assumed the household adds a new product line every renewal term, forever. As you put it, once it is done once it will not be done again. This was not a documentation problem; the arithmetic was wrong.

The fix. Growth value is now decomposed into its two genuinely different shapes:

Your reading of what the parameter means is now the documented one. cross_sell_value is the CLV of the secondary product, and the whole term is that CLV times the probability of making the sale, evaluated at the modelled time of sale rather than assumed immediate — which is exactly "CLV of secondary product × probability of selling secondary product." §3.2 gives the derivation in that form.

Effect. The growth gap falls from \$693.40 to \$376.21 per customer — \$277.36 of recurring upsell over 2.7736 expected discounted renewals, plus a single \$98.85 cross-sale. Basis-C figures throughout §§3.5, 6.3, 8.2, 8.4 and 10 move accordingly; the changed-numbers table above lists each.

On the \$150 level itself: it stays as the illustrative value, but it now means something defensible — the CLV of a second product line, which on this book is the right order of magnitude for a monoline household adding a second policy — rather than an annual bonus. The sensitivity grid sweeps 0 / 150 / 300, and the value is a user input with a default of zero.

§6.3 also now separates cross_sell_adjusted_premium() (a revenue multiplier on the premium signal, for targeting) from cross_sell_value (a dollar amount inside predict_clv). They are two representations of one commercial idea and applying both to one exhibit double-counts it; that warning is now at both call sites in the code and in the paper.

c19 — "Discuss fixed vs variable expenses; fixed should be ignored; comment on LAE" · §3.4 · Accepted

Both points accepted, and the vocabulary changed to the one an expense exhibit uses.

Fixed vs variable. You are right that fixed expenses should be excluded, and right that the paper never used the words. Both $e_{acq}$ and $e_{ren}$ are variable — they scale with premium, and they are commission, premium tax and premium-proportional servicing. That is the correct default precisely because a CLV is a marginal calculation: fixed overhead is incurred whether or not customer $i$ is written, so charging a decision with a cost the decision does not change makes every marginal customer look worse than they are. §3.4 now states this directly and says where fixed expense does belong — the overall rate level.

The toolkit adds Economics.fixed_expense_per_term and fixed_acquisition_expense as per-policy dollar amounts, both defaulting to zero, documented as being for avoidable costs only — the underwriting or onboarding cost that genuinely would not be incurred if the customer were declined. §3.4 notes that this matters most at small premium sizes, where a percent-of-premium convention understates a fixed per-policy cost.

LAE. Now given an explicit convention: ALAE in the loss projection, because it attaches to claims and varies with the same frequency and severity the loss term already models; ULAE in the expense ratio, because it is a claims-operation servicing cost. Economics.lae_ratio loads ALAE onto $L_i(t)$ and defaults to 0.0 because this book's incurred_loss is already a loss-and-ALAE amount; a user with pure indemnity should set their own ratio, which then flows through the §3.5 tenure curve as well.

c21 — "Why does the filing basis use a revenue-neutral assumption? Should both be?" · §3.5 · Accepted (expanded)

Expanded substantially, and your second question is answered directly: no, and deliberately not.

A tenure factor inside a class plan is a relativity — it decides how a given amount of expected loss is allocated across tenure cells. It cannot decide how much expected loss there is; that is the overall rate level indication, from aggregate experience, in a separate step. A relativity carrying a level effect would smuggle a rate change into a classification exhibit, and the indicated change would appear twice — once in the overall indication and again in the factor. Normalising to a loss-weighted mean of exactly 1.000000 is the arithmetic guarantee that this cannot happen: regulatory.rate_adequacy_check returns the same verdict with the factor on as with it off, and the test suite asserts it rather than the prose claiming it.

The planning basis is not answering an allocation question at all. It answers: if the measured tenure improvement is real and the book keeps maturing, how much less loss will we pay? That is a level effect by nature, and forcing revenue-neutrality would erase the quantity being asked about. It belongs in a business plan or a profitability projection — or in a decision about whether to file a decrease — never in the relativity exhibit. Which is why every exhibit the toolkit emits stamps its basis.

c23 — "Are you using elasticity metrics in the survival probabilities?" · §7, §11 · Accepted (now stated explicitly)

No, and the paper now says so rather than leaving it to inference. SURVIVAL_COVARIATES is the complete list and contains four terms: attained age, household size, number of product lines held, and log average premium. There is no rate-change variable, no competitor price, no quote-conversion model and no elasticity parameter. A test in the suite asserts that no such covariate has been added, so the claim is enforced rather than documented.

One clarification worth making: log_avg_premium is a size-of-risk control, not a price-response term — it enters as a level, never as a change, so it cannot represent how a customer reacts to a rate action.

The paper also now names this as a limitation as well as a virtue: the framework has no ability to say how retention would respond to a rate increase, which is exactly the quantity a retention-intervention business case needs. It is in §13 future work, conditioned on staying on the operational side of the §3.6 bright line.

c39 — "Classical credibility is usually claim counts, not customer counts" · §6.1 · Accepted — this was wrong

You said it did not really matter. It did.

1,082 is a claim-count standard — the expected claims needed for observed frequency to land within ±5% of expectation at 90% probability — and it has no interpretation as a number of customers. Worse, applying it to customers made the exhibit degenerate: because the segments are equal-size quintiles, every segment held exactly 1,000 customers and therefore carried the identical credibility of 0.9614, so the column conveyed no information and the credibility weighting reduced to a uniform 4% shrink toward unity. It looked like an actuarial control and functioned as a constant.

clv_rate_relativities() now takes exposure_base, defaulting to "claims" (the customer-count basis is retained so published figures stay reproducible), and the feature frame emits n_claims. Your prediction holds exactly: the lowest-CLV quintile carries 2,433 claims against 1,000 customers — high frequency is most of what makes it the lowest-CLV quintile — and reaches full credibility, while the thin mid-book segments do not (0.7168, 0.8419, 0.7213). The segments whose relativities depart furthest from unity are now precisely the ones with the claim volume to support the departure. Indicated relativities are unchanged; only the credibility and credibility-weighted columns move.

c41 — "Would it make sense to show the retention-adjusted loss ratio by some segment?" · §6.2.1 · Accepted — and it produced the best new result in the paper

Yes, and your diagnosis of what was missing was exactly right: showing the loss ratio by tenure demonstrates that loss ratios improve with tenure, but it cannot support the rate decision the statistic exists for — may a segment expected to persist longer be charged less even when its first-term loss ratio gives no reason to? That needs loss ratio and retention varying together across a segment, which by-tenure aggregation cannot show.

New function retention_adjusted_loss_ratio_by_segment() and new Table 14a / Exhibit 11. The segment chosen is the number of product lines held — the closest analogue on this book to a credit insurers actually file (the multi-policy discount), and the one with a real persistence gradient (lapse hazard 9.0% → 5.8% → 3.5%).

Segment Customers Expected lifetime First-term LR Lifetime LR Relativity
1 product 3,205 5.11 yrs 0.6515 0.5928 1.0992
2 products 1,545 6.33 yrs 0.5939 0.5132 0.9516
3+ products 250 8.62 yrs 0.6652 0.5202 0.9646

The result is sharper than your hypothetical. You posited equal first-term loss ratios. In fact the 3+ product segment has the worst first-term loss ratio of the three — 0.6652 against 0.6515 mono-line — and still indicates a credit of 0.9646, entirely on persistence: 8.62 expected years against 5.11. A single-term exhibit ranks that segment last of three; the lifetime exhibit ranks it second. That reversal is the argument, quantified.

Two cautions are stated with the exhibit. It is only informative where retention genuinely differs — run on region, where this book's retention spans only 0.872–0.894, the relativities compress to 0.936–1.039 and it says little, so the toolkit emits the region view alongside as an honest counterexample. And the tenure view is retained as Table 14, since the two answer different questions.

c46 — "States that outlaw elasticities may not allow retention-adjusted loss ratios" · §7, L13 · Accepted in part; argued, then conceded

This is the most important comment in the review and it gets a full subsection in §7 rather than a sentence.

The argument that it is admissible. What Proposition 103 and the NAIC white paper prohibit is using a customer's willingness to pay — their predicted price response — to set their price. The §6.2 exhibit contains no price response: numerator and denominator are both loss and premium experience, and the weights are realized survival frequencies estimated with no price variable anywhere (c23, now test-enforced). The statistic is expected loss ratio over expected life, which is a cost. It is the same construction a life actuary uses when weighting by a lapse assumption, and no one calls a lapse assumption price optimization.

The concession. The residual risk is real and I have stopped arguing it away. §7 now gives three practical points for a filing — document the retention estimate's inputs (the defence rests entirely on their being cost-side, which is why the covariate list is short and fixed); expect the question in a prior-approval state and be ready to say whether the credit survives on first-term loss experience alone (on this book's product-count segmentation it does not, and Table 14a says so rather than burying it); and note that the exhibit degrades gracefully — dropping to unweighted segment loss ratios loses the multi-renewal correction but keeps a filable exhibit.

And L13 now records plainly that no regulator has reviewed either version. That is the honest status.

c51 — "Should be a, not an" · §8.1 · Accepted. Fixed.

c52 — "Why not have the improving loss ratio here? Just for simplicity?" · §8.1 · Accepted

Yes — for hand-checkability, and §8.1 now says so instead of leaving it unexplained. Holding the loss ratio at 0.66 throughout is what lets a reader reproduce every cell with a calculator and isolates the single mechanism the exhibit exists to show.

But the simplification is not free, and prompted by this comment §8.1 now shows what it costs (new Exhibit 12):

Flat 0.66 Tenure gradient applied
Short renewer (1 term) −\$392.04 −\$354.62
Ten-year renewer +\$782.14 +\$1,959.92
Ten-year renewer's realized loss ratio 0.66 0.52

Crediting the measured gradient more than doubles the ten-year renewer's value while barely moving the short renewer, who has almost no future tenure over which to earn it. That asymmetry is §3.5's relative-indexing argument in two rows, and it is the clearest available statement of why L4 matters as much as it does: on a margin this thin, whether the gradient reproduces on a real book is worth more than the choice of model. The flat version remains the one quoted in the body, as the conservative choice.

c54 — "Surprised that customers who retain only 1 term have positive CLV" · §8.2 · Accepted — a labelling failure on our side

Your expectation is correct and the exhibit was mislabelled. A customer who renews once does lose money — that is §8.1's SHORT policyholder at −\$392.04, precisely because the acquisition charge is applied.

Table 18's "1 yr" was never that customer. It was an attained-tenure band: a household with one policy year behind them, valued on the renewals still ahead, on the residual basis where acquisition cost is already sunk (§3.4). Two different things pointing in opposite directions, and the label invited exactly the reading you gave it.

The band labels now read "1 yr attained", "2-3 yrs attained" and so on, in the code as well as the paper, and §8.2 opens by contrasting the attained-tenure cohort with §8.1's inception view. A test asserts the labels.

c55 — "Did we confirm the 25th percentile is actually 0?" · §8.2 · Confirmed, with the number that explains it

Confirmed, and it is genuine rather than a clipping artifact — but the right response was to report the mechanism, not to assert it, so cohort_clv_summary() now emits share_zero.

34.59% of the two-to-three-year cohort carries exactly \$0.00: those customers had lapsed before the observation window closed, and the survival and state-based families correctly assign a lapsed customer no future renewals. With a further ~15% of the cohort negative, the zero mass straddles the middle of the distribution, so both P25 and the median land on it. Nothing is floored — negative CLVs coexist in the same frame, which is the proof, and a test asserts both facts.

On your related observation that it seems odd for CLV to worsen at mid tenure when retention and loss ratio are improving: the cohort mean dips there for the same reason — early lapses concentrate in years 2–3 — and that is now stated in §8.2 rather than left as a puzzle. It is also why the profit bridge shows that cohort keeping essentially none of its gross value net of acquisition (0.3%) against 71.3% for the ten-plus cohort: it has paid the acquisition cost and not yet earned it back. §9.4 makes that the retention-allocation argument.

c73, c74, c75 — Acknowledgment names · §15 · Accepted. Fixed

"Kelly Robinson" → AJ Robinson; "Paik" → Aran Paik; "Robert Kozlowski" → Ronald Kozlowski. My apologies — these were careless, and in an acknowledgments section they are the errors that matter most. §15 also now credits this review with three of the framework's design decisions, and TRACKER.md is corrected to match.


Verification

Everything below was run on the final v3.0 state:

pytest -q                          122 passed  (was 108)
ruff check .                       All checks passed
mypy src/                          Success: no issues found in 11 source files
scripts/build_paper_numbers.py     -> paper_numbers.json + 12 exhibits (was 10)
scripts/build_paper_figures.py     -> 8 figures, 300 dpi PNG + SVG
scripts/check_paper_numbers.py     paper 272 literals / 257 reproduced / 15 cited / 0 unmatched
                                   exec summary 52 / 51 / 1 / 0
scripts/render_paper.py            paper 48 pp; executive summary 3 pp (contractual 2-3)

loss_trend = 0.0 remains an exact no-op across all six families, asserted per family.

Still open, and not closed by this response

This research project has been funded by the Casualty Actuarial Society.