← Назад к вопросам

Что такое A/A тест и зачем его проводить?

2.3 Middle🔥 171 комментариев
#A/B тестирование#Статистика и математика

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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 это не волшебство, а система, которая улучшается с данными и временем.