Прошло некоторое время с тех пор, как я программировал на R, но пару месяцев назад я решил вернуться в игру. Какая задача могла бы помочь мне глубже погрузиться в удивительный мир R? Создайте пакет R, конечно!

Основная цель этого пакета — ускорить и упростить анализ данных за счет предоставления некоторых функций. Отсюда и название: helda (HELполная функция для данногоанализа данных). Да, мне потребовалось некоторое время, чтобы получить имя 😉.

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

Теперь он доступен в репозитории CRAN. Это означает, что вы можете установить пакет, просто запустив в R:

В этой статье я представляю две основные функции, доступные в пакете helda:

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

I) Заполнить пробелы во временных рядах

Предположим, ваша компания попросила вас создать алгоритм машинного обучения, который может прогнозировать, какой клиент уйдет в следующем квартале. Это очень важно для вашей компании, потому что, как правило, удержать клиента дешевле, чем приобрести нового у конкурентов. Одной из характеристик, которую вы должны проанализировать, является, конечно же, покупательное поведение клиентов во времени. Сначала вы собираете необходимые данные. Затем вы моделируете поведение клиентов во временном ряду в дневном масштабе (количество покупок в день, сумма, выплаченная в день, …). После этого вы собираете все временные ряды поведения клиентов во фрейме данных и в конечном итоге получаете данные панели.

Очень часто в наборе данных вы найдете несколько NA (некоторые отсутствующие данные). Это может быть связано с несколькими причинами:

  • данные плохого качества
  • некоторые данные теряются из-за различных шагов ETL (Eextract, Transform, Lload), которые происходят до того, как вы получите данные
  • клиент просто не имеет ценности в один прекрасный день (нет покупки)

Если вы хотите построить свою модель машинного обучения на основе этого набора данных, вам необходимо заполнить эти пробелы. Во временном ряду есть три типа отсутствующих данных в зависимости от того, когда они происходят:

  • в начале анализа времени Windows
  • в концеанализа времени Windows
  • внутри вашего анализа времени Windows между некоторыми неотсутствующими данными

Функции holda позволяют заполнить пробелы, которые могут возникнуть во временном ряду числовых данных. Методология, используемая в функциях, следующая:

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

Возьмем очень простой пример. Предположим, что наши данные представляют собой следующую последовательность:

Для первых отсутствующих данных мы повторяем первую имеющуюся у нас информацию, то есть 1. Для последних отсутствующих данных мы применяем то же самое с последней имеющейся у нас информацией, то есть 11. Результат:

Для промежуточных отсутствующих данных мы применяем стратегию линейной интерполяции.

Формула следующая:

В итоге получаем результат:

А что, если у вас есть не один временной ряд для заполнения пробелов, а несколько (по одному на клиента)? Учитывая, что у вас есть одна функция для уникальной идентификации клиента (например, ID клиента) и функция, представляющая время, пакет helda может чтобы очень эффективно проделывать этот трюк с несколькими временными рядами одновременно, потому что он векторизован. Вы даже можете применить аналогичный процесс при использовании spark благодаря великолепному пакету R sparklyr. Давайте теперь посмотрим на пример, чтобы увидеть функции в действии с данными реального мира.

В пакете helda вы можете найти набор данных с именем world_countries_pop, который был извлечен с веб-сайта Всемирного банка. Этот набор данных представляет количество людей по странам в годовом масштабе. Данные охватывают период 1960–2018 и включают не менее 264 государства по всему миру. Таким образом, каждую страну можно представить в виде временного ряда.

Чтобы упростить иллюстративный пример, мы выбрали подмножество стран и сосредоточились на коротком периоде 2010–2018 годов. Мы также искусственно создаем некоторые пропуски во временном ряду.

По некоторым странам нет доступных данных за весь период, то есть мы собираемся заполнить благодаря функциям holda. Действительно, мы видим, что у Франции нет данных за 2010 и 2014 годы (в отличие от Испании).

И это все! Наши множественные временные ряды были заполнены сразу для всех стран через переменную population_corrected_2. Пакет демонстрирует исходные и выходные функции на каждом этапе процедуры, чтобы отслеживать, что было сделано под капотом.

II) Кривая подъемной силы, эффект подъемной силы и коэффициент точности

При оценке прогностических характеристик своих бинарных классификаторов специалисты по данным часто используют кривую ROC (рабочие характеристики приемника) и AUC (площадь под кривой). В одном из моих предыдущих опытов я работал специалистом по данным в области банковского маркетинга. Наша команда в основном использовала кривую подъема вместо кривой ROC, потому что она была более информативной для деловых людей.

Кривая подъема представляет собой TPR (Истинно положительный показатель), также известный как отзыв, по оси Y и совокупную долю населения (размер выборки нашего набора проверочных данных) по оси X. Совокупность сортируется по убыванию вероятности того, что Y = 1. Например, представьте, что у вас есть набор данных, состоящий из 1000 клиентов, и только 80 купили интересующий вас продукт. Если вы выбрали случайное подмножество 100 человек, вы рассчитываете продать свой продукт в среднем 8 клиентам (8 %). Однако если вы воспользуетесь прогнозами своей модели (выделены зеленым цветом) и возьмете 100 с наибольшей вероятностью, чтобы купить продукт, вы обнаружите, что 24 человека, которые действительно купили продукт (24%). Идеальная модель (нарисованная черным цветом) позволит ранжировать 80 человек, которые действительно купили продукт, в число 80 наиболее вероятных покупателей. Вот почему, когда она достигает 8% совокупности по оси x, идеальная модель уже нашла все подходящие кластеры и, таким образом, имеет TPR, равную 1. У хорошей модели кривая подъема будет далека от случайной модели (выделена синим цветом) и близка к кривой идеальной модели.

Что, если кривые подъема разных алгоритмов пересекаются? Как вы можете их сравнивать? Один из способов — использовать площадь под кривой роста, также известную как AR, для Коэффициента точности (не путайте с точностью!). AR близок к идее AUC. Они действительно связаны формулой: AR = 2AUC -1.

Кривая подъемного эффекта представляет долю истинно положительных случаев по оси ординат и долю кумулятивной популяции по оси абсцисс. Очевидно, что если настроить таргетинг на все население, доля составит 8%. Но если ваша модель достаточно точна, ваша доля будет намного выше в верхних децилях. Эту концепцию можно выразить простым числом: эффект подъема. Он измеряет, насколько хороша модель для заданного размера выборки.

Эффект подъема – это просто отношение истинно положительных результатов к доле истинно положительных результатов среди населения мира. Он сравнивает предсказательную силу модели со случайной. В приведенном выше примере эффект подъема равен 24/8 = 3. Это означает, что ваша модель может помочь специалистам по маркетингу благодаря множительному эффекту, равному 3. Очевидно, что как только вы настроите таргетинг на большее количество населения, эффект подъема уменьшится.

Теперь давайте применим эти инструменты к реальным наборам данных! В holda знаменитый гигантский набор данных уже разделен на обучающую и проверочную выборки. Для простоты мы используем простую логистическую регрессию, чтобы предсказать, погиб ли пассажир (Y = 1, если пассажир погиб при затоплении; 0 в противном случае). Мы используем в качестве признаков класс пассажира, его возраст, если он мужчина/женщина, …

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

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

Подводя итог, в этой статье мы:

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

Код доступен на github по адресу https://github.com/Redcart/helda.