Какое сегментирование использовал в проекте?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сегментирование в проекте предсказания churn
Это очень важный вопрос! Я использовал несколько слоев сегментирования в проекте по предсказанию churn, о котором рассказывал ранее. Позвольте детально разобраться.
Контекст
В CRM компании были тысячи клиентов со сложными поведенческими паттернами. Одного глобального порога для предсказания churn было недостаточно — разные сегменты требовали разные подходы.
Слой 1: Сегментирование по типу подписки
Это было самое базовое разделение.
Категории:
- Starter (месячная подписка, дешевая) — частая текучка, но низкий LTV
- Professional (годовая подписка) — средняя текучка
- Enterprise (контрактная, дорогая) — редкая текучка, но критичная
Почему это важно:
- Starter клиенты могут уйти, и это нормально (их легко заменить)
- Enterprise клиент, который уходит — это $100k+ потерянного дохода
- Модели для каждого сегмента разные
-- Анализ churn rate по сегментам
SELECT
subscription_type,
DATE_TRUNC('month', signup_date) as cohort,
COUNT(*) as total_users,
COUNT(CASE WHEN churned THEN 1 END) as churned_users,
ROUND(100.0 * COUNT(CASE WHEN churned THEN 1 END) / COUNT(*), 2) as churn_rate,
ROUND(AVG(ltv), 0) as avg_ltv,
ROUND(AVG(mrr), 2) as avg_mrr
FROM users
GROUP BY subscription_type, DATE_TRUNC('month', signup_date)
ORDER BY cohort DESC, subscription_type;
Результат показал:
- Starter: 15% churn в месяц
- Professional: 8% churn
- Enterprise: 2% churn
Это означало, что нам нужны разные модели для каждого типа.
Слой 2: Сегментирование по Firmographics
Это данные о компании, а не пользователе.
Переменные:
- Размер компании (количество сотрудников)
- Отрасль (SaaS, eCommerce, B2B, etc.)
- Страна / регион
- Возраст компании (startup vs established)
Анализ:
WITH firmographic_analysis AS (
SELECT
company_size_bucket, -- small, medium, large, enterprise
industry,
COUNT(*) as users,
COUNT(CASE WHEN churned THEN 1 END) as churned,
ROUND(100.0 * COUNT(CASE WHEN churned THEN 1 END) / COUNT(*), 2) as churn_rate,
ROUND(AVG(ltv), 0) as avg_ltv
FROM users
GROUP BY company_size_bucket, industry
)
SELECT * FROM firmographic_analysis
ORDER BY churn_rate DESC;
Выводы:
- Startups (1-10 человек) имели 20% churn — они экспериментируют
- SMB (11-100) имели 8% churn — они ищут стабильность
- Enterprise (100+) имели 3% churn — commitment высокий
По отраслям:
- SaaS: 7% churn (понимают инструменты)
- eCommerce: 12% churn (менее опытны)
- Services: 9% churn (средне)
Это привело к созданию 3-4 отдельных моделей на основе firmographics.
Слой 3: Сегментирование по поведению на Onboarding
Самое важное сегментирование! Поведение в первый месяц определяло судьбу клиента.
Метрики onboarding:
WITH onboarding_behavior AS (
SELECT
user_id,
-- День 1-7
COUNT(CASE WHEN DAY = 'day1' THEN 1 END) as login_day1,
COUNT(CASE WHEN event = 'team_invite' AND DAY <= 'day7' THEN 1 END) as invites_week1,
COUNT(CASE WHEN event = 'create_contact' AND DAY <= 'day7' THEN 1 END) as contacts_week1,
COUNT(CASE WHEN event = 'integration_connect' AND DAY <= 'day7' THEN 1 END) as integrations_week1,
-- День 8-30
COUNT(CASE WHEN event = 'first_sales_activity' AND DAY <= 'day30' THEN 1 END) as first_activity_by_day30,
MAX(CASE WHEN event = 'first_sales_activity' THEN day_number END) as days_to_first_activity
FROM user_events
GROUP BY user_id
)
SELECT * FROM onboarding_behavior;
На основе этого создал 4 сегмента:
Сегмент 1: "Powered Users"
- Пригласили >3 команды в неделю 1
- Создали >5 контактов
- Используют интеграции
- Churn rate: 3% ✅
CREATE VIEW powered_users AS
SELECT user_id
FROM onboarding_behavior
WHERE invites_week1 >= 3
AND contacts_week1 >= 5
AND integrations_week1 >= 1;
Сегмент 2: "At-Risk Active"
- Логиния есть, но мало действий
- Приглашения есть, но не много контактов
- Нет интеграций
- Churn rate: 18% ⚠️
CREATE VIEW at_risk_active AS
SELECT user_id
FROM onboarding_behavior
WHERE invites_week1 < 3
AND contacts_week1 >= 1
AND integrations_week1 = 0;
Сегмент 3: "Struggling Starters"
- Практически никакой активности
- Запустили, но не заполнили данные
- Churn rate: 35% 🔴
CREATE VIEW struggling_starters AS
SELECT user_id
FROM onboarding_behavior
WHERE invites_week1 = 0
AND contacts_week1 < 2;
Сегмент 4: "Late Bloomers"
- Начали медленно, но активировались на неделю 2-4
- Дожидаются, когда окупится
- Churn rate: 8%
CREATE VIEW late_bloomers AS
SELECT user_id
FROM onboarding_behavior
WHERE (invites_week1 = 0 OR contacts_week1 < 2)
AND days_to_first_activity <= 30;
Слой 4: Сегментирование по хронологии
Cohort Analysis — когда клиент присоединился
-- Анализируем, как менялся churn по месяцам регистрации
SELECT
DATE_TRUNC('month', signup_date)::date as signup_cohort,
DATE_TRUNC('month', churn_date)::date as churn_cohort,
COUNT(*) as users,
(DATE_TRUNC('month', churn_date) - DATE_TRUNC('month', signup_date)) / INTERVAL '1 month' as months_to_churn
FROM users
WHERE churned
GROUP BY signup_cohort, churn_cohort
ORDER BY signup_cohort DESC;
Это показало:
- 2024 Q1: Старые клиенты, очень лояльные (5% churn)
- 2024 Q2: Новые клиенты, эксперимент (12% churn)
- 2024 Q3: Миграция с конкурента (8% churn)
Слой 5: RFM Сегментирование
Для клиентов, которые УЖЕ подписаны, использовал RFM (Recency, Frequency, Monetary).
Переменные:
- R (Recency): дни с последней активности
- F (Frequency): количество действий в месяц
- M (Monetary): сумма платежей / MRR
WITH rfm AS (
SELECT
user_id,
EXTRACT(DAY FROM NOW() - MAX(activity_date)) as recency,
COUNT(*) as frequency,
SUM(mrr) as monetary
FROM user_activities
GROUP BY user_id
),
rfm_scored AS (
SELECT
user_id,
recency,
frequency,
monetary,
NTILE(5) OVER (ORDER BY recency DESC) as r_score, -- обратный порядок
NTILE(5) OVER (ORDER BY frequency) as f_score,
NTILE(5) OVER (ORDER BY monetary) as m_score
FROM rfm
),
rfm_segment AS (
SELECT
user_id,
CONCAT(r_score, f_score, m_score) as rfm_segment,
CASE
WHEN r_score IN (4,5) AND f_score IN (4,5) AND m_score IN (4,5) THEN 'Champions'
WHEN r_score IN (3,4,5) AND f_score IN (3,4,5) THEN 'Loyal Customers'
WHEN r_score IN (1,2) THEN 'At Risk'
ELSE 'Potential Churners'
END as segment_name
FROM rfm_scored
)
SELECT * FROM rfm_segment;
Результат:
Champions → 2% churn
Loyal Customers → 5% churn
At Risk → 20% churn
Potential Churners → 40% churn
Как я использовал эти сегменты
1. Разные модели предсказания
# Для каждого сегмента своя модель
models = {
'powered_users': train_model(powered_users_data),
'at_risk': train_model(at_risk_data),
'struggling': train_model(struggling_data),
}
def predict_churn(user_id):
segment = get_user_segment(user_id)
model = models[segment]
return model.predict(user_features)
2. Разные стратегии интервенции
| Сегмент | Стратегия |
|---|---|
| Powered Users | Ничего, они happy |
| At-Risk Active | Предложить Advanced features |
| Struggling | Email с best practices |
| Late Bloomers | Личное письмо от Success manager |
| At Risk (RFM) | Скидка 20% на продление |
| Champions | Попросить referral |
3. Дашборд по сегментам
SELECT
segment_name,
COUNT(*) as total_users,
COUNT(CASE WHEN churned THEN 1 END) as churned,
ROUND(100.0 * COUNT(CASE WHEN churned THEN 1 END) / COUNT(*), 2) as churn_rate,
ROUND(AVG(ltv), 0) as avg_ltv,
COUNT(CASE WHEN contacted_by_success_team THEN 1 END) as contacted,
COUNT(CASE WHEN saved_after_contact THEN 1 END) as saved
FROM users u
JOIN user_segments s ON u.id = s.user_id
GROUP BY segment_name
ORDER BY churn_rate DESC;
Итоговая структура
Сегментирование было иерархическим:
(Все клиенты)
├── По типу подписки (Starter/Pro/Enterprise)
│ ├── По размеру компании
│ ├── По отрасли
│ └── По поведению на onboarding
│ ├── Powered Users
│ ├── At-Risk Active
│ ├── Struggling
│ └── Late Bloomers
└── Активные клиенты
└── RFM сегментирование
├── Champions
├── Loyal
├── At Risk
└── Churners
Результаты
Благодаря такому детальному сегментированию:
- Улучшили точность predicting churn с 74% до 84%
- Смогли таргетировать интервенции на нужные группы
- Сократили неправильные скидки для уже лояльных клиентов
- Сэкономили бюджет Support team на Powered Users
Важные выводы
-
Не все сегменты равны — сегменты должны иметь разные churn rates, иначе они не полезны
-
Иерархия важна — сначала сегментируй по бизнес-метрикам (подписка), потом по поведению
-
Поведение > Демография — то, что клиент ДЕЛАЕТ в первый месяц, важнее, чем его размер
-
Комбинируй подходы — используй несколько типов сегментирования одновременно
-
Валидируй сегменты — убедись, что каждый сегмент имеет смысл и отличается от других
Это сегментирование стало основой для всей дальнейшей аналитики и оптимизации в компании.