GH GambleHub

Player Retention Analysis

Player Retention Analysis

Retention is the core of the product economy: the longer a player stays active, the higher the LTV, the more stable the income and the more predictable the planning. Below is a complete framework: from correct definitions to survival models and the re-activation circuit.

1) Definitions and accounting units

Unit: player (user/master_id) - by default; for short-term tasks, an "account/device" is allowed, but record this in the metric passport.
Activity: return criterion (≥1 session/ ≥1 rate/ ≥1 deposit) - record.
Retention Dn: proportion of cohort returning on Day n after the reference date.
Rolling/Bracket: Rolling D7 (on any of days 1-7) vs Exact D7 (on day 7).
Churn: no activity for ≥T days (eg, 14/30); is specified as a product rule.
Cohorts: by date of registration/first deposit/first game - choose for the marketing/product task.

💡 Golden rule: Fix the activity trigger, time zone, reference date and churn rule in advance.

2) Basic analytics: cohorts and retention curves

Cohort heat maps: D1/D3/D7/D14/D30/D60; diagonals are comparable between releases and campaigns.
Survival curves: proportion of active from day 0 to N (survival curve).
Curve geometry: "steps" of holidays/releases; early "collapse →" onboarding problems, "long tail" → core loyal.

Pseudo-SQL: Cohort D7

sql
WITH regs AS (
SELECT user_id, DATE_TRUNC('day', ts) AS cohort_day
FROM event_register
),
act AS (
SELECT user_id, DATE_TRUNC('day', ts) AS act_day
FROM event_activity
),
d7 AS (
SELECT r. cohort_day,
COUNT(DISTINCT r. user_id)              AS cohort_size,
COUNT(DISTINCT CASE WHEN a. act_day = r. cohort_day + INTERVAL '7 day'
THEN r. user_id END)       AS retained_d7
FROM regs r
LEFT JOIN act a ON a. user_id = r. user_id
GROUP BY 1
)
SELECT cohort_day, cohort_size,
retained_d7::decimal / NULLIF(cohort_size,0) AS cr_d7
FROM d7
ORDER BY cohort_day;

3) Survival and hazard models

Kaplan-Meier: non-model survival score (S (t)); useful for "shape stripping" of the curve and life median.
Cox PH/Accelerated Failure Time: explanatory models of the influence of characteristics (country, channel, platform, bonuses, content) on hazard (risk of outflow).
Discrete-time hazard (log by day): flexible for product analytics and calendar features.
Re-activation event-Model separately (competing risks) or as a transition in a Markov chain.

4) Markov and semi-Markov models

New → Active → Dormant → Churned → Reactivated.
Transitions: probabilities per period (day/week).
Value: multiply the probabilities of staying in "Active" by the average check/frequency - get the expected contribution to LTV.

5) Bundle retention and LTV

LTV ≈ Σ (Retention_t × ARPU_t × discount).
Elasticity: D7 increase by X pp → LTV increase by Y% (from historical data/models).
Prioritization: Improvements affecting early retention (D1-D7) are almost always the most profitable.

6) Retention segmentation

Onboarding cohorts: first content/play category/behavioural pattern on day 0.
Geo/platform/channel: UX and expectations differences; adjust for calendar/holidays.
Behavior/value: RFM (Recency-Frequency-Monetary), outflow risk, profitability.
Response to incentives: segments on uplift-reaction to offers/notifications.

7) Causality and experiments

A/B: onboarding, tutorials, push strategies; main metric - D7/D14/D30 retention, guardrails - complaints, response time, RG.
Quasi-experiments: DiD/synthetic control when randomization is not possible (e.g. regional kickouts).
Uplift models: target return gains, not activity probabilities; evaluate Qini/AUUC.

8) Re-activation: triggers and policy

Signals: frequency drop, no deposits N days, abnormally low check, completed onboarding without 2nd session.

Decision table (example)

ConditionContextActionCooldownGuardrails
`risk_churn ≥ 0. 8` & `value_q ≥ 0. 8`VIPpersonal offer L7dROMI≥0
`no_session ≥ 7д` & `no_deposit ≥ 14д`mass segment. push + e-mail "back to..."5dzhaloby≤Kh
`RG_risk ≥ τ`anyrouse/council RG1dFPR≤1%

Hysteresis: different input/output thresholds for signals so as not to "blink."

Channels: in-app, push, e-mail, SMS, call center - with rate-limit and priorities.

9) Retention metrics

D1/D7/D30 (Rolling/Exact), WAU/MAU, Stickiness (DAU/MAU).
Survival median/quantiles; hazard at intervals.
Reactivation rate (R30), Dormancy share.
ROMI re-activation, NNT (how many contacts per 1 return).
Fairness: metric differences by country/platform; Exclude invalid characteristics from policies.

10) Retention dashboards

Cohort heat map + trend lines D1/D7/D30.
Survival/hazard graphs by segment.
Early life funnel: install→reg→KYC→1 igra→1 th deposit.
Action map: signal→resheniye→kanal→iskhod (conversion to return).
Guardrails: freshness of data, coverage of events, complaints, RG indicators.

11) Data and quality

Events: canonical scheme (UTC, versions), idempotency, deadup.
Identities: user/device/e-mail/phone - bridges and gold entry.
Windows and TZ: storing in UTC + local views; single calendar of holidays.
Filters: bots/QA/fraud - exclude from the cohort and activities.
Versioning metrics: 'RET _ D7 _ vN' with changelog.

12) Pseudo-SQL/python recipes

Rolling D30 by cohort

sql
WITH base AS (
SELECT user_id, DATE_TRUNC('day', MIN(ts)) AS cohort_day
FROM event_register GROUP BY 1
),
act AS (
SELECT user_id, DATE_TRUNC('day', ts) AS d
FROM event_activity
),
roll30 AS (
SELECT b. cohort_day,
COUNT(DISTINCT b. user_id)                              AS cohort_size,
COUNT(DISTINCT CASE WHEN a. d BETWEEN b. cohort_day AND b. cohort_day + INTERVAL '30 day'
THEN b. user_id END)                      AS any_1_30
FROM base b LEFT JOIN act a ON a. user_id = b. user_id
GROUP BY 1
)
SELECT cohort_day, any_1_30::decimal/cohort_size AS rolling_d30
FROM roll30;

Kaplan-Meier (sketch)

python t_i - time to outflow or censorship; e_i - event indicator
S(t) = Π_{t_i ≤ t} (1 - d_i / n_i)

Discrete-hazard (log by day)

python
For each user, create records before the event/censorship by day:
target = 1 if there was an outflow on that day; characteristics: calendar, activity, promo, etc.
Training logistic regression/GBM; forecast p_t - probability of outflow on day t.

13) Uplift-targeting retention

Zones: Persuadables (will return if we contact), Sure things (will return and so), Lost causes, Do-not-disturb (contact harms).
Metrics: uplift @ k, Qini/AUUC; politics - we contact the top k by uplift for the budget.
Guardrails: cap on contact frequency, RG/ethics, explainability of cause of contact.

14) Operational operation

SLO: retention board update ≤ 06:00 lock.; latency of risk scoring ≤ 300 ms; Decision→Action ≤ 5 с.

Monitoring: shifts of curves by segments, PSI of feature drift, "event break."

Runibooks: D1 drop (onboarding/release), D7 drop (content/frequency), local communication channel failures.

15) Frequent errors

Mixing of units (sessii↔polzovateli), TZ, activity windows.
Comparison of Rolling and Exact indicators as equals.
Ignoring bots/fraud → inflated D1/D7.
Conclusions on correlation without causal validation.
No hysteresis/cooldowns → contact fatigue.
There is no link with LTV - we optimize CR, but not value.

16) Pre-Release Retention Loop Checklist

  • Metrics passport (activity trigger, window, TZ, version)
  • Cohort reports and survival/hazard by segment
  • Outflow and uplift risk models, kapas and guardrails channels
  • Plan A/B and/or quasi-experiments for interventions
  • Freshness/coverage/complaints/RG dashboards
  • Incident Runybooks, Hysteresis and Rate-Limits in Policy
  • Bundle retention with LTV and ROMI; prioritization by expected value

Total

Retention analysis is not only a "heat map of cohorts," but a managed system: correct definitions, survival/hazard models, association with value, targeted and ethical interventions, rigorous effect assessment, and operational guardrails. You build a "watch → understand → decide → act → learn" cycle that steadily increases LTV and reduces outflow.

Contact

Get in Touch

Reach out with any questions or support needs.We are always ready to help!

Telegram
@Gamble_GC
Start Integration

Email is required. Telegram or WhatsApp — optional.

Your Name optional
Email optional
Subject optional
Message optional
Telegram optional
@
If you include Telegram — we will reply there as well, in addition to Email.
WhatsApp optional
Format: +country code and number (e.g., +380XXXXXXXXX).

By clicking this button, you agree to data processing.