В самом начале января coin и я бродили по холодным и дождливым улицам Лондона и говорили о технологиях, жизни и чём-то ещё. Я время от времени делал фотографии на свой старый Canon EOS 400D, и в какой-то момент мой друг сказал: “Вот ты фотографируешь, фотографируешь, а твои фотографии никто не лайкает”. Я не нашёл что ответить, но вернувшись домой, создал аккаунт в одной из соцсетей, где можно постить и лайкать фотографии, и составил план: за 100 дней набрать 10000 фолловеров и к концу этого срока получать 500 лайков за пост. После этого отобрал пару сотен интересных фотографий и запостил первую. И её лайкнуло только несколько человек. Этого было мало, нужно было придумать какой-то метод.



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

Сначала я рандомно подписался на две-три тысячи человек, пока ездил в автобусе на работу и с работы, после этого я выписал в таблицу те три числа, которые есть в профиле пользователя: число постов Np, число подписок Nf и число подписчиков Nfd. В последний столбец M таблицы я занёс информацию о том, подписался ли пользователь на меня в ответ или нет.

Казалось правдоподобным следующее.

  1. Чем больше у человека подписок, тем скорее пользователь и на меня подпишется.
  2. Чем больше отношение числа подписок на число постов, тем скорее пользователь на меня подпишется. (Так как чем больше постов, тем старее аккаунт. А если аккаунт создан давно, а подписок мало, то пользователь не заинтересован подписываться на других.)
  3. Чем больше отношение числа подписок на число подписчиков, тем скорее пользователь на меня подпишется. (Наблюдение показывает, что это число мало для магазинов, ботов, известных личностей и т. п. и близко к 1 для обычных людей.)

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



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

–0.19 log Nfd + 0.42 log Nf – 0.18 log Np > 0.57.

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

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

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

Тут тоже всё лучше с логарифмами, поэтому новый фактор в итоге выглядит так: log+(N'fNf), где разность N'fNf — это изменение числа подписок за три дня,

$\log_{+}(x) = \left\{ \begin{array}{ll} \log x, & x > 0, \\ 0, & x \leq 0. \end{array} \right.$

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



Метод опорных векторов даёт следующий линейный классификатор:

–0.06 log Nfd + 0.17 log Nf – 0.10 log Np + 0.16 log+(N'fNf) > 0.55.

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

Ниже приведены ROC-кривые для двух полученных классификаторов.



Через 87 дней, заполучив 10000 подписчиков, я остановился. Среднее число лайков последних 15 постов оказалось равным 490, что почти равно числу, к которому я стремился. Учитывая, что я максимизировал число подписчиков, а не число лайков, то я считаю этот результат неплохим, тем более что он близок к среднему значению для подобного аккаунта.

Самым же интересным для меня в этом эксперименте оказался четвёртый фактор — изменение числа подписок за три дня. Он оказался очень простым и при этом неожиданно очень значимым.

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


  1. keydon2
    24.04.2018 06:27

    Сейчас бы за собаками гнаться в 2018 году.


    1. mkot
      24.04.2018 06:33

      Раз в год интересно анализ данных повспоминать на простых задачах, чтоб не забыть.


  1. Andrew_Black
    24.04.2018 09:07

    Почему 10000 лайков, если речь о фоловерах?


    1. mkot
      24.04.2018 09:07

      Слово очень нравится просто.


  1. 0o0
    24.04.2018 09:07

    "мы можем немного увеличить свободный член".


    Как свободный?
    Как увеличить?
    С этого места можно поподробнее?


    1. mkot
      24.04.2018 09:08

      Переформулировал.


  1. GeneAYak
    24.04.2018 09:09
    +1

    а где посмотреть и полайкать фоточки то?


    1. mkot
      24.04.2018 09:14

      Да это ж просто эксперимент был.


  1. vladimir_inoz
    24.04.2018 09:13
    +1

    А каким образом получена информация о пользователях? Instagram API?


    1. mkot
      24.04.2018 09:14

      Нет, просто смотрел на страницы.


  1. MisterParser
    24.04.2018 09:28
    +1

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


    1. mkot
      24.04.2018 10:08

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


  1. decomeron
    24.04.2018 12:03

    Чем бы дитя не тешилась


    1. shomnest
      24.04.2018 18:31

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


      1. decomeron
        24.04.2018 23:20

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


        1. shomnest
          25.04.2018 07:24

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


  1. spiiin
    24.04.2018 17:37

    Трижды пробежался по статье, что найти, какой из факторов четвёртый. Это тоже ваша хитрость для того, чтобы статью внимательнее читали?


    1. greabock
      24.04.2018 17:54

      Разница в количестве подписок за прошедшее время, по всей видимости.
      Идея в следующем: если за установленный промежуток времени, количество подписок субъекта значительно увеличилось, то предположительно субъект в «активной фазе» и продолжает наращивать подписки. Следовательно, можно попробовать его «выжать» на предмет ответной подписки.


    1. mkot Автор
      24.04.2018 18:33

      исправил.


  1. k0nst
    24.04.2018 18:31

    Очень интересно. Мне кажется так можно вовлекать в математику молодое поколение. Они все в соц сетях, им это нравится, так почему-бы не испольовать в падагогических целях? «Ребята, сегодня мы посмотрим как математка может помочь Вам нагнать 10 000 подписчиков на ваш аккаунт»


  1. JackFrostDeCuba
    24.04.2018 18:31

    Нет фотографий няшных котиков. КГ/АМ


    1. mkot Автор
      24.04.2018 18:35

      Я уже написал не мало хабрастатей с котиками
      habr.com/post/126869
      habr.com/post/231699
      habr.com/post/135344
      habr.com/post/230009

      но не всё же о них писать.


  1. xWIMx
    24.04.2018 18:31

    Здравствуйте.
    У меня пара вопросов возникло:


    1. скрипт, который использовали для подписки — где прочитать можно;
    2. откуда взяли формулы, почему именно таким образом — подскажите, что можно прочитать.

    Я матмех окончил, но решение подобных задач почему-то мне не ясно, поэтому интересно очень прочитать))


    1. mkot Автор
      24.04.2018 18:39

      1. базовый код легко найти в интернете.
      2. формулы — просто линейные классификаторы, см., например, www.machinelearning.ru/wiki/index.php?title=%D0%9B%D0%B8%D0%BD%D0%B5%D0%B9%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80.


  1. worldnomad
    24.04.2018 18:31

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


    1. mkot Автор
      24.04.2018 18:40

      в своём реальном аккаунте, я тоже блокирую :)


      1. worldnomad
        24.04.2018 21:40

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


        1. grinCo
          25.04.2018 02:03

          Cкорее всего кэш.


          1. worldnomad
            25.04.2018 09:31

            эм-м… не понял. можно пояснить про кэш?


            1. grinCo
              25.04.2018 18:38

              Я не знаю как у них там реализовано, но вполне возможно, что когда кто-то нажимает лайк, выполняется сохранение этой информации в БД и тригерится нотификейшн. А для отображения информации о лайках (цифры) инфа тянется не из БД, а из кэша, который обновляется переодически.


              1. worldnomad
                25.04.2018 23:12

                ага. понял. что же, это вполне правдоподобно. спасибо!


  1. exebit
    24.04.2018 18:31
    +1

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


  1. zojl
    24.04.2018 18:31

    Было бы здорово, если бы кто-нибудь из присутствующих на рынке «накрутчиков» в такое умел. А то сейчас большинство берёт деньги за абсолютно бездумный массфоловинг просто по спискам, от которого отдачи очень мало, соответственно, задачу заказчика «а накрутите мне условные 5к подписчиков» они выполняют медленнее, чем могли бы.


  1. mvngr
    24.04.2018 19:52

    На каждого автоматического "подписчика" кидаю репорт с причиной «Спам». Считаю неприемлемым рекламировать своё творчество, на которое ты тратишь много времени подобным способом.

    Как выглядят ответы на репорты о спаме в instagram
    p.s. Большинство аккаунтов просто идут на удаление, так как это «одноразовые» аккаунты для рекламы казино и прочего. На данном скриншоте запечатлены как раз благодарности за репорты на аккаунты разнообразных «блоггеров», которые при помощи софта подписывались в том числе и на меня

    image


  1. DanielJ
    24.04.2018 19:52
    -1

    Лучше бы учился снимать, и получать «честные» лайки, полезнее было бы, для себя.


  1. RainDreamer
    24.04.2018 20:57

    Занимательно.


  1. shomnest
    25.04.2018 07:28

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


  1. fearde
    26.04.2018 21:13

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