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.
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)
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:
retention_adjusted_loss_ratio exhibit could not support the decision it exists for
(c41), because it grouped by tenure alone.One comment (c41) produced the single most useful new result in the paper, described under its entry below.
| 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).
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:
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.
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.
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:
clv_unconstrained → clv_base (P − L − E; filing-defensible)clv_constrained → clv_with_growth (adds cross-sell + upsell)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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
"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.
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.