Что такое A/A тест и зачем его проводить?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Lead Scoring: система оценки и приоритизации потенциальных клиентов
Lead Scoring это система выставления баллов потенциальным клиентам (лидам) на основе их поведения и характеристик. Это помогает Sales Team сосредоточиться на самых перспективных лидах, повышая вероятность закрытия сделки и сокращая время на холодные контакты.
Зачем нужен Lead Scoring
Проблемы без Lead Scoring:
- Sales звонит всем подряд, даже неквалифицированным лидам
- Тратит время на лидов, которые не готовы покупать
- Пропускает горячих лидов из-за нехватки времени
- Нет приоритизации
Решения Lead Scoring:
- Определить готовых лидов (MQL → SQL)
- Приоритизировать для Sales
- Повысить conversion rate
- Сократить cycle time
Два типа Lead Scoring
1. Demographic Score (кто он)
Основано на характеристиках компании лида:
- Размер компании
- Индустрия
- География
- Бюджет (если знаем)
- Техстек
2. Behavioral Score (что он делает)
Основано на действиях лида:
- Визиты на сайт
- Загрузки документов
- Клики по email
- Участие в вебинарах
- Использование free trial
Как построить Lead Scoring
Метод 1: Простая система баллов (RFM для B2B)
import pandas as pd
# Данные о лидах
leads = pd.DataFrame({
'lead_id': [1, 2, 3, 4, 5],
'company_size': [50, 500, 5000, 100, 2000], # сотрудников
'industry': ['Tech', 'Finance', 'Tech', 'Retail', 'Tech'],
'last_activity_days_ago': [2, 15, 45, 3, 60],
'email_opens': [5, 2, 0, 8, 1],
'website_visits': [10, 3, 1, 15, 2],
'demo_requested': [1, 0, 0, 1, 0]
})
# Demographic Scoring
def demographic_score(row):
score = 0
# Размер компании: 100-1000 сотрудников идеален
if 100 <= row['company_size'] <= 1000:
score += 20
elif 1000 < row['company_size'] <= 5000:
score += 15
elif row['company_size'] > 5000:
score += 10
else:
score += 5
# Индустрия
if row['industry'] == 'Tech':
score += 25
elif row['industry'] == 'Finance':
score += 20
else:
score += 10
return score
# Behavioral Scoring
def behavioral_score(row):
score = 0
# Недавность
if row['last_activity_days_ago'] <= 7:
score += 30
elif row['last_activity_days_ago'] <= 14:
score += 20
elif row['last_activity_days_ago'] <= 30:
score += 10
# Email opens
score += min(row['email_opens'] * 3, 20)
# Website visits
score += min(row['website_visits'] * 2, 20)
# Demo request (горячий сигнал)
score += row['demo_requested'] * 25
return score
leads['demographic_score'] = leads.apply(demographic_score, axis=1)
leads['behavioral_score'] = leads.apply(behavioral_score, axis=1)
leads['total_score'] = leads['demographic_score'] + leads['behavioral_score']
leads['lead_grade'] = pd.cut(leads['total_score'],
bins=[0, 30, 50, 70, 100],
labels=['D', 'C', 'B', 'A'])
print(leads[['lead_id', 'demographic_score', 'behavioral_score', 'total_score', 'lead_grade']])
# Результат:
# Lead 1 (Tech, 50 сотр): 15 + 30 = 45 (Grade B)
# Lead 2 (Finance, 500): 45 + 5 = 50 (Grade B)
# Lead 3 (Tech, 5000): 25 + 0 = 25 (Grade D)
# Lead 4 (Retail, 100): 15 + 40 = 55 (Grade B)
# Lead 5 (Tech, 2000): 10 + 0 = 10 (Grade D)
Метод 2: Machine Learning (более продвинутый)
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
import numpy as np
# Исторические данные о лидах
# Что случилось: конвертировалась в customer (1) или нет (0)
historical_data = pd.DataFrame({
'company_size': [50, 500, 5000, 100, 2000, 1500, 300, 4000],
'industry_encoded': [1, 0, 1, 2, 1, 0, 1, 2], # Tech=1, Finance=0, Other=2
'days_since_activity': [2, 15, 45, 3, 60, 10, 5, 30],
'email_opens': [5, 2, 0, 8, 1, 3, 7, 0],
'website_visits': [10, 3, 1, 15, 2, 8, 12, 1],
'demo_requested': [1, 0, 0, 1, 0, 1, 1, 0],
'converted': [1, 0, 0, 1, 0, 1, 1, 0] # Target variable
})
# Train model
X = historical_data.drop('converted', axis=1)
y = historical_data['converted']
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X, y)
# Feature importance
feature_importance = pd.DataFrame({
'feature': X.columns,
'importance': model.feature_importances_
}).sort_values('importance', ascending=False)
print(feature_importance)
# Результат показывает, какие факторы больше всего влияют на конверсию
# Новые лиды
new_leads = pd.DataFrame({
'company_size': [200, 600, 3000],
'industry_encoded': [1, 0, 1],
'days_since_activity': [3, 20, 50],
'email_opens': [6, 1, 0],
'website_visits': [12, 2, 1],
'demo_requested': [1, 0, 0]
})
# Predict probability of conversion
predicted_probs = model.predict_proba(new_leads)[:, 1]
new_leads['conversion_probability'] = predicted_probs * 100
print(new_leads[['conversion_probability']])
SQL примеры для Lead Scoring
Пример 1: Комплексный скоринг в SQL
WITH lead_demographics AS (
SELECT
lead_id,
company_name,
company_size,
industry,
CASE
WHEN company_size BETWEEN 100 AND 1000 THEN 20
WHEN company_size BETWEEN 1001 AND 5000 THEN 15
WHEN company_size > 5000 THEN 10
ELSE 5
END as size_score,
CASE
WHEN industry = 'Tech' THEN 25
WHEN industry = 'Finance' THEN 20
ELSE 10
END as industry_score
FROM companies
),
lead_behavior AS (
SELECT
lead_id,
COUNT(*) as total_activities,
COUNT(CASE WHEN activity_type = 'email_open' THEN 1 END) as email_opens,
COUNT(CASE WHEN activity_type = 'website_visit' THEN 1 END) as visits,
COUNT(CASE WHEN activity_type = 'demo_request' THEN 1 END) as demos,
MAX(created_at)::DATE as last_activity_date,
(NOW()::DATE - MAX(created_at)::DATE) as days_since_activity
FROM lead_activities
WHERE created_at >= NOW() - INTERVAL '90 days'
GROUP BY lead_id
),
behavior_scoring AS (
SELECT
lead_id,
CASE
WHEN days_since_activity <= 7 THEN 30
WHEN days_since_activity <= 14 THEN 20
WHEN days_since_activity <= 30 THEN 10
ELSE 0
END as recency_score,
LEAST(email_opens * 3, 20) as email_score,
LEAST(visits * 2, 20) as visit_score,
demos * 25 as demo_score
FROM lead_behavior
)
SELECT
ld.lead_id,
ld.company_name,
ld.company_size,
ld.industry,
ld.size_score + ld.industry_score as demographic_score,
COALESCE(bs.recency_score, 0) +
COALESCE(bs.email_score, 0) +
COALESCE(bs.visit_score, 0) +
COALESCE(bs.demo_score, 0) as behavioral_score,
ld.size_score + ld.industry_score +
COALESCE(bs.recency_score, 0) +
COALESCE(bs.email_score, 0) +
COALESCE(bs.visit_score, 0) +
COALESCE(bs.demo_score, 0) as total_score,
CASE
WHEN (ld.size_score + ld.industry_score +
COALESCE(bs.recency_score, 0) +
COALESCE(bs.email_score, 0) +
COALESCE(bs.visit_score, 0) +
COALESCE(bs.demo_score, 0)) >= 70 THEN 'A'
WHEN (ld.size_score + ld.industry_score +
COALESCE(bs.recency_score, 0) +
COALESCE(bs.email_score, 0) +
COALESCE(bs.visit_score, 0) +
COALESCE(bs.demo_score, 0)) >= 50 THEN 'B'
WHEN (ld.size_score + ld.industry_score +
COALESCE(bs.recency_score, 0) +
COALESCE(bs.email_score, 0) +
COALESCE(bs.visit_score, 0) +
COALESCE(bs.demo_score, 0)) >= 30 THEN 'C'
ELSE 'D'
END as lead_grade
FROM lead_demographics ld
LEFT JOIN behavior_scoring bs ON ld.lead_id = bs.lead_id
ORDER BY total_score DESC;
Как использовать Lead Score для действий
Grade A (90+ баллов):
- Немедленно отправить Sales
- Персональный холодный звонок
- VIP обработка
Grade B (70-90):
- Nurture email кампания
- Предложить консультацию
- Отправить в Sales через неделю
Grade C (50-70):
- Автоматическая email последовательность
- Предложить whitepaper
- Переоценить через месяц
Grade D (<50):
- В листе ожидания
- Общие email кампании
- Переоценить через квартал
Validation и Optimization
# Проверка модели
from sklearn.metrics import confusion_matrix, classification_report
# Используем threshold для определения готовности
threshold = 0.5
predicted_labels = (predicted_probs >= threshold).astype(int)
print(classification_report(y_test, predicted_labels))
# Найти оптимальный threshold
from sklearn.metrics import roc_curve, auc
fpr, tpr, thresholds = roc_curve(y_test, predicted_probs)
roc_auc = auc(fpr, tpr)
print(f"ROC AUC: {roc_auc:.3f}")
# Оптимальный threshold
optimal_threshold = thresholds[np.argmax(tpr - fpr)]
print(f"Optimal threshold: {optimal_threshold:.3f}")
Метрики для оценки Lead Score
-- Какой % Grade A лидов конвертируется
SELECT
lead_grade,
COUNT(*) as leads,
SUM(CASE WHEN converted THEN 1 ELSE 0 END) as converted,
ROUND(
SUM(CASE WHEN converted THEN 1 ELSE 0 END) * 100.0 / COUNT(*),
2
) as conversion_rate
FROM leads
GROUP BY lead_grade
ORDER BY lead_grade;
Результат:
- Grade A: 45% (отличный)
- Grade B: 25% (хороший)
- Grade C: 8% (низкий)
- Grade D: 2% (плохо)
Вывод: система работает, A грейды действительно лучше.
Чек-лист для Lead Scoring
- Определены признаки, коррелирующие с конверсией
- Собраны исторические данные о лидах и конверсиях
- Определены пороги для каждого грейда
- Система тестирована на исторических данных
- Интегрирована с CRM
- Sales обучена использовать грейды
- Отслеживается accuracy скоринга
- Модель обновляется каждый квартал
Lead Scoring это не волшебство, а система, которая улучшается с данными и временем.