Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

85 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo

MobileMap MORE.Tech 5.0

Android Kotlin Python Jupiter SQLite FastAPI scikit-learn

  • Команда HyPe Solutions
  • Кейс Mobile
  • Задача: разработать веб/мобильный сервис подбора отделения банка, учитывая потребности и удобство клиента.

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

✍️ Быстрый запуск

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

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

$ git clone https://github.com/kremogen/moretech-MobileMap
$ cd moretech-MobileMap/api
$ python3 server_api.py

📌 Примеры работы приложения

📄 Логика работы

Идея алгоритма

  1. Кластеризация отзывов отделения - может помочь разделять отзывы на группы в зависимости от уровня удовлетворенности клиентов. Это может помочь банку быстро выявить общие проблемы и радости клиентов.
  2. Выделение ключевых слов (тегов) из полученных кластеров - может помочь выявить, какие конкретные аспекты обслуживания вызывают положительные или отрицательные эмоции.
  3. Протестировать разные "пайплайны" при анализе текста (Word2Vec, TF-IDF, Transformers).

Реализация алгоритма подбора тегов

  1. Парсинг отзывов конкретной организации (отделение банка) с помощью Selenium.

  2. Анализ текстов отзывов, который включает в себя:
    2.1 Предобработка текста (лемматизация и выделение только прилагательных и наречий для описания какое отделение).
    2.2 Создание TF-IDF / Word2Vec эмбеддингов (векторное представление) слов на основе предобработанного корпуса.
    2.3 Кластеризация слов в отзывах с помощью алгоритма машинного обучения KMeans.
    2.4 Определение ключевого слова в кластерах (получения векторов слов с помощью предобученной word2vec модели на национальном корпусе русского языка в полном объёме https://rusvectores.org/ru/models/ и нахождение ближайшего слова к усредненному вектору кластера).
    2.5 Определение температуры ключевого слова в % (насколько оно похоже на центр кластера) - можно настроить отображение подсветки тэга от красного 0.0 до зеленого 1.0.

  3. Анализ сентимента отзывов с помощью предобученной модели huggingface rubert-base-cased-sentiment (температура настроения в %).

Файлы, где находится реализация алгоритмов

  1. Парсер - Parser
  2. Сбор ID мест с помощью API Мест яндекс карт для анализа через парсер - review_collect.ipynb
  3. Аналитика отзывов - review_analysis.ipynb (предобработка, применения алгоритмов, анализ ключевых слов, сентимента).
  4. Финальный pipeline для анализа ключевых тегов в отзывах для каждого отделения - tag_collection.ipynb
  5. Собранные теги отделений - tag_collection_word2vec.json

Идея для улучшения

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

Получаем теги, а так-же их температуру в процентах (насколько ключевое слово близко к центру кластера).

Пример реализации

Поиск точек

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

Пример получения данных из радиуса 500м:

import math

EARTH_RADIUS = 6371210  # Радиус Земли
DISTANCE = 500  # Интересующее нас расстояние

def compute_delta(degrees):
    return math.pi / 180 * EARTH_RADIUS * math.cos(deg2rad(degrees))

def deg2rad(degrees):
    return degrees * math.pi / 180

latitude = 55.460531  # Интересующие нас координаты широты
longitude = 37.210488  # Интересующие нас координаты долготы

delta_lat = compute_delta(latitude)  # Получаем дельту по широте
delta_lon = compute_delta(longitude)  # Дельту по долготе

around_lat = DISTANCE / delta_lat  # Вычисляем диапазон координат по широте
around_lon = DISTANCE / delta_lon  # Вычисляем диапазон координат по долготе

Понимание о загруженности Банковского отделения и решение проблемы загружености

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

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

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

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

🛠 Библиотеки

  • Yandex MapKit
  • FastAPI
  • scikit-learn
  • Kotlin

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages