AI · 6 мин чтения

Классификация лидов нейросетью: как сделать систему сортировки заявок

Классификация лидов нейросетью - задача, с которой я работаю у клиентов на Tilda и WooCommerce почти каждый месяц. Заявки приходят из форм на сайте, из мессенджеров, с рекламных лендингов и через парсеры объявлений, а менеджер тратит по 3-5 минут на каждую, чтобы понять - целевой это клиент, спам или человек, которому просто интересно, но денег на проект нет. Модель классификации снимает эту рутину и сортирует заявки по приоритету раньше, чем их откроет человек. Ниже - как я собираю такие модели на практике: от разметки данных до интеграции с CRM и Telegram.

Зачем автоматическая сортировка заявок нужна отделу продаж

На одном из проектов на WooCommerce поток заявок доходил до 40-60 в день - часть из корзины, часть с формы обратной связи, часть из чата на сайте. Отдел продаж из двух человек физически не успевал звонить всем в течение часа, а именно первый час решает, ответит лид или уйдёт к конкуренту. После внедрения классификатора, который делил заявки на три категории - «горячая», «тёплая», «мусор» - менеджеры начали обзванивать горячие в первую очередь, и конверсия в звонок выросла с 61% до 84% за три недели.

Похожая история с формами на Tilda: без разметки в CRM попадает всё подряд, включая ботов и случайные клики по кнопке «оставить заявку». Ручная фильтрация отнимает время у менеджера, а скоринг заявок нейросетью делает это за секунды и сразу проставляет тег в CRM.

Какие данные нужны для обучения модели классификации лидов

Модель обучается на истории заявок, которые уже кто-то разметил вручную. Без этого этапа не обойтись - я обычно прошу клиента выгрузить 300-500 закрытых сделок из CRM с итоговым статусом: сделка, отказ, спам. Чем больше примеров каждого класса, тем стабильнее модель.

Для текстовой классификации по содержанию заявки использую такие поля:

Поле Источник Зачем нужно
Текст заявки форма на сайте, чат основной признак для NLP-модели
Источник трафика UTM-метки, реферер спам чаще идёт с определённых каналов
Время заполнения формы JS-событие на Tilda/WP боты заполняют за 1-2 секунды
Бюджет или поле «сумма» форма, CRM отсекает нецелевые заявки
История переписки Telegram/WhatsApp бот дополнительный контекст для скоринга

Если данных из CRM меньше сотни, я не трачу время на обучение отдельной модели - быстрее и дешевле собрать классификацию через промпт к LLM, о чём ниже.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Промпт к LLM или классическая ML-модель: что выбрать для сортировки лидов

Тут два рабочих подхода, и я выбираю между ними в зависимости от объёма данных и бюджета проекта.

Критерий Промпт к LLM (Claude/GPT) Классическая ML-модель (CatBoost/sklearn)
Нужна разметка нет, промпт с примерами да, от 300 размеченных заявок
Скорость запуска 1-2 дня 1-3 недели
Стоимость на 1000 заявок зависит от токенов, обычно недорого почти бесплатно после обучения
Точность на нетипичных заявках выше, учитывает контекст ниже без переобучения
Отдельный сервер под инференс не нужен, вызов API нужен

Для проектов, где заявок меньше тысячи в месяц, промпт к нейросети почти всегда выгоднее - не приходится размечать датасет и переобучать модель при каждом изменении формы. Для потока в 5000+ заявок в месяц классическая модель окупается за пару месяцев за счёт более низкой стоимости инференса.

Пошаговая реализация классификатора лидов - от разметки до прототипа

Схема работы одинаковая для обоих подходов: собираю датасет, пишу промпт-классификатор либо обучаю модель, тестирую на отложенной выборке заявок, разворачиваю как отдельный сервис.

Пример классификации через промпт к Claude:

import anthropic

client = anthropic.Anthropic(api_key="sk-ant-...")

CATEGORIES = ["целевая", "холодная", "спам"]

def classify_lead(text: str) -> str:
    prompt = (
        "Классифицируй заявку по категориям: целевая, холодная, спам.n"
        f"Текст заявки: {text}n"
        "Ответь одним словом из списка категорий."
    )
    resp = client.messages.create(
        model="claude-sonnet-5",
        max_tokens=10,
        messages=[{"role": "user", "content": prompt}],
    )
    result = resp.content[0].text.strip().lower()
    return result if result in CATEGORIES else "холодная"

Важный момент - фолбэк на «холодная», если модель вернула что-то за пределами списка категорий. Без такой страховки скрипт периодически падает на продакшене из-за неожиданного ответа модели.

Если данных достаточно и хочется не зависеть от внешнего API, обучаю классическую модель на TF-IDF:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import LogisticRegression
from sklearn.pipeline import Pipeline

model = Pipeline([
    ("tfidf", TfidfVectorizer(max_features=3000, ngram_range=(1, 2))),
    ("clf", LogisticRegression(max_iter=1000, class_weight="balanced")),
])

model.fit(train_texts, train_labels)
model.predict(["Здравствуйте, хочу заказать сайт, бюджет 150 тысяч"])

Параметр class_weight=“balanced” нужен почти всегда - в сыром датасете спама и холодных заявок обычно в 3-4 раза больше, чем целевых, и без балансировки модель просто научится всё подряд относить к большинству.

Как встроить классификатор в воронку - n8n, CRM и Telegram

Модель без интеграции - просто скрипт в консоли, поэтому сразу заворачиваю её в пайплайн. Рабочая схема, которую я собираю чаще всего:

  • заявка с формы на Tilda или из WooCommerce уходит вебхуком в n8n;
  • нода HTTP Request дёргает сервис классификации - FastAPI-обвязку вокруг модели или промпта;
  • по результату n8n проставляет тег в amoCRM или Bitrix24 и, если лид горячий, шлёт уведомление менеджеру через aiogram-бота в Telegram с текстом заявки и телефоном;
  • холодные и спам-заявки падают в отдельную воронку без звонка, но остаются в базе для ретаргетинга.

На проекте с доставкой через СДЭК похожая логика работала на заявках из формы расчёта стоимости: модель отделяла реальных заказчиков от тех, кто просто проверял тариф, и в CRM попадали только те, кому дальше писал менеджер. На связке с оплатой через T‑Bank для WooCommerce классифицирую ещё и брошенные корзины - по сумме заказа и истории поведения модель предсказывает, кому стоит звонить, а кому достаточно письма со скидкой.

Часть таких пайплайнов у меня уже собрана в виде готовых шаблонов n8n - их можно посмотреть в библиотеке готовых скриптов и адаптировать под свою форму заявки.

Точность модели классификации лидов и работа с ошибками

На старте не жду точности выше 80-85% - это нормально для первой версии модели что на промптах, что на классическом ML. Смотрю в первую очередь на precision по классу «целевая», потому что цена ошибки здесь выше: пропущенный горячий лид дороже, чем лишний звонок по холодному.

Раз в месяц выгружаю заявки, где менеджер вручную поменял метку модели на другую, и добавляю их в обучающую выборку или в примеры промпта - так модель подстраивается под специфику ниши. На одном проекте после трёх итераций такой донастройки точность на классе «целевая» выросла с 78% до 92% за полтора месяца.

Если поток заявок небольшой, вместо полного переобучения расширяю few-shot примеры в промпте - это быстрее и не требует деплоя новой версии сервиса.

Искусственный интеллект для бизнеса

AI / Claude API

от 50 000 ₽

Подробнее →

Частые вопросы

Сколько заявок нужно, чтобы обучить модель классификации лидов?

Для классической ML-модели нужно от 300 размеченных заявок на класс, лучше 500+, иначе модель переобучается на нескольких повторяющихся формулировках. Для варианта с промптом к нейросети достаточно 15-30 примеров на класс - они идут прямо в промпт как few-shot, отдельного обучения не требуется.

Можно ли обойтись без нейросети и настроить фильтрацию правилами?

Для отсечения явного спама - да, простые правила по времени заполнения формы, наличию ссылок в тексте и повторным IP работают неплохо. Но разделить «целевую» и «холодную» заявку по смыслу текста правилами почти невозможно: формулировки слишком разные. На практике комбинирую оба подхода - правила отсекают спам на входе, модель классифицирует оставшееся по содержанию.

Сколько стоит внедрение классификации лидов под ключ?

AI-интеграция с промпт-классификацией и подключением к CRM у меня стоит от 50 000 ₽, автоматизация пайплайна на n8n без модели - от 25 000 ₽, парсинг и обвязка на Python - от 20 000 ₽. Если нужно сначала оценить именно вашу воронку и объём заявок, консультация обойдётся от 3 000 ₽.

Как быстро окупается такая система?

На проектах, где я это считал, время менеджера на разбор заявок сокращалось на 60-70% в первую же неделю - просто за счёт того, что не приходится вручную сортировать мусор. Рост конверсии в звонок с 61% до 84%, о котором я писал выше, окупил стоимость внедрения за первый месяц работы отдела продаж.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Самозанятый Калинкин Н. А. · работаю с физлицами и юрлицами

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно