Предсказание пола клиента по транзакциям github

Предсказание пола клиента по транзакциям github

Пример решения задачи с использованием Go

Data Science Contest

В рамках Sberbank Data Science Journey проходит Data Science Contest. Во время контеста участникам предлагается поработать с банковскими данными и решить несколько исследовательских задач: определить пол клиента по его финансовым тратам в первой задаче, предсказать общий оборот в той или иной категории услуг во второй задаче и предсказать траты каждого клиента в каждой из категорий в третьей. Итоговый рейтинг участника рассчитывается на основе сумме баллов по каждой из задач.

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

> 300 Mb, поэтому сохранена только выборка

Таблица содержит историю транзакций клиентов банка за один год и три месяца.

customer_id,tr_datetime,mcc_code,tr_type,amount,term_id
111111,15 01:40:52,1111,1000,-5224,111111
111112,15 15:18:32,3333,2000,-100,11122233
.
Описание полей

customer_id — идентификатор клиента;
tr_datetime — день и время совершения транзакции (дни нумеруются с начала данных);
mcc_code — mcc-код транзакции;
tr_type — тип транзакции;
amount — сумма транзакции в условных единицах со знаком; + — начисление средств клиенту (приходная транзакция), — — списание средств (расходная транзакция);
term_id — идентификатор терминала;

Данная таблица содержит информацию по полу для части клиентов, для которых он известен. Для остальных клиентов пол необходимо предсказать в задаче A.

customer_id,gender
111111,0
111112,1
.
Описание полей

customer_id — идентификатор клиента;
gender — пол клиента; 0 — женский, 1 — мужской;

Данная таблица содержит описание mcc-кодов транзакций.

mcc_code;mcc_description
1000;словесное описание mcc-кода 1000
2000;словесное описание mcc-кода 2000
.
Описание полей

mcc_code – mcc-код транзакции;
mcc_description — описание mcc-кода транзакции.

Данная таблица содержит описание типов транзакций.

tr_type;tr_description
1000;словесное описание типа транзакции 1000
2000;словесное описание типа транзакции 2000
.
Описание полей

tr_type – тип транзакции;
tr_description — описание типа транзакции;

Для клиентов, у которых неизвестен пол (которых нет в обучающей выборке customers_gender_train.csv, но которые есть в transactions.csv), необходимо предсказать вероятность быть мужского пола (значение 1).

Ожидаемый формат посылки решения

customer_id,gender
1111111,0
1111112,1
1111113,0.2
.

Источник

Предсказание пола клиента по транзакциям github

Предсказание оттока пользователей

Финальный проект специализации МФТИ и Яндекса «Машинное обучение и анализ данных»

Выстраивание взаимоотношений с клиентами (или customer relationship managmenet, CRM) является важным звеном в функционировании любого бизнеса. От того, насколько хорошо простроена работа с аудиторией зачастую зависит успех всей компании. В проекте рассматривается одна из наиболее актуальных задач из области CRM: прогнозирование оттока пользователей (churn prediction). Суть задачи заключается в заблаговременном нахождении сегмента пользователей, склонных через некоторый промежуток времени отказаться от использования некоторого продукта или услуги. Точное и своевременное нахождение таких пользователей позволяет эффективно бороться с их оттоком, например, выявлять причины оттока и принимать меры по удержанию клиентов. Эта задача актуальна для большинства организаций, оказывающих услуги в сегменте B2C и вдвойне актуальна в областях, где распространение услуги близко к отметке 100%.

Цель проекта — научиться находить пользователей, склонных к оттоку. Если научиться находить таких пользователей с достаточной точностью заблаговременно, то можно эффективно управлять оттоком: например, выявлять причины оттока; помогать пользователям, попавшим в группу риска, решать их проблемы и задачи; проводить кампании по удержанию.

В этой папке находятся отчет по проекту (неделя 7), а также ноутбуки за недели 1, 3, 4, 5 и презентация за неделю 6.

Внутреннее соревнование проекта

На момент окончания первого потока специализации, предложенная модель лидировала в соревновании.

Источник

Предсказание пола клиента по транзакциям github

Пример решения задачи с использованием Go

Data Science Contest

В рамках Sberbank Data Science Journey проходит Data Science Contest. Во время контеста участникам предлагается поработать с банковскими данными и решить несколько исследовательских задач: определить пол клиента по его финансовым тратам в первой задаче, предсказать общий оборот в той или иной категории услуг во второй задаче и предсказать траты каждого клиента в каждой из категорий в третьей. Итоговый рейтинг участника рассчитывается на основе сумме баллов по каждой из задач.

Читайте также:  Магические карты предсказания духов 32 карты руководство

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

> 300 Mb, поэтому сохранена только выборка

Таблица содержит историю транзакций клиентов банка за один год и три месяца.

customer_id,tr_datetime,mcc_code,tr_type,amount,term_id
111111,15 01:40:52,1111,1000,-5224,111111
111112,15 15:18:32,3333,2000,-100,11122233
.
Описание полей

customer_id — идентификатор клиента;
tr_datetime — день и время совершения транзакции (дни нумеруются с начала данных);
mcc_code — mcc-код транзакции;
tr_type — тип транзакции;
amount — сумма транзакции в условных единицах со знаком; + — начисление средств клиенту (приходная транзакция), — — списание средств (расходная транзакция);
term_id — идентификатор терминала;

Данная таблица содержит информацию по полу для части клиентов, для которых он известен. Для остальных клиентов пол необходимо предсказать в задаче A.

customer_id,gender
111111,0
111112,1
.
Описание полей

customer_id — идентификатор клиента;
gender — пол клиента; 0 — женский, 1 — мужской;

Данная таблица содержит описание mcc-кодов транзакций.

mcc_code;mcc_description
1000;словесное описание mcc-кода 1000
2000;словесное описание mcc-кода 2000
.
Описание полей

mcc_code – mcc-код транзакции;
mcc_description — описание mcc-кода транзакции.

Данная таблица содержит описание типов транзакций.

tr_type;tr_description
1000;словесное описание типа транзакции 1000
2000;словесное описание типа транзакции 2000
.
Описание полей

tr_type – тип транзакции;
tr_description — описание типа транзакции;

Для клиентов, у которых неизвестен пол (которых нет в обучающей выборке customers_gender_train.csv, но которые есть в transactions.csv), необходимо предсказать вероятность быть мужского пола (значение 1).

Ожидаемый формат посылки решения

customer_id,gender
1111111,0
1111112,1
1111113,0.2
.

Источник

Предсказание пола клиента по транзакциям github

В данных присутствуют только клиенты, у которых была хотя бы одна транзакция в рассматриваемый интервал времени. Кроме того, для соревнования оригинальные данные были специальным образом искажены.

  • transactions
  • customers_gender_train
  • tr_types
  • tr_mcc_codes

Таблица содержит историю транзакций клиентов банка за один год и три месяца.

  • customer_id — идентификатор клиента;
  • tr_datetime — день и время совершения транзакции (дни нумеруются с начала данных);
  • mcc_code — mcc-код транзакции;
  • tr_type — тип транзакции;
  • amount — сумма транзакции в условных единицах со знаком; + — начисление средств клиенту (приходная транзакция), — — списание средств (расходная транзакция);
  • term_id — идентификатор терминала;

Данная таблица содержит информацию по полу для части клиентов, для которых он известен. Для остальных клиентов пол необходимо предсказать в задаче A.

  • customer_id — идентификатор клиента;
  • gender — пол клиента; 0 — женский, 1 — мужской;

Данная таблица содержит описание mcc-кодов транзакций.

  • mcc_code – mcc-код транзакции;
  • mcc_description — описание mcc-кода транзакции.

Данная таблица содержит описание типов транзакций.

  • tr_type – тип транзакции;
  • tr_description — описание типа транзакции;

Примеры использования типов транзакций:

Примеры приходных транзакций

взнос в отделении (предположительно зп): amount > 0 and tr_type in (7000); взнос ATM: amount > 0 and tr_type in (7010, 7011, 7014, 7015, 7020, 7021, 7024, 7025, 7060); пополнение со счёта: amount > 0 and tr_type in (7050, 7081, 7082, 7084); пополнение с карты: amount > 0 and tr_type in (7030, 7031, 7034, 7035, 7040, 7041, 7044, 7045, 7070, 7071, 7074, 7075).

Примеры расходных транзакций

выдача наличных: amount перевод на счёт: amount перевод на карту: amount перевод юр.лицу: amount покупка: amount

Источник

Нейросетевой подход к моделированию карточных транзакций

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

Благодаря высокой плотности транзакционной истории становится возможным моделирование множества целевых переменных, в том числе наиболее ценных для банка: выход клиента в дефолт, интерес к кредитным продуктам, доход клиента.

В рамках соревнования Альфа-Баттл 2.0 на boosters.pro участникам предлагалось решить задачу кредитного скоринга, используя только транзакционные данные клиента за предшествующий год. После соревнования была организована песочница, являющаяся копией соревнования, но без ограничения по времени и без денежных призов. Датасет соревнования можно использовать в научных публикациях, дипломных и курсовых работах.

Читайте также:  День предсказаний рен тв

Описание данных

Участникам соревнования был предоставлен датасет по 1.5 миллионам выдач кредитных продуктов. К каждому объекту выборки было подтянуто признаковое описание в виде истории клиентских транзакций глубиной в год. Дополнительно был представлен тип выданного продукта. Обучающая выборка состоит из выдач за период в N дней, тестовая выборка содержит выдачи за последующий период в K дней. Всего в датасете содержалось 450 миллионов транзакций, объемом порядка 6 гигабайт в формате parquet. Понимая, что такой объем данных может стать серьезным порогом для входа, мы разбили датасет на 120 файлов и реализовали методы пакетной предобработки данных, что позволило решать задачу соревнования с личного ноутбука.

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

Признаки карточных транзакций

название признака

описание

Кол-во уникальных значений

Идентификатор валюты транзакции

Идентификатор типа транзакции

Уникальный идентификатор типа карты

Идентификатор типа операции по пластиковой карте

Идентификатор группы карточных операций, например, дебетовая карта или кредитная карта

Признак электронной коммерции

Идентификатор типа платежной системы

Признак списания/внесения денежных средств на карту

Уникальный идентификатор типа торговой точки

Идентификатор страны транзакции

Идентификатор города транзакции

Идентификатор категории магазина транзакции

День недели, когда транзакция была совершена

Час, когда транзакция была совершена

Количество дней до даты выдачи кредита

Номер недели в году, когда транзакция была совершена

Количество часов с момента прошлой транзакции для данного клиента

Нормированная сумма транзакции. 0.0 — соответствует пропускам

Целевой переменной в соревновании была бинарная величина, соответствующая флагу дефолта по кредитному продукту. Метрикой для оценки качества решений была выбрана AUC ROC.

Базовый подход к решению задачи

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

В случае категориальных признаков можно использовать счетчики вхождений каждого значения каждой категориальной переменной или пойти дальше и использовать вектора из матричных разложений или основанных на них методах: LDA, BigARTM. Последний из которых позволяет получить векторное представление сразу для всех категориальных признаков за счет поддержи мультимодальности. Признаки можно отобрать на основе важности, полученной популярным методом permutaion importance или менее популярным target permutation. С базовым подходом, приносящим 0.752 AUC ROC на public LB, можно ознакомиться на git.

Архитектура нейронной сети

Решать задачу классификации многомерных временных рядов можно методами, используемыми в классификации текстов, если мысленно заменить каждое слово текста набором категориальных признаков. В области обработки естественного языка принято ставить каждому слову в соответствие числовой вектор, размерности сильно меньше, чем размера словаря. Обычно вектора слов предобучают на огромном корпусе текстовых документов методами обучения без учителя: word2vec, FastText, BERT, GPT-3. Основной мотивацией предобучения являются огромное количество параметров, которое нужно выучить в виду большого размера словаря и обычно небольшого размеченного датасета для решения прикладной задачи. В данной задаче ситуация обратная: менее 200 уникальных значений для каждой категориальной переменной и большой размеченный датасет.

Резюмируя вышесказанное, векторного представление для каждого категориального признака можно получить, используя стандартный Embedding Layer, работающий по следующему алгоритму: в начале задается желаемый размер векторного представления, затем инициализируется LookUp матрица из некоторого распределения, далее ее веса учатся вместе с остальной сетью методом backpropagation. Размер эмбеддинга обычно выбирается равным или меньше половины числа уникальных значений категориального признака. Любой вещественный признак можно перевести в категориальный операцией бинаризации. Вектор для каждой транзакции получается из конкатенации эмбеддингов, соответствующих значениям ее категориальных признаков.

Далее последовательность векторов транзакций отправим в BiLSTM для моделирования временных зависимостей. Затем избавимся от пространственной размерности при помощи конкатенации GlobalMaxPool1D и GlobalAveragePool1D для последовательностей векторов из рекуррентного и эмбеддинг-слоев. В итоге, предварительно пропустив полученный вектор через промежуточный полносвязный слой, остается добавить полносвязный слой с sigmoid для решения задачи бинарной классификации.

Читайте также:  Предсказания по линиям руки хиромантия

Обучение нейронной сети

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

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

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

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

Cyclical Learning Rate благодаря стратегии изменения LR позволяет не переобучаться на первой эпохе за счет низкого базового LR и не застревать в локальных минимумах за счет пилообразной-затухающей стратегии. Гиперпараметры base_lr и max_lr можно задать при помощи алгоритма LRFinder. Дополнительно стоит обратить внимание на One Cycle Policy и Super-Convergence.

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

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

Каждая транзакция описывается большим количеством признаков, отбор признаков может улучишь качество модели.

Можно закрепить все полученные теоретические знания на практике, сделав сабмит в песочнице соревнования.

Продакшн

Транзакции в hadoop обновляются раз в день, поэтому online-обработка не требуется, в худшем случае нужно успевать прогонять pipeline за 24 часа. Pipeline реализован в виде DAG на airflow, состоящем из следующих этапов:

Дозагрузка и агрегация новых данных на pyspasrk. В модели используется история транзакции по каждому пользователю за предыдущий год. Оптимальным сценарием является поддержание исторических предобработанных данных на момент предыдущего запуска модели с добавлением новых данных. На выходе: относительно-компактный parquet-датафрейм.

Предсказание на python с использованием одного из фреймворка: tensorfow, pytorch. На выходе: tsv-таблица, содержащая id и множество полей с предсказаниями моделей.

Выгрузка предсказаний в hadoop и на вход финальной модели.

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

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

Источник

Оцените статью