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

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

Пример решения задачи с использованием 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
.

Источник

Статистика по клиентам

банка «Сохранбанк» есть короткий номер 800 на который клиенты отправляют смс сообщения для совершения транзакций. Каждая транзакция имеет вид:

где набор цифр до символа «-» является номером телефона клиента, далее следует тип транзакции, а после двоеточия следует сумма в копейках для ее совершения.

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

Если вместо транзакции передана фраза «print_it», то функция печатает информацию обо всех типах поступивших транзакций в том порядке, в котором впервые встретились их наименования. Информация о каждой транзакции выводится на отдельной строке и состоит из количества транзакций данного типа, наименования типа транзакции и количества потраченных денег.

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

Пример
Ввод
get_transactions(‘880005553535-перевод:100’)
get_transactions(‘111111111-перевод:1000’)
get_transactions(‘880005553535-оплата_жкх:10000’)
get_transactions(‘89065664312-перевод:50000000’)
get_transactions(‘print_it’)
Вывод
3 перевод 50001100
1 оплата_жкх 10000

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Статистика биржевой деятельности и статистика спроса
Очень поджимают сроки, сдать нужно ЗАВТРА! Сам сделал 12 задач, думал и с этими справлюсь, но, к.

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

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

Читайте также:  Как можно объяснить что предсказание погоды

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

Источник

Предсказание чего угодно с использованием Python

Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python.

Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между временными сериями (в данном случае возьмем в качестве сигнала взаимный фонд XLF из финансового сектора, сдвинутый по времени на 1 день назад), а нашей целью будет фьючерс S&P500 в форме CFD. Будем входить в длинную позицию по этой бумаге при нулевой вероятности приращения. Логически нулевая вероятность ни о чем не говорит, другими словами, будем покупать возврат к среднему.

1. Получение данных

2. Далее мы конструируем матрицу ошибок.Если сигнал растет и S&P500 растет — это истинное положительное значение, если сигнал вверх, а S&P500 -вниз, это ложное положительное значение, то же для отрицательных сигналов. Мы делаем это двумя способами:

3. Преобразуем сигналы в булевы переменные, используя скользящую сумму из 10 значений по всем сигналам:

4. Теперь попытаемся определить вероятность сигналов обоих направлений. Для этого используем простую формулу частот:

смысл которой в том, что вероятность события равна числу желаемых событий, деленных на число всех возможных событий:

5. Вычислим вероятности противоположных событий:

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

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

Ниже — график просадок:

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

Источник

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

Клиент банка может совершить до нескольких тысяч транзакций по дебетовым и кредитным картам за год. Банк же в свою очередь сохраняет всю история пользовательских операций на своей стороне. В итоге образуется огромный объем данных, достаточный для того, чтобы на текущий момент его можно было смело называть модным словом 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 и на вход финальной модели.

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

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

Источник

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