Телеграм бот для тех, кто хочет использовать ML в работе, но не готов писать код

Я работаю менеджером продуктов. В рамках рабочих и личных проектов время от времени делаю аналитику данных. Одни из самых популярных задач для меня во время анализа — поиск зависимостей, прогнозирование, деление клиентов на группы, поиск аномалий/инсайтов. То есть стандартные задачи ML. Для этого я беру готовые ML-библиотеки немного причесываю данные, запускаю обучение модели и затем работаю с ней. Это относительно несложный, но утомительный процесс. У меня есть несколько шаблонов кода для разных ситуаций. Но даже тут надо запускать среду разработки, писать код и прочее. В итоге я пришел к идее еще больше автоматизировать процесс работы с ML и, заодно, дать инструмент для тех, кто не готов писать код, но хочет так же иметь возможность решать схожие задачи в своих проектах. Так родилась идея сделать no-code сервис "ML для домохозяек"👵., который в последствии получил название goML.

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

Команда

Я, конечно, могу сам руками писать код, разворачивать его в докере на сервере и прочее, но я не профессионал в этом. И поэтому у меня это обычно занимает много времени, которое я провожу за чтением документации, Stackoverflow и тематических чатов. В data science я тоже далек от тех, кто занимается этим профессионально каждый день. Поэтому решил привлечь к проекту фрилансера. Мне посчастливилось найти прекрасного исполнителя, который как раз недавно закончил похожий проект, поэтому располагал всем необходимым стеком. Плюс Сергей (а именно так зовут фрилансера) загорелся идеей и много сам проактивно предлагал и исследовал. В общем, я рад нашей dream team, так как хорошая команда - один из главных залогов успешности продукта.

MVP

Для простоты и скорости реализации решили делать первую версию в формате бота для Телеграм. Для MVP взяли только одну ML задачу - классификацию. Суть задачи - научиться предсказывать класс/категорию. Примеры таких задач:

  • Определять, является ли письмо спамом или нет. Тут классы/категории - "спам/не спам".
  • Определять по характеристикам клиента, оформит он подписку или нет (тут классы "купит/не купит").
  • Определять, относится ли операция по банковской карте к мошеннической или нет (мошенник/не мошенник).
  • По симптомам и характеристикам пациентов определять заболевание. Тут категорий может быть много.

В нашем MVP определяемых категорий может быть от 2 до 10.

В момент реализации MVP, осознали, что после обучения модели, бот знает столько всего интересного о данных, что ценности от этой информации достаточно для MVP. Поэтому в первой версии отказались от прогнозирования. Но вместо этого можно узнать не менее (а для меня часто более) ценную информацию:

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

Сейчас у нас бета-версия. То есть, работающий (местами с багами) функционал. Качество пока "на пути к идеалу". Надо дотачивать автоматическую предобработку входных данных, выбор модели и улучшать клиентскую часть.

На данном этапе хочется собрать обратную связь, услышать потребности рынка, подумать о, так называемом, product market fit и... протестировать наш бэкенд;)

Давайте я покажу на примере как работает бот. Так будет более понятно.

Пример работы бота goML

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

Начало

После запуска бота надо будет загрузить CSV файл с историческими данными по клиентам/событиям, которые хотелось бы научиться предсказывать.

Для обучения используются первые 10 тысяч строк из файла (оптимизация нагрузки в бета-версии). Но в большинстве случаев этого достаточно, чтобы обучить модель на приемлемом уровне.

Обучение модели

После загрузки файла надо выбрать, какую колонку/параметр хотим научиться предсказывать. Модель может прогнозировать от 2 до 10 вариантов категории. По моему опыту, в 80% случаев встречается классификация в рамках двух вариантов (да - нет, 1 - 0, болеет - здоров, купит - не купит и так далее). В случае с Титаником категорий так же две - выжил (в датасете обозначен как "1") и умер ("0"). Обучение может занять до 2-3 минут. Модель для Титаника учится примерно 10 секунд.

Для обучения используем свое решение на базе CatBoost от Яндекса. Пока не идеально работает, есть проблемы с автоопределением типов параметров и предобработкой данных. Хотим добавить еще XGBoost, LightGBM и сделать симбиоз адаптирующийся под конкретный набор данных и кейс. Предварительные исследования показали, что это может заметно улучшить качество модели и снизить время обучения.

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

Знания о данных, полученных моделью. Предсказание

Предсказания в бета-версии пока нет. Но зато есть информация о данных, которая на самом деле часто не менее важна.

Можно посмотреть топ параметров по их влиянию на предсказываемый параметр. В разделе "Инсайты" можно посмотреть как именно они влияют. В случае с Титаником заметнее всего влиял пол пассажира (первый скрин ниже). Что интересно, женский пол заметно увеличивал шанс выжить (второй скрин).

Обратная связь

Если вы столкнулись с проблемой или у вас есть идея, предложение - пишите, пожалуйста, прямо через форму обратной связи в боте (раздел "Оставить отзыв или предложение"). Если вы хотите лично со мной пообщаться, то на старте бота есть мой аккаунт в Телеграм. Ну а если просто хочется следить за развитием проекта, то подписывайтесь на мой канал.

Что дальше

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

В ближайшем бэклоге:

  • добавить возможность делать предсказания
  • расширить инсайты и вытаскивать "переломные значения"
  • расширить пул библиотек в беке и сделать что-то вроде auto-ML
  • улучшить качество моделей на выходе
  • прогнозировать не только категорийные параметры (например, цену)

Но все это будет сильно зависеть от реакции и фидбэка. Поэтому:

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

Для развития проекта хочу еще привлечь веб-разработчика и, возможно, UX-дизайнера. Нужен middle+ уровень с релевантным бэкграундом. Если среди читателей есть такие, то присылайте в личку портфолио, рейт, сколько времени можете уделять в неделю проекту.

Прошу не судить строго, это первая версия беты, написанная в свободное от работы время (по ночам и выходным) менеджером проектов и фрилансером студентом.

0
13 комментариев
Написать комментарий...
Belov Nikita

Так это ML или бот просто считает корреляцию одного параметра относительного другого?

Ответить
Развернуть ветку
Anton
Автор

Никита, в бета-версии показываем пока только влияние параметров на результат. Прогнозирование в процессе. Хочется понять в каком виде его удобнее для пользователей реализовывать — одним общим файлом грузить группу объектов или руками забивать параметры прямо в боте (случай, когда надо предсказать для единичного объекта). Что для вас более востребовано было бы? Можете, пожалуйста, рассказать для чего используете классификацию?

Ответить
Развернуть ветку
John Doe

Эммм... Вы нам хотели рассказать, что такое классификаторы и похвастаться, что you've got one? :)

Ответить
Развернуть ветку
Султан Кадыркеш

Антон, подскажите пожалуйста как лучше реализовать. Есть задача проверки корректности имён. В базе есть 10000 клиентов, но не все из них корректно заполнены.

К примеру, одно из некорректных имен: Ирина Красные волосы
Андрей Мелочный
ИРина ДОБрова

Пример из корректных:
Александр
Ирина Доброва

Какие нужны будут параметры?
Кол-во букв, наличие мат слов, более 2ух заглавных, более 2ух слов и т.д.

Ответить
Развернуть ветку
John Doe
наличие мат слов

Наличие математических терминов? ;)

Ответить
Развернуть ветку
Andrey Shevtsov

Тут ML не нужен

Ответить
Развернуть ветку
Anton
Автор

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

Если нужна реализация "под ключ" - пишите в личку, попробуем что-нибудь придумать.

Ответить
Развернуть ветку
Дима Виноградов

Бесспорно, идея хорошая) желаю Вам удачи)

Ответить
Развернуть ветку
Anton
Автор

Спасибо! 🙏

Ответить
Развернуть ветку
Дима Виноградов

Чтобы довести до идеала нужно будет много времени и средств. Что если это будет классификация текста, что если будет много пропущенных значений или данные максимально грязные, что если вам нужно будет создавать новые фичи и далее можно продолжать «что если» сколько угодно. Да есть плюс минус шаблоны, но все данные уникальны и разбираться в них тоже нужно индивидуально. Не все есть «кагловский Титаник».
Плюс, если проект будет рабочий, вам будут присылать кучу информации, возможно кто-то, будет присылать корпоративную информацию с выгрузкам из своих же баз данных (и не всегда форматы csv - просто к слову)) ). А это уже есть нарушение трудового договора сотрудника, да в этом виноват будет уже сам сотрудник, но что вы будете со всем этим делать? Хранить информацию или нет, использовать как-то в дальнейших целях. В общем - «вопросов много, реальных ответов только три…»

Ответить
Развернуть ветку
Anton
Автор

Дмитрий, вы абсолютно правы. Но своим сервисом я не пытаюсь полностью заменить ручную работу с данными. Я хочу автоматизировать базовые задачи и дать доступ к ML тем, кто не готов писать код. Мы пока еще на пути решения этой задачи. И конечно я понимаю, что высок шанс, что ничего не получится. Но попробовать хочется

Ответить
Развернуть ветку
Юрий Воронцов

Извините ...но это очень смешно ...вы пытаетесь решить такие очень сложные и индивидуальные задачи как прогнозироование с помощью шаблонного бота+ мл ....а что изменилось когда вы сами использовали шаблоны и получали черте какие результаты ?? ))) С другой стороны Вы сможете возможно состричь купоны с идиотов которые будут верить в такое ботопредсказание.... какое то время... к сожалению 50 % арр так и работают пока не теряют подписку

Ответить
Развернуть ветку
Anton
Автор

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

"Вы сможете состричь купоны с идиотов" — откуда столько негатива и подозрительности? Пользователи nocode ML-сервиса не "идиоты". Я правда хочу сделать полезные и удобный сервис. Возможно, это не получится.

Ответить
Развернуть ветку
10 комментариев
Раскрывать всегда