Поиск Связей В Социальных Сетях

Привет, Хабр! В этом посте мы хотим поделиться нашим решением проблемы прогнозирования скрытых связей в корпоративной социальной сети «Улей» компании «Билайн».

Эту проблему мы решили в рамках виртуального хакатона Майкрософт .

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

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



Постановка задачи и исходные данные

Разработка качественного алгоритма рекомендации друзей — одна из наиболее приоритетных задач практически для любой социальной сети, потому что… Функционал такого типа — мощный инструмент привлечения и удержания пользователей.

Публикаций на эту тему в англоязычной литературе довольно много, а само задание даже имеет специальную аббревиатуру PYMK (People You May Know).

Компания Билайн внутри виртуальный хакатон от Microsoft предоставил график корпоративной социальной сети «Улей».

5% ребер графа были искусственно скрыты.

Задача заключалась в том, чтобы найти скрытые ребра исходного графа.



Поиск связей в социальных сетях

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

Задача поиска ребер сформулирована как задача бинарной классификации, а мера предложена в качестве приемочной метрики.

Ф1 .

В некоторых подобных задачах метрика качества рассчитывается отдельно для каждого пользователя и оценивается среднее значение.

В этой задаче качество оценивалось глобально для всех ребер.



Обучение и тестирование

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

Для больших графов такой подход потребует много вычислительных ресурсов.

Поэтому на практике набор кандидатов в социальные графы ограничивается только парами, имеющими хотя бы одного общего друга.

Как правило, такое ограничение позволяет существенно сократить объем вычислений и ускорить работу алгоритма без существенной потери качества.

Каждая пара кандидатов описывается вектором признаков и двоичным ответом: «1», если ребро есть, или «0», если ребро отсутствует. С помощью полученного набора {вектор признаков, ответ} обучается модель, прогнозирующая вероятность наличия ребра для пары кандидатов.

Т.

к.

граф в этой задаче неориентированный, то вектор признаков не должен зависеть от перестановки кандидатов в паре.

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

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

Для оценки качества и выбора параметров модели мы удалили из предоставленного графа 5% случайно выбранных ребер.

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

Скрытые края использовались для выбора порога и итоговой оценки качества.

Основные подходы к генерации признаков в задаче PYMK описаны ниже.



Счетчики

Для каждого пользователя мы рассчитываем статистику: распределение друзей по географии, сообществу, возрасту или полу.

Используя эту статистику, мы получаем оценку сходства кандидатов друг с другом, например, с помощью скалярного произведения.



Сходство наборов и общие друзья

Коэффициент Жаккард — позволяет оценить сходство двух наборов.

Наборами могут быть как друзья, так и, например, сообщества кандидатов.



Поиск связей в социальных сетях

Коэффициент Адамик/Адара — по сути, взвешенная сумма общих друзей двух кандидатов.



Поиск связей в социальных сетях

Вес в этой сумме зависит от количества друзей общего друга.

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

Кстати, эту идею мы активно использовали в нашем решении.



Скрытые факторы

Эти признаки получаются в результате матричных разложений.

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

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

Пожалуй, наиболее распространенным алгоритмом разложения матрицы является СВД .

Вы также можете использовать популярный алгоритм в рекомендательных системах.

А.

Л.

С.

и алгоритм поиска сообществ в графах БольшойКЛАМ .



Знаки на графиках

Эта группа признаков рассчитывается с учетом структуры графа.

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

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



Решение

При решении этой задачи мы активно использовали заложенную в коэффициенте Адамика/Адара идею о том, что не все друзья одинаково полезны.

Мы экспериментировали с функцией дисконтирования — пробовали дробные степени вместо логарифмов — а также экспериментировали с взвешиванием общих друзей по различным атрибутам полезности.

Т.

к.

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

Первое решение основано на идее Адамика/Адара и представляет собой эмпирическую формулу, учитывающую как количество друзей общего друга, так и поток сообщений между кандидатами через общих друзей.



Поиск связей в социальных сетях

n — количество общих друзей; xi — количество друзей у общего друга; yi — сумма входящих и исходящих сообщений между кандидатами через их общего друга.

Во втором решении мы сгенерировали 32 функции и обучили на них модель журнала.

регрессия и случайный лес.

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

В таблице описаны основные возможности, которые использовались во втором решении.

знак описание
взвешенный_commom Аналог коэффициента Адамика/Адары, но вместо логарифма использован корень третьей степени
проводимость_общий Взвешиваем общих друзей с учетом проводимости сообщений.

Чем меньше соотношение исходящих и входящих сообщений/звонков/документов общего друга, тем выше его вес при суммировании

flow_common Оцениваем поток сообщений/звонков/документов между кандидатами через общего друга.

Чем выше проходимость, тем больше вес в сумме

друзья_жаккард Коэффициент Жаккара для друзей кандидатов
друг_компания Сходство на основе доли друзей пользователя из компании кандидата
компания_жаккард Дружелюбие компаний-кандидатов оцениваем с помощью коэффициента Жаккара (равен единице, если кандидаты из одной компании)


Поиск связей в социальных сетях

В таблице ниже приведены оценки качества как отдельно, так и по полученным моделям.

Модель Ф1 Точность Полнота
Ээмпирическая формула 0.064 0.059 0.069
Журнал регрессии 0.060 0.057 0.065
Случайный лес 0.065 0.070 0.062
Лог-регрессия + случайный лес 0.066 0.070 0.063
Логарифмическая регрессия + случайный лес + эмпирическая формула 0.067 0.063 0.071


Выбор порога

Итак, модель обучена.

Следующим шагом является выбор порога для оптимизации показателя приемлемости.

В этой задаче мы оптимизировали метрику Ф1 .



Поиск связей в социальных сетях

Эта метрика одинаково чувствительна как к точности, так и к полноте и представляет собой среднее гармоническое этих величин.

Поскольку зависимость метрики F1 от порога является выпуклой функцией, то найти максимум не составит труда.



Поиск связей в социальных сетях

В этой задаче мы использовали алгоритм двоичного поиска для выбора оптимального порогового значения.



Технологии

Исходный граф был задан как список ребер с указанием идентификаторов пользователей и соответствующих атрибутов.

Всего в обучающей выборке было представлено 5,5 млн соединений.

Исходные данные предоставляются в виде текстового файла в формате csv и занимают на жестком диске 163 МБ.

В рамках хакатона нам были предоставлены ресурсы облачного сервиса Azure по программе Microsoft БизСпарк , в котором мы создали виртуальную машину для наших вычислений.

Стоимость сервера в час составляла 0,2$ и не зависела от интенсивности вычислений.

Бюджета, выделенного организаторами, хватило для решения этой проблемы.



Поиск связей в социальных сетях

Мы реализовали алгоритм поиска общих друзей на Spark; результаты промежуточных вычислений кэшировались на диске в паркетном формате, что позволяло существенно сократить время чтения данных.

Время работы алгоритма поиска общих друзей на виртуальной машине составило 8 часов.

Кандидаты со списком общих друзей в паркетном формате занимают 2,1Гб.

Алгоритм обучения и выбора параметров модели реализован на Python с помощью пакета scikit-learn .

Процессы генерации признаков, обучения модели и выбора порога на виртуальном сервере в общей сложности заняли около 3 часов.

В заключение я хотел бы поблагодарить Брагина Ивана за активное участие в решении задачи и творческий подход к выбору эмпирической формулы.

Теги: #Машинное обучение #социальный граф #рекомендации #Data Mining #хакатон #Data Mining

Вместе с данным постом часто просматривают: