Обработка большого набора данных транзакций для исследования данных и разработки функций

Деньги говорят, и ничто не говорит о покупателе больше, чем то, где он их тратит. Мы можем получить представление о клиентах, изучая транзакции или создавая модели с данными. Наборы данных о транзакциях имеют тенденцию быть большими. Следовательно, это затрудняет их обработку на вашем персональном компьютере. Чтобы обрабатывать эти большие наборы данных, вы можете настроить сервер. Или вы можете использовать пакет Python terality.

Мы покажем вам, как с помощью terality можно быстро обработать набор данных о транзакциях. Мы начнем с изучения набора данных с 3 агрегатами. То есть, глядя на общие, средние и процентные тенденции. Мы также создадим функцию транзакции, которую можно будет использовать в модели. Мы закончим обсуждением производительности и стоимости использования terality для обработки данных таким образом. Это потребует сравнения его с альтернативным подходом пакетной обработки с пандами. Попутно мы дадим несколько советов по использованию terality.

Что такое Теральность?

Terality — это «бессерверный механизм обработки данных». Это означает, что вам не нужно настраивать собственный сервер для его использования. Вся обработка осуществляется удаленно компанией terality. Вам просто нужно установить его, как и любой другой пакет Python, и все готово. Мы также увидим, что он использует тот же синтаксис, что и Pandas. Это позволяет легко переключаться на terality, когда вам нужна дополнительная вычислительная мощность. Надеюсь, это станет ясно, когда мы покажем вам, как использовать пакет.

Набор данных

Мы будем обрабатывать большой (случайно сгенерированный) набор данных транзакций. Набор данных содержит более 260 миллионов транзакций для 75 000 клиентов. Включены сделки за 2010–2020 годы. Каждая транзакция классифицируется по одному из 12 типов расходов (например, одежда). Вы можете увидеть более подробную информацию на рисунке 1, а полный набор данных вы найдете на Kaggle.

Импорт данных

Давайте погрузимся в использование реальности. Мы обсудим ключевые фрагменты кода, а полный проект вы можете найти на GitHub. Начнем с импорта пакетов ниже. У нас есть NumPy и Pandas для обработки данных и matplotlib для некоторых простых визуализаций. У нас также есть пакет terality (строка 4). Убедитесь, что все это установлено.

Набор данных транзакций хранится в общедоступной корзине S3. Мы можем загрузить этот набор данных с помощью приведенной ниже команды read_csv. Если у вас не более 22 ГБ ОЗУ, вам придется установить параметр nrows. Это позволяет загрузить образец набора данных. Здесь мы загружаем первые 5 миллионов строк CSV.

Мы можем загрузить полный набор данных с terality в приведенном ниже коде. Нам не нужно использовать параметр nrows. Это связано с тем, что набор данных загружается в память на серверах terality. Обратите внимание, что команда read_csv такая же, как и раньше. Мы увидим, что все команды terality имеют тот же синтаксис, что и Pandas. Есть несколько исключений, но это означает, что мы можем использовать terality DataFrame так же, как Pandas DataFrame.

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

Изучение данных

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

Общие годовые расходы

Для начала мы суммируем все суммы транзакций за каждый год. Мы можем сделать это в одну строку с кодом ниже. Помните, что это реальный DataFrame, и эта команда выполняется на их сервере. Опять же, вы заметите, что это точно такой же синтаксис, как если бы вы запускали эту команду с Pandas.

Результат, agg_1, — еще один фрейм данных terality. Как и любой другой DataFrame Pandas, мы можем визуализировать это с помощью функции matplotlib plot. См. приведенный ниже код и результат на рис. 1. Обратите внимание, что невозможно использовать все функции matplotlib подобным образом. Мы увидим это, когда создадим функцию транзакции. Здесь нам сначала нужно переместить terality DataFrame в нашу локальную память, прежде чем мы сможем построить его.

Среднемесячные расходы на развлечения в 2020 году

Для этой агрегации мы начинаем с фильтрации транзакций, чтобы остались только те, которые предназначены для развлечения в 2020 году (строка 1). Затем мы подсчитываем общую сумму, которую каждый клиент ежемесячно тратит на развлечения (строка 2). Наконец, для каждого месяца мы можем рассчитать среднее значение по всем клиентам (строка 3). Вы можете увидеть результат этой агрегации на рисунке 3.

Процент клиентов, сэкономивших в марте 2019 г.

Для нашей последней агрегации мы начинаем с получения всех транзакций в марте 2019 года (строка 1). Затем мы подсчитываем количество отдельных клиентов (строка 2) и количество отдельных клиентов, которые сохранили (строка 3). Чтобы закончить, мы делим эти два числа (строка 5) и печатаем результат. Это говорит нам о том, что 29,7% клиентов, совершивших транзакцию в марте 2019 года, также сэкономили в этом месяце.

Создание элементов модели

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

Всего азартных игр в % от общих расходов за последние 3 месяца

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

Чтобы создать эту функцию, мы можем выполнять аналогичные агрегации, как и раньше. За исключением того, что теперь нам нужно будет выполнить агрегацию на уровне клиента. Мы также предполагаем, что функции создаются ежемесячно. Это означает, что нам нужно будет выбрать базовый месяц (то есть месяц, в котором мы будем делать прогнозы). Мы будем использовать июль 2018 года. Следовательно, мы будем рассматривать транзакции за 3 месяца до этого месяца.

Начнем с выбора всех транзакций в период с апреля 2018 г. по июнь 2018 г. (строка 2). Затем мы суммируем общие расходы каждого клиента за 3 месяца (строка 3). То же самое делаем с общими расходами на азартные игры (строки 7–8). Затем мы присоединяем общий фрейм данных азартных игр к фрейму общих расходов (строка 12). У некоторых клиентов не будет расходов на азартные игры. В этом случае мы хотим изменить отсутствующие значения на значение 0 (строка 13). Чтобы получить окончательную характеристику, мы делим расходы на азартные игры на общие расходы (строка 14).

Мы построили гистограмму этой функции, используя приведенный ниже код, и вы можете увидеть результат на рисунке 5. Мы видим, что большинство клиентов не играли в азартные игры за последние 3 месяца. Для тех, кто играет в азартные игры, большинство из них потратили около 10% своих общих расходов. Существует также хвост клиентов, которые тратят много времени на выборку (то есть > 20%). Мы можем ожидать, что эти клиенты будут более склонны не платить по кредитам.

Вы можете заметить, что, в отличие от предыдущих графиков, мы не можем передать DataFrame terality непосредственно в функцию hist. Это потому, что эта функция использует команду, которая не поддерживается terality. Следовательно, нам нужно сначала создать массив NumPy (строка 4). Это загрузит terality DataFrame в локальную память. Если вы не уверены в функции, безопаснее сделать это вместо передачи terality DataFrame.

По сравнению с пакетной обработкой Pandas

Теперь мы увидели, на что способна реальность, но она лучше альтернатив? В начале мы упомянули, что можно загружать образцы набора данных с помощью Pandas. Это означает, что мы можем выполнять те же агрегации, что и выше, путем повторения набора данных. Подробнее об этом подходе мы поговорим в статье ниже.



Вы увидите в статье, что этот подход более сложен. Это требует использования цикла while. Мы также должны немного подумать о том, как мы можем выполнять агрегацию. Для сравнения, в реальности мы можем запускать операторы groupby, не беспокоясь о емкости памяти. Пакетная обработка с использованием Pandas также намного медленнее.

Время

Чтобы точно понять, что мы имеем в виду, мы записали время, которое потребовалось для каждой из 4 агрегаций. Это 3 способа, которыми мы исследовали данные и 1 особенность модели. На рис. 6 видно, сколько времени заняла terality по сравнению с пакетной обработкой на моей локальной машине. На самом деле все агрегации заняли меньше минуты. Это весьма впечатляет, учитывая размер набора данных. Для Pandas это заняло от 45 до 50 минут.

Расходы

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

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

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



Рекомендации

К. О'Салливан, Смоделированные транзакции,CC0: общественное достояниеhttps://www.kaggle.com/datasets/conorsully1/simulated-transactions

Запланируйте сеанс DDIChat в Data Science / AI / ML / DL:



Подайте заявку на участие в программе DDIChat Expert здесь.
Работайте с DDI: https://datadriveninvestor.com/collaborate
Подпишитесь на DDIntel здесь.