В предыдущем посте мы исследовали идею племен Твиттера. Мы сделали небольшой пример, в котором мы выбрали друзей из нашей сети и исследовали такие идеи, как сходство. Мы обнаружили, что люди, которые следят за похожими аккаунтами, склонны объединяться в группы. Но есть много аккаунтов, на которые подписаны люди, которые, кажется, не показывают никакой связи со своими друзьями. Это может быть связано с несколькими причинами, но также возникает вопрос, можем ли мы сделать вывод о связях между вами или вашими друзьями на основе других учетных записей, на которые вы подписаны в Twitter, и, кроме того, можем ли мы сделать вывод о типе учетной записи, основанной на характеристиках других аккаунтов, на которые вы подписаны. И, наконец, можете ли вы создать «игрушечный» механизм рекомендаций, чтобы рекомендовать аккаунты своим друзьям или себе?

Проблема

Начнем с упрощенного сценария, показанного на рисунке 1. Представьте, что вы пользователь «А» и подписаны на аккаунты 1, 2 и 3. Это новостные аккаунты в Twitter. Другой пользователь «B» также следует за учетной записью 1 и 2, но мы хотим предсказать, будет ли B следовать за учетной записью 3. Также вы можете видеть, что мы изобразили числовые узлы цветами. Эти цвета на изображенном графике также показывают тип учетной записи, которой следуют все узлы A и B. Аккаунты "Новости" желтого цвета, красные узлы "Знаменитости / влиятельные лица" и зеленые узлы - "постоянные друзья".

Наша цель - спрогнозировать соединение между узлом «B» и узлом «3» на основе всех других подключений в сети. Мы можем столкнуться с этим сценарием, потому что API Twitter имеет ограничения с точки зрения объема данных, которые вы можете загрузить за 3-часовой период времени. Итак, мы, возможно, решили выбрать только некоторые из учетных записей, за которыми следует каждый человек.

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

Реализация модели

В нашей публикации «Twitter Tribes» мы определили, что нашу сеть можно определить как матрицу смежности. Здесь мы можем представить проблему, о которой мы говорили ранее, в виде матрицы смежности, где строки представляют собой выборку пользователей в нашей сети друзей (буквы AE), а столбцы - это учетные записи эти пользователи подписаны (i1-i10).

Как мы видим, мы пытаемся спрогнозировать позицию B-i3 на основе всех "подписок" от других пользователей. Но многие из столбцов могут оказаться бесполезными. Вот почему нам нужно выделить те столбцы, которые похожи друг на друга (рисунок 3). Обратите внимание, что мы удаляем строку, которую пытаемся предсказать. Мы будем использовать косинусное сходство, чтобы найти, какие столбцы расположены ближе друг к другу.

Кроме того, поскольку Twitter имеет тенденцию рекомендовать учетные записи, на которые подписаны ваши друзья, нам необходимо найти друзей, с которыми у вас больше всего связей. Для этого нам нужно найти дружеские связи B, которые больше напоминают учетные записи, за которыми следует B. Поскольку мы отбираем пользователей (строки) путем «перепрыгивания» друзей исходной учетной записи, мы можем получить оценку сходства между учетными записями и расстояние 'в терминах' прогулок 'длиной' k 'от любого узла до узла' B '. Этот образец близких друзей будет набором поездов, используемых для предсказания позиции B-i3.

Наконец, категоризация узлов будет еще одним выходом нашей модели. Категоризация рассматривается следующим образом. Учетная запись считается сайтом «Новости», если она не отслеживает множество учетных записей, но сопровождается многими учетными записями, «Влиятельным лицом» будет считаться, если учетная запись следует за множеством учетных записей и сопровождается многими учетными записями, и учетная запись будет считаться «другом», если она следует за небольшим количеством учетных записей, а также за небольшим количеством учетных записей. Мы произвольно выбрали эту категоризацию (на основе количества подписчиков учетной записи и количества друзей), чтобы увидеть, определяет ли сходство с типом учетной записи прогнозируемый тип. Этого не должно быть, но таким образом мы можем проверить, действительно ли подписчики и друзья определяют тип учетной записи.

Процесс проверки модели

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

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

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

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

Набор данных

Мы повторно использовали наш набор данных из Twitter Tribes, но на этот раз мы добавили еще несколько пользователей, перейдя к большему количеству друзей и друзей друзей. Затем мы отфильтровали учетные записи, за которыми следят эти пользователи, но ограничились учетными записями, за которыми следуют как минимум 3 или более пользователей (рисунок 5). Мы также можем более четко видеть пользователей и их отношения на рисунке 6, а учетные записи, которым они следуют, на рисунке 7.

Результаты модели

Наша модель показывает точность предсказания 0,66 после 1000 выборок с точки зрения правильно предсказанных краев, что нормально для такой маленькой модели. Однако отзыв 0,38 кажется довольно низким для реальных ссылок. Это означает, что модель не находит ссылок столько, сколько хотелось бы. Сводку основных статистических данных можно найти в таблице 1.

Table1        precision    recall  f1-score   support

     no-edge       0.73      0.79      0.76       683
        edge       0.46      0.38      0.42       317

    accuracy                           0.66      1000
   macro avg       0.60      0.59      0.59      1000
weighted avg       0.65      0.66      0.65      1000

Если мы перейдем к некоторым примерам предсказаний и сравним их с моим личным мнением о том, имеет ли предсказание смысл с точки зрения рекомендаций. Помни это

User            Account       Predicted    Actual  Pred makes sense?
MiguelYuste8    DANIROVIRA      No-edge     Edge        unsure
Sai00079520     gandyno         No-edge     Edge        No
osuna_vasco     policia         No-edge     No-edge     No
gandyno         guardiacivil    Edge        Edge        Yes
osuna_vasco     perezreverte    Edge        Edge        Yes
alvarofm84      osuna_vasco     No-edge     No-edge     Yes
osuna_vasco     JotDownSpain    No-edge     No-edge     Yes
gontz87         DANIROVIRA      No-Edge     Edge        unsure
analyticsrl     norcoreano      No-Edge     No-edge     Yes
gandyno         InesArrimadas   No-Edge     Edge        Yes

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

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

Table2        precision    recall  f1-score   support

  Influencer       0.53      1.00      0.69       522
        News       1.00      0.05      0.10       316
     Regular       0.00      0.00      0.00       162

    accuracy                           0.54      1000
   macro avg       0.51      0.35      0.26      1000
weighted avg       0.59      0.54      0.39      1000

Этические соображения

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

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

Категоризация атрибутов с точки зрения подписчиков и отслеживаемых учетных записей может неправильно указывать на тип учетной записи в Twitter. В большинстве случаев многие люди не согласятся с выбранной нами маркировкой, учитывая, что пороговые значения, которые мы выбрали в первую очередь, несколько произвольны между обычным «другом» и «влиятельным лицом». Даже категория «Новости» может не подходить для определения всех учетных записей, но поскольку это упрощенное предположение для образовательных целей, это может быть не такой большой проблемой.

Выводы

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

Однако у этой модели есть свои ограничения. Мы обнаружили, что учетные записи с большим количеством ребер с большей вероятностью будут предсказаны правильно, чем те, которые не имеют общих подключений в сети. Чтобы продолжить «перепрыгивать» с нашей учетной записи на учетную запись наших друзей для определения атрибутов, нам нужно потратить значительное количество времени, ожидая сброса API Twitter. Наш алгоритм не может предсказать, недостаточно ли вариативности в обучающей выборке. Расширение набора данных может помочь нам создать более надежную модель.

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

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

Как всегда, вы можете найти код этого поста в этом гитхабе.