Привет, меня зовут Роман Симановский, я Junior Data Scientist в команде Геоаналитики Альфа-Банка. Сегодня поделюсь опытом того, как мы работаем с пространственными данными, преобразовывая их в гео-признаки. С их помощью мы улучшаем модели машинного обучения, добавляя в них информацию об окружающем мире. На самом деле, это не так уж сложно, поэтому статья будет короткой.
Для начала соберём пространственные данные
Мы берём данные из множества источников, расскажу о двух основных.
№1. OpenStreetMap (OSM)
Отличный открытый источник геоданных, поддерживаемый пользователями со всего мира. Мы активно используем OSM при построении своих моделей. Например, мы можем получить информацию про супермаркеты (и поставить в каком-нибудь банкомат), аптеки или сервисы авторемонта и их координаты.
А ещё интереснее то, что из OSM можно извлечь информацию о дорогах, например, расстояние до остановок общественного транспорта, станций метро или главной дороги. Важно отметить, что OSM позволяет нам не просто вычислять расстояние между двумя точками на карте, но и учитывать реальные маршруты при вычислении.
![](https://habrastorage.org/getpro/habr/upload_files/425/4b4/08a/4254b408a256d1ca2effc5e8be1b8098.png)
№2. Транзакции
Мы собираем информацию о том, сколько было совершенно транзакций в определённой области (об этом позже). Не только общее количество транзакций, но и суммы по различным категориям и доли от общего числа транзакций, например, для таких категорий как «Фастфуд» или «Аптеки.
Просто собирать данные о транзакциях не так интересно — важно учитывать их привязку к локации. Например, если у нас есть 10 транзакций в категории «Фастфуд» от одного клиента, это не означает, что он питается только фастфудом. Мы поймем это, когда узнаем, что 9 из 10 покупок — это утренние булочки и кофе в кофейне, а только одна — в бывшем Маке.
Вот чтобы это знать, нам нужны пространственные данные — данные об объектах, у которых есть указание на их место в пространстве. В нашем случае таким местоположением выступают координаты широты и долготы, что указывают на точное расположение объекта на земной поверхности.
![](https://habrastorage.org/getpro/habr/upload_files/afd/e91/7ef/afde917efd90564965007171d2a2f729.png)
На этом можно было бы закончить, если бы не тот факт, что работа с широтой и долготой не всегда удобна. Координаты указывают только конкретную точку, не учитывая окружение. Именно поэтому их сложно напрямую использовать в моделях.
В качестве анализа мы рассматриваем некоторую область на карте, о которой мы хотим сделать ряд выводов. В таких случаях отличным решением становится библиотека h3, которая позволяет разбивать карту на области и упрощает анализ пространственных данных.
Подключаем h3
В первую очередь стоит дать определение от компании Uber, которая и разработала этот инструмент.
«h3 — это система геопространственной индексации, использующая гексагональную сетку, которая может быть (приблизительно) разделена на всё более мелкие гексагональные сетки»
Проще говоря, это библиотека, которая разбивает мир на шестиугольники.
![](https://habrastorage.org/getpro/habr/upload_files/a27/0f9/5a0/a270f95a01eea0aee2122e6d6e3c1d17.png)
Эта библиотека предоставляет следующий функционал:
-
Удобный API для индексации координат в шестиугольной сетке с точностью до квадратного метра.
-
Быстрое объединение и агрегация индексированных данных с разной степенью точности.
-
Набор алгоритмов и оптимизаций на основе сетки, включая «ближайших соседей», «кратчайший путь», сглаживание градиента и другие.
Также библиотека преобразует географические координаты (широта и долгота) в идентификаторы h3, а уже их можно использовать в моделях.
Создаём географические признаки
Для создания признаков возьмём карту из первого примера и отобразим гексагональную сетку. При этом стоит отметить, что каждый гексагон имеет идентификатор. Для клетки, выделенной красным, он будет 89283082e73ffff, а для зелёной — 8944d551077ffff.
![](https://habrastorage.org/getpro/habr/upload_files/8e3/b7b/f17/8e3b7bf1707d1ba3306dc60188b97218.png)
Теперь мы для каждой категории объектов отдельно подсчитаем количество объектов этой категории в каждом гексагоне и получим три слоя: с аптеками, с авторемонтными сервисами и с продуктовыми магазинами.
![](https://habrastorage.org/getpro/habr/upload_files/274/ae0/4d9/274ae04d9eb0a98c08a1d44ff60ff4e7.png)
Все гео-признаки мы храним по слоям, где каждой клетке гексагональной сетки соответствует только один тип информации, например, количество продуктовых магазинов, количество транзакций, о которых говорилось выше (да, «областью» был гексагон), или расстояние до главной дороги.
Храним в Geo Feature Store
Чтобы упростить использование гео-признаков, мы решили создать Geo Feature Store. В статьях Альфа-банка уже упоминалось, что в компании есть инструмент, который позволяет оптимизировать процесс сбора данных и подготовки фичей — Feature Store.
Возьмем определение из статьи.
«Feature Store — это управляемое специализированное хранилище, предназначенное для безопасного хранения, обновления, публикации и совместного использования ML-признаков (фичей)».
Также упоминалось, что все эти признаки содержат информацию о клиенте или компании. С момента выпуска статьи добавилось большое количество дополнительных признаков, но суть осталось прежней — там всё ещё информация, собранная для клиентов и компаний, а у нас есть пространственные признаки, которые мы хотим сделать полезными не только для гео-моделей.
Мы создали в Feature Store процесс, который каждый месяц рассчитывает гео-слои. А также связали гексагоны с клиентами и компаниями.
Как связать клиента и пространственные признаки?
Для каждого клиента подбираем гексагон, который будет ему соответствовать. В банке есть информация про адрес клиента, который указывается в заявке. Но эти данные не всегда подходят, именно поэтому с помощью специальных правил на основе транзакций мы подбираем более подходящий гексагон.
Используем индекс Морана
Как понять, смогут ли гео-признаки улучшить разделяющую способность модели? И стоит ли на это рассчитывать, добавляя в модель различные слои?
Для этого существует несколько подходов.
Первый и самый очевидный способ — это проанализировать таргет.
Если ваш таргет — доход клиента, то жизненный опыт подсказывает, что он будет зависеть от района, в котором проживает человек.
Но что, если таргет — это склонность клиента к продукту? В этом случае всё сложнее.
Именно поэтому для анализа таргета мы используем индекс Морана, который помогает выявить пространственную корреляцию. Он даёт понять, стоит ли добавлять гео-слои для улучшения метрик модели.
Немного формальностей — определение индекса и пространственной корреляции:
-
Индекс Морана представляет собой статистический показатель, предназначенный для оценки общей структуры данных, используемый при определении пространственной автокорреляции.
-
Пространственная автокорреляция отражает степень пространственной зависимости, связи или корреляции между значением переменной пространственного объекта и значениями той же переменной у соседних объектов. Важно отметить, что пространственная корреляция не обязательно указывает на наличие причинно-следственной связи, она лишь подразумевает ассоциацию.
Для примера рассмотрим таргет «доход» и проведём расчёт индекса Морана для Москвы. Мы наблюдаем выделение центра: красный цвет указывает на районы с высоким доходом, окруженные аналогичными территориями. Индекс Морана составляет 0.74. И можно предположить, что в данной задаче гео-признаки помогут улучшить результат.
![](https://habrastorage.org/getpro/habr/upload_files/e0a/c79/a08/e0ac79a080d1d1d84d29fdcd32cdbedb.png)
Итого
В рамках Feature Store мы реализовали возможность сбора для клиента геопространственных данных, тем самым позволяя под каждую задачу подобрать оптимальный набор. Так, например, у нас есть два слоя, количество супермаркетов и количество транзакций в гексагоне. На основе соотношения клиента и гексагона мы можем использовать эту информацию для него, обогащая текущие признаки информацией о внешней среде.
![](https://habrastorage.org/getpro/habr/upload_files/833/500/d5b/833500d5bef42186b2af8b428defb5db.png)
Мы активно развиваем и тестируем возможности Geo Feature Store в статусе пилотного проекта. На данный момент наша цель — успешно интегрировать гео-признаки в модели и оценить их практическую ценность для решения бизнес-задач банка. Мы вернёмся с результатами и выводами позже, чтобы поделиться опытом и рассказать о первых успехах.
ссылка на оригинал статьи https://habr.com/ru/articles/859374/
Добавить комментарий