D30 payback for midcore F2P: censoring and maturity rules

Illustrative lab showing how immature D30 windows distort midcore payback when late cash is censored.
Midcore cash often arrives after day 7. Reading a D30 payback on a cohort that is only 12 days old silently censors unpaid future days. This lab makes the censoring explicit with illustrative inputs.
Define the calculation before using it
For a cohort aged A days where A < 30, observed revenue-to-date is not D30 revenue. Define mature D30 payback only when A >= 30 under your revenue definition. For immature cohorts, report observed_payback_to_date and days_observed, not “D30”. AppsFlyer activity metrics define ROAS as revenue/cost; they do not licence calling partial windows by a mature label.
Work through the synthetic example
| Input | Value | Status |
|---|---|---|
| Cohort media cost | 20,000 | illustrative |
| Revenue observed through day 12 | 3,600 | illustrative |
| Days observed (`A`) | 12 | illustrative |
| Mature window target | 30 | definition |
| Output | Result |
|---|---|
| Observed payback to date | 0.1800 |
| Window mature for D30 label? | false |
| Label to use in the meeting | payback_to_day_12 |
A second synthetic mature cohort: cost 20,000, D30 revenue 7,400 → D30 payback 0.3700, mature=true.
Facts versus limits
| Field | Evidence |
|---|---|
| ROAS definition pointer | AppsFlyer activity metrics |
| Midcore LTV shape | Not claimed as a market curve |
| Forecast from day 12 to day 30 | Not performed here |
Download the lab CSV.


