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

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

Оглавление:

1. Определение бизнес-проблемы

2. Обзор данных

3. Подход к решению проблемы

4. Предпосылки

5. Дедупликация данных

6. Вменение данных и очистка данных

7. Исследовательский анализ данных

8. Предварительная обработка данных

9. Разработка функций

10. Создание окончательного обработанного набора данных

11. Разделение набора данных

12. Настройка гиперпараметров

13. Обучающая модель машинного обучения

14. Вероятность слияния двух моделей машинного обучения

15. Оценка

16. Производство модели машинного обучения с использованием Flask

17. DEMO OF Santander Рекомендации по продукту:

18. Заключение и будущая работа

19. Ссылки

1. Определение бизнес-проблемы:

Бизнес-задачу использования методов рекомендации продуктов в банках можно сформулировать следующим образом:

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

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

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

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

2. Обзор данных:

Данные для этой задачи собраны из этого конкурса kaggle.

Файлы и форма:

train_ver2.csv -> 13 647 309 записей с 48 столбцами

test_ver2.csv -> 929 615 записей с 48 столбцами

Данные разделены на 2 части: первые 24 столбца в наборе данных содержат информацию о клиенте, а следующие 24 столбца содержат информацию о покупке продукта.

Данные, связанные с клиентом, включают такие столбцы, как «Страна проживания клиента», «Возраст», «Пол», «Старшинство», «Тип клиента», «Название провинции» и т. д. Данные, связанные с продуктом, включают такие поля, как «Сберегательные счета», «Гарантии», «Текущие счета» и т. д.

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

Столбец «Ncodepers» содержит код клиента, уникальный для каждого клиента.

3. Подход к решению проблемы:

Самая большая проблема в текущей системе — неравномерность рекомендаций продуктов пользователям. Santander Bank не предоставляет кода для проверки работы текущего алгоритма. Мы предполагаем, что пользователям, которые купили больше продуктов, рекомендуется больше связанных продуктов, а пользователям, которые купили меньше продуктов, рекомендуется меньше продуктов.

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

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

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

4. Предпосылки:

Этот блог предполагает знакомство с

Язык кодирования: Python

Алгоритмы машинного обучения: Наивный Байес, Логистическая регрессия, Случайный лес, LGBM

5. Дедупликация данных:

i) Для данных, связанных с продуктом:

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

Зачем заменять максимальным значением?
 – Если значение для некоторого пользователя u и продукта p равно 1, то это будет означать, купил ли пользователь продукт через 1,5 года.
 – Если пользователь купил продукт, то он с большей вероятностью купит продукт снова. Таким образом, будет 1, если пользователь купил продукт через 1,5 года.
- Если 0, это означает, что пользователь не покупал продукт.

ii) Для данных, связанных с клиентом:

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

6. Вменение данных и очистка данных:

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

i) Столбцы, связанные с продуктом:

Столбцы «ind_nomina_ult1», «ind_nom_pens_ult1» относятся к продуктам. Столбцы и ss 0 представляют, купил ли клиент продукт или нет, поэтому мы можем заменить все нулевые значения на 0.

ii) Столбцы, связанные с клиентами:

Есть аналогичное количество значений, которые являются нулевыми в 7 столбцах, т.е. 7031. Таким образом, удаление этих строк из обоих фреймов данных. Размер набора данных составляет 13 647 309, поэтому мы можем позволить себе их удалить.

УДАЛЕНИЕ «tipodom», поскольку nomprov уже содержит название провинции, а также «cod_prov», поскольку он содержит код провинции, а nomprov содержит название провинции. Итак, cod_prov не добавит никакой ценности.

Сумма нулевых значений столбцов «ult_fec_cli_1t» и «conyuemp» составляет 927932, что очень много, близко к длине набора данных. Так что это не будут полезные функции для прогнозирования. Таким образом, мы можем удалить их.

Категориальные функции, такие как «sexo», «indrel_1mes», «tiprel_1mes», «segmento», имеют меньшее количество пропущенных значений, поэтому заменяют их наиболее часто встречающимися значениями в этом столбце.

Категориальные функции «canal_entrada» и «nomprov» имеют большое количество категориальных значений, поэтому создаются новые категории «NUL», «MIS» для замены нулевых значений этих функций, чтобы избежать дисбаланса классов.

ПРИМЕЧАНИЕ. Эти отсутствующие значения можно заменить другими методами.

Описание значений в столбце ренты выглядит следующим образом:
мин. 1202,73
макс. 28894395,51
среднее 134096,42
медиана 101489,34
Что указывает на то, что в этом столбце есть выбросы. Некоторые пользователи платят очень высокую арендную плату. Замена нулевых значений средним значением не является хорошим вариантом. Поэтому замените все нулевые значения в столбце «renta» медианой.

7. Исследовательский анализ данных:

И. ВОЗРАСТ

НАБЛЮДЕНИЯ:

  • Большинство Пользователей в возрасте от 18 до 26 лет.
  • Распределение от 19 до 26 лет и от 35 до 51 года Красиво распределено.
  • Минимальный возраст пользователя — 2 года, максимальный — 164 года.
  • Максимальное количество пользователей 51365 для возраста 24
  • Минимальное количество пользователей: 1 в возрасте 164, 115, 127 лет.
  • 50% пользователей моложе 38 лет и 90% пользователей моложе 64 лет.
  • Только 1% пользователей имеют возраст менее 1 года
  • Количество клиентов уменьшается после 26 лет

II. SEXO(пол пользователя)

НАБЛЮДЕНИЕ:

  • Интересный!!! В возрастной группе от 18 до 33 лет пользователей больше, чем мужчин.
  • Количество пользователей мужского пола довольно велико во всех других возрастных группах.

III. fecha_alta
А. fecha_alta_month_count
Дата, когда клиент стал первым держателем контракта в банке.
Из поля даты можно создать несколько признаков. Для нашей задачи Месяц и День в неделе наиболее полезны. Итак, создайте fecha_alta_month_count и fecha_alta_day_count.

НАБЛЮДЕНИЕ:

  • 50% Пользователей стали первыми держателями контракта за 4 Месяца Июль, Сентябрь, Октябрь, Ноябрь.
  • Наибольшее количество Пользователей стало первым обладателем контракта в октябре месяце, а наименьшее - в июне.
  • Пользователи молодого возраста, как правило, становятся первыми обладателями контракта с июля по ноябрь.
  • Пользователи среднего возраста, как правило, становились первыми обладателями контракта с января по июнь.

Б. fecha_alta_day_count

Наблюдения:

  • Менее 5% Пользователей стали первыми держателями контракта По субботам и воскресеньям.
  • Наибольшее количество пользователей выбирает понедельник для покупки продукта, а наименьшее количество пользователей выбирает воскресенье.

IV. Антигедад (старшинство пользователей)

Наблюдения:

  • Более 56% пользователей имеют менее 60 месяцев опыта
  • Количество пользователей со стажем от 120 до 180 месяцев — самое низкое, а от 24 до 60 месяцев — самое высокое.
  • Количество женщин-пользователей со стажем от 24 до 60 месяцев больше, чем мужчин

В. tiprel_1mes
Тип отношения с клиентом на начало месяца, A (активный), I (неактивный), P (бывший клиент),R (потенциальный)

НАБЛЮДЕНИЯ:

  • Более 57% пользователей неактивны в начале месяца
  • Более 150 000 человек в возрасте от 33 до 50 лет активны на начало месяца
  • Более 250 000 человек в возрасте от 18 до 33 лет неактивны в начале месяца

VI. canal_entrada
канал, используемый клиентом для присоединения

Наблюдение:

  • 75% пользователей используют только 4 канала для присоединения
  • «KHE» является наиболее используемым каналом, за ним следуют «KAT» и «KFC».
  • На каналах KHE и KHQ больше женщин, чем мужчин.
  • У каналов KHE и KHQ больше молодых пользователей
  • В то время как у KFC и CAT больше пользователей среднего возраста.

VII. nomprov(название провинции)

Наблюдения:

  • Более 50% пользователей принадлежат к 5 Proviences
  • Колоссальные 32,07% пользователей принадлежат MADRID Provience.
  • Далее следуют БАРСЕЛОНА (9,53%), ВАЛЕНСИЯ (5,16%), СЕВИЛЬЯ (4,36%) и КОРУНАА (3,08%).
  • В таких странах, как Барселона, Валенсия, Аликанте, Маланга, женщин больше, чем мужчин.
  • В провинции МАДРИД больше пользователей среднего возраста

VIII. сегменто

НАБЛЮДЕНИЯ:

  • Менее 4% от общего числа пользователей являются VIP
  • Около 60% пользователей не закончили обучение

iX. EDA в наборе данных о продуктах

Наблюдения:

  • ind_aval_fin_ult1 — самый покупаемый продукт
  • ind_ahor_fin_ult1, ind_cder_fin_ult1 и ind_deme_fin_ult1 — наименее покупаемые товары.

8. Предварительная обработка данных

  • Преобразование всех категориальных признаков в векторы с использованием одного горячего кодирования.
  • Обработанный числовой признак «рента» с использованием стандартного скаляра.

9. Разработка функций

  • Столбец Feature Engineered fetch_alta для получения месяца и дня для создания 2 новых функций fetch_alta_month и fetch_alta_day
  • Используется объединение данных для преобразования числовых признаков возраста и антигедада в категориальные признаки. Пожалуйста, проверьте «Подсчет графика возраста объекта после разработки объекта» и «Подсчет графика объекта после разработки объекта» в EDA для получения дополнительной информации.

10. Создание окончательного обработанного набора данных

  • Создан новый DataFrame всех предварительно обработанных функций.
  • Сохранил новый DataFrame в один файл.
  • Этот файл содержит все данные, связанные с клиентами, и данные, связанные с продуктами.

11. Разделение набора данных

Поскольку мы уже отсортировали этот DataFrame по идентификатору и дате, лучше использовать разделение по времени.

Мы выберем первые 80% набора данных в качестве набора обучающих данных, а оставшиеся 20% — в качестве набора тестовых данных.

БЫВШИЙ. XTrain будет содержать все функции, кроме последних 24, YTrain будет содержать последние 24 функции.

12. Настройка гиперпараметров

Создана новая функция return_BestParameters для возврата наилучшего параметра для предоставленного алгоритма и параметров машинного обучения.

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

Пример:

13. Обучение модели машинного обучения

После настройки гиперпараметров мы получили следующую оценку точности:

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

Как упоминалось в шаге 3 «Подход к решению проблемы», мы будем использовать 2 метода для обучения нашего набора данных.

Модель А

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

Как?
Используя цикл for, мы будем рассматривать каждую функцию как зависимую переменную, а другие функции — как независимые переменные. Затем мы будем обучать нашу модель для каждого продукта в отдельности.

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

разделение набора данных каждый раз для каждой категории с помощью stratify = y_new, чтобы избежать проблемы дисбаланса классов.

В этом примере мы будем использовать показатель точности в качестве параметра.

После обучения модели id_pred будет содержать вероятности для всех пользователей ncodpers(id).

Модель Б

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

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

Эта модель будет точно следовать шагам, описанным выше, за исключением того, что x_new будет только данными, связанными с клиентом.

14. Объединение вероятностей двух моделей машинного обучения

Чтобы не рекомендовать один и тот же продукт пользователям дважды, мы создадим новый словарь «уже_активный». Этот словарь будет содержать идентификаторы и уже купленные товары для каждого идентификатора.

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

Используя этот словарь, мы получим 7 лучших товаров, которые пользователь еще не купил. мы порекомендуем эти 7 лучших продуктов пользователю.

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

Помните график «Подсчет покупок всех продуктов»? Этот график содержит количество всех продуктов, купленных пользователями.

Используя этот график, мы порекомендуем пользователю 7 самых покупаемых продуктов.

15. Оценка

Оценка конкурса kaggle выглядит следующим образом:

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

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

Средняя точность для обеих моделей составляет 92,65%.

16. Производство модели машинного обучения с использованием Flask

Я использовал флягу для производства вышеуказанной модели. Ниже приведены скриншоты и изображения для справки.

17. DEMO OF Santander Рекомендации по продукту:

18. Заключение и будущая работа

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

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

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

19. Ссылки

Не стесняйтесь обращаться ко мне в LinkedIn, если у вас есть какие-либо вопросы или предложения. Вы можете найти полный код этого проекта на моей странице GitHub.