Привет, меня зовут Рома Васильев, я Data Scientist в компании МегаФон. Здесь я и решил поделиться своим докладом с  Day Zero ICPC.

Слово о компании я опущу, скажу только, что сегодня МегаФон — это клиентская база, в которой более 75,2 миллионов пользователей, 40 тысяч сотрудников и цифровая экосистема сервисов: МегаФон ТВ, МегаФон Музыка, МегаФон Банк, МегаФон Книги и т. д.

Подходы аналитики больших данных в компании внедряются повсеместно. Пробежимся по основным стримам работы.

  • Customer profile — мы выделяем интересы и потребности абонентов и стараемся строить свои продукты на их основе.

  • Development & Retention — персонализируем все, что только можно — как продукты, которые предлагаем абонентам, так и каналы и способы коммуникации с абонентом для увеличения NPS и LTV.

  • Geo — МегаФон обладает большим количеством анонимизированных геоданных, на основе которых можно строить крутые сервисы, к примеру, проект Footprint, который предсказывает клиентопоток в той или иной локации, чтобы понять, где открыть новый салон ритейла.

  • Retail — количество салонов МФ Ритейл постоянно растет, и мы строим различные модели по управлению закупками, ценами, предсказанию спроса и клиентопотока салонов.

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

  • CVM B2X — работаем не только напрямую с клиентами, но и генерируем персональные предложения для бизнес-клиентов.

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

  • Data services — мы, как оператор, никогда данные не продавали и продавать не будем. Наш подход — разработка дата-сервисов, которые помогают бизнесу решать конкретные задачи в маркетинге, управлении рисками, развитии городской инфраструктуры, развитии туризма в регионе и т. п.

  • Strategy and Marketing — выделяем тренды в клиентской базе, помогаем оптимизировать затраты на маркетинг в разных каналах.

  • BigData, Enablers — активно развиваем внутреннюю BigData-инфраструктуру — создаем много различных tool-ов, которые сокращают time-to-market моделей — NBA, Real Time Marketing и т. д.

Кроме того, в компании активно развивается R&D направление — любой сотрудник может прийти к руководству и предложить попробовать применить принципиально новые подходы в тех или иных направлениях.

Если после обсуждения мы понимаем, что применение этого подхода позволит получить приросты бизнес-метрик, то проект берется в работу. Одна из задач, которая зарождалась в R&D и сейчас полноценно развивается, — использование графовой информации в моделях. Задача изначально подавала большие надежды. Мы считали, что добавление графовой информации в имеющиеся модели позволит получить инкременты в их качестве. Забегая вперед, скажу, что так и получилось. Но поговорим теперь о самом графе и решениях, которые мы на нём строили.

Что же такое граф коммуникаций?

Это граф, в котором вершины — абоненты, а ребра — коммуникации между ними.

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

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

Что же такое эмбединг?

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

Как же строить эмбединги?

Основными проблемами при обработке графов являются их масштабы и изменчивость. К примеру, если попытаться использовать классические модели машинного обучения, то непонятно, как этот граф в модель, собственно, попадает. Поэтому для обработки графов очень часто используются специальные Graph Convolutional Networks, которые переносят логику сверток из изображений в графы. Метод позволяет строить эмбединги вершин, основываясь в большинстве своем на локальной структуре графа — для каждой вершины нужно агрегировать информацию ее соседей перед подачей в модель.

Одним из самых крутых, на наш взгляд, решений Open Source в этой области является метод GraphSAGE, который был представлен группой из Cтенфорда в 2017 году. Он порядком расширяет функционал GCN за счет введения новых функций агрегации. На слайде вы можете видеть схему расчета эмбединга для вершины С.

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

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

Еще одним несомненным преимуществом описанного подхода является то, что расчеты можно грамотно переиспользовать. К примеру, если мы уже посчитали эмбединг глубины 2 для вершин A, B и C, то при расчете эмбедингов для вершин D, E и F мы сможем использовать компоненты предыдущих расчетов, что в наших масштабах значительно увеличивает время работы алгоритма. 

После ряда тестирований мы смогли сделать вывод о том, что добавление эмбедингов в некоторые модели действительно позволяет повысить их качество, что, в свою очередь, позволяет нам получить значимый business value — прирост LTV, NPS абонентов и еще ряда характеристик. Проект считается успешным, и сейчас мы всячески его развиваем: исследуем новые подходы для обработки графовой информации.

Спасибо за внимание!