Customer Lifetime Value Modeling in Subscription-Like Experiences

The curve that lies

Most churn curves tell a clean story. Real life is not clean. In many products, people do not click “cancel.” They just go quiet. Weeks pass. Then a spend spike comes back from nowhere. A flat churn line misses this quiet wave. A CLV line built on it will be wrong too.

So we need tools made for that quiet wave. We need models that live in the gap between a hard contract and pure chance. This is where “subscription-like” comes in. Think delivery apps, wallets, games, and review hubs. Fees and value repeat. But there is no pledge to stay. You do not see churn. You must infer it. That is the heart of this guide.

Field notes: where it smells like a subscription, but no one signed

Food delivery. Orders come in bursts. Rain days spike orders. Sunny days go slow. People churn? Maybe. Or maybe they just cook at home for a week. Wallet apps. Top-ups sit still, then jump when a bill hits. Marketplaces. Buyers shop after payday. Sellers drop out for a month, then list again. Travel. Six months of silence. Then three bookings in two weeks.

Mobile games. IAP is lumpy. New features or events bring spend back. iGaming and review hubs sit on clear intent spikes around sports and promos. It is a great fit for non-contractual customer models. These models try to read the rhythm of return. Not “did they cancel,” but “how likely are they to come back, and to spend how much.”

Decisions before models

Start with money math. What is gross margin per order or per session? What is the real cost of a promo, bonus, or free shipping? Do you have chargebacks or refunds? Any fraud or risky segments you must cap? These set your guardrails. A CLV that ignores cost of goods and bonus burn looks great on paper and bad in your P&L.

Also be clear on your aim. Do you want to tune bids? Shape bonus policy? Cut dead spend? Or set payback rules by channel? Tie the model to one key choice. Then pick the shortest path to improve that choice. This is core customer lifetime value economics: use CLV to change actions that change cash flow, not to make a pretty chart.

The modeling map (how to choose fast)

In contract plans, churn is a date. In non-contract plans, churn is a guess. That is why the Pareto/NBD and BG/NBD families shine. They split the world into “alive vs. not alive” and “how often they buy.” They pair well with a spend model, like Gamma-Gamma, when spend per event is stable. For the deep theory, read the base work on Pareto/NBD and BG/NBD foundations.

When time to next event matters a lot (think wallets or top-ups), survival models help. You can fit hazard over time, add season and events, and let the risk of churn change as people age. Tooling is mature. See survival analysis for customer churn for hands-on code and ideas.

For revenue per event, Gamma-Gamma is a simple add-on if spend is not tied to how often they buy. If it is tied, use a joint model or ML that learns both at once. The classic path, with code, is in Gamma‑Gamma spend modeling. Keep it simple first. Then layer more.

At scale, you may want feature-rich ML on top: gradient boost, MLP, or mixed effects. These can mix recency, frequency, value, device, and channel. Cloud tools can be enough to start. Here is a clear guide on predicting CLV with BigQuery ML. Start with a baseline. Compare. Do not jump to fancy first.

Choosing a CLV Approach for Subscription‑Like Patterns

Low‑freq non‑contract retail 1–6 orders per year; long gaps BG/NBD + Gamma‑Gamma; cohort trend checks Dormant after 180–270 days w/o purchase Recency, frequency, avg basket, season, channel Mixing gifts/returns; sale weeks bias RFM Heavy season shifts or fast brand burnout
Mid‑freq marketplaces (buyers) Monthly spurts; payday spikes Pareto/NBD; or survival with time‑varying covariates No activity after 120–180 days Event cadence, seller quality, search depth Leakage from post‑window promos; cannibal channels When supply shocks drive behavior more than habits
Mid‑freq marketplaces (sellers) Listings cluster; idle periods long Hierarchical survival; random effects by seller No listing after 60–120 days (by category) Time since last list/sale, fees, disputes Treating bans as churn; they are policy, not choice Policy or fee changes mid‑flight
High‑freq delivery / quick‑commerce Weekly+ orders; event spikes (rain, sport) BG/NBD with calendar effects; or boosted trees Prob. dormant after 45–60 days Daypart, weather flags, fees, ETA accuracy Promo cost not in CLV; surge fees skew margin Logistics shocks; stockouts change intent
Gaming / iGaming affiliates & review hubs Bursty around events and bonuses Survival + cohort CLV; or uplift models Inactive after 60–120 days (by sport/vertical) Deposit depth, bonus use, event calendar Bonus abuse seen as “high CLV” Reg changes; offer caps; tracking loss
Wallet / fintech top‑ups Top‑ups tied to bills; cycles matter Survival with time‑varying hazard; LSTM if needed Idle after 90 days without top‑up Bill due dates, salary day, device risk Fraud refunds inflate value Macro shocks to income or fees
Seasonal travel / booking 1–3 trips a year; sharp season peaks BG/NBD with season dummies; segment by region Dormant after 270+ days (season aware) Lead time, route, party size, loyalty tier Reading COVID‑type shocks as churn Pandemics, strikes, flight bans
Freemium apps with sporadic IAP Usage frequent; pay rare Two‑part: survival for pay events + spend model No pay after 120–180 days Session streaks, feature unlocks, price tests Confusing time‑in‑app with value Feature changes reset behavior

Data first, not fancy first

Great CLV starts with clean event logs. You need who, what, when, and value. You need tags for promo and bonus. You need cost and refunds. Then define two time windows. One to learn. One to test, out of time. Keep features that only use data up to t0. Anything that “sees” the future is a leak.

If you want to practice, the classic Online Retail dataset is a nice sandbox. Try to set a 6‑month train window and a 3‑month holdout. Fit BG/NBD. Check if your top decile in train is still top in holdout. Then add a simple spend model. Watch how small feature fixes beat big model jumps.

Field note: Treat “0 orders” over 90 days as “probable dormancy,” not sure churn, unless season tells you more. Set windows by use case and by your cash cycle.

Guardrails: where CLV goes wrong

Many teams ship a good ROC and a bad profit. Why? Wrong target or bad calibration. Your output should be in money or in a strong proxy for money. If you score buyers by “probability to buy,” but your promos cut margin, the “best” buyers can be the worst for cash. Calibrate your scores if you use them in bands. See probability calibration in classification to avoid fake lift.

Watch out: Do not let promo codes from the test window sit in the feature set. Do not blend chargebacks that happen months after. Tag them and move them back to when the risk was made. And account for bonus cost. Otherwise, your “high CLV” group is just “top discount users.”

From model to money

Use CLV to set guardrails: LTV:CAC, payback, and channel caps. Tie bids and bonus exposure to predicted net CLV, not gross. If your payback rule is 6 months, map that to an allowed CAC by cohort and channel. A good yardstick is seen in industry work on payback and LTV in subscription businesses. Keep it simple: if predicted net CLV in six months is $60, and your goal CAC is 0.6× CLV, cap CPA at $36 for that cohort.

Mini‑case (gaming affiliates). In regulated markets, intent spikes near events and promos. Cohorts can look rich, then sink when bonus abuse hits. We benchmark by deposit depth and bonus use. We also route traffic to safer, longer‑tail offers when a cohort looks risky. Example: on DanskeCasinoer (disclosure: sponsored link), we group users by sport calendar and first‑deposit shape. We then throttle bids and bonus slots for groups with high early bonus use but thin second deposits. This keeps CPA inside payback and slows abuse.

Do not stop at score. Run uplift tests. Change caps, bids, or bonus logic for top deciles. Keep holdout. Track net revenue, refunds, and bonus cost per user. If you buy media, measure lift, not last‑click. Meta has a good intro on advertising lift and incrementality tests. A small, clean test beats a giant, noisy one.

Field note: Trigger CRM on CLV segments. High CLV but low recent use? Nudge with content, not with deep discounts. Low CLV but high app use? Push a low‑cost feature, not a cash bonus.

Validation that hurts (but saves money)

Backtesting is the pain that pays. Split cohorts by join month. Train on older ones. Predict for a later, unseen month. Hold out time. Then judge: did the money come in as the model said? Focus on rank order and on dollars, not just on AUC. Re‑fit often, but only after you log drift in features and in profit.

To see if it works in the wild, keep a clean holdout. Do not touch bids or promos for that holdout. Compare lift by decile across test and control. Google’s guide on holdout testing and lift measurement is short and clear. If your “top 20%” fails to beat the “middle 20%,” stop and fix root causes before rolling out.

What not to do

  • Do not define churn by gut. Define dormancy by data and by season, per vertical.
  • Do not train on gross revenue and then spend bonuses like they are free. Use net.
  • Do not push user‑level tracking that breaks privacy rules or platform policy. Read the SKAdNetwork changes and plan for aggregate signals.
  • Do not grade your model by AUC only. Check gains in dollars by decile.
  • Do not mix post‑t0 features in train. Slide your window right and test again.
  • Do not ignore ops. If the team cannot act on the score, the model is shelfware.
  • Do not forget refunds, chargebacks, and fraud. They are not edge cases. They are the case.

Practical FAQ

How much data do I need?
Enough to see a few full cycles. For weekly apps, 3–6 months train and 1–3 months holdout is a start. For travel, go longer.

What if spend is rare?
Use a two‑part setup: model “will pay” with survival or BG/NBD, and model “how much” with Gamma‑Gamma or a simple regressor. Then multiply and discount.

What about season?
Add month or week flags. Split models by key season if the lift jumps. Or add time‑varying hazard in survival.

Can I do this fast in the cloud?
Yes. Start with SQL features and a built‑in ML tool. Then move to a feature store if you need more speed or scale.

How do I pick the dormancy window?
Look at time since last event vs. chance to return. Find the knee. Then add business sense. A wallet with bill cycles needs a shorter window than a travel app.

Short methodology notes (for E‑E‑A‑T)

Observation window: 180 days where we log events, margin, and promos. Prediction point: t0 at day 180. Target window: 180 days after t0 to track truth. Models: BG/NBD for alive probability and transaction count; Gamma‑Gamma for spend per event when spend is not tied to buy rate; or a survival model with time flags. Holdout: out‑of‑time cohort by join month. Metrics: rank lift in net dollars per decile, payback by channel, Brier score for prob tasks, and calibration slope. All features cut at t0 to avoid leaks.

Limits to keep in mind

Big shocks break history. A new fee, a ban, or a law will shift the base rate. Your model will chase the past. Also, when promos change often, CLV can reflect promo policy more than user value. In thin data (few repeats), any model will be noisy. In that case, use simple rules with wide bands, and revisit when you have more events.

Appendix: a quick mental model

Simple CLV (short horizon):

CLV_h = sum over t in horizon (P_alive_t * E[events_t] * E[margin_per_event]) - CAC

Discount if you must, but for a 3–6 month payback, a light or no discount is fine. If you need a one‑line rule: “Spend up to 0.6 × predicted net CLV for that cohort,” and keep a holdout.

One page diagram

Author

By a growth and data lead with 10+ years in CRM, marketplace ops, and gaming finance. I have shipped CLV models in apps, retail, and iGaming under strict rules. I speak at product meetups and mentor teams on turning models into profit with simple guardrails and clean tests.

Sources and further reading

  • BG/NBD primer by Bruce Hardie (non‑contractual CLV)
  • Fader & Hardie on customer‑base valuation (SSRN)
  • lifelines docs (survival)
  • Lifetimes docs (Gamma‑Gamma)
  • Google Cloud blog (BigQuery ML)
  • BCG on CLV economics
  • Zuora Subscription Economy Index
  • Meta Research on incrementality
  • Google Ads on lift and holdout
  • scikit‑learn on calibration

Legal note: If you mention or link to gaming sites, add “18+ only” and “Play responsibly.” Follow local laws. Mark ads or paid links. The link to DanskeCasinoer above is marked as sponsored.