Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
В середине 2020 года в СИБУРе запустился проект, направленный на автоматизацию процесса лидогенерации (поиска потенциальных клиентов). Вызов состоял в том, что в B2B, а особенно промышленности и производстве продуктов не массового потребления, большая часть методов и «цифровых» инструментов B2C не работает.
О том, как этот проект запускался и как он работает, мы сейчас и расскажем.
Задачи
Для начала мы пошли изучать опыт лидеров отрасли в B2B и промышленности.
Обычно лидогенерация позволяет решить целый ряд задач для бизнеса, таких как: поиск клиентов под запуск новых мощностей или под расширение присутствия на новых рынках, увеличение качества знания рынка, а также снижение оттока клиентов.
В процессе выделили для себя общие метрики, например, количество сгенерированных лидов, уровень их конверсии в квалифицированные лиды и конечные сделки, количество заключенных сделок, затраченное время и трудозатраты на проработку этих лидов.
MVP мы сделали на рынках термоэластопластов и каучуков. С термоэластопластами у нас были новые мощности и потребность в поиске клиентов на новых рынках сбыта. С каучуками же стояли вызовы — они составляют достаточно большую долю экспорта, и нужно было переводить их на более маржинальные рынки. При этом параллельно появилось множество ad hoc-запросов: свои коррективы в первоначальный план внесла пандемия.
Традиционные для нас рынки закрывались, и коллеги приходили с запросом на срочный поиск потенциальных клиентов других рынков. Потребность в клиентах особенно усилилась в летние месяцы, когда было непонятно, как дальше будет развиваться ситуация — останутся ли европейские рынки закрыты, будут ли проблемы с логистикой. Поэтому искали запасные варианты на азиатских рынках, которые для ряда наших продуктов не были традиционными.
Как работает сервис
Итак, что у нас есть.
Данные о компаниях, найденные в открытых источниках или закупленные из внешних баз данных:
название компании,
ее текстовое описание,
базовые финансовые характеристики,
международные классификаторы.
Задача:
Определить, какие компании, будут заинтересованы в покупке продукта X.
Решение:
Тут, вроде, всё ясно – это стандартная задача классификации.
Берем данные текущих клиентов СИБУРа, потребляющих продукт, ставим им единичку в качестве таргета.
Берем подвыборку из всех остальных клиентов, отмечаем их ноликами (да, среди них теоретически может оказаться какое-то количество компаний, потребляющих продукт X, но этим маленьким процентом можно пренебречь).
Генерим фичи на основе данных компаний, описаний и прочего.
Запускаем модельку.
Наслаждаемся финансовыми эффектами.
Всё бы выглядело примерно так, будь это задачка с Kaggle, а не реальная жизнь. Жизнь же такова, что продуктов продуктов у Сибура много и все они отличаются. Вот что это значит:
клиентская база сильно размыта,
подход должен работать в том числе для новых продуктов,
известные СИБУРу клиенты во внешних базах представлены слабо (в силу региональной специфики известные компании в основном сосредоточены в СНГ, а этот географический регион традиционно плохо представлен в неспециализированных базах),
те компании, что представлены, могут писаться отлично от того, как они записаны в базе СИБУРа (про, то как мы с этим боремся, расскажем в пункте «Неточное сравнение имен компаний»).
А ещё десятки других проблем.
Лидогенерация в B2B: как СИБУР ищет новых клиентов с помощью Big DataОставить до более светлых времен мечты о прекрасном мире, где все проблемы решены моделькой. Это сработает, когда данных станет побольше, и они будут лучше пересекаться с имеющимися источниками, а пока нам нужно искать какой-то другой подход.
Решили отталкиваться от знания предметной области маркетологом. Предоставить ему инструмент, ищущий в источниках данных компании, соответствующие заданной специализации. Если проще — чтобы найти тех, кому будет интересна, например, резина, нужно найти тех, кто производит уточек для ванны или резиновые шланги. Специализации компаний мы будем далее называть сегментами (например, конвейерные ленты, пластиковые крышки…). Мы относим компании к тому или иному сегменту на основе кодов компании в международных классификаторах, наличия в описании ключевых фраз, информации об отгрузках товаров.
А ещё маркетолог может указать, в каких регионах требуется искать клиентов, какие из комбинаций сегментов и регионов для нас более приоритетны, а какие — менее.
Техническая сторона
Сервис лидогенерации связывает несколько систем (озеро данных, CRM).
Мы уже рассказывали о том, что в СИБУРе есть озеро данных — набор разных баз данных и источников, которые мы используем, в том числе таможенная статистика. Когда мы знаем, что через таможню провозят продукт-аналог СИБУРа, мы понимаем, что грузополучатели и есть наши потенциальные клиенты. Из отраслевых баз — SPARK и похожие на него базы в других странах, где есть классификации компаний по сегментам их производства и описания, которые для нас являются ключевыми, по которым мы и производим основной поиск.
Далее происходит предобработка всех этих данных. Данные отчищаются от заведомо нереалистичных значений, дедублицируются, обогащаются дополнительными признаками.
Следующим этапом идет фильтрация на основе обогащенной информации: выделенных сегментов, заданных маркетологом приоритетов, наличия компании в заданных списках.
Таким образом мы сокращаем миллионы компаний из источника до нескольких сотен, после чего данные о компаниях обогащаются контактной информацией и дополнительным описанием и отправляются в CRM. В итоге сейлз-менеджер получает карточку лида и может ее прорабатывать: вести дальше по воронке продаж вплоть до сделки.
Для реализации этого подхода нам пришлось решить большое количество технических задач. Вот самые любопытные.
Неточное сравнение имен компаний
Первая проблема, с которой мы столкнулись – нам нужно было научиться по написанию компаний определять, какие из них принадлежат одной организации, что позволило бы серьезно экономить время. Например, мы нашли лидов в нужных нам сегментах. Но у нас также есть уже предобработанные списки потенциальных клиентов, данные о текущих клиентах в CRM, информация о конкурентах и их дочерних компаниях, списки компаний, полученные в ходе исследования рынков, о которых уже известно, что они потребляют продукты конкурентов.
Если не очищать списки лидов от известных компаний, то не только менеджеры проделают лишнюю работу, но и получится некрасивая с точки зрения репутации история, когда мы звоним нашему текущему клиенту, как новому, создавая ложное ощущение бардака в компании.
Если работать с российскими источниками данных, то все довольно просто — мы знаем ИНН и КПП. Но мы также работаем с большим количеством зарубежных баз, а также с источниками, которые не особо структурированы и регламентированы. Например, стажеры сидели и собирали информацию с различных маркетплейсов, и естественно, никаких КПП и ИНН. В таких случаях требуется определять соответствие компаний только на основе написания названий.
Задача нетривиальная по нескольким причинам:
Это квадратичная от размера источников задача. Так типична ситуация, когда мы пытаемся сопоставить источник, размером ~1 500 000 компаний и внутренний список размером ~20 000. В этом случае нам понадобится провести порядка 30 млрд сравнений. Чтобы провести эту операцию за приемлемое время, мы применяем цепочку последовательных алгоритмов, где сначала идут менее точные, но зато более быстрые алгоритмы: хэширование триграмм, бизнес-логика, а потом более интересные, но и вычислительно затратные: расчет метрик над строками, бустинг. А чтобы уложиться в память, мы распараллеливаем все это при помощи pyspark (ну и ускоряемся за счет этого тоже).
Часто списки составлены пользователями, которые записывают имена в разном формате. В именах могут быть ошибки, они могут быть записаны на разных языках, могут содержать несущественные повторяющиеся подстроки, например, общество с ограниченной ответственностью.
Кроме того, кажущаяся схожесть написания не всегда говорит нам о том, что компания одна и та же. Например, «СИБУР Тобольск» и SIBUR International GmbH — одна компания, а компания «Сибер», отличающаяся одной буквой, — совершенно другая.
Такие алгоритмы никогда не бывают точными на 100%, и могут ошибаться в одну или другую сторону:
есть ошибки ложноположительного срабатывания, когда мы ошибочно решили, что «Компания 1» и «Компания 2» это одно и то же.
есть ложноотрицательные, когда алгоритм не угадал, что «Компания 1» и «Компания 2» должны быть компаниями одного холдинга.
Что обычно делают в таких случаях — проводят работу по максимальному улучшению точности. Но всегда нужно определять, какая ошибка страшнее. Предположим, что алгоритм по ошибке отсеял компанию и решил, что это дочка нашего конкурента, а на самом деле это независимая компания — мы потеряли лида. А если не угадал, что компания — дочка конкурента, и отправил ее в проработку менеджеру — мы потратили время менеджера.
Поиск по ключевым словам продукта
Также нам нужно было научиться находить заданные ключевые фразы в описаниях компаний, и тут тоже было несколько сложностей:
Описания имеются на разных языках.
Специфика источников такова, что в них встречаются как связные тексты, так и просто перечисления производимых товаров.
Нужно находить ключевые фразы, даже если слова в ней разделены другими. Например, по запросу «резиновая уточка» должна быть найдена в том числе фраза: «резиновая высококачественная желтая уточка»
Сначала мы пробовали простые подходы полнотекстового поиска, однако они плохо работали ввиду указанной выше специфики: либо пропускались фразы, где между словами добавлены другие, а если искать не только среди идущих подряд слов, а в некоторой области рядом часто оказывалось, что захватывались слова из разных продуктов. Например, по запросу «rubber conveyor belts» мог ложно найтись текст: «Our company produces: rubber pallets, metallic conveyor belts».
Так пришло понимание, что без учета структуры предложений ничего не получится.
Мы остановились на следующем подходе
Определяем части речи всех слов в описании.
На основе заранее определенного регулярного выражения над частями речи определяем в тексте «сущности» - семантически отделимые части текста, например, существительное и все описывающие его прилагательные.
Наличие искомой фразы фиксируется если и только если все слова из искомой фразы содержатся в одной сущности.
Итого
Сервис успешно пилотирован и масштабирован на ключевые продукты компании и позволяет приносить новых клиентов.
В общем, как показывают отчёты — цифровая лидогенерация в производственном B2B не только существует, но и неплохо работает. Будем продолжать собирать статистику и делиться опытом в следующих постах.
Спасибо, что дочитали! Пользуясь случаем, передаю привет команде: Сергею Кузнецову, Николаю Сафронову и Николаю Мошкову – аналитикам данных и создателям алгоритмов поиска и фильтрации.
А ещё Наталье Зеленкиной, Артёму Богданову, Андрею Баркалову и Антону Таначёву – нашей команде CRM.
И Дмитрию Володину – руководителю группы инженеров Центра корпоративных данных.
Если хотите к нам – welcome!