Некоторое время назад я решил оживить мой аккаунт на Хабре. В 2008 году, когда я ещё только его зарегистрировал, было принято фармить сначала комментариями карму и только потом писать статьи. Я так делал, насколько помню. Забегая вперёд скажу, что то ли я помню неправильно, то ли всё поменялось, то ли и то и то, но сейчас фармить комментариями не нужно, хочешь статью - просто пиши (хотя у меня немного кармы с тех времён оставалось, может, поэтому я могу писать статью без проблем).
Неважно.
Покомментировав с умным видом здесь и тут, я решил подвести научную базу. Не сразу, сначала думал, что мой блестящий интеллект сразу заметят и под моими комментариями будет собираться очередная сходка фан-клуба имени меня. К сожалению, несколько моих абсолютно удачных (на мой беспристрастный взгляд) комментариев были полностью проигнорированы мировой общественностью.
Чтош.jpg. Зря, что ли, я всякие курсы на ютубе проходил и сертификаты на kaggle.com получал. “Иди сюда, биг дата, сейчас я тебя проанализирую”, - сказал я себе, засучивая рукава.
Я поставил себе задачу понять: когда и где надо оставить комментарий, чтобы он набрал максимум лайков.
И ещё один дисклеймер: все свои публичные выступления и статьи я отрабатываю на своей жене. Если я могу объяснить что-то абсолютно не техническому человеку, значит, я понимаю это хорошо. Однако кому-то может показаться, что я уж слишком разжёвываю, сорян.
Как я считал
Откуда данные
Никакого скрапинга HTML - у Хабра есть внутренний JSON API, тот самый, которым пользуется фронтенд: habr.com/kek/v2/. Он не документирован, но стабилен и отдаёт всё, что видно на странице, плюс кое-что, чего не видно (точные счётчики голосов). Я просто попялился в dev-панель в браузере и посмотрел, как оно работает, когда я хожу по страничкам.
Выборка собиралась в два прохода:
-
Весь недельный фид свежих статей -
GET /kek/v2/articles/?sort=date&period=weekly, постранично, пока страницы не кончатся. Получилось 545 статей за неделю. -
Для каждой статьи, у которой набралось хотя бы 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 статьи в час доживают до живого треда.
Так что “сиди на Хабре днём” - совет не про щедрых голосующих, а про ассортимент: днём просто есть из чего выбирать свежее.
Практический итог
-
Комментируй статьи моложе 12 часов. Старше суток - лотерея против тебя.
-
Целься в первую десятку комментариев, лучше - в тройку.
-
На часы не смотри вообще. Работаешь вечером - ок, просто бери статьи, вышедшие после обеда, а не утренние.
-
Крупная читаемая статья умножает всё: лучше пятый коммент под будущим хитом, чем первый под статьёй-невидимкой.
Другими словами - угадай, какая из свежих статей, имеющих пока столько комментариев, что их можно пересчитать по пальцам одной руки фрезеровщика с 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
