Как посчитать App Uninstall Rate в SQL

Закрепи формулу app uninstall rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать app uninstall rate в Telegram

Зачем App Uninstall Rate

Uninstall = customer удалил app. Strong negative signal. Mobile games: 60-70% uninstall в первую неделю — норма. SaaS apps: 20-30%. High uninstall = bad UX / wrong audience.

Формула

Uninstall Rate D7 = users_uninstalled_within_7_days / users_installed × 100%

Базовый расчёт

WITH installs AS (
    SELECT user_id, installed_at
    FROM app_installs
    WHERE installed_at BETWEEN CURRENT_DATE - INTERVAL '37 days' AND CURRENT_DATE - INTERVAL '7 days'
),
uninstalls AS (
    SELECT DISTINCT user_id, MIN(uninstall_time) AS uninstalled_at
    FROM app_uninstalls
    GROUP BY user_id
)
SELECT
    COUNT(i.user_id) AS installs,
    COUNT(u.user_id) AS uninstalls_30d,
    COUNT(u.user_id)::NUMERIC * 100 / NULLIF(COUNT(i.user_id), 0) AS uninstall_30d_pct
FROM installs i
LEFT JOIN uninstalls u ON u.user_id = i.user_id
  AND u.uninstalled_at <= i.installed_at + INTERVAL '30 days';

D1 / D7 / D30

WITH cohort AS (
    SELECT user_id, installed_at
    FROM app_installs
    WHERE installed_at >= CURRENT_DATE - INTERVAL '60 days'
      AND installed_at < CURRENT_DATE - INTERVAL '30 days'
),
uninstalls AS (
    SELECT user_id, MIN(uninstall_time) AS uninstalled_at
    FROM app_uninstalls
    GROUP BY user_id
)
SELECT
    COUNT(c.user_id) AS installs,
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '1 day') AS uninstall_d1,
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '7 days') AS uninstall_d7,
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '30 days') AS uninstall_d30,
    -- Percentages
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '1 day')::NUMERIC * 100 / COUNT(c.user_id) AS d1_pct,
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '7 days')::NUMERIC * 100 / COUNT(c.user_id) AS d7_pct,
    COUNT(u.user_id) FILTER (WHERE u.uninstalled_at <= c.installed_at + INTERVAL '30 days')::NUMERIC * 100 / COUNT(c.user_id) AS d30_pct
FROM cohort c
LEFT JOIN uninstalls u USING (user_id);
Закрепи формулу app uninstall rate в Карьернике
Запомнить надолго — 5 коротких сессий с задачами на эту тему. Бесплатно
Тренировать app uninstall rate в Telegram

По acquisition source

SELECT
    i.acquisition_source,
    COUNT(*) AS installs,
    COUNT(u.user_id) AS uninstalls,
    COUNT(u.user_id)::NUMERIC * 100 / COUNT(*) AS uninstall_pct,
    AVG(EXTRACT(EPOCH FROM (u.uninstalled_at - i.installed_at)) / 86400) FILTER (WHERE u.uninstalled_at IS NOT NULL) AS avg_days_to_uninstall
FROM app_installs i
LEFT JOIN app_uninstalls u USING (user_id)
WHERE i.installed_at >= CURRENT_DATE - INTERVAL '90 days'
  AND i.installed_at < CURRENT_DATE - INTERVAL '30 days'
GROUP BY i.acquisition_source
ORDER BY uninstall_pct DESC;

Discount-driven sources обычно высокий uninstall.

По активности перед uninstall

SELECT
    sessions_before_uninstall AS sessions,
    COUNT(*) AS users
FROM (
    SELECT
        u.user_id,
        COUNT(s.session_id) AS sessions_before_uninstall
    FROM app_uninstalls u
    LEFT JOIN app_sessions s ON s.user_id = u.user_id
      AND s.session_time < u.uninstalled_at
    WHERE u.uninstalled_at >= CURRENT_DATE - INTERVAL '30 days'
    GROUP BY u.user_id
) t
GROUP BY sessions_before_uninstall
ORDER BY sessions_before_uninstall;

Many users uninstall after 0-1 sessions — first impression critical.

Частые ошибки

Ошибка 1. iOS uninstall не detectable. iOS doesn't directly report uninstall. Use «no sessions for N days» as proxy.

Ошибка 2. Reinstall same user. Same user reinstalls → reset counter or continue cohort.

Ошибка 3. Direct vs indirect uninstall. Phone wiped vs deliberate uninstall — same signal, different intent.

Ошибка 4. Different platforms compare. iOS uninstall < Android usually (premium audience).

Ошибка 5. Window too short. D1 uninstall — onboarding issue. D30 — engagement issue. Window matters.

Связанные темы

FAQ

Какой Uninstall Rate ok?

Games D1: 50-60%. SaaS D1: 30-40%. D30 games: 80%+. D30 SaaS: 50-60%.

iOS uninstall track?

Native API не reports. Use «inactive > X days» as proxy.

D1 uninstall high — что значит?

Bad first impression. Crash, no value, bad UX.

Uninstall vs Churn?

Uninstall — explicit delete. Churn — broader (inactive).

Reinstall handling?

Count cohort by first install. Reinstalls = new event, не reset.