Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Россия +7 (495) 139-20-33
8 Ноября 2017 в 13:52

Выявление группы потенциальных клиентов, которые с высокой вероятностью заинтересуются услугами компании

Россия +7 (495) 139-20-33
0 1758
Подпишитесь на нас в Telegram
Дмитрий Орлов
Руководитель информационно-аналитического отдела Ingate Digital Agency

Гипотеза

Мы сделали предположение, что на основании параметров сайта + домена компании можно находить клиентов, которые с большей вероятностью заинтересуются определенным продуктом/услугами этой компании.

Проверка гипотезы

Первый этап: скачиваем все зарегистрированные домены .ru и рф. Ищем на главных страницах телефон и определяем регион по телефону. На этом же этапе отсеиваются все недоступные домены и домены без телефона. В первую очередь интересует Москва и МО. Именно среди этих доменов, будем производить отбор самых приоритетных (перспективных).

Второй этап - разметка параметров:

  • Количество проиндексированных страниц (Яндекса и Google)
  • Количество доменов и страниц, которые ссылаются на сайт
  • Раздел Яндекс каталога (если есть)
  • Количество просмотров и посетителей в день
  • Системы статистики (Яндекс Метрика, Google Analytics, Liveinternet и тд)
  • Социальная активность (количество пользователей в группе ВК, число твиттов и т.д)
  • Скорость загрузки страницы (абсолютный показатель в секундах и процент сайтов, которые медленнее нашего)
  • Количество внутренних и внешних ссылок
  • Наличие микроразметки
  • Местоположение сервера
  • Возраст домена
  • Настроен ли https и редирект www
  • Наличие sitemap и robots.txt
  • Видимость в Яндекс и Google

Все признаки размечались с помощью сервиса pr-cy.ru.

Следующим этапом была бинарная классификация:

  • те домены, по которым в нашей системе был хотя бы одна заявка, помечались как хорошие, т.е. имеющие класс 1;
  • в качестве плохих доменов, выбрали домены, по которым были неудачные попытки коммуникации с компанией.

Размеры полученных классов получились сильно разными, поэтому из нулевого класса случайно отобрали N объектов, где N- число объектов первого класса.

Обучение проводилось с помощью следующих инструментов:

  • Scikit-learn
  • XGBoost
  • CatBoost

Scikit-learn – библиотека для Python, в которое реализовано большое количество алгоритмов машинного обучения, как для задач классификации и регрессии, так и для обучения без учителя. Библиотека и имеет хорошую документацию, а также включает в себя ряд дополнительных методов, например, для оценки качества полученной модели.

XGBoost- библиотека с открытым исходным кодом, в основе которой лежит алгоритм градиентного бустинга. Широко известна среди сообщества Kaggle, где использовалась для большого количества соревнований.

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

Cat (категориальный) + Boost (бустинг)

Категориальными называются признаки, которые могут принимать значения из конечного неупорядоченного множества. Примером может служить признак «Город», который принимает значения: Москва, Тула, Санкт-Петербург, Новгород. Классические методы машинного обучения с такими признаками работать не умеют, поэтому необходимы преобразований, например, one-hot кодирование. От этого недостатка CatBoost избавлен.

В нашей задаче категориальными являются признаки:

  • Раздел Яндекс каталога
  • Местоположение сервера
  • Системы статистики, установленные на сайте

Обучении проводилось 17 тысячах доменов. Использовалась стандартная KFold-валидация на 20 фолдах.

Результат RandomForestClassifier:

Орлов 1.png

Результат XGBClassifier:

Орлов 2.png

Результат CatBoostClassifier:

Орлов 3.png

CatBoost если и показал себя лучше, то совсем незначительно. Зато время обучения в несколько раз больше, чем у остальных классификаторов в этом эксперименте.

Классы были уравнены по количеству для обучения, но в реальности объектов из нулевого класса в 10 раз больше, поэтому нужно оценить, как полученная модель будет отрабатывать на реальном соотношении классов.

Для проверки были выбраны все данные, которые не участвовали в обучении. Полученный результат:

Орлов 4.png

Что мы получили:

Раньше, когда не было никакой фильтрации доменов, нам нужно было совершить 103 тысячи коммуникаций, из которых хороших только 8 тысяч, т.е. процент эффективности = 8168/103767=0.07

Если теперь использовать модель для выбора приоритетных доменов, т.е. будем выбирать домены с классом 1, то потребуется совершить 33242+6075 = 39317 коммуникаций, а процент эффективности будет равен 6075/39317 = 0.15 (6075 – число доменов, которые действительно являются хорошими, 39317- домены, которые классификатор определил, как хорошие), что в 2 раза выше старого варианта. Плохо то, что 2093 потенциальных клиентов будут потеряны, но если предположить, что потребуется 39 тысяч доменов в год, то через год повторяем процедуру и находим новых клиентов.

Чтобы еще улучшить результат попробуем построить регрессионную модель, а не классификатор. Тогда можно будет подобрать некоторый порог, по которому будем говорить хороший это домен или нет, таким образом, чтобы наш процент эффективности еще вырос.

XGBoost ранее показал себя оптимально и с точки зрения качества и с точки зрения скорости, поэтому дальше будем использовать его.

Порог = 0.6. Результат на всем множестве данных, не участвующих в обучении:

Орлов 5.png

В этом случае потребуется 17488+ 4722=22210 коммуникаций, а процент эффективности будет равен 4722/22210=0.21. Это выше предыдущего варианта, при этом коммуникаций требуется в 1.7 раза меньше, но и хороших доменов мы определим меньше.

Другой попыткой улучшения было внесение большего числа значений целевой переменной (вместо двух):

  1. если была заявка, целевая функция = 2
  2. если после заявки была продажа, целевая функция = 5
  3. если заявки не было, то целевая функция равна числу коммуникаций по домену со знаком минус (чем больше коммуницируем и не получаем лидов, тем менее интересен потенциальный клиент)

Качество модели получилось хуже, чем в предыдущих случаях. Вообще, в этой задаче качество низкое, но объяснить это можно достаточно просто:

  • во-первых, некоторые из доменов, которые сейчас помечены как плохие, т.е. без заявки, легко могут переходить в хороший класс, возможно там просто сейчас недостаточно коммуникаций. Это размазывает границу между классами.
  • во-вторых, доменные признаки скорее фильтрующие, т.е. если на сайте 5 страниц, нет счетчиков и сайту 3 месяца, то такой сайт нам не интересен, но, если есть домены с большим числом страниц, присутствующие в Яндекс каталоге и социально активные, то они наши потенциальные клиенты, но дальше вступают в силу другие факторы: нет ли у них уже поставщика наших услуг, устроит ли наше предложение и т.д.

Использование:

Для доменов, которые были получены на первом этапе и которые отсутствуют в нашей базе, получаем прогноз по модели. Осуществляем коммуникации по доменам, которые были отнесены к первому классу.

Результаты:

Несмотря на низкое качество полученной модели, ее использование может повысить эффективность коммуникаций почти в 2 раза, поэтому важно смотреть не только на цифры, важно искать пользу для бизнеса.

В ходе исследования было проведено знакомство с новой технологией – CatBoost, которая показала себя как достаточно хорошая по качеству, по крайней мере сопоставима с XGBoost, но очень медленная.

0 комментариев
Подписаться 
Подписаться на дискуссию:
E-mail:
ОК
Вы подписаны на комментарии
Ошибка. Пожалуйста, попробуйте ещё раз.

Отправьте отзыв!
X | Закрыть