Введение
Instagram, безусловно, является одной из самых популярных социальных сетей в мире. По данным Datareportal, к январю 2023 года его пользовательская база насчитывала 1,318 млрд человек по всему миру. Это означает, что около 21% всех людей старше 13 лет находятся на платформе.
С такой широкой аудиторией Instagram стал больше, чем просто платформа для обмена фотографиями. Люди используют его для маркетинга, для обмена своими политическими взглядами, в образовательных целях и для ведения бизнеса!
В этом контексте нетрудно представить, что количество поддельных аккаунтов и мошенников также начнет расти. Эти профили могут использоваться для различных злонамеренных целей, таких как распространение дезинформации, фишинг или даже кража личных данных их жертв.
Машинное обучение можно использовать, чтобы избежать серьезных проблем с этими поддельными учетными записями. Используя модели для задач классификации, можно легко определить, является ли учетная запись реальной или поддельной. В этой статье я намерен представить вам, как построить модель машинного обучения для обнаружения поддельного Instagram и как мы можем помочь сделать социальные сети более аутентичным и заслуживающим доверия пространством для всех.
Важно, чтобы вы знали, что эта статья — всего лишь фрагмент. Чтобы увидеть весь проект и все, что связано с кодированием, взгляните на 📷 Insta-Fake? Найди их! 🔎🕵️ блокнот на Kaggle.
Набор данных
Для разработки этого проекта выбран набор данных Настоящие учетные записи поддельных спамеров Instagram, который доступен на Kaggle. Набор данных состоит из двух наборов: тестового и обучающего.
Прежде чем показать вам процедуры, предпринятые для разработки этой модели, я кратко представлю вам содержание набора данных.
Набор поездов
Набор тестов
При быстром просмотре данных можно было увидеть, что набор поездов состоит из 576 образцов, а тестовый набор состоит из 120 образцов. Оба набора имеют одинаковые 12 атрибутов, а именно:
- изображение профиля: то, что кажется двоичной функцией, указывающей, есть ли у учетной записи изображение профиля или нет;
- nums/length имя пользователя: непрерывная характеристика, указывающая соотношение цифровых символов к общей длине имени пользователя учетной записи;
- слова полного имени: то, что также кажется непрерывной функцией, содержащей общее количество слов в имени человека, которому принадлежит учетная запись;
- nums/length fullname: непрерывный элемент, указывающий соотношение цифровых символов к общей длине полного имени человека;
- name == username: еще одна бинарная функция, указывающая, соответствует ли имя человека имени пользователя;
- длина описания: длина описания профиля. Вероятно, это относится к био.
- внешний URL-адрес: двоичная функция, которая указывает, есть ли в профиле ссылка на внешний веб-сайт в его биографии;
- частный: еще одна бинарная функция, указывающая, закрыт ли профиль для не подписчиков или нет;
- #posts: общее количество постов в аккаунте;
- #followers: общее количество подписчиков на аккаунте;
- #follows: общее количество людей, на которых подписан владелец аккаунта;
- подделка: это наша целевая переменная, которую мы хотели бы предсказать. Это двоичная функция, указывающая, является ли учетная запись реальной или поддельной, где 0 указывает на настоящую учетную запись, а 1 — на поддельную.
Выполнив первоначальную проверку данных, было установлено, что и набор поездов, и набор тестов имеют по два дубликата. Дубликаты могут привести к смещению модели и снизить ее способность к обобщению, что приведет к переоснащению и плохой работе с невидимыми данными. По этой причине дубликаты были удалены, а набор поездов и тестовый набор получили 574 образца и 118 образцов соответственно.
Исследовательский анализ данных
После обработки данных мы можем провести исследовательский анализ данных, выполнив методы визуализации данных. Это позволяет нам выявлять шаблоны и извлекать информацию из данных, наблюдая, как эти функции различаются между реальными учетными записями и поддельными учетными записями.
Для начала мы должны проверить баланс классов в целевой переменной, чтобы определить количество поддельных и реальных учетных записей в наборе данных. Выявление сильного дисбаланса классов, что не редкость, важно, так как нам нужно решить эту проблему на ранней стадии.
Распределение значений целевой переменной
Судя по всему, наши данные в наборе поездов сбалансированы. Половина выборок — фальшивые аккаунты, а другая половина — реальные аккаунты. Теперь, когда мы знаем, как распределяется наша целевая переменная, мы можем взглянуть на другие функции.
Бинарные функции
«Изображение профиля», «имя == имя пользователя», «внешний URL-адрес» и «частный» — это другие двоичные функции, которые есть в нашем наборе поездов помимо целевой переменной. Давайте рассмотрим их поближе.
Есть ли в аккаунте изображение профиля?
Очевидно, здесь есть закономерность! Подавляющее большинство учетных записей без аватарки являются поддельными, около 98% из них. В то время как те, у кого есть изображение профиля, в основном являются реальными аккаунтами.
Совпадает ли имя учетной записи с именем пользователя?
Имя большинства учетных записей не совпадает с именем пользователя, независимо от того, настоящее оно или поддельное. Однако среди небольшого меньшинства, которое действительно совпадает, большинство на самом деле являются поддельными учетными записями. Тем не менее, эта функция может не иметь большой предсказательной силы при классификации поддельных или реальных учетных записей. По крайней мере, это самое первое впечатление, которое мы можем извлечь из него.
Предоставляет ли учетная запись доступ к внешнему URL-адресу?
Удивительно, но ни одна поддельная учетная запись в наборе поездов не имеет ссылки на внешний URL. На первый взгляд, я был склонен полагать, что функция внешнего URL-адреса может быть важной функцией для выявления поддельных учетных записей, поскольку они могут использовать эти ссылки для кражи информации у своих жертв. Однако благодаря этому анализу мы видим, что это не так, и учетные записи, у которых есть внешние URL-ссылки, являются реальными учетными записями.
Аккаунт закрыт для не подписчиков?
Опять же, большинство учетных записей не являются частными, и не похоже, что есть большая разница между поддельными и реальными учетными записями. Глядя на частные учетные записи, мы можем увидеть небольшое преобладание реальных учетных записей, но разница может быть недостаточно значимой, чтобы иметь сильную предсказательную силу.
Проанализировав все бинарные функции, мы можем более подробно рассмотреть непрерывные функции и увидеть, насколько по-разному ведут себя поддельные аккаунты по сравнению с реальными аккаунтами в Instagram.
Непрерывные функции
Непрерывными функциями в наборе поездов являются число/длина имени пользователя, полное имя, число/длина полного имени, длина описания, #сообщения, #подписчики и # следует». Давайте посмотрим на них.
Числовые символы ÷ длина имени пользователя
Эта функция сообщает нам, какой процент имени пользователя учетной записи состоит из цифр в зависимости от его длины. Судя по всему, числовые символы в имени пользователя фальшивых учетных записей используются гораздо более сбалансированно, что кажется гораздо более распространенным, чем в реальных учетных записях. Большинство реальных учетных записей, кажется, вообще не используют числовые символы в своем имени пользователя, за исключением нескольких исключений. Эта функция также может быть сильным индикатором поддельных учетных записей.
Количество слов в полном имени
Здесь можно увидеть еще один интересный узор! Большинство реальных учетных записей содержат от одного до двух слов в именах пользователей, их может быть даже три, за исключением исключений. Однако в поддельных аккаунтах обычно всего одно слово. При просмотре исключений, то есть полных имен с большим количеством слов, настоящие учетные записи могут достигать гораздо более высокого диапазона, чем у поддельных учетных записей.
Числовые символы ÷ длина полного имени
Эта функция сообщает нам процент цифровых символов в общей длине полного имени. Большинство учетных записей, как реальных, так и поддельных, не имеют большого количества цифр в своих полных именах, но в целом можно сказать, что в поддельных учетных записях больше выбросов с большим процентом числовых символов, чем в реальных учетных записях. Мы даже можем реализовать поддельную учетную запись, которая на 100% состоит из цифр без букв.
Длина биографии в символах
И снова интересный узор. Для реальных учетных записей большинство биографий находятся в диапазоне от 0 до 60 символов без наличия выбросов. Тем не менее, большинство поддельных учетных записей имеют 0 символов в своей биографии, в то время как те, у которых есть больше символов, являются исключениями. Это также может быть функцией с высокой предсказательной силой.
Общее количество сообщений
В целом, как настоящие, так и фальшивые аккаунты не имеют огромного количества постов, большинство из них ниже отметки 1000. Однако, глядя на выбросы, можно сказать, что в целом на реальных аккаунтах может быть гораздо больше сообщений, чем на поддельных аккаунтах.
Общее количество подписчиков
Ось X числа подписчиков для реальных учетных записей была сокращена с использованием научных обозначений, и кажется, что у нас могут быть учетные записи с до 10 000 000 подписчиков, в то время как максимальное общее количество подписчиков фальшивых учетных записей находится на отметке около 3000. Это не обязательно означает, что у реальных учетных записей может быть в среднем больше подписчиков, чем у поддельных учетных записей, однако выбросы реальных учетных записей, безусловно, в большем масштабе, чем у поддельных учетных записей, что может показать некоторую способность предсказывать цель. переменная.
Общее количество людей, на которых подписан аккаунт
Если посмотреть на количество людей, на которых подписаны учетные записи, кажется, что поддельные учетные записи могут иметь больше выбросов в этом вопросе, чем настоящие учетные записи. Тем не менее, не похоже, что из этой функции можно извлечь гораздо больше информации, чем это.
В целом, глядя на диаграммы выше, кажется, что в этих данных много выбросов. Чтобы справиться с этим, я выберу алгоритмы на основе деревьев решений и алгоритмы повышения, поскольку они более устойчивы к выбросам.
Базовый уровень и выбор функций
Базовый уровень — это просто модель, которая сначала создается для использования в качестве эталона для оценки производительности окончательных моделей. Базовая модель служит точкой отсчета для сравнения окончательных моделей и, кроме того, с помощью библиотек объяснимости машинного обучения, таких как SHAP, мы можем определить, какие функции были наиболее полезными для базовой линии для прогнозирования, что может помочь в выбор функций и проектирование функций.
Для этого базового уровня я решил построить модель случайного леса, потому что это ансамблевая модель, которая объединяет несколько деревьев решений для прогнозирования и способна эффективно справляться с выбросами, которыми заполнен наш обучающий набор.
Чтобы оценить этот базовый уровень, я решил использовать показатель AUC-ROC, который я объясню сразу.
Оценка AUC-ROC
Оценка AUC-ROC широко используется для оценки эффективности классификаторов. По сути, мы хотим, чтобы оценка AUC-ROC была как можно ближе к 1,0, что указывает на то, что модель может точно определить, какие учетные записи являются поддельными, а какие — реальными.
Кривая AUC-ROC отображает TPR (истинно положительный показатель) по оси y и FPR (ложноположительный показатель) по оси x. По сути, TPR сообщает нам, какая доля положительных классов (то есть фальшивых учетных записей) была правильно классифицирована, а FPR сообщает нам долю отрицательного класса, который был неправильно классифицирован. Они задаются следующими уравнениями:
TPR = True Positives ÷ (True Positives + False Negatives)
FPR = ложноположительный результат ÷ (истинно отрицательный результат + ложноположительный результат)
Затем кривая AUC-ROC отображает TPR в зависимости от FPR при различных пороговых значениях, а площадь под кривой (AUC) измеряет способность классификатора различать каждый класс.
В идеале, когда AUC = 1, у нас должна быть такая кривая:
Оценка AUC-ROC = 1
Когда AUC находится между 0,5 и 1,0, у нас будет вот такая кривая:
0,5 ‹ Оценка AUC-ROC ‹ 1,0
И, в худшем случае, когда у нас вместо кривой прямая линия, это означает, что AUC равен 0,5, а это означает, что классификатор работает не лучше, чем случайное угадывание, что говорит о том, что модель бесполезна.
Оценка AUC-ROC = 0,5
Результаты базового уровня
Получив более глубокое понимание оценки AUC-ROC, мы можем построить нашу базовую модель.
Я разделил набор поездов на два набора данных: набор для обучения (70% данных) и набор для проверки (30% данных). После обучения и проверки нашего базового уровня, это наш результат:
Оценка AUC-ROC для исходного уровня
AUC-ROC Baseline: 0.92
Базовый уровень работал очень хорошо, и он смог извлечь уроки из обучающего набора и эффективно различать настоящие учетные записи и поддельные учетные записи в контрольном наборе.
Здесь мы можем взглянуть на распределение классов в наборе y_val:
y_val value counts 0 94 1 79
94 реальных аккаунта и 79 поддельных аккаунтов. Вот прогнозы, сделанные нашей моделью:
predicted value counts (array([0, 1]), array([98, 75]))
Базовый уровень классифицировал учетные записи как 98 реальных учетных записей и 75 поддельных учетных записей.
Помимо получения оценки производительности, базовый уровень также полезен, чтобы сообщить нам о важности каждой функции при прогнозировании. Это среднее влияние каждой функции на выходные данные базовой модели:
Среднее влияние функций на результат модели
Как я уже упоминал во время исследовательского анализа, количество подписчиков на аккаунт оказалось наиболее важной характеристикой для прогнозирования того, был ли аккаунт фальшивым или нет. Далее, общее количество постов, процент цифровых символов в имени пользователя, а также наличие или отсутствие изображения профиля в аккаунте также играли значительную роль в прогнозировании целевой переменной.
В целом, кажется, что каждая функция так или иначе повлияла на модель, а это означает, что ни одна функция не была упущена в качестве мертвого груза для классификации поддельных и реальных учетных записей.
Разработка функций
Разработка функций — это процесс создания новых функций на основе тех, которые уже есть в наборе данных, чтобы передать больше информации и наполнить наши модели дополнительными атрибутами, из которых они могут извлечь уроки, и улучшить их общую надежность и производительность.
Изучая функции в процессе исследовательского анализа, я решил создать две новые функции. Это:
Коэффициент активности: он просто будет измерять активность публикации учетной записи в зависимости от количества подписчиков, которые у нее есть. Это дается следующим уравнением:
Коэффициент активности = количество постов ÷ количество подписчиков
Я также считаю, что у большинства фальшивых аккаунтов гораздо меньше подписчиков, чем количество людей, на которых они подписаны. Итак, я создам бинарную функцию под названием #followers › #follows? это будет присваивать значение 1 для учетных записей с большим количеством подписчиков, чем следует, и 0 для учетных записей, которые подписаны больше, чем они подписаны.
После этого у нас есть новый кадр данных:
Новый фрейм данных с новыми функциями
Мы также можем построить гистограмму и диаграмму, чтобы сравнить, как эти новые атрибуты ведут себя между поддельными учетными записями и реальными учетными записями.
У аккаунта больше подписчиков, чем подписчиков?
Бинго! Около 65% учетных записей, на которых подписано больше людей, чем на них подписано, являются фальшивыми учетными записями, в то время как обратное верно для учетных записей, у которых больше подписчиков, чем подписчиков. Этот атрибут может стать важной функцией для прогнозирования поддельных учетных записей.
Коэффициент активности
В целом ясно, что фальшивые аккаунты имеют гораздо больше выбросов с экстремальными значениями коэффициента активности, то есть аккаунт, который публикует намного больше, чем количество его подписчиков. Это также может оказаться важным атрибутом для обнаружения подделок.
Моделирование
После определения базовой линии и выполнения разработки функций мы можем перейти к последнему этапу перед моделированием.
Я рассчитал среднее значение и стандартное отклонение для каждого признака, чтобы измерить, насколько различались масштабы атрибутов.
Среднее значение и стандартное отклонение атрибутов
Совершенно очевидно, что атрибуты находятся в разных масштабах, и это может привести к смещению модели. Чтобы избежать этой проблемы, метод масштабирования StandardScaler был применен к конвейеру моделей, помещая каждый отдельный атрибут в один и тот же масштаб.
После этого моделирование применяется на практике! Я обучил и проверил четыре разные модели бустинга: XGBoost, LightGBM, CatBoost и AdaBoost. Ниже мы можем увидеть оценку AUC-ROC для всех из них.
Кривая AUC-ROC для каждой протестированной модели
XGBoost: AUC-ROC score = 0.90 LGBM: AUC-ROC score = 0.89 CatBoost: AUC-ROC score = 0.93 AdaBoost: AUC-ROC score = 0.89
В целом, большинство моделей уступают базовому уровню Random Forest. CatBoost показал лучшую производительность с AUC, равным 0,93. Таким образом, это модель, выбранная для выполнения прогнозов на тестовом наборе.
Прогнозирование на тестовом наборе
Те же процедуры, что и на тренировочном наборе, были применены и на тестовом наборе, например разработка признаков, очистка и масштабирование.
С учетом сказанного, наконец, модель CatBoost использовалась для выполнения прогнозов на тестовом наборе, и вот результаты, которые мы получили:
Оценка AUC-ROC на тестовом наборе
CatBoos: AUC-ROC score on unseen data = 0.9214
Целевая переменная y в тестовом наборе имела следующее распределение:
Value counts for y: 0 60 1 56
60 реальных аккаунтов и 56 поддельных аккаунтов. Это были результаты нашей модели CatBoost:
Value counts for y_pred: 0 63 1 53
63 реальных аккаунта и 53 поддельных аккаунта. Мы можем отобразить матрицу путаницы, чтобы увидеть производительность нашей модели:
Матрица путаницы истинных меток и предсказанных меток
У нас было 6 ложных срабатываний, т. е. фейковые аккаунты, классифицированные как настоящие, и 3 ложных срабатывания, реальные аккаунты, классифицированные как фейковые.
В целом, наша модель правильно классифицировала 50 поддельных учетных записей из 56, исходя из приведенного ниже процента отзыва:
Recall Score: 89.0%
Объяснимость модели
С помощью библиотеки SHAP мы можем построить график важности функции, чтобы увидеть уровень важности каждой функции для прогнозирования целевой переменной.
Окончательный график важности функции модели
Процент цифровых символов в имени пользователя был важной характеристикой как в базовой, так и в окончательной модели, а также в модели CatBoost. Также очень приятно отметить, что функция, которую мы создали в процессе разработки функций, заняла второе место по важности для выявления поддельных учетных записей, а также по коэффициенту активности, хотя и не так важно, как две другие упомянутые функции.
Заключение
Во время разработки этого проекта мы выполнили несколько процедур обработки и анализа данных, чтобы выявить закономерности и извлечь из данных информацию.
Мы могли бы успешно выявить различия между поддельными и реальными учетными записями в Instagram, определив, что у реальных учетных записей больше постов, чем у поддельных, и что поддельные обычно следуют большему количеству людей, чем настоящие учетные записи, а также другие различные следы между ними.
Разработав базовую модель, мы установили эталон для сравнения наших окончательных моделей. Это также позволило нам лучше понять, какие функции демонстрируют высокую прогностическую важность целевой переменной, что помогло нам выбрать соответствующие функции в процессе разработки функций.
После создания новых функций мы также могли выявить в них соответствующие закономерности, например тот факт, что большинство учетных записей, подписанных на большее количество людей, чем у них было подписчиков, в основном были поддельными учетными записями. Оказалось, что одна только эта функция оказала значительное влияние на конечный результат модели.
Наконец, после тестирования множества различных алгоритмов повышения, модель CatBoost получила более высокий балл AUC-ROC, будучи выбранной для выполнения окончательных прогнозов на тестовом наборе данных, и эффективно набрала 0,9214 на тестовом наборе, правильно идентифицировав 89% поддельных учетных записей.
Спасибо за чтение. Не забывайте, что эта статья является лишь фрагментом, а полностью проект вы можете увидеть в разделе 📷 Insta-Fake? Найди их! 🔎🕵️ блокнот на Kaggle!
Еще раз спасибо,
Луис Фернандо Торрес
Введение
Instagram, безусловно, является одной из самых популярных социальных сетей в мире. По данным Datareportal, к январю 2023 года его пользовательская база насчитывала 1,318 млрд человек по всему миру. Это означает, что около 21% всех людей старше 13 лет находятся на платформе.
С такой широкой аудиторией Instagram стал больше, чем просто платформа для обмена фотографиями. Люди используют его для маркетинга, для обмена своими политическими взглядами, в образовательных целях и для ведения бизнеса!
В этом контексте нетрудно представить, что количество поддельных аккаунтов и мошенников также начнет расти. Эти профили могут использоваться для различных злонамеренных целей, таких как распространение дезинформации, фишинг или даже кража личных данных их жертв.
Машинное обучение можно использовать, чтобы избежать серьезных проблем с этими поддельными учетными записями. Используя модели для задач классификации, можно легко определить, является ли учетная запись реальной или поддельной. В этой статье я намерен представить вам, как построить модель машинного обучения для обнаружения поддельного Instagram и как мы можем помочь сделать социальные сети более аутентичным и заслуживающим доверия пространством для всех.
Важно, чтобы вы знали, что эта статья — всего лишь фрагмент. Чтобы увидеть весь проект и все, что связано с кодированием, взгляните на 📷 Insta-Fake? Найди их! 🔎🕵️ блокнот на Kaggle.
Набор данных
Для разработки этого проекта выбран набор данных Настоящие учетные записи поддельных спамеров Instagram, который доступен на Kaggle. Набор данных состоит из двух наборов: тестового и обучающего.
Прежде чем показать вам процедуры, предпринятые для разработки этой модели, я кратко представлю вам содержание набора данных.
Набор поездов
Набор тестов
При быстром просмотре данных можно было увидеть, что набор поездов состоит из 576 образцов, а тестовый набор состоит из 120 образцов. Оба набора имеют одинаковые 12 атрибутов, а именно:
- изображение профиля: то, что кажется двоичной функцией, указывающей, есть ли у учетной записи изображение профиля или нет;
- nums/length имя пользователя: непрерывная характеристика, указывающая соотношение цифровых символов к общей длине имени пользователя учетной записи;
- слова полного имени: то, что также кажется непрерывной функцией, содержащей общее количество слов в имени человека, которому принадлежит учетная запись;
- nums/length fullname: непрерывный элемент, указывающий соотношение цифровых символов к общей длине полного имени человека;
- name == username: еще одна бинарная функция, указывающая, соответствует ли имя человека имени пользователя;
- длина описания: длина описания профиля. Вероятно, это относится к био.
- внешний URL-адрес: двоичная функция, которая указывает, есть ли в профиле ссылка на внешний веб-сайт в его биографии;
- частный: еще одна бинарная функция, указывающая, закрыт ли профиль для не подписчиков или нет;
- #posts: общее количество постов в аккаунте;
- #followers: общее количество подписчиков на аккаунте;
- #follows: общее количество людей, на которых подписан владелец аккаунта;
- подделка: это наша целевая переменная, которую мы хотели бы предсказать. Это двоичная функция, указывающая, является ли учетная запись реальной или поддельной, где 0 указывает на настоящую учетную запись, а 1 — на поддельную.
Выполнив первоначальную проверку данных, было установлено, что и набор поездов, и набор тестов имеют по два дубликата. Дубликаты могут привести к смещению модели и снизить ее способность к обобщению, что приведет к переоснащению и плохой работе с невидимыми данными. По этой причине дубликаты были удалены, а набор поездов и тестовый набор получили 574 образца и 118 образцов соответственно.
Исследовательский анализ данных
После обработки данных мы можем провести исследовательский анализ данных, выполнив методы визуализации данных. Это позволяет нам выявлять шаблоны и извлекать информацию из данных, наблюдая, как эти функции различаются между реальными учетными записями и поддельными учетными записями.
Для начала мы должны проверить баланс классов в целевой переменной, чтобы определить количество поддельных и реальных учетных записей в наборе данных. Выявление сильного дисбаланса классов, что не редкость, важно, так как нам нужно решить эту проблему на ранней стадии.
Распределение значений целевой переменной
Судя по всему, наши данные в наборе поездов сбалансированы. Половина выборок — фальшивые аккаунты, а другая половина — реальные аккаунты. Теперь, когда мы знаем, как распределяется наша целевая переменная, мы можем взглянуть на другие функции.
Бинарные функции
«Изображение профиля», «имя == имя пользователя», «внешний URL-адрес» и «частный» — это другие двоичные функции, которые есть в нашем наборе поездов помимо целевой переменной. Давайте рассмотрим их поближе.
Есть ли в аккаунте изображение профиля?
Очевидно, здесь есть закономерность! Подавляющее большинство учетных записей без аватарки являются поддельными, около 98% из них. В то время как те, у кого есть изображение профиля, в основном являются реальными аккаунтами.
Совпадает ли имя учетной записи с именем пользователя?
Имя большинства учетных записей не совпадает с именем пользователя, независимо от того, настоящее оно или поддельное. Однако среди небольшого меньшинства, которое действительно совпадает, большинство на самом деле являются поддельными учетными записями. Тем не менее, эта функция может не иметь большой предсказательной силы при классификации поддельных или реальных учетных записей. По крайней мере, это самое первое впечатление, которое мы можем извлечь из него.
Предоставляет ли учетная запись доступ к внешнему URL-адресу?
Удивительно, но ни одна поддельная учетная запись в наборе поездов не имеет ссылки на внешний URL. На первый взгляд, я был склонен полагать, что функция внешнего URL-адреса может быть важной функцией для выявления поддельных учетных записей, поскольку они могут использовать эти ссылки для кражи информации у своих жертв. Однако благодаря этому анализу мы видим, что это не так, и учетные записи, у которых есть внешние URL-ссылки, являются реальными учетными записями.
Аккаунт закрыт для не подписчиков?
Опять же, большинство учетных записей не являются частными, и не похоже, что есть большая разница между поддельными и реальными учетными записями. Глядя на частные учетные записи, мы можем увидеть небольшое преобладание реальных учетных записей, но разница может быть недостаточно значимой, чтобы иметь сильную предсказательную силу.
Проанализировав все бинарные функции, мы можем более подробно рассмотреть непрерывные функции и увидеть, насколько по-разному ведут себя поддельные аккаунты по сравнению с реальными аккаунтами в Instagram.
Непрерывные функции
Непрерывными функциями в наборе поездов являются число/длина имени пользователя, полное имя, число/длина полного имени, длина описания, #сообщения, #подписчики и # следует». Давайте посмотрим на них.
Числовые символы ÷ длина имени пользователя
Эта функция сообщает нам, какой процент имени пользователя учетной записи состоит из цифр в зависимости от его длины. Судя по всему, числовые символы в имени пользователя фальшивых учетных записей используются гораздо более сбалансированно, что кажется гораздо более распространенным, чем в реальных учетных записях. Большинство реальных учетных записей, кажется, вообще не используют числовые символы в своем имени пользователя, за исключением нескольких исключений. Эта функция также может быть сильным индикатором поддельных учетных записей.
Количество слов в полном имени
Здесь можно увидеть еще один интересный узор! Большинство реальных учетных записей содержат от одного до двух слов в именах пользователей, их может быть даже три, за исключением исключений. Однако в поддельных аккаунтах обычно всего одно слово. При просмотре исключений, то есть полных имен с большим количеством слов, настоящие учетные записи могут достигать гораздо более высокого диапазона, чем у поддельных учетных записей.
Числовые символы ÷ длина полного имени
Эта функция сообщает нам процент цифровых символов в общей длине полного имени. Большинство учетных записей, как реальных, так и поддельных, не имеют большого количества цифр в своих полных именах, но в целом можно сказать, что в поддельных учетных записях больше выбросов с большим процентом числовых символов, чем в реальных учетных записях. Мы даже можем реализовать поддельную учетную запись, которая на 100% состоит из цифр без букв.
Длина биографии в символах
И снова интересный узор. Для реальных учетных записей большинство биографий находятся в диапазоне от 0 до 60 символов без наличия выбросов. Тем не менее, большинство поддельных учетных записей имеют 0 символов в своей биографии, в то время как те, у которых есть больше символов, являются исключениями. Это также может быть функцией с высокой предсказательной силой.
Общее количество сообщений
В целом, как настоящие, так и фальшивые аккаунты не имеют огромного количества постов, большинство из них ниже отметки 1000. Однако, глядя на выбросы, можно сказать, что в целом на реальных аккаунтах может быть гораздо больше сообщений, чем на поддельных аккаунтах.
Общее количество подписчиков
Ось X числа подписчиков для реальных учетных записей была сокращена с использованием научных обозначений, и кажется, что у нас могут быть учетные записи с до 10 000 000 подписчиков, в то время как максимальное общее количество подписчиков фальшивых учетных записей находится на отметке около 3000. Это не обязательно означает, что у реальных учетных записей может быть в среднем больше подписчиков, чем у поддельных учетных записей, однако выбросы реальных учетных записей, безусловно, в большем масштабе, чем у поддельных учетных записей, что может показать некоторую способность предсказывать цель. переменная.
Общее количество людей, на которых подписан аккаунт
Если посмотреть на количество людей, на которых подписаны учетные записи, кажется, что поддельные учетные записи могут иметь больше выбросов в этом вопросе, чем настоящие учетные записи. Тем не менее, не похоже, что из этой функции можно извлечь гораздо больше информации, чем это.
В целом, глядя на диаграммы выше, кажется, что в этих данных много выбросов. Чтобы справиться с этим, я выберу алгоритмы на основе деревьев решений и алгоритмы повышения, поскольку они более устойчивы к выбросам.
Базовый уровень и выбор функций
Базовый уровень — это просто модель, которая сначала создается для использования в качестве эталона для оценки производительности окончательных моделей. Базовая модель служит точкой отсчета для сравнения окончательных моделей и, кроме того, с помощью библиотек объяснимости машинного обучения, таких как SHAP, мы можем определить, какие функции были наиболее полезными для базовой линии для прогнозирования, что может помочь в выбор функций и проектирование функций.
Для этого базового уровня я решил построить модель случайного леса, потому что это ансамблевая модель, которая объединяет несколько деревьев решений для прогнозирования и способна эффективно справляться с выбросами, которыми заполнен наш обучающий набор.
Чтобы оценить этот базовый уровень, я решил использовать показатель AUC-ROC, который я объясню сразу.
Оценка AUC-ROC
Оценка AUC-ROC широко используется для оценки эффективности классификаторов. По сути, мы хотим, чтобы оценка AUC-ROC была как можно ближе к 1,0, что указывает на то, что модель может точно определить, какие учетные записи являются поддельными, а какие — реальными.
Кривая AUC-ROC отображает TPR (истинно положительный показатель) по оси y и FPR (ложноположительный показатель) по оси x. По сути, TPR сообщает нам, какая доля положительных классов (то есть фальшивых учетных записей) была правильно классифицирована, а FPR сообщает нам долю отрицательного класса, который был неправильно классифицирован. Они задаются следующими уравнениями:
TPR = True Positives ÷ (True Positives + False Negatives)
FPR = ложноположительный результат ÷ (истинно отрицательный результат + ложноположительный результат)
Затем кривая AUC-ROC отображает TPR в зависимости от FPR при различных пороговых значениях, а площадь под кривой (AUC) измеряет способность классификатора различать каждый класс.
В идеале, когда AUC = 1, у нас должна быть такая кривая:
Оценка AUC-ROC = 1
Когда AUC находится между 0,5 и 1,0, у нас будет вот такая кривая:
0,5 ‹ Оценка AUC-ROC ‹ 1,0
И, в худшем случае, когда у нас вместо кривой прямая линия, это означает, что AUC равен 0,5, а это означает, что классификатор работает не лучше, чем случайное угадывание, что говорит о том, что модель бесполезна.
Оценка AUC-ROC = 0,5
Результаты базового уровня
Получив более глубокое понимание оценки AUC-ROC, мы можем построить нашу базовую модель.
Я разделил набор поездов на два набора данных: набор для обучения (70% данных) и набор для проверки (30% данных). После обучения и проверки нашего базового уровня, это наш результат:
Оценка AUC-ROC для исходного уровня
AUC-ROC Baseline: 0.92
Базовый уровень работал очень хорошо, и он смог извлечь уроки из обучающего набора и эффективно различать настоящие учетные записи и поддельные учетные записи в контрольном наборе.
Здесь мы можем взглянуть на распределение классов в наборе y_val:
y_val value counts 0 94 1 79
94 реальных аккаунта и 79 поддельных аккаунтов. Вот прогнозы, сделанные нашей моделью:
predicted value counts (array([0, 1]), array([98, 75]))
Базовый уровень классифицировал учетные записи как 98 реальных учетных записей и 75 поддельных учетных записей.
Помимо получения оценки производительности, базовый уровень также полезен, чтобы сообщить нам о важности каждой функции при прогнозировании. Это среднее влияние каждой функции на выходные данные базовой модели:
Среднее влияние функций на результат модели
Как я уже упоминал во время исследовательского анализа, количество подписчиков на аккаунт оказалось наиболее важной характеристикой для прогнозирования того, был ли аккаунт фальшивым или нет. Далее, общее количество постов, процент цифровых символов в имени пользователя, а также наличие или отсутствие изображения профиля в аккаунте также играли значительную роль в прогнозировании целевой переменной.
В целом, кажется, что каждая функция так или иначе повлияла на модель, а это означает, что ни одна функция не была упущена в качестве мертвого груза для классификации поддельных и реальных учетных записей.
Разработка функций
Разработка функций — это процесс создания новых функций на основе тех, которые уже есть в наборе данных, чтобы передать больше информации и наполнить наши модели дополнительными атрибутами, из которых они могут извлечь уроки, и улучшить их общую надежность и производительность.
Изучая функции в процессе исследовательского анализа, я решил создать две новые функции. Это:
Коэффициент активности: он просто будет измерять активность публикации учетной записи в зависимости от количества подписчиков, которые у нее есть. Это дается следующим уравнением:
Коэффициент активности = количество постов ÷ количество подписчиков
Я также считаю, что у большинства фальшивых аккаунтов гораздо меньше подписчиков, чем количество людей, на которых они подписаны. Итак, я создам бинарную функцию под названием #followers › #follows? это будет присваивать значение 1 для учетных записей с большим количеством подписчиков, чем следует, и 0 для учетных записей, которые подписаны больше, чем они подписаны.
После этого у нас есть новый кадр данных:
Новый фрейм данных с новыми функциями
Мы также можем построить гистограмму и диаграмму, чтобы сравнить, как эти новые атрибуты ведут себя между поддельными учетными записями и реальными учетными записями.
У аккаунта больше подписчиков, чем подписчиков?
Бинго! Около 65% учетных записей, на которых подписано больше людей, чем на них подписано, являются фальшивыми учетными записями, в то время как обратное верно для учетных записей, у которых больше подписчиков, чем подписчиков. Этот атрибут может стать важной функцией для прогнозирования поддельных учетных записей.
Коэффициент активности
В целом ясно, что фальшивые аккаунты имеют гораздо больше выбросов с экстремальными значениями коэффициента активности, то есть аккаунт, который публикует намного больше, чем количество его подписчиков. Это также может оказаться важным атрибутом для обнаружения подделок.
Моделирование
После определения базовой линии и выполнения разработки функций мы можем перейти к последнему этапу перед моделированием.
Я рассчитал среднее значение и стандартное отклонение для каждого признака, чтобы измерить, насколько различались масштабы атрибутов.
Среднее значение и стандартное отклонение атрибутов
Совершенно очевидно, что атрибуты находятся в разных масштабах, и это может привести к смещению модели. Чтобы избежать этой проблемы, метод масштабирования StandardScaler был применен к конвейеру моделей, помещая каждый отдельный атрибут в один и тот же масштаб.
После этого моделирование применяется на практике! Я обучил и проверил четыре разные модели бустинга: XGBoost, LightGBM, CatBoost и AdaBoost. Ниже мы можем увидеть оценку AUC-ROC для всех из них.
Кривая AUC-ROC для каждой протестированной модели
XGBoost: AUC-ROC score = 0.90 LGBM: AUC-ROC score = 0.89 CatBoost: AUC-ROC score = 0.93 AdaBoost: AUC-ROC score = 0.89
В целом, большинство моделей уступают базовому уровню Random Forest. CatBoost показал лучшую производительность с AUC, равным 0,93. Таким образом, это модель, выбранная для выполнения прогнозов на тестовом наборе.
Прогнозирование на тестовом наборе
Те же процедуры, что и на тренировочном наборе, были применены и на тестовом наборе, например разработка признаков, очистка и масштабирование.
С учетом сказанного, наконец, модель CatBoost использовалась для выполнения прогнозов на тестовом наборе, и вот результаты, которые мы получили:
Оценка AUC-ROC на тестовом наборе
CatBoos: AUC-ROC score on unseen data = 0.9214
Целевая переменная y в тестовом наборе имела следующее распределение:
Value counts for y: 0 60 1 56
60 реальных аккаунтов и 56 поддельных аккаунтов. Это были результаты нашей модели CatBoost:
Value counts for y_pred: 0 63 1 53
63 реальных аккаунта и 53 поддельных аккаунта. Мы можем отобразить матрицу путаницы, чтобы увидеть производительность нашей модели:
Матрица путаницы истинных меток и предсказанных меток
У нас было 6 ложных срабатываний, т. е. фейковые аккаунты, классифицированные как настоящие, и 3 ложных срабатывания, реальные аккаунты, классифицированные как фейковые.
В целом, наша модель правильно классифицировала 50 поддельных учетных записей из 56, исходя из приведенного ниже процента отзыва:
Recall Score: 89.0%
Объяснимость модели
С помощью библиотеки SHAP мы можем построить график важности функции, чтобы увидеть уровень важности каждой функции для прогнозирования целевой переменной.
Окончательный график важности функции модели
Процент цифровых символов в имени пользователя был важной характеристикой как в базовой, так и в окончательной модели, а также в модели CatBoost. Также очень приятно отметить, что функция, которую мы создали в процессе разработки функций, заняла второе место по важности для выявления поддельных учетных записей, а также по коэффициенту активности, хотя и не так важно, как две другие упомянутые функции.
Заключение
Во время разработки этого проекта мы выполнили несколько процедур обработки и анализа данных, чтобы выявить закономерности и извлечь из данных информацию.
Мы могли бы успешно выявить различия между поддельными и реальными учетными записями в Instagram, определив, что у реальных учетных записей больше постов, чем у поддельных, и что поддельные обычно следуют большему количеству людей, чем настоящие учетные записи, а также другие различные следы между ними.
Разработав базовую модель, мы установили эталон для сравнения наших окончательных моделей. Это также позволило нам лучше понять, какие функции демонстрируют высокую прогностическую важность целевой переменной, что помогло нам выбрать соответствующие функции в процессе разработки функций.
После создания новых функций мы также могли выявить в них соответствующие закономерности, например тот факт, что большинство учетных записей, подписанных на большее количество людей, чем у них было подписчиков, в основном были поддельными учетными записями. Оказалось, что одна только эта функция оказала значительное влияние на конечный результат модели.
Наконец, после тестирования множества различных алгоритмов повышения, модель CatBoost получила более высокий балл AUC-ROC, будучи выбранной для выполнения окончательных прогнозов на тестовом наборе данных, и эффективно набрала 0,9214 на тестовом наборе, правильно идентифицировав 89% поддельных учетных записей.
Спасибо за чтение. Не забывайте, что эта статья является лишь фрагментом, а полностью проект вы можете увидеть в разделе 📷 Insta-Fake? Найди их! 🔎🕵️ блокнот на Kaggle!
Еще раз спасибо,
Луис Фернандо Торрес