Анализ комментариев на Пикабу, часть 1
Срочно в номер: На Пикабу в политических постах НЕ обнаружено комментаторских клик.
"Комментаторской кликой" в данном случае я называю группу пользователей, вместе кочующих из поста в пост. Например, товарищи А, Б и В, которые регулярно посещают посты про Сталина и ведут там оживлённые дискуссии (неважно в каком ключе, и не обязательно всё время втроём) - комментаторская клика.
Наличие таких групп - не всегда хороший симптом для сайта. С одной стороны, если кружок состоит из эрудированных специалистов своего дела, то в комментариях можно надеяться на интересную и продуктивную дискуссию. Если же это кружок фанатиков, то все комментарии со мнениями, хоть немного отличающимися от их точки зрения будут быстро заминусованы. Я обработал посты с тегом "политика" за апрель и проанализировал, насколько много на Пикабу таких групп. Ниже метод исследования.
Сбор данных
Мной был написан бот на Python + scrapy, обошедший станицы поиска по тегу "политика" с фильтром по дате. Пикабу не захотел нормально показать результаты за весь апрель, так что пришлось запросить каждый день отдельно. Бот зашёл в каждый пост и распилил HTML страницы на комментарии. Почему-то для особо горячих дискуссий на запрос приходило максимум 300 комментариев, но влияние таких постов пренебрежимо мало, так что я не стал накручивать ради них костылей. Чтобы уменьшить вычислительную нагрузку и убрать шум, я отфильтровал пользователей, которые оставили в политических постах меньше трёх комментариев и сами не написали ни одного поста. Получилось 3527 пользователей в 9445 постах.
Сложности и первичный анализ данных
Ещё раз обращу ваше внимание на то, что не все члены клики обязательно комментируют во всех постах. В примере выше в каких-то постах могут комментировать только А и Б, в каких-то - только Б и В или А и В. Клики "мягкие"; не всегда понятно это ещё клика, или просто случайный человек приблудился. По этой причине чтобы очертить клики оптимального размера методом грубой силы пришлось бы перебрать все группы по два человека, все группы по три, по четыре и так далее, чтобы найти группы с большим количеством одновременно комментирующих человек. Эта задача вычислительно неподъёмна.
Упростим задачу. Гимн математиков: "Если не можешь решить задачу в области X, переведи её в облась Y, реши её там, и скажи, что и так сойдёт". Пусть "близость" пользователей - некоторая характеристика того, как часто они комментируют вместе. Посчитаем только попарную близость, а дальше что-нибудь придумаем. Тут можно придумать много способов, но я остановился на двух: в первом случае я просто увеличивал попарную близость между всеми пользователями в посте, во втором я ещё и добавлял дополнительной связи между пользователями в одной ветке комментариев.
Вторичный анализ
Представьте, что у вас есть пачка больших разноцветных шаров и много разных пружин. Шары и пружины проходят друг сквозь друга, но пружины могут оказывать силу с торцов на шары. Если два шара похожи друг на друга, вы соединяете их пружиной, стремящейся сблизить их. Причём, чем более они похожи, тем туже пружина. Если не похожи, то, наоборот, помещаете между ними раздвигающую пружину. Однако раздвигающие пружины имеют интересное свойство: они оказывают силу, только до определённого предела. Будучи растянутыми длиннее некоторой границы, они перестают оказывать давление вовсе. Проделав так со всеми шарами, вы получите клубок из шаров и пружин, находящихся в оптимальном натяжении. Теперь, если вы попытаетесь придавить его куском стекла к столу, шарики попытаются "самоорганизоваться". Получившаяся структура будет отображать структуру клубка с некоторыми потерями: так как в трёхмерном пространстве у шариков больше степеней свободы, на плоскости некоторые пружины окажутся натянуты сильнее, и, соответственно, некоторые шары окажутся ближе или дальше. Тем не менее, полученный результат легко обозревать и интерпретировать.
Примерно так работает алгоритм tSNE, которым я воспользовался, чтобы упростить задачу и её визуальное представление. Он принимает вычисленную на предыдущем шаге матрицу близости и параметр "минимальной похожести". Итак, групповой портрет диванных политиков с высоты птичьего полёта (каждая точка - пользователь, скопления символизируют сильную связь):
Финальный анализ
Казалось бы: "Ага, подозрительные скопления!" Но у людей и данных есть одна неприятная особенность: если пинать их достаточно долго, они признаются в чём угодно, вне зависимости от того, правда это или нет. Чтобы создать картинку выше, мне пришлось использовать чересчур мощные параметры tSNE; почти всё на картинке выше - ложные скопления. Если ослабить параметр "минимальной похожести" до границы допустимого, получится что-то вроде этого:
То же для более простого способа подсчёта близости
Заметьте, что картинка стала гораздо более похожей на кляксу шума. Это значит, что распределение связей между пользователями довольно равномерно. Подкрасим оставшиеся скопления:
И вот для этих групп уже можно посчитать количество постов, где появляются два и больше пользователей из группы. Что же оказалось? Назовём "коэффициентом клики" отношением количества постов, где появляется хотя бы два члена группы, к количеству постов, где появляется хотя бы один.
1) Даже для самых "кучных" клик этот коэффициент не превышает 0.25-0.35 (в зависимости от метода подсчёта)
2) Групп, для которых этот коэффициент выше 0.1 всего порядка 15-25
3) В подавляющем количестве случаев коэффициент клики набивается за счёт постов, где встречаются ровно два представителя класса
4) На всякий случай я вручную проверил нескольких с верха списка, и каждый раз я попадал на нормальных пользователей (не полит-ботов)
Так как мне было обидно сообщать на Пикабу об отрицательном результате ("в политических постах не обнаружено влияние комментаторских клик" звучит гораздо менее интересно, чем "я в одиночку обнаружил клику полит-ботов"), я также попробовал кластеризировать пользователей при помощи Affinity Propagation без использования tSNE и проверил ещё пару метрик подсчёта близости, но безрезультатно.
Так что же, политота не так уж и страшна?
Токсичнее комментариев в "политике" только комментарии на 9gag в постах с комиксами, где есть партнёры одного пола или слишком много представителей разных рас. Проведённый анализ никак не затрагивает клики минусаторов. Организованной группы из 25 минусаторов в Свежем достаточно, чтобы опускать ниже плинтуса неугодные посты. Увы, как я упоминал, Пикабу не представляет информацию, кто каким постам ставит плюсы.
Но, да, комментаторских клик в политоте вроде бы нет.
Как и раньше, код лежит на гитхаб/Siarshai/PikabuStatistics/tree/master. Баянометр ругался на котика.













































