Гипотеза
Мы сделали предположение, что на основании параметров сайта + домена компании можно находить клиентов, которые с большей вероятностью заинтересуются определенным продуктом/услугами этой компании.
Проверка гипотезы
Первый этап: скачиваем все зарегистрированные домены .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:
Результат XGBClassifier:
Результат CatBoostClassifier:
CatBoost если и показал себя лучше, то совсем незначительно. Зато время обучения в несколько раз больше, чем у остальных классификаторов в этом эксперименте.
Классы были уравнены по количеству для обучения, но в реальности объектов из нулевого класса в 10 раз больше, поэтому нужно оценить, как полученная модель будет отрабатывать на реальном соотношении классов.
Для проверки были выбраны все данные, которые не участвовали в обучении. Полученный результат:
Что мы получили:
Раньше, когда не было никакой фильтрации доменов, нам нужно было совершить 103 тысячи коммуникаций, из которых хороших только 8 тысяч, т.е. процент эффективности = 8168/103767=0.07
Если теперь использовать модель для выбора приоритетных доменов, т.е. будем выбирать домены с классом 1, то потребуется совершить 33242+6075 = 39317 коммуникаций, а процент эффективности будет равен 6075/39317 = 0.15 (6075 – число доменов, которые действительно являются хорошими, 39317- домены, которые классификатор определил, как хорошие), что в 2 раза выше старого варианта. Плохо то, что 2093 потенциальных клиентов будут потеряны, но если предположить, что потребуется 39 тысяч доменов в год, то через год повторяем процедуру и находим новых клиентов.
Чтобы еще улучшить результат попробуем построить регрессионную модель, а не классификатор. Тогда можно будет подобрать некоторый порог, по которому будем говорить хороший это домен или нет, таким образом, чтобы наш процент эффективности еще вырос.
XGBoost ранее показал себя оптимально и с точки зрения качества и с точки зрения скорости, поэтому дальше будем использовать его.
Порог = 0.6. Результат на всем множестве данных, не участвующих в обучении:
В этом случае потребуется 17488+ 4722=22210 коммуникаций, а процент эффективности будет равен 4722/22210=0.21. Это выше предыдущего варианта, при этом коммуникаций требуется в 1.7 раза меньше, но и хороших доменов мы определим меньше.
Другой попыткой улучшения было внесение большего числа значений целевой переменной (вместо двух):
- если была заявка, целевая функция = 2
- если после заявки была продажа, целевая функция = 5
- если заявки не было, то целевая функция равна числу коммуникаций по домену со знаком минус (чем больше коммуницируем и не получаем лидов, тем менее интересен потенциальный клиент)
Качество модели получилось хуже, чем в предыдущих случаях. Вообще, в этой задаче качество низкое, но объяснить это можно достаточно просто:
- во-первых, некоторые из доменов, которые сейчас помечены как плохие, т.е. без заявки, легко могут переходить в хороший класс, возможно там просто сейчас недостаточно коммуникаций. Это размазывает границу между классами.
- во-вторых, доменные признаки скорее фильтрующие, т.е. если на сайте 5 страниц, нет счетчиков и сайту 3 месяца, то такой сайт нам не интересен, но, если есть домены с большим числом страниц, присутствующие в Яндекс каталоге и социально активные, то они наши потенциальные клиенты, но дальше вступают в силу другие факторы: нет ли у них уже поставщика наших услуг, устроит ли наше предложение и т.д.
Использование:
Для доменов, которые были получены на первом этапе и которые отсутствуют в нашей базе, получаем прогноз по модели. Осуществляем коммуникации по доменам, которые были отнесены к первому классу.
Результаты:
Несмотря на низкое качество полученной модели, ее использование может повысить эффективность коммуникаций почти в 2 раза, поэтому важно смотреть не только на цифры, важно искать пользу для бизнеса.
В ходе исследования было проведено знакомство с новой технологией – CatBoost, которая показала себя как достаточно хорошая по качеству, по крайней мере сопоставима с XGBoost, но очень медленная.