Как подготовить датасет к Machine Learning с PySpark и построить систему потоковой аналитики больших данных на Apache Kafka и ELK: пример прогнозирования CTR

курсы по большим данным и машинному обучению, обучение Big Data и Machine Learning, аналитика больших данных в реальном времени обучение на примерах, Big Data, Kafka, архитектура, Большие данные, маркетинг, обработка данных, предиктивная аналитика, реклама, машинное обучение, Machine Learning, Spark, Python, PySpark, Elasticsearch

В продолжение разговора о применении технологий Big Data и Machine Learning в рекламе и маркетинге, сегодня рассмотрим архитектуру системы прогнозирования конверсии рекламных объявлений. Читайте далее, как организовать предиктивную аналитику больших данных на Apache Kafka и компонентах ELK-стека (Elasticsearch, Logstash, Kibana), почему так важно тщательно подготовить данные к машинному обучению, какие функции PySpark помогают сделать это и на что обратить внимание при настройке Spark-кластера.

Строим систему потоковой аналитики Big Data на Apache Kafka и Kibana через Logstash и Elasticsearch

Начнем с постановки задачи: требуется спрогнозировать конверсию рекламных объявлений, т.е. вычислить CTR-рейтинг (click through rate) или показатель кликабельности. Эта важная метрика эффективности интернет-маркетинга определяет отношение числа кликов на рекламное объявление к числу показов и измеряется в процентах. К примеру, если реклама была показана 10 раз и на нее кликнули 2 раза, то CTR равен 20 %, что считается весьма чрезвычайно высоким значением. Обычно CTR рекламных кампаний в Рунете колеблется от 0,01% до 2%, максимум 10%. Не стоит путать CTR с метрикой CR (conversion rate, рейтинг конверсии), обозначающей процент пользователей, которые не только прошли по ссылке, но и совершили покупку, чтоб более значимо для бизнеса [1].

За непрерывный сбор и агрегацию потоковых данных для ML-модели отвечает Apache Kafka – популярная платформа потоковой обработки событий. Обучение алгоритмов Machine Learning проводится на обучающем и тестовом датасетах, которые после предварительной подготовки к моделированию, о чем мы поговорим далее, упакованы в файлы формата Parquet. Далее вся ML-система работает следующим образом [2]:

  • издатели или продюсеры (producer) данных отправляют их в топики Kafka в потоковом режиме. Например, с помощью библиотеки PyArrow можно считать данные из Parquet-файла. Затем producer добавляет метку, которая обозначает класс решения для алгоритма классификации и предикторы или фичи (от англ. feature) для вычисления таргетной переменной (CTR).
  • Потребитель данных из топиков Kafka считывает метку и столбец с фичами для ML-и логистической регрессии и машины опорных вектором (SVM, Support Vector Machine). Далее столбец фичей преобразуется из разреженного вектора в плотный вектор. 2 разных ML-модели используются для прогнозирования метки класса из столбца входных фичей.
  • Producer записывает в Kafka полученный после ML-моделирования прогноз вместе с исходной меткой и оценкой корректности результата, например, 1 означает, что прогноз модели и исходная метка совпадали, иначе – 0.
  • Logstash считывает прогноз вместе с исходной меткой и правильным значением из топика Kafka, преобразует их в JSON-формат и записывает их в NoSQL-СУБД Elasticsearch.
  • Elasticsearch обеспечивает возможность быстрой аналитики по хранящимся в ней JSON-документам и визуализацию результатов в веб-интерфейсе Kibana.
Big Data, Kafka, архитектура, Большие данные, маркетинг, обработка данных, предиктивная аналитика, реклама, машинное обучение, Machine Learning, Spark, Python, PySpark, Elasticsearch, конверсия, CTR prediction
Архитектура ML-системы прогнозирования конверсии на базе Apache Kafka, Spark и ELK

Мощные возможности Kibana по визуализации позволяют оценить эффективность каждой ML-модели с помощью настраиваемых информационных панелей или дэшбордов. Например, можно создать круговые диаграммы, которые показывают процент количества правильных прогнозов для каждой ML-модели и оперативно обновляются в соответствии с поступающими потоковыми данными. В частности, логистическая регрессия оказалась точнее, чем SVM-модель [2].

ELK, Kibana, Machine Learning, машинное обучение
Визуализация результатов ML-моделирования в Kibana

 

Об обучении ML-модели и подготовке данных к моделированию c Apache Spark

Поскольку машинное обучение требует предварительной подготовки данных (Data Preparation) к ML-моделированию, важно провести все соответствующие процедуры очистки, нормализации и форматирования исходных значений, о чем мы подробно рассказывали здесь. В качестве обучающего датасета в рассматриваемом примере использовался Criteo – набор данных по онлайн-рекламе, выпущенный Criteo Labs. Он содержит значения фичей и кликов для миллионов рекламных объявлений. Каждое объявление имеет фичи, описывающие данные. В датасете 40 атрибутов, включая метку классификации, где значение 1 означает, что на объявление кликали, а 0 – нет. Атрибуты состоят из 13 целочисленных столбцов и 26 категориальных столбцов. Переформатирование датасета в столбцовый формат Parquet позволяет обрабатывать данные намного быстрее, чем исходный формат CSV.

При том, что датасет Criteo позиционируется как набор данных для машинного обучения, он содержит много ошибок, пропусков и некорректных значений. Например, из 45 840 617 записей количество кликов по рекламе составляет около 26%, а остальные 74% данных не имеют отношения к CTR. Из 39 столбцов 24 содержат нулевые значения с разными процентными значениями, причем сразу 2 колонки (с целочисленнами и категориальными значениями) содержат более 75% null. Такие данные не могут считаться корректными и не должны входить в обучающий датасет для Machine Learning.  С оставшимися столбцами были выполнены следующие преобразования [3]:

  • для столбцов, где нулей или пропусков менее 40% были вычислены средние значения;
  • рассчитаны выбросы для каждого целочисленного столбца в зависимости от его межквартильного размаха;
  • null и выбросы в каждом столбце заменены средними значениями;
  • строки категориальных столбцов преобразованы в индексы с помощью функции StringIndexr();
  • определена размерность каждого столбца, описывающая количество значений в нем.

Все эти преобразования были выполнены с использованием функций PySpark и записных книжек DataBricks. Например, встроенный Bucketizer() из пакета pyspark.ml.feature использовался для разделения целочисленных столбцов, StringIndexr() – для индексации категориальных столбцов, OneHotEncoder() для кодирования категориальных столбцов с низкой размерностью и VectorAssembler() для объединения соответствующих столбцов в один столбец фичей. Подробности применения этих функций с примерами кода на Python можно посмотреть в источниках [3, 2].

После подготовки данных к ML-моделированию, датасет из двух столбцов с метками и фичами был разделен на набор для тестирования (25%) и набор для обучения (75%) модели Machine Learning. Обученные алгоритмы машинного обучения показали следующую точность на тестовом наборе данных [3]:

  • логистическая регрессия — 72%;
  • случайный лес — 74%;
  • линейный SVM – 70%.

Благодаря настройке гиперпараметров, удалось повысить точность моделей, например, для случайного леса — 78%, при значениях 50 деревьях (numTrees= 50) с максимальной глубиной 20 (maxDepth). Поэкспериментировать с параметрами можно с помощью поиска по сетке в sklearn, который в Apache Spark называется ParamGridBuilder(). В частности, стоит убедиться, что maxDepth не выше 30, т.к. фреймворк не поддерживает большую глубину. Также стоит обратить внимание на корректную конфигурацию кластера, особенно достаточный объем оперативной памяти. К примеру, при обучении ML-модели с параметром maxDepth>20, размер RAM на вычислительном узле должен быть более 32 ГБ. Наконец, время обучения увеличивается в зависимости от размера данных: обучение модели случайного леса с numTrees=50 и maxDepth=20 может занять более 2 часов на кластере из 16 машин m5.2xlarge (32 ГБ, 8 ядер) [3].

Больше практических примеров разработки приложений машинного обучения и потоковой аналитики больших данных с Apache Spark и Kafka вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

 

 

Источники

  1. https://ru.wikipedia.org/wiki/CTR_(Интернет)
  2. https://medium.com/swlh/ml-model-prediction-on-streaming-data-using-kafka-ae7e46d2bf10
  3. https://medium.com/swlh/preprocessing-criteo-dataset-for-prediction-of-click-through-rate-on-ads-7dee096a2dd9