Хабра-граф, -сообщества и куда же делась вся карма

в 10:04, , рубрики: big data, data mining, data science, python, визуализация данных, вот это вот всё с данными да, кластеризация, математика, никто не читает теги, Хабрахабр API

Вступление

Cегодня мы вместе с анализом графов, data mining, subgroup discovery и всеми веселыми штуками взглянем на Хабр. Весь код и данные прилагаются — каждый может взглянуть на них самостоятельно, легко повторить рассчеты из статьи и найти что-то интересное самостоятельно.

Хабра-граф, -сообщества и куда же делась вся карма - 1
(это не просто картинка для привлечения внимания, а — граф связей ~45000 пользователей Хабра по тому, кто на кого подписан; размер вершины пропорционален числу подписчиков; все картинки кликабельны; подробности далее)

Обсуждаемые проблемы возникли, конечно же, далеко не вчера, но некоторые их аспекты кажутся мне достаточно новыми и поэтому достойными дискуссии, основанной на непредвзятых и репрезентативных данных. Например в комментариях этой статьи, увидел интересное утверждение:

Тут проблема в том, что на всем хабре за сегодня не насчитать больше 50-80 человек, которые вообще могут голосовать. У 90% пользователей карма просто ниже 5. Как итог оценивают комментарии и статьи только избранные. Это как жюри выходит такое.

И решил, что стоить его сформулировать в виде гипотезы и проверить:

Q1: Правда ли, что Хабр превратился в жюри-based сообщество, где два с половиной человека голосуют за статьи?

Вот в этой статье к нам вернулись "железные" Хабы и стало интересно, а как вообще представлены разные сообщества внутри Хабра? Формулируем в виде гипотезы:

Q2: Как сегментировано сообщество, или проще говоря сколько у нас здесь групп по интересам и соотвествуют ли они имеющимся хабам?

Последнее, но не менее интересное наблюдение, что активность на Хабре упала (по данным Хабра-пульса и моим субъективным наблюдениям), что даже решили ввести аккаунты "read & comment". Поэтому решил оценить активность сообщества и продумать, как информация о структуре сообщества может нам помочь:

Q3: Насколько активно сообщество и как нам может помочь структура внутренних групп?

За подробностями добро пожаловать под кат.

Структура статьи

Методология сбора данных

Как известно, на Хабра-API пишут новую версию Duke Nukem Forever, поэтому приходится собирать все интересные данные самостоятельно (ну ок, на самом деле он не предоставляет всех интересных данных). Какие данные нам нужно собрать?

  • База пользователей: пройдемся по всем постам (переберем все id от 2*10^4 до 2.76*10^4)
  • Их персональные данные карма, рейтинг, посты, etc
  • Связи между пользователями (для анализа сообщества): отметим последователей для каждого пользователя и хабы каждой статьи.

Так как у Хабра стоит лимит на число подключений лучше всего использовать распределенную архитектуру парса, например разбить все статьи на N групп и || в 4 потока на каждой машине парсить. Все данные собираются в github HabraData (если вы пишите магистерскую или еще какой диплом по анализу данных, особенно если вдруг на русском, то там можно найти много всего интересного).
Общая схема сбора:
Хабра-граф, -сообщества и куда же делась вся карма - 2

Собирались все пользователи, кто за последние ~2 года оставил комментрий иили написал статью. Потом фильтровались те, кого забанили, ушел в минус, etc. Параллельно собирались данные по статьям, а именно к каким хабам они относятся. Данные использованные в каждом эксперименте поясняются по ходу рассказа.
Неотфильтрованные список пользователей ~ 25к доступен здесь, а здесь отфильтровнный датасет с ключевыми показателями пользователей в виде:

user,karma,rating,publications,comments,favourites,followers
....
var_bin,3.0,0.0,1,18,6,1
varagian,187.0,26.0,20,151,86,44
varanio,55.0,0.0,3,51,24,6
varerysan,16.0,0.0,9,26,0,3
....

Вопрос первый: анализ распределений кармы, комментариев, постов, etc

Распределение кармы ака Карма-неравенство
Первый интересный инсайт бо́льшая часть ~61% сконцентрирована у 10% пользователей, на второй десяток (топ 20% за вычетом, тех кто в топ 10%) приходится уже меньше 20%.
Хабра-граф, -сообщества и куда же делась вся карма - 3
Отвечаем на комментарий в начале статьи: порядка 50% активных пользователей имеют карму 5 и более, то есть порядка 7500 человек.
Само распределение показывает, что действительно существенная группа сконцентрирована в районе нуля, что будет понятным из дальнейшего анализа.

Распределение кармы

Хабра-граф, -сообщества и куда же делась вся карма - 4

(У графиков ниже почему-то неправильно отобразилась метка на оси y, она должна читаться как «доля».)

Следующий интересный график — распределение публикаций, из него мы видим, что бо́льшую часть статей написала небольшая часть пользователей (также здесь мог сказаться и факт разделения Хабра, хотя с этого момента прошло достаточно времени.)
Хабра-граф, -сообщества и куда же делась вся карма - 5
Не менее интересно проверить сохранится ли такое же распределение и для комментариев? На самом деле оно является более сбалансированным, но общий паттерн сохраняется и отражает ситуацию с кармой.
Хабра-граф, -сообщества и куда же делась вся карма - 6
Мы видим, что структура сохраняется и для других показателей:

Распределение числа последователей

Хабра-граф, -сообщества и куда же делась вся карма - 7

Распределение числа записей в избранном

Распределение рейтинга

Хабра-граф, -сообщества и куда же делась вся карма - 9

Положительная корреляция присутствует:

Зависимость между кармой и числом подписчиков

Хабра-граф, -сообщества и куда же делась вся карма - 10

Интересный момент, что рейтинг больше не зависит от кармы

Зависимость между кармой и рейтингом

Хабра-граф, -сообщества и куда же делась вся карма - 11

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

Зависимость между количество подписчиков и написанных комментариев

Хабра-граф, -сообщества и куда же делась вся карма - 12

Предварительные выводы по первому вопросу

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

Сообщества Хабра

Здесь мы попытаемся понять, какие группы существуют внутри Хабрахабра. В основе анализа лежат два следующих предположения:

  • Подписываются на людей, которые пишут на тематику интересующую читателя
  • Человек, с достаточным числом подписчиков, достаточно пишет на тему интересующую читателей

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

user:follower1,folllower2,.... 

Здесь доступен исходный граф (формат Gephi) на основе датасета выше, а здесь версия с размеченными и сгруппированными сообществами (также Gephi). Всего в графе (датасете) 45 тысяч пользователей и 110 тысяч дуг "подписки".
Различные сообщества подсвечены на основе метода Louvain Сommunity Detection. Здесь же приводится граф, вершины которого подсвечены в соответствии с их сообществом, так же обозначены дуги подписки.

Хабра-граф, -сообщества и куда же делась вся карма - 13

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

Хабра-граф, -сообщества и куда же делась вся карма - 14

Попробовал проанализировать группы и вывести возможные метки сообществ. Было бы интересно провести более глубокий анализ сообществ и услышать мнения самих авторов из разных групп.

Хабра-граф, -сообщества и куда же делась вся карма - 15

Предварительные выводы

Из анализа графа следует, что железо является самой большой группой среди подписчиков ~10% от общего числа. Именно поэтому убранные хабы о железе вызвали столь негативную реакцию, так как большая группа активных писателей и читателей (кто буквально подписан на обновления от "железячных" авторов) вдруг потеряла привычную площадку. Более того, как мы увидим, далее железные хабы переплетены с хабами программирования, что во многом создает единое окружение и для авторов и для читателей. (Надеюсь, что не открыл Америку с анализом сообществ и хабов тем, кто их иногда передвигает.)

Связность Хабов

Другой интересный метод измерения сегментации основан на следующем наблюдении, если статьи часто помещают в два хаба А и Б, значит А и Б объединены какой-то общей тематикой или вообще говоря схожи. Мы можем взять множество статей, которое поместили в хаб А и множество, которое поместили в Б и рассчитать степень их схожести с помощью коэффициента Жаккара
Хабра-граф, -сообщества и куда же делась вся карма - 16
Таким образом мы можем получить граф, вершинами которого являются Хабы, а дуги — это степень схожести по Жаккару. Далее применим тот же метод, что и использовался ранее (Louvain Сommunity Detection).

Здесь доступны исходные данные, а здесь граф с сообществами

Граф вместе с дугами; вершины соответствует цветам сообществ, также мы видим отдельно стоящую группу "переехавших" хабов. Размер вершины — это общий вес входящих в неё ребер (граф ненаправленный)

Хабра-граф, -сообщества и куда же делась вся карма - 17
(Интесивность ребра — вес)

Более читаемая версия без рёбер. На ней мы видим порядка 10ти крупных сообществ Хабов, причем например железячный Хаб controllers (Программирование микроконтроллеров), плотно сидит в центре "группы программировния"

Хабра-граф, -сообщества и куда же делась вся карма - 18

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

Активность и Выводы

Общие статистика читателей и писателей

* Active -- кто оставил хотя бы один комментарий или написал одну статью за последние два года ~25к
* С неотрицательной кармойрейтингом и не переведен в режим read only ~ 14к
* Общее количество подписчиков у активных пользователей 44k
* Общее число подписок: 104k
* Пользователи с хотя бы одним подписчиком: 11.5k
* Диаметр графа: 4.7
* Плотность ~0
* Количество микросообществ: 528

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

Июль 2014

Хабра-граф, -сообщества и куда же делась вся карма - 19

Август-Сентябрь 2015

Хабра-граф, -сообщества и куда же делась вся карма - 20

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

Автор: varagian

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js