Инжиниринг данных — это самый важный и первый шаг к науке о данных. Он сочетает в себе как часть сбора данных, так и часть анализа. Все ваши гипотезы и скрытые тенденции проверяются данными. Это очень похоже на общение с данными и получение ответов. Например, вы спрашиваете свой набор данных о диабете: «Эй, это заболевание чаще поражает мужчин или женщин?», и данные ваших хороших друзей всегда найдут для вас ответ. Всегда.

Но чтобы сделать данные вашим партнером в анализе, вам нужно развивать свой набор данных, позволять ему расти. Чаще всего требуется выполнить большое количество преобразований в наборе данных. Вменение данных, выявление и исправление выбросов, проектирование признаков и многое другое. Весь этот процесс сбора, очистки и преобразования набора данных называется Data Engineering, востребованным навыком в 2021 году. По сути, все, что вы делаете, прежде чем передать свой набор данных алгоритму машинного обучения, относится к Data Engineering.

Недавно я участвовал в конкурсе Market Feature Input ETL, организованном Analytics Vidhya в июне 2021 года.

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

Ожидаемый набор входных данных

Итак, начнем…

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

Очевидно, что такого идентификатора webClientID с отсутствующим идентификатором пользователя не существует. Таким образом, мы можем безопасно удалить строки с отсутствующим UserID.

Второй шаг, давайте проверим строки данных в различных столбцах, таких как активность, ProductID и ОС. Я заметил, что случай в этих столбцах был непоследовательным. Например, ОС содержит оба значения, chrome и CHROME, или действие содержит оба значения, click и CLICK. Крайне важно, чтобы данные в этих столбцах соответствовали одному и тому же регистру.

Третий шаг: Всегда преобразовывайте столбцы даты/времени в наборе данных в экземпляры даты и времени Python. Итак, давайте конвертируем VisitDateTime в даты Python. Теперь в этом столбце присутствуют два типа форматов даты: формат UNIX и формат UTC. Они должны быть последовательными.

Согласно постановке задачи: «В данном случае вы должны сгенерировать входной набор функций по состоянию на 28 мая 2018 года. Итак, таблица посетителей с 07 мая 2018 года по 27 мая 2018 года».

Давайте начнем создавать наш окончательный набор данных.

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

Позвольте мне шаг за шагом провести вас через суть этого упражнения.

  1. Отфильтровать пользовательские журналы на основе UserID
  2. Для действий NaN введите «PAGELOAD» или «CLICK» в зависимости от режима этого столбца. Я жестко запрограммировал «PAGELOAD» для демонстрационных целей.
  3. Чтобы заменить значения в отсутствующем ProductID, используйте value_counts() для определения частоты значений и используйте ProductID с наибольшим количеством.
  4. Для отсутствующего VisitDateTime снова используйте наиболее посещаемую пользователем дату, используя value_counts()
  5. Отфильтруйте журналы за 7 дней и получите длину уникальных дат (не времени)
  6. Отфильтруйте журналы за 15 дней и получите длину уникального ProductID.
  7. Чтобы определить возраст пользователя, посчитайте разницу между датой регистрации и 28 мая.
  8. Чтобы получить наиболее просматриваемые продукты за 15 дней, используйте value_counts() для ProductID в отфильтрованных журналах за 15 дней (фильтр с активностью PAGELOAD) и получите ProductID с наибольшей частотой.
  9. Для наиболее активной ОС используйте value_counts() для ОС в журналах и получите ОС с наибольшей частотой.
  10. Чтобы получить последний просмотренный продукт, отфильтруйте журналы с активностью PAGELOAD, отсортируйте по VisitDateTime и выберите первый попавшийся ProductID.
  11. Наконец, чтобы рассчитать PAGELOAD и CLICK за последние 7 дней, отфильтруйте журнал последних 7 дней с активностью PAGELOAD и CLICK соответственно.

Этот код помог мне добиться 93% точности в соревновании!!! Ура!!

В заключение, вам нужно задать партнеру (данным) правильные вопросы, чтобы раскрыть его потенциал. Это искусство — выдающаяся характеристика хорошего инженера данных. В этом наборе данных по-прежнему можно выполнить множество операций обработки данных, таких как типы продуктов, просматриваемых пользователем, более активен он днем ​​или ночью, использует мобильный или настольный компьютер, в какой стране создается приложение электронной коммерции. больше всего для бизнеса и МНОГОЕ ДРУГОЕ… Как далеко вы продвинетесь со своими данными, зависит только от вас. Чем больше вы лелеете свои данные и позволяете им расти, тем больше историй у них будет для вас. Стремитесь стать рассказчиком данных с помощью обработки данных!

Проверьте мою полную реализацию здесь

https://github.com/harnoor96/DS-and-ML/blob/master/Marketing%20Features%20ETL%20-Analytics%20Vidhya%20(June%202021)/Marketplace_Feature_Table.ipynb

Теперь для будущей работы код можно написать в формате OOPS с использованием классов и методов. Кроме того, жесткое кодирование дат может быть удалено.

Это все, ребята!