Недавно я столкнулся с проблемой науки о данных из домашнего задания, где коэффициент конверсии онлайн-клиента рассчитывается на основе ряда функций, включая их демографическую информацию, общее количество посещений сайта и источник (как человек пришел к сайт). Я хотел найти похожие проблемы/наборы данных и наткнулся на конкурс kaggle трехлетней давности, где коэффициент конверсии полиса страхования жилья от потенциального клиента прогнозируется на основе определенных анонимных функций.

Большинство соревнований kaggle предоставляют наборы данных с анонимными функциями для защиты информации. Это само по себе усложняет задачу, потому что мы не начинаем выбирать функции на основе наших собственных предубеждений. В этом конкретном наборе данных около 300 столбцов, и для того, чтобы построить ядро, скажем, менее чем за 20 минут, нам нужно отсеять столбцы, которые мы не считаем слишком важными.

Первый шаг — определить, какие данные содержат эти столбцы. Простая операция .head() позволяет нам узнать, что почти все столбцы, кроме даты котировки, представляют собой числовые данные. Столбец даты предложения должен быть разделен на данные месяца, дня недели и года, потому что иногда могут быть тенденции или циклы в зависимости от времени недели или месяца, в котором у потенциального клиента больше шансов приобрести страховку.

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

На приведенном выше рисунке показана тепловая карта корреляций между функциями. Более светлые части карты представляют сильную корреляцию между двумя функциями, и в этом случае мы должны исключить одну функцию. Мы можем выбрать порог, например 0,9, для корреляции и выбрать только те функции, которые не сильно коррелируют друг с другом. Таким образом, мы можем уменьшить общее количество функций с 300 столбцов до 176 уникальных столбцов/функций.

Я выбрал AdaBoost с использованием классификатора дерева решений, потому что это наиболее часто используемый и простой для понимания алгоритм повышения. Проще говоря, алгоритм повышения использует несколько слабых классификаторов (которые не соответствуют всем обучающим данным) и объединяет их в один классификатор. Одним из самых больших преимуществ этого является то, что бустинг уменьшает переоснащение. В случае AdaBoost, который является сокращением от Adaptive Boosting, несколько слабых классификаторов объединяются путем присвоения каждому из них коэффициентов и одновременного обновления весов для обучающих примеров. Как правило, наиболее трудным для подбора примерам присваивается больший вес по сравнению с теми примерами, которые могут быть очень легко подобраны слабыми классификаторами. Полученный алгоритм намного сложнее по сравнению со слабыми классификаторами, с которых мы начали. Мой любимый источник для понимания бустинга — бесплатный курс Udacity: Машинное обучение.

Используя метод AdaBoosting, мы можем прогнозировать коэффициент конверсии для потенциальных клиентов с точностью примерно 93%. Вы можете найти мой код на моей странице github