Многие авторы на Хабре задумываются, почему одна статья собирает десятки тысяч просмотров, а другая остаётся почти незамеченной. Гипотеза о том, что просмотры можно предсказать с помощью машинного обучения, выглядит заманчиво. В этой статье мы разберём практический подход к такой задаче: какие данные собрать, как оценить текст, какую модель использовать и где чаще всего возникают ошибки. Важно сразу отметить: речь не о создании «кнопки бабла», а об аналитическом инструменте, который помогает понять закономерности и улучшить контент.
Сбор данных: что именно нужно измерять
Первый шаг — собрать исторические данные по статьям. Если вы пишете в одном хабе, можно взять статистику из личного кабинета или спарсить публичные метрики. Что стоит включить в датасет:
- Просмотры — целевая переменная (лучше логарифмировать, чтобы сгладить выбросы).
- Длина текста — количество слов или символов.
- Количество тегов и их популярность — например, среднее число просмотров статей с таким тегом.
- Время публикации — день недели и час.
- Наличие изображений, кода, списков — бинарные признаки.
- Рейтинг автора — если доступен (карма, подписчики).
- Оценка качества текста — например, через языковую модель (об этом ниже).
Соберите не менее 100–200 статей, иначе модель будет переобучена. Если статей мало, можно расширить выборку за счёт других хабов, но тогда придётся учитывать их специфику.
Оценка качества текста через языковую модель
Один из способов добавить в модель семантический признак — попросить языковую модель оценить статью по критериям: ясность, полезность, оригинальность, структурированность. Например, можно использовать облачный API (OpenAI, YandexGPT) или локальную модель через LM Studio. Важно понимать ограничения:
- Облачные API имеют лимиты запросов и стоят денег.
- Локальные модели могут «хитрить» — давать шаблонные ответы или игнорировать промпт, если он слишком сложный.
- Оценка субъективна, поэтому лучше усреднять несколько прогонов или использовать несколько моделей.
Практический совет: сформулируйте промпт максимально конкретно, например: «Оцени статью по шкале от 1 до 10 по критерию „полезность для разработчика“. Ответь только числом». И проведите калибровку на нескольких вручную оценённых статьях.
Выбор модели и интерпретация результатов
Для табличных данных с разнородными признаками хорошо подходит Random Forest или градиентный бустинг (XGBoost, LightGBM). Начните с Random Forest — он устойчив к выбросам и не требует масштабирования. Разделите данные на обучающую и тестовую выборки (например, 80/20). Оцените качество по метрикам MAE (средняя абсолютная ошибка) или R². Не гонитесь за идеальными цифрами: если MAE составляет 20–30% от среднего числа просмотров, это уже полезно.
После обучения посмотрите на важность признаков (feature importance). Скорее всего, наибольший вклад дадут: теги, длина текста, наличие изображений и оценка качества. Это даст понимание, на что обращать внимание при написании статей.
Типичные ошибки и как их избежать
В процессе можно наступить на несколько граблей. Вот самые распространённые:
- Утечка данных — когда в признаки попадает информация, которая стала известна после публикации (например, количество комментариев или рейтинг статьи). Это приводит к аномально точным прогнозам на тесте, которые не работают в реальности. Всегда проверяйте, что признаки доступны на момент публикации.
- Маленькая выборка — модель запоминает шум. Старайтесь собрать больше данных или используйте кросс-валидацию.
- Игнорирование выбросов — несколько вирусных статей могут сильно сместить модель. Логарифмирование целевой переменной или использование робастных моделей помогает.
- Переоценка возможностей LLM — языковая модель не всегда объективна. Проверяйте корреляцию её оценок с реальными просмотрами на исторических данных.
Также помните, что просмотры зависят от внешних факторов: время публикации, активность сообщества, тренды. Модель не учитывает всё, поэтому её прогноз — это вероятность, а не гарантия.
Практические шаги для повторения
Если вы хотите повторить эксперимент, вот последовательность действий:
- Соберите данные по 100+ статьям из вашего хаба (или нескольких схожих).
- Рассчитайте простые признаки: длина, теги, наличие медиа, время публикации.
- Добавьте оценку текста через LLM (2–3 прогона, усредните).
- Обучите Random Forest с кросс-валидацией, проверьте важность признаков.
- Проанализируйте результаты: какие признаки коррелируют с просмотрами, а какие — нет.
- Используйте выводы для улучшения контента, а не для точного предсказания.
В итоге модель может показать, что, например, статьи с тегом «Python» и наличием примеров кода собирают в среднем больше просмотров. Но она не скажет, что именно ваша следующая статья станет вирусной. Воспринимайте ML как инструмент для анализа, а не как оракула.