Привет, Хабр! В одной из предыдущих статей команда ВТБ обещала подробнее рассказать, как на конкурсе «Большие вызовы» в образовательном центре «Сириус» команда школьников занималась разработкой сервиса геоаналитики для бизнеса. Итак, время пришло, давайте же скорее начинать!
Меня зовут Максим Воля, мне 17 лет, и я один из тех самых школьников, который принял участие в этом конкурсе в составе школьной команды разработки. В статье расскажу, как мы готовились к проекту и создавали его, с какими данными работали, какой стек технологий применяли, с какими сложностями столкнулись и что получилось в итоге. На проекте я был Product-менеджером, также в команду входили Илья Демидов, который занимался машинным обучением, Даниил Ануфриев — компьютерное зрение, Дмитрий Рынин — аналитика, Владислав Секин — фуллстек-разработка. Сейчас подробно все расскажу. Добро пожаловать под кат!
Подготовка к проекту
У каждого из нас был свой набор увлечений: кто-то увлекался машинным обучением и компьютерным зрением, кто-то — больше веб-разработкой, а кто-то занимался C++ и Arduino. Лично я занимаюсь робототехникой, но сейчас это направление уже невозможно без ИИ и ML. Здесь же нам всем пришлось целиком и полностью погрузиться в отчасти новые для нас технологии. Более того, это был первый большой опыт работы с коммерческой компанией: до этого и у меня, и у других участников команды были только школьные и пет-проекты.
Аналитическая часть
До презентации мы с ребятами обсуждали задачи, как и что мы могли бы выбрать для реализации, и как раз во время первичной презентации проекта нам понравилась следующая задача: «Разработка сервиса геоаналитики: моделирование и управление сетью розничных продаж (сервис геоаналитики для начинающих предпринимателей)».
Зацепило, что здесь не было строгих рамок, можно было проявить себя и поработать с чем-то по-настоящему новым и интересным. Как оказалось, с выбором мы не ошиблись, но об этом подробнее я расскажу дальше.
Итак, нашей задачей было разработать сервис геоаналитики для оптимального выбора локации при открытии бизнеса, будь то цветочный магазин, булочная или кофейня. Сервис должен был быть интуитивно понятным и наглядным, а главное — динамичным. Нам предложили построить тепловую карту местности для выбора оптимального расположения розничного бизнеса по заданным продуктовым параметрам. Такая карта должна помочь в управлении компанией и получении таргетированных рекомендаций по размещению розничного производства.
Как выяснилось из постановки задачи, локация критически важна для успеха, более того, исследования показали, что заведения с удачной локацией живут в несколько раз дольше. Аналитики называют плохую локацию одной из главных причин «поражения» в бизнесе и работе производства.
Объём исходных данных, который выдали организаторы, был достаточно большим — более 100 Гб информации по десяткам городов России. Датасет включал как социально-демографические, так и растровые данные, которые впоследствии мы использовали при построении моделей, анализе и оценке бизнес-качества.
Посовещавшись, мы с ребятами решили, что наиболее привлекательными для анализа, работы, построения модели и бизнес-видения для нас будут Москва, Санкт-Петербург, Новосибирск и ещё пара городов. А в качестве основной бизнес-идеи утвердили выбор локации для открытия сети кофеен. Основной задачей, как и задачей во всем конкурсе, у всех участников было сделать готовый, работоспособный продукт — конечно, используя ML.
Далее нам предстояло самостоятельно определить ценность каждого из предложенных в датасете признаков и понять, какие из них наиболее релевантны и войдут в финальную модель, а также решить, как эту модель оценивать. Мы стремились к результату, в котором пользователь сервиса самостоятельно варьирует параметры и получает рекомендации по оптимальному расположению бизнеса с учётом данных о загруженности, наличии конкурентов, плотности застройки, наличии инфраструктуры, пола, возраста и других социально-демографических показателей потенциальных клиентов. В разных обстоятельствах особенности локации могут играть как в плюс, так и в минус. Поэтому мы решили создать сервис, который анализирует множество слоёв модальностей геоинформации и помогает начинающему предпринимателю подобрать оптимальную локацию.
Таргетом во всех моделях служила годовая выручка одного бизнеса на заданной локации. Кроме этого, мы учитывали средний чек по продажам, средний доход клиентов, средний возраст мужчин и женщин и другие транзакционные данные иных категорий бизнеса (то есть в нашем случае — не кофеен). В итоге задача была сформулирована (ВТБ предоставил данные и общие вводные, а анализ данных, выбор таргета и план работ мы предложили сами), цели намечены, началась активная работа.
Мы обменивались мнениями и знаниями, помогали друг другу, в какой-то мере даже менялись частью задач. Даниил, например, работал с данными, потом с моделями без растров, потом делал признаки на основе растров, признаки загонял в таблицу, отдавал таблицу Илье и так далее. Иногда мы обращались за помощью к менторам, но только в крайних случаях. Как я уже сказал, у нас было довольно много свободы, а наши наставники не стремились контролировать каждое наше действие.
Для работы с картой за единицу локации мы взяли квадратные полигоны. То есть необходимая область (например, город) разбивалась на квадраты, для каждого из которых уже были предоставлены все растровые и социально-демографические данные, тогда как сама карта была представлена в формате geotiff. Из большого tiff вырезалась область с центром в интересующей нас клетке с радиусом несколько километров.
После этого в зависимости от модели мы либо рассчитывали модели с набором признаков, либо пропускали такую «картинку» через CNN для формирования эмбеддинга и последующей конкатенации с «обычными» признаками. То есть вели работу по двум направлениям сразу и затем их объединяли в единое целое.
Было найдено большое количество корреляций по отдельным районам городов и добавлены отсутствующие данные, то есть немного поработали с генерацией «cинтетических» данных. Чтобы оценить качество полученных моделей, мы разработали свою бизнес-метрику (индекс лучшего района): спроектировали небольшую математическую модель в рамках аналитической задачи, описывающую некоторые бизнес-параметры для оценки качества работы сервиса, и применили её к существующим моделям.
Получилось так, что предприниматель выбирает, например, премиальный ресторан и видит одни данные по конкурентам, выбирает бюджетную столовую — видит другие. То есть индекс лучшего района — это специальная динамическая формула, которую мы выводили эмпирически и которая зависит от ряда параметров. Так мы дополнили наш проект и расширили его границы применимости. Созданию этой системы и интеграции её с сервисом мы посвятили много времени на второй неделе. Дополнительно поработали с выдвижением гипотез и их проверкой.
Например, как зависит расположение торговой точки от положения парковки или метро. Все найденные зависимости передали на этап машинного обучения.
Блок моделирования
Работу мы вели по двум основным направлениям: разрабатывали растровый эмбеддер и модель Tabular Transformer, которые сравнивали друг с другом. В качестве основных моделей рассматривали CatBoost, MLP, MLP Ensemble, ResNetMLP, ResNetMLP Ensemble, SNN, SNN Ensemble, FT-Transformer, FT-CNN-Transformers. Менторы провели вводные инструктажи по работе с geopandas, folium, streamlit, познакомили нас с «работой» в Yandex Data Sphere. Там уже была настроена интегрированная среда разработки для аналитики и анализа данных. Эта среда поддерживала разбиение кода на отдельные блоки с возможностью просчёта каждого из них на CPU/GPU, что в итоге упростило нам проектирование финальной модели. Что касается метрики по качеству R2, мы получили вот такие результаты.
Всего же было построено и опробовано несколько типов архитектур — от CatBoost до FT-Transformer. Протестировали модели с использованием и без использования растров, причём было доказано, что использование растров в модели FT-CNN-Transformer повышает на 20% R2 по сравнению с моделью без растров FT-Transformer. К сожалению, в рамках проекта нам не удалось с помощью FT-Transformer побить MLP Ensemble.
Затем соединили несколько геомодальностей в одну модель и оценили их влияние на метрики, перебрали несколько архитектур и множество гиперпараметров, чтобы найти оптимальное решение. Были, конечно, и другие сложности. Например, с обучением моделей. С одной стороны, было очень много исходных данных. С другой — по некоторым районам данных вообще не было, то есть сетка местами могла оставаться пустой. Недостающие данные искали вручную, — на это тоже ушло довольно много времени.
Реализация сервиса
Полученную модель и аналитическую часть мы интегрировали в небольшой сервис, где реализовали разложение всех показателей по слоям для оптимального подбора локации индивидуально для каждого предпринимателя. Особой сложностью на проекте стала работа с частью визуализации в сервисе. Здесь мы создали интерактивное меню в виде динамически изменяющейся визуализацией по слоям. Особое внимание, как и упоминалось выше, уделили постпроцессингу.
И вот настал день, когда наш сервис был готов! Предприниматель мог выбирать оптимальную локацию под свой бизнес, учитывая средний чек, число POI, трафик и другие наглядные параметры с самой полной визуализацией, изменяющейся динамически.
Внутренняя защита помогла финализировать проект. Теперь он позволял оценивать все геоаналитические параметры выбора модели с учётом персональных запросов от предпринимателя: текущего города, среднего чека, количества лучших точек, оценки влияния конкуренции, среднего чека и аренды. Дополнительно появилась возможность фильтрации по всем этим параметрам. На этом проект был завершён, а мы получили предложение пройти стажировку в ВТБ после окончания 11-го класса.
Главным для меня и для всей нашей команды стал не сам сервис или его возможный коммерческий успех — мы получили реальную продуктовую задачу от бизнеса на проектирование и разработку: проанализировали данные, поставили бизнес-задачу, придумали свои метрики для оценки качества и разработали MVP с полной интеграцией модели машинного обучения и визуализацией, используя много различных модальностей. При этом организаторы подчеркнули, что с их позиции было интересно посмотреть, как мы подойдём к решению задачи для другого бизнеса. Дополнительно мы получили отличный опыт по работе с фреймворками, их архитектуре, устройству, особенностям и пониманию сути машинного обучения и анализа данных.
Лично я хочу и дальше развиваться именно как инженер-робототехник. Но благодаря проекту ещё раз убедился, насколько важно внедрять программные решения в робототехнику, например ML и ИИ. Плюс приобрёл практический опыт в этом.
Таким образом, использование сервиса позволило:
произвести выбор города и геослоёв (в нашем сервисе можно выбрать несколько городов и геослоёв, таких как средний чек, средняя аренда и т. д.);
реализовать персональную метрику (это поможет выбрать оптимальную точку, исходя из ваших предпочтений, величине арендной платы и среднему чеку);
реализовать фильтры на карте (сконцентрировать внимание на тех частях города, которые вам подходят по тем или иным причинам);
предложить наглядную визуализацию геослоёв с информацией о среднем чеке в локации, число POI, трафику и т. д. Кроме того, мы используем модели машинного обучения для предсказания самых оптимальных локаций.
Комментарий ВТБ
Маленький проект часто может вырасти в большое будущее, даже несмотря на то, что он выполняется не профессиональными разработчиками, а начинающими участниками, которые только пробуют себя в роли серьёзных учёных и инженеров. Для нас стали приятным сюрпризом их энтузиазм, инициативность и производительность — пожалуй, это самое яркое впечатление от проекта.