Некоторое время назад я пошел поужинать с группой моих приятелей из старшей школы. Мы неизбежно начали говорить обо всех людях, которые ходили в нашу среднюю школу, и о том, что они делали сегодня. В конце концов, мы заговорили об одном из наших друзей, который действительно прославился в инстаграме. Когда ночь подходила к концу, один из моих друзей подошел ко мне и сказал: «Ты же знаешь, что все его/ее подписчики в инстаграме фальшивые».

Я сразу же зашел в их аккаунт и начал кликать по некоторым подписчикам. Конечно же, они начали выглядеть немного подозрительно. Однако, как специалист по данным, я не был уверен на 100%. В кроличью нору я пошел.

Для решения этой задачи мне нужны были некоторые данные. У меня есть аккаунт в инстаграме (@by.marcello) и несколько подписчиков. Проблема в том, что все мои подписчики были настоящими. Моими подписчиками были в основном друзья и семьи с несколькими случайными предприятиями. К сожалению, у меня не было поддельных подписчиков. Моим первым шагом было исправить это.

Префейковые подписчики (бессовестный плаг, на 90% фотки с едой):

Итак, я обнаружил, что существует целый рынок вокруг покупки подписчиков (а также лайков, но это история для другого поста в блоге). Я не буду размещать ссылки здесь, но я нашел сайт, где я мог получить 100 подписчиков за 3 доллара. Поскольку у меня было всего около 100 настоящих подписчиков, эти фальшивые подписчики завершали мой набор данных. Я потратил 3 доллара (извините, инстаграм! Я делаю это для науки), и в течение часа у меня появилось 100 новых подписчиков.

Постфейковые подписчики (плюс несколько настоящих):

Следующим шагом было получение информации обо всех моих подписчиках. Если вы использовали Instagram раньше, вы, вероятно, видели что-то вроде фотографии выше. В профилях Instagram есть отличные данные, которые мне понадобятся для построения моей модели. К сожалению для меня, Instagram недавно изменил свой API и сделал так, что вы можете получить доступ только к 10 другим пользователям (и их информации/данным) одновременно. Хуже того, вам нужно было их разрешение. Я предполагал, что эти боты не дадут согласия на мое расследование, поэтому мне нужно было решение. Входит Селен.

Selenium позволяет мне открывать веб-страницы как обычно и взаимодействовать с ними. Я написал скрипт, который сначала очищал всех моих подписчиков, а затем по одному открывал профиль каждого подписчика и собирал данные. Моя программа принимает дескриптор пользователя в Instagram, количество подписчиков, количество людей, на которых они подписаны, сообщения, их настоящее имя и их биографию. Я присвоил всем своим подписчикам 0, если они были поддельными, и 1, если они были настоящими. Теперь пришло время построить и обучить модель.

Я решил начать очень просто с алгоритма дерева решений. Имея это в качестве основы, я всегда мог усложнить работу со случайным лесом или даже деревьями, усиленными градиентом Святого Грааля. Но ради хорошей практики я начал с простого. Используя sci-kitlearn, я составил простое дерево решений, зарезервировав 30% моих данных для тестирования. Оценка прогнозов дала мне 1,0, идеальную модель или, что более вероятно, модель суперпереобучения. естественно, я загрузил модель перекрестной проверки scikit, чтобы проверить, насколько плохо подходит моя модель. К моему удивлению, модель перекрестной проверки дала средний балл 0,97 при стандартном отклонении 0,03.

Оригинальная модель:

Модель была базовой, но со всеми моими показателями у меня была некоторая уверенность. Однако мне нужно было больше данных для проверки. Я связался с подругой, которая любезно разрешила мне очистить ее подписчиков в Instagram. Единственным недостатком было то, что все ее подписчики настоящие (она проверила их всех до того, как я очистил). Поэтому я купил еще 100 поддельных подписчиков, чтобы добавить их к их набору данных, чтобы сделать его более богатым и разнообразным (еще раз извините, Instagram!, все во имя науки о данных). Я обновляю свою модель всеми исходными данными и тестирую ее на новом наборе данных. Моя модель дерева решений имела точность 0,69, точность 0,62, полноту 1,0 и предсказывала, что у моего друга было 82,5% реальных подписчиков, когда она была ближе к 51,4%.

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

Поддельные подписчики первого раунда против поддельных подписчиков второго раунда:

Мне нужно было переобучить мое дерево. Я объединил все свои данные и выделил 40% на обучение. Я повторил все этапы обучения, построения модели и перекрестной проверки. Затем я протестировал новую модель дерева решений на подписчиках моих друзей и оставшейся смеси фальшивых подписчиков.

Модель работала намного лучше с точностью 0,99, точностью 0,98, полнотой 1,0 и предсказывала, что у моего друга было 51,9% реальных подписчиков, что было близко к реальному проценту 51,4%.

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

Моя вторая итерация модели использовала только 3 функции из 5, которые я предоставил. Модель фокусировалась на количестве подписчиков, количестве подписчиков и количестве постов. Было ли у пользователя имя или биография, значения не имело. У этой модели есть много ограничений, поскольку она основана строго на определенной группе пользователей Instagram. В моем наборе данных не учитываются реальные пользователи, которые следят за ними гораздо чаще, чем за ними следят. Ему также не хватает пользователей, которые публикуют очень мало, но могут быть более вовлечены в сообщество (лайки, комментарии и т. д.). Модель довольно простая и имеет место для роста, однако мне нужны более разнообразные данные. Скорее всего, эта модель переобучена (посмотрите на последнюю ветку), однако она дает некоторое представление о том, как отлавливать фальшивых подписчиков. Определенно смотрите на соотношение подписчиков и подписчиков как на главный признак «реальности».

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

83% его/ее подписчиков фальшивые.

Попался.

Спасибо за прочтение,
-Марчелло