Бангладеш - развивающаяся страна, экономика которой быстро растет. ВВП на душу населения в Бангладеш вырос до 1516 долларов США в 2017 году по сравнению с 88 долларами США в 1960 году. У физических лиц теперь больше располагаемых доходов, и инфраструктура страны также значительно улучшилась. У большинства банков есть банкоматы по всей стране.

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

Модель

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

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

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

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

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

Веб-разработка с Django

Я занимаюсь машинным обучением. У меня нет большого опыта веб-разработки, но я немного поработал с Flask. Я не ожидал, что django окажется таким чудовищем, каким он является на самом деле. Для новичка довольно сложно заставить работать конфигурации URL-адресов django. Django как фреймворк поставляется с множеством функций, таких как проверка пользователя, аутентификация, регистрация и т. Д., Из коробки, но он предполагает, что разработчики будут работать по принципу «django».

Проект django - это, по сути, один проект, состоящий из нескольких «приложений». При необходимости приложения можно переносить из одного проекта в другой. В Django также есть много других пакетов Python, поэтому добавить такие вещи, как социальная аутентификация, довольно просто. Конфигурации URL-адресов должны быть изначально определены на уровне проекта, а затем при необходимости перенаправлены на уровень приложения. Django - это классическая среда MVC, работающая с представлениями модели-шаблона, где модель - это модель, шаблоны - это традиционные представления в MVC, а механизм контроллера выполняется с помощью представлений.

Запрос, отправленный от клиента, сначала сопоставляется с URL-адресом и отправляется соответствующей функции или классу представления, представление обрабатывает запрос и возвращает соответствующий ответ.

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

В качестве базы данных использовалась SQlite, поскольку это был демонстрационный проект, и у нас было всего 130 карт в наборе данных карт. Мы добавили функции аутентификации пользователей, установив правильные URL-адреса django, социальную аутентификацию с помощью Gmail и общие функции поиска, чтобы сделать проект лучше. Честно говоря, работа с фронтендом меня не особо интересует, все время это был самонастраивающийся копипаст.

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

Используемый API местоположения был HERE Technologies, который представляет собой отличный интуитивно понятный API для обработки местоположения. Карты Google требовали от меня оплаты кредитной картой, и я не хотел начинать оплачивать учебный проект. Для отображения ближайших банков пользователь вводит район и город, HERE API, к сожалению, не так точен для таких стран, как Бангладеш. Затем текст геокодируется с помощью API геокодирования HERE, и извлеченные значения широты и долготы используются для поиска по ближайшим банкам в заданном радиусе.

Интеграция с Google Dialogflow

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

Чат-бот подключается к моей машине через ngrok, который надежно делает сервер localhost публичным. Приложение-фляга с кодом бота работает на локальном хосте. Словарь Dialogflow имеет множество конструкций, таких как намерения, сущность и т. Д., Здесь я сосредоточусь на изложении основ в нескольких строках.

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

Собранные данные отправляются на сервер через веб-перехватчик с запросом на выполнение. Запрос выполнения - это запрос JSON, который отправляется на URL-адрес веб-перехватчика. Сервер подключается к моей машине localhost с помощью ngrok, моя машина запускает код, находит рекомендации и отправляет ответ выполнения чат-боту. Этот ответ в конечном итоге показан. Так выглядит типичный запрос на выполнение.

Демо чат-бота

Это демонстрационный разговор.