Skip to content

kremogen/moretech-MobileMap

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

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 5