FinTech представляет собой прорыв в цифровой трансформации финансовой отрасли. Такие стартапы, как Wise (ранее известный как Transferwise), Monzo и многие другие, начали с услуг денежных переводов и денежных переводов и превратились в цифровой банк без границ. Конкуренция в FinTech становится все более жесткой, поскольку такие известные игроки, как Samsung, Walmart и Google, открыли свои электронные кошельки.

Чтобы выжить в конкурентной борьбе, учреждения FinTech используют разные стратегии. Некоторые расширили сервис и охватили криптовалюты, а некоторые другие работают вместе в симбиотических отношениях. Одним из примеров является интеграция Wise и Google Pay, чтобы их пользовательская база могла отправлять деньги за границу. Как и почти любая бизнес-модель B2C, одна общая стратегия - сохранить пользовательскую базу, оставив текущего пользователя довольным.

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

Часть I:
1. Определение взаимодействия
2. Прогнозирование взаимодействия (конвейер данных, извлечение функций и обучение модели с использованием pySpark и Scikit-Learn)
3. «Модель оценка"

Часть II:
4. Проектирование вмешательства (контекстная система рекомендаций с использованием ALS)
5. Проектирование A / B-тестирования
6. Оценка и интерпретация результатов

Данные и кодовая база

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

Данные, записные книжки и полная кодовая база доступны по адресу: https://github.com/kristiyanto/fintech-user-engagement.

Часть I. Определение и прогнозирование взаимодействия

Определение вовлеченности

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

Хотя более простой, универсальный подход может упустить определенную группу пользователей. Естественно, что пользователи FinTech пользуются сервисом по-разному. Некоторые могут делать разовые или ежемесячные денежные переводы для отправки денег семье за ​​границу. Некоторые другие могут использовать эту услугу ежедневно с дебетовыми картами или получать входящие переводы в качестве продавца.

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

В этом случае отключенный пользователь - это пользователь, который не совершал никаких транзакций дольше обычного. Например, ежемесячный пользователь считается выбывшим пользователем, если с момента его последней транзакции прошло больше месяца; в то время как для еженедельных пользователей, если с момента последней транзакции прошло больше недели. Поскольку шаблоны могут меняться с течением времени, другой вариант этого решения - иметь дату отсечения (например, рассматривать данные только за последние 6 месяцев).

Интерпретация машинного обучения

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

1. Прогнозирование временных рядов или регрессия: прогнозирование количества действий, которые пользователь или группа пользователей совершит за период
2. Модель выживания или регрессия: прогнозирование следующего действия на индивидуальном уровне < br /> 3. Классификация: предсказать, будет ли пользователь выбывшим из системы на индивидуальном уровне.

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

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

y = end_of_month(days_between_transaction > 90_percentile_of_ days_between_transaction)
y^ = next_month(y)

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

Конвейер машинного обучения

Это решение использует два конвейера данных:
a) Spark Pipeline для приема, очистки, извлечения функций и исследования данных. Входом в этот конвейер является файл необработанных данных, а на выходе - наборы данных структурированных функций, которые можно использовать для различных последующих этапов, включая информационные панели и обучение модели, а также вмешательство и A / B-тестирование (часть II рукописи).

б) Конвейер Scikit-Learn для конкретных задач с данными модели. Входными данными являются данные функции (выход искрового конвейера), а выходными данными - обученная модель / прогноз. Этот конвейер вводит функцию и выполняет дополнительную предварительную обработку данных, вменение, выбор функций (как одномерных, так и многомерных) и обучение модели.

Особенности извлечения

Хотя обучающие данные достаточно малы, чтобы поместиться в компьютере, при вычислении признаков используется pyspark, чтобы конвейер мог работать в более крупном масштабе. Компоненты собраны в индивидуальном трансформаторе pyspark и выполнены в искровом трубопроводе.

Функции извлекаются в логические сегменты (историческая активность, время и недавность, демографические данные и т. Д.), Которые можно легко расширить или использовать для других целей, например для создания отчетов Business Insight (BI).

Ниже показан пример сборки конвейера извлечения признаков. Выходные данные этого конвейера можно сохранить как артефакт для упрощения развертывания или управления версиями.

Предварительная обработка

Задача предварительной обработки для каждой функции определяется ее функциональностью и типом данных. Категориальные признаки преобразуются в быстрое кодирование, и вменение данных не требуется. Неразрушающая предварительная обработка данных выполнялась в pyspark для повышения удобства использования (BI или ML). Это означает, что данные сохраняются в той же степени, что и исходные, с минимальным условием вменения или фильтрации.

Неразрушающая предварительная обработка данных выполнялась в pyspark для повышения удобства использования (BI или ML). Это означает, что данные сохраняются в той же степени, что и исходные, с минимальными манипуляциями, такими как вменение данных или фильтрация.

Дополнительная обработка данных, используемая только в ML, такая как преобразование журнала или стандартизация, выполняется в конвейере scikit-learn (подробнее об этом ниже).

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

Напротив, только одна переменная / характеристика, user_isDropOutCurrentMonth, сильно коррелирует с корреляцией is_dropOut_nextMonthwith 0,97. Корреляция показывает, что отключенные пользователи в этом месяце, вероятно, будут отключены в следующем месяце. По этой причине user_isDropoutCurrentMonth исключен из списка функций. Эта информация также предполагает, что ранняя профилактика имеет решающее значение; пользователи, которые пользователи этого месяца, скорее всего, перенесут на следующие месяцы.

Модельное обучение и базовый уровень

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

Хотя pyspark имеет встроенный случайный лес, для удобства обучения модели используется scikit-learn. При необходимости конвейер можно легко написать как конвейер pyspark, используя как встроенные, так и настраиваемые преобразователи.

Конвейер включал в себя дополнительную предварительную обработку, такую ​​как:
- выполнение стандартизации для некоторых выбранных функций
- преобразование некоторых функций в логарифмические
- одномерный выбор функций путем удаления однородных функций
- многомерный выбор объектов с использованием случайного выбора объектов леса

Затем grid-search-cv настраивает гиперпараметры, чтобы найти лучшую конфигурацию для каждого шага конвейера.

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

Оценка и диагностика модели

Произвольный лес выполнен с AUC 0,9 ​​на данных обучения и 0,94 на данных тестирования. На каждой итерации расхождение между обучением и тестированием неизменно низкое, что указывает на то, что модель не переоснащается. По мере поступления дополнительных данных улучшение отмечалось почти по всем показателям. Модель также превзошла базовую модель во всех итерациях.

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

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

Стратегия развертывания
Пайплайны pyspark и scikit-learn можно легко сохранить как файл или артефакт. Хранение, управление версиями и развертывание этих артефактов полностью поддерживаются MLFlow или другой структурой развертывания машинного обучения.

Часть II: Планирование вмешательства и эксперимента по AB-тестированию

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

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

Существует множество различных подходов к увеличению использования банкоматов:
1. Анализ, оценка, партнерство с поставщиками сетей банкоматов; стратегически стремясь расширить услуги
2. Снизить комиссию за транзакции в банкоматах
3. Повысить осведомленность о текущих услугах банкоматов
4. Предложить рекламные акции или стимулы для тех, кто не пользуется услугой достаточно для перехода

Может применяться любая из комбинаций вышеперечисленных решений. Однако, учитывая сложные бизнес-контракты, стоимость и другие соображения, решения 1 и 2 являются дорогостоящими и могут быть рискованными с точки зрения окупаемости инвестиций. Используя уже существующую платформу (приложения или Интернет), решения 3 и 4 более осуществимы с минимальным риском или без него.

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

Рекомендательные системы

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

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

- Основанная на правилах / экспертная система: например, рекомендовать (или поощрять) всех, кто не пользовался услугой банкомата, воспользоваться этой услугой.

- Совместная фильтрация: например, пользователи, которые часто используют банкоматы в Нью-Йорке, обычно часто используют банкоматы в Канкуне. Поэтому продвигайте использование банкоматов в Канкуне для жителей Нью-Йорка. Общие методы включают матричную факторизацию (ALS, SVD, NMF) и ее вариации.

- Соседство / сходство: например, если пользователь часто пользуется банкоматом в Нью-Йорке, скорее всего, он также будет использовать банкомат в Лондоне (поскольку Нью-Йорк и Лондон похожи). Поэтому предоставляйте рекламные акции (скидки / поощрения), если они проводят транзакции в Лондоне для этих пользователей. Общие методы включают k-среднее, LSH или другие модели, основанные на сходстве, ранжирование или методы поиска информации.

- Глубокое обучение / другие сложные модели: например, если пользователь сегодня использует банкомат в Нью-Йорке, следующим городом, скорее всего, будет Вашингтон, округ Колумбия. Поэтому предоставляйте рекламные акции (скидки / поощрения), если они проводят транзакции в Вашингтоне для этих пользователей. Общие методы включают LSTM, RNN или его разновидности.

- Гибридные рекомендательные системы: любая комбинация вышеперечисленного.

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

Учитывая доступные данные, совместная фильтрация (вариант 2) в сочетании с рекомендациями на основе правил (вариант 1). Эта конфигурация подходит для экспериментального исследования и достаточно проста в исполнении. Результат может служить ориентиром для будущих моделей или улучшений.

Контекстная рекомендательная система

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

Для начала мы будем использовать месяц года в качестве контекста. Поскольку данные ограничены (нет геоданных или информации о продавце), мы можем переосмыслить проблему и уменьшить ее. Например: для каждого пользователя составьте рейтинг пяти городов, в которых, вероятно, будут использоваться банкоматы, и укажите для этих городов специальные тарифы. В качестве контекста мы будем использовать месяц года. Например, пользователи, которые обычно используют банкоматы в Нью-Йорке, с большей вероятностью будут использовать банкоматы во Флориде в феврале и в Чикаго в августе.

Разработка контекстной рекомендации с использованием ALS

Альтернативный метод наименьших квадратов (ALS) - один из распространенных методов, используемых для совместной фильтрации. Как и другие методы совместной фильтрации, ALS разлагает исходную матрицу (пользователя и взаимодействие) на матрицы U и V, например, умножение обеих матриц дает близкое приближение к исходной матрице. Что отличает ALS от других, так это то, как ALS изучает и приближает U и V.

В то время как некоторые другие алгоритмы используют градиентный спуск или другие методы, ALS использует методы, аналогичные обычным методам наименьших квадратов (OLS) в задачах регрессии. ALS обычно лучше работает с зашумленными данными, например, при вводе ранжирования (неявное ранжирование). Упрощенное объяснение того, как учится ALS:

  1. Он начинается с псевдослучайной инициализации U и V.
  2. Изучите матрицу V, выполнив вариант OLS для каждой строки в матрице V, с каждой строкой в ​​качестве признака и соответствующим вектором-столбцом из исходной матрицы в качестве метки.
  3. Аналогично шагу 2; за исключением того, что мы переключаемся с вектором-столбцом в матрице V в качестве признаков и соответствующей ему строкой из исходной матрицы в качестве метки.
  4. Итерирует до тех пор, пока не сойдется или не будет достигнута максимальная итерация.

В Spark ML есть ALS, поэтому нам не нужно реализовывать алгоритм с нуля. Кроме того, совместная фильтрация приводит к большим и разреженным матрицам, а искровое машинное обучение можно легко масштабировать.

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

ALS оценивается путем сравнения исходной матрицы и восстановленной матрицы. Сравнение может быть рассчитано путем измерения средней абсолютной разницы (MAE) или среднеквадратического значения ошибки (RMSE) для исключения больших ошибок. Модель ALS для этого упражнения дает RMSE: 2,4 и MAE: 1,8.

Разработка A / B-тестирования

В научных исследованиях (обычно называемых рандомизированными контролируемыми испытаниями, РКИ) и в промышленности A / B-тестирование является золотым стандартом методологии изучения причинно-следственных связей. Как правило, A / B-тестирование включает в себя:
1. Случайное разделение когорты людей
2. Применение лечения в одной из групп в течение определенного периода времени
3. Оцените, есть ли любые различия в результатах между группами
4. Решите, что делать дальше.

Для каждого шага, описанного выше, необходимо рассмотреть множество различных вариантов методов и сценариев:

Шаг 1: выбор когорты

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

В: Сколько пользователей нам нужно для исследования?
О: Количество образцов можно рассчитать с помощью анализа мощности до проведения исследования. Для расчета требуется:
a) метрика для обеих когорт (например, общее количество выбывших пользователей);
b) ожидаемая процентная разница для группы B и частота ошибок
c ) Альфа (ошибка типа 1 / ложноположительная частота, обычно 5% или ниже) и
d) мощность (ошибка типа 2 / ложноотрицательная частота, в идеале 80% или выше).
Параметры b, c и d можно отрегулировать, и чем точнее результаты, тем обычно требуется больший размер выборки.

Более подробная информация об анализе мощности доступна здесь.

В: Как убедиться, что группы A и B сопоставимы?
A: Один из методов - выполнить стратифицированную случайную выборку. Уровень может быть определен на основе демографических, географических или других данных пользователя, особенно предполагаемых смешивающих факторов.
Тестирование (параметрическое или непараметрическое) по размерам выборки, распределению слоев и KPI / метрикам измерения также необходимо выполнить, чтобы убедиться, что обе группы похожи.

Более подробная статья о том, как проектировать размер и выбор когорт, доступна здесь.

Шаг 2: экспериментирование

В: Что нужно делать по-разному в разных группах?
О: Для контрольной группы (группа А) ничего делать не нужно, кроме записи показателей.

Для лечебной группы (группа B) рекламные сообщения (электронная почта или push-уведомления) отправляются с определенным интервалом. Система рекомендаций создает список городов, персонализированный для каждого человека, на основе их исторических данных и месяца года в качестве контекста. Пользователям предоставляются рекламные ставки, которые представляют собой бесплатную (в виде кэшбэка) комиссию за транзакции через банкоматы, выполненные в этих городах в течение периода исследования.

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

В: Как долго нужно проводить исследование?
О: Для этого нет серебряной пули. Разумный период должен быть достаточно продолжительным, чтобы оценить изменение в поведении. В этом случае, поскольку модель и KPI рассчитываются ежемесячно, исследование можно проводить на квартал.

Шаг 3: результаты и оценка

В: Как мы узнаем, было ли исследование успешным?
О: Перед исследованием необходимо заранее определить показатель. В этом случае количество выбывших пользователей для каждой когорты. Шаг A обеспечивает сопоставимость показателей перед опросом. В течение периода исследования метрики записываются или рассчитываются периодически (например, ежедневно или еженедельно). В конце исследования эти показатели оцениваются с использованием статистических методов (например, парный t-критерий, если показатели обычно распределены или критерий суммы рангов Вилкоксона, если в противном случае, регрессионный анализ для изучения взаимодействия для каждой переменной). Эти статистические анализы завершают результат исследования.

Шаг 4. Последующие действия

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

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

Данные, записные книжки и полная кодовая база доступны по адресу: https://github.com/kristiyanto/fintech-user-engagement.