Когда комментировать на Хабре: я разобрал 4404 комментария

в 8:02, , рубрики: аналитика данных, комментарии, статистика, хабр

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

Неважно.

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

Чтош.jpg. Зря, что ли, я всякие курсы на ютубе проходил и сертификаты на kaggle.com получал. “Иди сюда, биг дата, сейчас я тебя проанализирую”, - сказал я себе, засучивая рукава.

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

И ещё один дисклеймер: все свои публичные выступления и статьи я отрабатываю на своей жене. Если я могу объяснить что-то абсолютно не техническому человеку, значит, я понимаю это хорошо. Однако кому-то может показаться, что я уж слишком разжёвываю, сорян.

Как я считал

Откуда данные

Никакого скрапинга HTML - у Хабра есть внутренний JSON API, тот самый, которым пользуется фронтенд: habr.com/kek/v2/. Он не документирован, но стабилен и отдаёт всё, что видно на странице, плюс кое-что, чего не видно (точные счётчики голосов). Я просто попялился в dev-панель в браузере и посмотрел, как оно работает, когда я хожу по страничкам.

Выборка собиралась в два прохода:

  1. Весь недельный фид свежих статей - GET /kek/v2/articles/?sort=date&period=weekly, постранично, пока страницы не кончатся. Получилось 545 статей за неделю.

  2. Для каждой статьи, у которой набралось хотя бы 4 комментария (таких оказалось 250 - да, медианная статья на Хабре собирает всего 3 комментария), забирал весь тред: GET /kek/v2/articles/<id>/comments/.

Из тредов выкинул:

  • комментарии автора статьи - им голосуют по другим законам, автор в своём треде не конкурент чужим комментаторам;

  • комментарии со скрытым score (их единицы).

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

Два технических момента, которые сэкономят вам вечер, если решите повторить:

  • с дефолтным curl-овским User-Agent Хабр не ругается, а молча отдаёт урезанные ответы - ставьте браузерный UA;

  • между запросами - пауза 0.6-0.7 секунды. 800 запросов за 10 минут никому не мешают, а бан вы себе за вечер не заработаете.

Что и как мерил

Наивный подход - сгруппировать комментарии по часу суток и сравнить средние. Так я и сделал сначала и получил красивую ерунду - о ней ниже.

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

Чтобы отделить мух от котлет, я построил две модели. Звучит страшно, идея простая.

Представьте, что мы взяли два одинаковых комментария - одинаково удачных, под одинаково популярными статьями - и различаются они только одним: один написан вторым в треде, другой сороковым. Регрессия - это способ математически изобразить такое сравнение, когда живых пар-близнецов у тебя нет, а есть 4404 разных комментария. Модель смотрит на все факторы сразу и отвечает: сколько плюсов “стоит” каждый фактор сам по себе, если остальные заморозить.

Моделей две, потому что вопроса два:

  • “Сколько плюсов наберёт комментарий?” - здесь предсказываем количество плюсов.

  • “Будет ли он вообще в плюсе?” - здесь предсказываем только да/нет. Эта модель грубее, но устойчивее: ей всё равно, набрал комментарий +2 или +20.

Факторы в обеих одни и те же:

  • позиция в треде (вторым ты пишешь или сороковым);

  • сколько часов прошло с выхода статьи;

  • насколько статья вообще живая: размер треда, просмотры, рейтинг;

  • и, наконец, время суток - не одним числом, а набором “переключателей”: комментарий написан утром? днём? вечером? ночью? Каждый блок в три часа получает свой переключатель, и модель для каждого честно считает отдельную надбавку или штраф.

Все количественные факторы я брал не как есть, а через логарифм. Причина житейская: разница между 2-м и 10-м комментарием огромна, а между 102-м и 110-м - никакой, хотя в штуках это те же восемь позиций. Логарифм ровно это и выражает - важны разы, а не штуки.

А дальше самое интересное. Если “вечером голосуют щедрее” - правда, то вечерние переключатели покажут заметную надбавку даже после учёта всего остального. Если же вечерний эффект - иллюзия, которая на самом деле объясняется тем, что вечером ты просто чаще попадаешь в свежий тред на ранней позиции, - то надбавка исчезнет, как только позиция и свежесть учтены отдельно. Спойлер: исчезла.

И ещё одна проверка на дурака. Когда сравниваешь “вечер против дня”, всегда есть шанс, что разница - просто везение: ну выпало на этой неделе вечером несколько удачных комментариев, бывает. Проверяется это тупо и честно: я взял те же комментарии, перемешал у них метки “вечер”/“день” случайным образом - пять тысяч раз подряд (единственный момент за весь анализ, когда мой макбук вспомнил, что у него есть вентилятор) - и посмотрел, как часто случайное перемешивание даёт разницу не хуже настоящей. Если “не хуже” получается у каждой пятой случайной тасовки - грош цена такой разнице, это шум. Именно так вечерний эффект и рассыпался на второй неделе замера.

И главное - весь замер сделан дважды на двух независимых неделях (27.07-02.08: 528 статей / 4353 комментария, и 04-11.08: 545 / 4404). Всё, что не воспроизвелось на второй неделе, в выводы не попало. Одна такая жертва по ходу текста будет - следите за вечерним эффектом.

Вывод №1: кто раньше встал - того и тапки

Чем ближе твой комментарий к началу треда, тем лучше ему живётся:

Позиция

сколько таких

в плюсе

плюсов в среднем

#1-3

617

61%

3.3

#4-10

932

49%

2.0

#11-25

952

45%

2.0

#26-50

643

45%

1.6

#51+

1260

39%

0.9

Доля комментариев в плюсе и средний счёт по позиции в треде

Доля комментариев в плюсе и средний счёт по позиции в треде

Первая тройка живёт втрое лучше хвоста. Неделей раньше картина была та же (69% против 42%). А комментарий в хвосте треда - это как в том анекдоте. Взбунтовались крестьяне, пришли толпой к усадьбе барина. Барин вышел на крыльцо с ружьём: “Ну что?” Все молча разошлись. Вечером один сидит дома, хлебает щи, вдруг как стукнет кулаком по столу: “Чо, чо, а ничо!”

Вывод №2: сутки - и поезд ушёл

Смотрим не на позицию, а на время: сколько часов прошло от выхода статьи до твоего комментария.

Прошло времени

сколько таких

в плюсе

плюсов в среднем

до 3 часов

646

66%

4.9

3-6 часов

497

58%

2.9

6-12 часов

515

59%

2.2

12-24 часа

1229

45%

1.2

1-2 суток

1019

35%

0.7

старше 2 суток

498

21%

0.3

Судьба комментария в зависимости от времени после выхода статьи

Судьба комментария в зависимости от времени после выхода статьи

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

Вывод №3: час на часах не важен

Если тупо сгруппировать комментарии по времени суток, кажется, что вечер чуть лучше: в 21-24 в плюсе 53%, утром в 06-09 - 40%.

Сырые средние по часу суток - вечер выглядит лучше, но это иллюзия

Сырые средние по часу суток - вечер выглядит лучше, но это иллюзия

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

Больше того. На первой неделе замера вечер выглядел лучше дня даже в сырых цифрах - я уже почти написал “комментируйте после ужина”. А на второй неделе вечер оказался хуже дня: 3.5 плюса против 4.6 у свежих комментариев. Народная примета “постить вечером” не пережила даже двух недель наблюдений.

Вывод №4: важно не “когда голосуют”, а “когда есть куда писать”

Статьи выходят волной с 11:00 до 17:00 МСК (6-11 штук в час), разгон с девяти утра, после семи вечера ручеёк, ночью пусто. И только 1-4 статьи в час доживают до живого треда.

Сколько статей выходит по часам и сколько из них доживает до живого треда

Сколько статей выходит по часам и сколько из них доживает до живого треда

Так что “сиди на Хабре днём” - совет не про щедрых голосующих, а про ассортимент: днём просто есть из чего выбирать свежее.

Практический итог

  1. Комментируй статьи моложе 12 часов. Старше суток - лотерея против тебя.

  2. Целься в первую десятку комментариев, лучше - в тройку.

  3. На часы не смотри вообще. Работаешь вечером - ок, просто бери статьи, вышедшие после обеда, а не утренние.

  4. Крупная читаемая статья умножает всё: лучше пятый коммент под будущим хитом, чем первый под статьёй-невидимкой.

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

Ограничения, или честный дисклеймер

  • Это наблюдения, а не эксперимент. Рандомизации нет: я не заставлял одних людей писать в час ночи, а других в полдень. Всё, что здесь есть - корреляции с контролями. Там, где напрашивается причинность, я это оговариваю отдельно.

  • Score снят в момент сбора, а не “навсегда”. Поздние комментарии моложе ранних и теоретически ещё могли добрать голосов. Смягчает это то, что голоса комментариям прилетают в основном пока статья свежая - но полностью проблему не снимает. Для параноиков: я пересчитал таблицу лагов только по статьям старше трёх суток - картина та же.

  • Выборка - две недели лета 2026. Сезонность (сентябрь, праздники, релизы Apple) может двигать абсолютные цифры. Мой прогноз - соотношения устоят, но это прогноз, а не факт.

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

Этичность

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

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

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

Для душнил (весь матан здесь)

Выборка: фид /kek/v2/articles/?sort=date&period=weekly, 545 статей (~04-11.08.2026), 250 тредов >=4 комментариев, N=4404 после исключения авторских и скрытых score. Прошлая неделя (27.07-02.08): 528 статей, 231 тред, N=4353.

OLS на log(1+score), отрицательные score клипнуты нулём:

фактор

коэффициент

t

log(позиция в треде)

-0.427

-19.8

log(лаг, ч)

-0.082

-5.2

log(размер треда)

+0.283

+10.4

log(просмотры статьи)

+0.165

+9.4

signed log(рейтинг статьи)

+0.095

+5.8

все дамми часов (база 06-09)

от -0.037 до +0.051

все |t| <= 1.2

LPM P(score>0): log_pos -0.134 (t=-9.0), log_lag -0.077 (t=-7.1), log_tsize +0.051 (t=2.7), log_reads +0.065 (t=5.3), slog_tscore +0.074 (t=6.6), часы все |t| <= 1.4.

Перестановочный тест (5000 перестановок, seed=42) для “вечер 18-21 vs день 12-18” на свежих комментариях (<6ч): разница -1.06 плюса (вечер хуже!), p=0.18 - шум. Неделей раньше сырое преимущество вечера было +1.9 с p=0.002, но убивалось контролем состава статей. Итого: как корреляция нестабилен, как эффект - отсутствует.

Проверка обрыва на прочность: пересчёт только по статьям старше 3 суток на момент сбора (N=3373), чтобы поздние комментарии не были “недоголосованными”: 0-3ч -> 67.5% в плюсе (ср. 5.86), 48ч+ -> 22.1% (ср. 0.32). Картина не изменилась.

День недели: с контролем лага устойчивой картины нет, межнедельный разброс похож на шум отдельных статей-хитов.

Медиана комментариев у статьи - 3. Живых тредов (10+) за неделю - около четверти от статей с тредами.

Скрипты сбора и анализа - в гисте, всё воспроизводится за ~15 минут и один вечер разглядывания таблиц. Если прогоните на своей неделе и что-то не совпадёт - обязательно напишите в комментариях. Желательно в первые три часа и поближе к началу треда.

Автор: k41n

Источник

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


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