Классификация лидов нейросетью - задача, с которой я работаю у клиентов на 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%, о котором я писал выше, окупил стоимость внедрения за первый месяц работы отдела продаж.