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

Картинка для привлечения внимания:



Предыстория


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

Для получения реальных цифр требовалось узнать приблизительную долю ботов в собранных подписчиках. Попробовал почистить аудиторию от ботов таргетхантером (первый попавшийся на глаза сервис, позволяющий отфильтровать ботов бесплатно), однако качество чистки оказалось так себе (среди оставшихся по прежнему присутствовали липовые аккаунты, причем довольно много). Сервисы типа «заплати, а мы потом тебе покажем, что умеем» решил не использовать — денег жалко, а в результате тот же черный ящик и сомнительный результат. Решил изучить страницы ботов и написать собственный фильтр.

Кого фильтруем


Для начала уточню, моей целью было отфильтровать аккаунты, которые виделись мне мусорными с точки зрения приглашения их в коммерческие свадебные сообщества. Под это определение попадают как боты, вступающие на автомате так и офферы, которые кто-то делает по 100500 штук и затем продает их, как якобы «живых подписчиков». Очевидно, что офферы, которых вручную нагоняет школьник ничего не купят ровно также, как и боты, которые нагоняются скриптом. Что они могут сделать хорошо — это просадить статистику рекламных объявлений с оплатой за 1000 показов. Также это может зацепить и вполне реальных людей, но какой от них толк в сообществе, если они не увидят его записи (равно как и не будет смысла показывать им рекламу сообществ)?

Как фильтруем


Наиболее простой мне показалась идея оценивать каждый аккаунт по шкале от 0 до 100, по которой явные боты набирают 100 очков, а обычные люди остаются в районе 0 (в идеале. На практике некоторые реальные люди могут набирать и по 50 баллов). Методика не идеальна (как и все в войне щита против меча), однако как показала практика, создатели ботов не особо заморачиваются при создании своих фейков (совершенный бот обойдется дороже привлеченного рекламой клиента), поэтому в данный момент она работает. Для заполнения шкалы были подобраны несколько признаков, каждый из которых может прибавлять или убавлять определенное количество очков, а аккаунты, набравшие некое число очков (70-100 в моем случае), считаются некачественными и фильтруются. Я не буду писать, сколько очков присваивается при нахождении того или иного признака, вы можете посмотреть их в примере, который будет в конце статьи, там же их можно будет изменить, как и порог, при превышении которого аккаунт зачисляется в стан ботов. А теперь давайте пробежимся по проверяемым признакам:

Аккаунт забанен


Первое, по чему я фильтрую пользователей. Я не знаю, зачем сервисы оставляют подобные аккаунты (а вышеупомянутый мной сервис «тх» их оставлял). Живой человек, пользующийся соцсетью восстановит доступ. Спамеру или ботоводу с тысячей аккаунтов легче завести новый аккаунт после бана. Да и крутить рекламу по забаненным живым пользователям все равно невозможно.

Ссылка на страницу не изменена


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

Нет аватара


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

Есть ссылки на другие соцсети


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

Не выходил в сеть более 1-3 месяцев


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

Подписан на 500-1500 и более сообществ


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

Состоит в сообществе о взаимораскрутке


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

Состоит во множестве сообществ о разных городах


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

Состоит в группе без аватара


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

Посты пользователя никто не смотрит


Этот признак куда более прост. Обычно если пользователь имеет кучу друзей, но при этом у него почти нет просмотров записей на стене, значит его друзья — имитация. А для чего нужна имитация друзей, как ни для того, чтобы придать реальности фейковому аккаунту?

Отмечен на фото других пользователей


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

Проверка фильтрации


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

В алгоритме используется метод wall.get для проверки записей со стены, он имеет ограничение на 1000 вызовов в сутки, поэтому при использовании данного скрипта нельзя проверить больше 1000 человек. Впрочем, этого достаточно для оценки качества аудитории. Кроме того, скрипт позволяет задать свои значения веса каждого атрибута и порога определения бота, поэтому если вы не согласны с тем, что тот или иной параметр определяет ботов, можете приравнять его к 0, либо наоборот, увеличить его значение.

Тестирование и сравнение результатов


По результатам проверки из тестовой аудитории в 2935 человек таргетхантер отфильтровал 877 ботов. Фильтрация по описанному алгоритму отсеяла 1984 человека. Если подкрутить фильтр и выявлять лишь самых злостных ботов (подписанных на 500-1000 сообществ, из которых значительная часть — это сообщества о разных городах, либо забаненных, либо состоящих в группах раскрутки), количество обнаруженных уменьшится до 1215 человек, что однако тоже превышает результат упомянутого выше сервиса. Однако я просмотрел примерно два десятка страниц пользователей, которых таргетхантер посчитал нормальными пользователями, а мой алгоритм ботами и все эти пользователи показались мне сомнительными, на страницах многих были репосты сомнительных сервисов (казино, знакомства для взрослых, участия в конкурсах, спортивные прогнозы), либо малое количество просмотров записей. Также попадались аккаунты, похожие на коммерческие, продвигавшие какие-то услуги, но лично я готов пренебречь ими, особенно если учесть, что они кроме нужных мне сообществ подписываются еще на десятки других в короткие сроки и ряд ли интересуются необходимой мне темой. Хотя более мягкий фильтр может оставить такие аккаунты. И разумеется, я понимаю, что 20 страниц недостаточно, чтобы судить о качестве всех 1984 аккаунтов.

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

Комментарии (29)


  1. Alek_roebuck
    15.06.2018 05:32

    Я не знаю, зачем сервисы оставляют подобные аккаунты (а вышеупомянутый мной сервис «тх» их оставлял). Живой человек, пользующийся соцсетью восстановит доступ

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

    полным тайн и загадок (как и само существование сообществ без аватарок)

    Опять же, это может быть непоказательный пример, но в Линкдине у сообщества выпускников одного из самых крупных во Франции университетов, в своё время занимавшего 1 место в некоторых национальных рейтингах, нет аватарки.


    1. Tantacula Автор
      15.06.2018 05:42

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

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


  1. Radisto
    15.06.2018 07:12

    по большинству параметров мой реальный аккаунт вк — бот((((


    1. ainoneko
      15.06.2018 11:54

      Это как капча, которую роботы лучше людей разгадывают.


    1. Tantacula Автор
      15.06.2018 15:57

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


  1. Areso
    15.06.2018 07:46

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

    Здравствуйте, я живой человек и я состою в таких группах)
    В Казани это тортики (попросили по знакомству вступить, мне не сложно), в Екатеринбурге это мотоциклы, в третьем городе это еще что-то… Причина проста: сначала универ, потом трудовая мобильность. Очень много студентов учатся в одном городе, а жили в другом.

    И мои посты почти никто не смотрит, да. 3-5 просмотров на 50 «френдов».

    И да, я скрыл список групп, в которых состою, с недавнего времени. Ибо нефиг.


    1. Tantacula Автор
      15.06.2018 15:50

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


  1. Stan_1
    15.06.2018 08:42

    Мне кажется, по 2/3 признаков — я бот :) Нет аватарки, приложение стоит, но захожу редко, член каких-то трешовых групп по мере того, как друзья просили подписаться :)


    1. Vitaly83vvp
      15.06.2018 10:07

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


    1. ProstoUser
      15.06.2018 11:21

      С точки зрения этого фильтра бот и человек, который «заходит редко» — сущности одного порядка бесполезности. Они ж ничего ни тот, ни другой не купят. :-)


      1. Tantacula Автор
        15.06.2018 15:36

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


  1. barbanel
    15.06.2018 10:40

    — Ну все, я ухожу, эти кожанные ублюдки меня посчитали!


  1. mak1nam1
    15.06.2018 14:57

    Ссылка на страницу не изменена

    а зачем? понтов ради?

    Есть ссылки на другие соцсети

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

    Отмечен на фото других пользователей

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

    Посты пользователя никто не смотрит

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

    Блин, я бот.


    1. Tantacula Автор
      15.06.2018 15:07

      а зачем? понтов ради?

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

      А зачем вам регистрироваться в других соцсетях? Если человек заводит аккаунт в livejournal, для него блог — это скорее всего способ самовыражения, почему бы ему не добавить в этом случае ссылку и не получить больше читателей?

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

      Как и отметка на фото, отсутствие постов не делает вас ботом с точки зрения алгоритма, ботом вас делает отсутствие просмотров ваших постов, а если у вас их нет, это не учитывается.
      Блин, я бот.

      Вы проверили свой аккаунт по этому скрипту?


    1. odin_v_pole
      15.06.2018 15:54

      а зачем? понтов ради?

      когда-то при знакомстве с новыми людьми было проще всего пояснить как тебя найти в вк назвав айди, а не имя/фамилию. А если айди еще и осмысленное слово, то и тебе и другим его запомнить весьма просто. У меня тоже odin_v_pole было. Удобно.
      такой же вопрос, зачем мне в вк оставлять ссылки на другие сайты где я есть? может еще и адрес с телефоном оставить?

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


  1. Alex_v99
    15.06.2018 15:05

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


  1. bottane4ka
    15.06.2018 15:08

    Я не нашел способа установить ссылку на фейсбук/инстаграм через апи.

    В методе users.get в fields добавить connections. Вернет, например, «instagram»: «username».


    1. Tantacula Автор
      15.06.2018 15:09

      Это метод для получения существующих данных, а не для их изменения.


  1. yanykin
    15.06.2018 15:09

    Ещё один характерный признак бота — на стене в профиле огромное количество записей и репостов из других пабликов, сделанных с интервалом в одну-две минуты (а иногда и меньше минуты). Реальный человек не станет так сильно и интенстивно захламлять свою учётку.


    1. Tantacula Автор
      15.06.2018 15:16

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


  1. true_id1
    15.06.2018 18:21

    Для реальной проверки для группы не подойдёт, но как проект интересен. Ограничение в 1000 полностью убивает практический смысл.


    1. Tantacula Автор
      16.06.2018 19:00

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


      1. true_id1
        18.06.2018 15:48

        Да не я как раз про то что выборка в 1000 человека в относительно большой группе. статистически мала будет для представления общей аудитории. Я если честно не совсем понял по какому принципу отбирается 1000 у вас.
        Ну и признаки выбраны довольно спорные пару моих знакомых боты. Знакомые СММ-щики все боты поголовно получаются если с коэффицентиками не играться. Возможно для вашей конкретной задачи достаточно релевантна проверка(есть у меня сомнения на этот счёт). Но в целом только на поиграться.
        Как вы и написали для чистки не подойдёт, а для анализа достаточно и более строгой версии но без ограничений по стене.


  1. SagePtr
    16.06.2018 00:55

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


    1. Tantacula Автор
      16.06.2018 19:06

      Спасибо, поправил.


  1. MisterParser
    16.06.2018 09:26

    Попробовал на своей группе в 200 человек, выдаёт такую ошибку: Код ошибки: 7
    Permission to perform this action is denied.


    1. Tantacula Автор
      16.06.2018 18:44

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


  1. UksusoFF
    16.06.2018 21:37

    А кто такие офферы? А если в аккаунт кросс-постятся новости с сайта он должен попасть под бота?


  1. John_Twiiick
    18.06.2018 09:17

    Боты всюду, а в соцсетях сижу не часто