Skip to content

Creation of an ML product to identify and optimize payment for teachers of educational services

Notifications You must be signed in to change notification settings

denis-42ds/identification_and_optimization_of_payments

Repository files navigation

Название проекта: Построение ML-продукта для выявления и оптимизации платежей преподавателей сервиса Repetit.ru

Заказчик: Сервис по подбору репетиторов Repetit.ru

Статус проекта: завершён

Описание рабочих файлов:

  • requirements.txt - библиотеки Python, необходимые для работы проекта, а также их версии
  • payments_optimization.ipynb - рабочая тетрадь с исследованиями, визуализациями и текстовыми описаниями
  • research_class.py - файл, содержащий класс для проведения исследования
  • assets - директория с сохранёнными артефактами
  • run_mlflow_server.sh - скрипт для запуска mlflow server

Описание проекта

Сервис передает контакты клиента (ученика) репетитору.
Если репетитор начинает заниматься с учеником, то он должен платить сервису комиссию от каждого занятия.
Но в реальности так происходит не всегда. Иногда, это из-за того, что репетитор звонит по телефону и ему просто не отвечают.
Некоторые репетиторы плохо договариваются о занятиях или обманывают.
Сервис теряет деньги каждый раз, когда отдаёт заявку неэффективному репетитору.
Заказчику нужно как можно раньше понять, что репетитор недобросовестный или мошенник,
чтобы отключить его от сервиса и отдавать заявки ответственным репетиторам.

Сейчас эта задача решается ручным просмотром сотрудниками или никак.

Признаки обмана, выявленные при ручной проверке

Заказчик произвел ручную проверку репетиторов на предмет мошенничества (звонки клиентам и так далее).
Выяснилось, что 20% обманывают нас так или иначе.

  • Несоответствие цены в заявке, в анкете репетитора и реальной
  • 1 занятие на ученика (соотношение к общему кол-ву занятий)
  • Разная стоимость с разными учениками
  • Разная стоимость уроков с одним учеником
  • Стоят занятия в расписании, а оплат нет
  • Когда у репетитора по разным ученикам оплаты рядом по времени, то он сам оплачивает
  • Как часто заходит в приложение - если редко, то сам оплачивает
  • Статус заявки договорились о занятиях, оплат нет более недели (и не перенесено)
    • status в orders = 9
    • lessons с amount_payed > 0 за последнюю неделю
  • Ученик не отмечен как завершенный, а оплат нет
    • В качестве примера, есть SQL запрос позволяющий получить данную информацию
  • Репетитор отчитался, что провёл платное занятие, оплаты нет
    • В качестве примера, есть SQL запрос позволяющий получить данную информацию
  • Цена ниже 500 р. в регионах, ниже 700 в мск

Цель проекта

  • построение автоматизированного решения для выявления и оптимизации платежей

Задачи:

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

Ход исследования

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

Используемые инструменты

PostgreSQL, MLflow, Python: pandas, psycopg2-binary, phik, matplotlib, seaborn, sklearn

Заключение:


Отчёт по выполненным в ходе исследования шагам.

Загрузка и ознакомление с данными

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

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

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

Разведочный анализ

  • шаг выполнен полностью, трудностей не возникло;
  • исследованы зависимости и корреляции признаков;

Разработка новых синтетических признаков

  • в данном исследовании этот шаг не понадобился:
    признаков достаточно для получения устойчивых положительных результатов;

Отбор финального набора обучающих признаков

  • шаг выполнен полностью, трудностей не возникло;

Выбор и обучение моделей

  • шаг выполнен полностью, трудностей не возникло;
  • обучены простые модели: логистическая регрессии и случайный лес;
  • в качестве baseline использована логистическая регрессиия
    с дефолтными настройками на датасете с минимальным набором данных;
  • наиболее высокое качество предсказания по метрике F1 на кросс-валидации показал случайный лес: 0.619

Итоговая оценка качества предсказания лучшей модели и фнализ важности её признаков

  • шаг выполнен полностью, трудностей не возникло;
  • исходя из матрицы ошибок, можно сделать следующие выводы:
    • Модель верно предсказала 27690 отрицательных случаев и 8295 положительных случаев.
    • Модель ошибочно предсказала 8711 положительных случаев как отрицательные (ложноотрицательные) и
      1630 отрицательных случаев как положительные (ложноположительные).
  • Метрики на тестовой выборке:
    • ROC-AUC на тестовой выборке: 0.88
    • F1 на тестовой выборке: 0.62
  • Наиболее важными признаками обозначены:
    lessons_delivered, mean_lesson_price, lessons_started_fraction, lessons_per_pupil

Выполнено дополнительно

  • поднятие базы PostgreSQL и загрузка данных в неё;
  • логирование моделей и метрик при помощи MLflow

Общий итог

  • для решения поставленной задачи оптимальным образом подходит модель Random Forest Classifier

About

Creation of an ML product to identify and optimize payment for teachers of educational services

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages