- PVSM.RU - https://www.pvsm.ru -

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

Вступление

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 [14]
Отвечаем на комментарий в начале статьи: порядка 50% активных пользователей имеют карму 5 и более, то есть порядка 7500 человек.
Само распределение показывает, что действительно существенная группа сконцентрирована в районе нуля, что будет понятным из дальнейшего анализа.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

user:follower1,folllower2,.... 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Июль 2014

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

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

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

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

Автор: varagian

Источник [35]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/python/111197

Ссылки в тексте:

[1] код и данные: https://github.com/SergeyParamonov/HabraData

[2] Image: https://habrastorage.org/files/2f2/561/574/2f256157458d4da58f33c72ec91cd08b.png

[3] этой: https://habrahabr.ru/post/274219/

[4] этой: https://habrahabr.ru/company/tm/blog/273921

[5] решили: https://geektimes.ru/company/tm/blog/269922/

[6] Методология сбора данных: https://habrahabr.ru/post/276383/#methodology

[7] Распределения кармы, постов, комментариев...: https://habrahabr.ru/post/276383/#Q1

[8] Сообщества Хабра: https://habrahabr.ru/post/276383/#communities

[9] Связность Хабов: https://habrahabr.ru/post/276383/#hubsconnectivity

[10] Активность и выводы: https://habrahabr.ru/post/276383/#activity

[11] Image: https://habrastorage.org/files/c11/663/dbb/c11663dbb3954674a8665ce784827246.png

[12] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/users

[13] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/user_dataset.csv

[14] Image: https://habrastorage.org/files/f6d/c98/d86/f6dc98d869b348418a2a65dbf6558c05.png

[15] Image: https://habrastorage.org/files/844/4c0/a7c/8444c0a7c66f43e292a11814b51b7e9b.png

[16] Image: https://habrastorage.org/files/b20/3fb/5b7/b203fb5b75c34bfabee8e215538c6e1c.png

[17] Image: https://habrastorage.org/files/dcb/f68/98e/dcbf6898e1684cd1bf7d1683822a3adc.png

[18] Image: https://habrastorage.org/files/3cb/877/963/3cb8779636cf4d38971fed9c17dccf55.png

[19] Image: https://habrastorage.org/files/89b/c66/f3e/89bc66f3e9e04532ad691dcbf62604a3.png

[20] Image: https://habrastorage.org/files/338/8a9/f0f/3388a9f0f0c442749739c58a96a58561.png

[21] Image: https://habrastorage.org/files/bf2/4e5/066/bf24e50666e94ff3a9e16efe08c7617e.png

[22] Image: https://habrastorage.org/files/b79/f21/f90/b79f21f9048245a4a1aa603fb0553f5c.png

[23] Image: https://habrastorage.org/files/605/ea9/a88/605ea9a889d44379b5c4206a262450b2.png

[24] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/follower_dataset

[25] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/habr_followers.gexf

[26] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/communities.gephi

[27] Louvain Сommunity Detection: https://en.wikipedia.org/wiki/Louvain_Modularity

[28] Image: https://habrastorage.org/files/3d6/d1f/331/3d6d1f331e4d4769bb5f7b1a35d74d33.png

[29] Image: https://habrastorage.org/files/a2c/a13/7b2/a2ca137b2cee40818d43fc03b782ad29.png

[30] Image: https://habrastorage.org/files/22f/f2d/ac6/22ff2dac6a4649879e4d45931a885014.png

[31] Здесь: https://github.com/SergeyParamonov/HabraData/blob/master/hubs_posts_dataset

[32] здесь: https://github.com/SergeyParamonov/HabraData/blob/master/hubs_graph_based_on_papers.gephi

[33] Image: https://habrastorage.org/files/3bd/55f/f8e/3bd55ff8ebce4abd9497d2ebe41513fb.png

[34] Image: https://habrastorage.org/files/322/0b5/32e/3220b532eb754973bd0156808b6153d9.png

[35] Источник: https://habrahabr.ru/post/276383/