Рекомендаційна система новинного порталу: де ламається видача
Перше, що вмирає на новинному порталі, — єдина видача. Головна сторінка віддає всім один і той самий блок: у моделі просто немає ознаки, за якою користувачів розвели б на групи, і вона ранжує за загальним лічильником кліків.
Читач з іншим містом, іншою рубрикою та іншим ритмом читання отримує чужий інтерес — персоналізація видачі існує формально, а падіння залученості списують на сезонність.
Другий збій тихіший: свіжі матеріали тонуть. У статті, опублікованої годину тому, немає накопиченої історії взаємодій, і вона програє замітці тижневої давності з великим запасом сигналів.
Формально система працює коректно, фактично новинний привод видається в момент, коли він уже неактуальний, а стрічка виглядає як архів.
Третій — повтори в стрічці. Фільтр за ідентифікатором матеріалу не ловить перепаковану новину: той самий сюжет заходить іншою рубрикою, іншим заголовком та іншою обкладинкою.
Плюс петля зворотного зв’язку: показали — клікнули — підсилили, і через кілька діб видача сходиться у вузьку групу сюжетів.
Далі з’являється редакційний костиль. Черговий вручну рухає матеріали на перші позиції, щоб витягнути трафік до вечірнього піку, і тримає це на собі щодня.
Розбираємо, як це закривається: які сигнали перезбираються, як розводяться потоки «свіже» та «за інтересом» і що міряти, щоб бачити ефект.
Вимірний ефект: утримання, дочитування та навантаження на редакцію
Ефект персоналізованої видачі видно в чотирьох групах метрик: частка дочитувань до кінця матеріалу, глибина читання всередині сесії, повернення на портал через 7 і 28 днів, а також пауза між візитами постійного читача.
Окремо дивимося техніку — час відповіді блоку рекомендацій і частку переходів після показу. Якщо блок відповідає повільно, дочитування не зростуть, хоч би як точно була підібрана видача.
Головна складність — відділити зростання від сезонності та від новинного порядку денного. Контрольну групу тримаємо на попередній, невипадковій видачі та порівнюємо зіставні за «температурою» дня, а не просто «до і після».
Паралельно рахуємо індекс органіки по всьому порталу: якщо зростають усі канали одразу, приписувати ефект рекомендаціям не можна.
Навантаження на редакцію зміщується від «збери головне руками» до «перевір відхилення». Автопідбір знімає з редактора ручне сортування стрічок, тому час іде на заголовки, перевірку фактів і розбір аномалій, а не на розстановку блоків.
Окремий ефект — довгий хвіст архіву: матеріали, що пішли з ручних підбірок, продовжують отримувати покази та дочитування.
Дослідження Reuters Institute показують, що стійкість медіа тримають саме читачі, які повертаються, а не разові сплески трафіку, тому у звіті ми окремо фіксуємо частку повторних візитів за когортами.
Пілот запускаємо на частині трафіку, а метрики та правило їх підрахунку узгоджуємо до старту — тоді зростання видно в цифрах, а не в інтерпретації.
Формати роботи рекомендаційної системи: що обрати порталу
Схему видачі обирають за щільністю даних, а не за «просунутістю» алгоритму. Колаборативна фільтрація в тому вигляді, як її застосовують у Netflix, спирається на накопичену історію читань: поки матриця «читач — матеріал» розріджена, блок рекомендацій показує випадкові посилання.
Контентні ознаки стартують одразу — текст, рубрика, теги, свіжість публікації, — але швидко дають перекіс в одну тему.
Різниця між режимами видна на трьох осях: чи потрібен накопичений трафік, скільки ручної роботи бере на себе редакція і наскільки дорого потім змінити схему.
| Режим | Коли підходить | Обмеження |
|---|---|---|
| Колаборативна фільтрація | Стійкий потік читачів, у матеріалів накопичується історія переглядів | Без накопичених даних не працює; новинки та рідкісні рубрики не отримують показів |
| Контентні ознаки | Холодний старт, вузька тематика, стрічка потрібна одразу | Перекіс у популярні теми, слабкий облік особистих звичок читача |
| Гібридна схема | Портал зростає, частина блоків уже забезпечена статистикою | Потребує налаштування ваг і моніторингу, інакше одна частина придушує іншу |
| Правила редактора | Головні новини, ручні підбірки, тематичні спецпроєкти | Не масштабується на довгий хвіст, потрібен регламент і права доступу |
Гібридна схема і є робочим рішенням щодо сумісності: контентні ознаки закривають холодний старт і нові рубрики, колаборативні підключаються там, де статистика вже набрана, а ваги переглядаються за метриками дочитувань, а не на око.
Режими не виключають один одного — портал може тримати гібрид на головній і чисті правила редактора в блоці термінових новин.
Правила редактора сумісні з будь-яким із режимів: вони задають пріоритетні матеріали та заборони, а алгоритм заповнює решту.
Видача на головній віддається фронту одним контрактом, тому зміна схеми не вимагає переписувати верстку — змінюються порядок блоків і ваги, а редакція продовжує працювати у звичному інтерфейсі.
Як ми впроваджуємо: аудит логів, схема, налаштування, перевірка
Порядок кроків тут не випадковий: поки не ясно, які події дійсно доходять до сховища, будь-яка модель будується на піску. Тому починаємо з логів, а не з вибору алгоритму, і лише потім фіксуємо схему обміну та спосіб перевірки.
- Аудит логів. Розбираємо, що саме пишеться: покази, кліки, дочитування, підписки, пошукові запити. Перевіряємо повноту, дублі, затримку доставки та склейку подій з профілем читача. На виході — перелік прогалин: де губиться ідентифікатор, які поля заповнюються не завжди.
- Розмітка подій. Узгоджуємо словник: ім’я події, момент часу, джерело, вага дії. Дочитування важить більше за клік, випадковий перехід — менше. Єдиний словник дозволяє перенавчати модель і коректно порівнювати періоди між собою.
- Схема інтеграції. Вирішуємо, як підбірки потрапляють на сторінку: серверна віддача, окремий сервіс видачі або підготовлений кеш. Фіксуємо поведінку при недоступності сервісу — читач має бачити осмислений список, а не порожній блок.
- Перевірка на історії трафіку. Проганяємо модель на накопичених логах: відновлюємо сесії за часом, віддаємо рекомендації та дивимося, чи потрапили б вони у фактичні дії. Помилки видно до першого показу живому читачеві.
- Онлайн-експеримент. Вмикаємо видачу на частині трафіку поряд із поточним механізмом: спостерігаємо глибину сесії, частку дочитувань, відгук сторінки. Розкатка йде частками, відкат — одним перемиканням.
- Приймання результату. Звіряємо метрики з зафіксованими до старту, перевіряємо поведінку на піковому навантаженні, холодному профілі та неповних даних. Передаємо команді регламент перенавчання, моніторинг і розбір типових збоїв.
Що залишається в команди порталу після здачі проєкту
Здача проєкту — це не демонстрація працюючого сервісу, а передача контуру, який команда порталу далі веде своїми силами. Тому на руки йде не лише код, а й усе, що потрібно, щоб змінювати правила ранжування, перенавчати модель і розбирати збій без нас.
Приймання йде за списком, а не за презентацією: кожен артефакт перевіряємо на стороні замовника — піднімають оточення на своєму стенді, проганяють перенавчання, відкочують версію.
- Код навчання та видачі — репозиторій з конфігураціями, закріпленими залежностями та інструкцією підйому оточення з нуля.
- Схеми інтеграції — шлях подій від показу до сховища: формати повідомлень, повторна доставка, точки відмови, затримка оновлення ознак.
- Регламент оновлення моделей — періодичність перенавчання, контрольні зрізи, поріг викату нової версії та порядок відкату на попередню.
- Політики доступу — ролі на читання даних, розділення робочого та тестового контурів, журналювання звернень до персональних даних.
- Набір автоперевірок — частка влучань у топ, різноманітність видачі, поведінка на нових користувачах; рахується після кожного перенавчання.
- Пам’ятка з інцидентів — що дивитися першим ділом при просіданні метрик, як відкотити версію та як повернути попередній набір даних.
Передача команді йде окремим етапом: на двох-трьох сесіях інженери замовника самі перенавчають модель і випускають версію у видачу. Далі контур живе без нашої участі — ми залишаємося на зв’язку, але правки йдуть своїми силами.
Кейс: як зросла глибина читання на новинному порталі
Портал жив на хронологічній стрічці: матеріали ставали за часом публікації, і все вирішувало, чи потрапить замітка на перші екрани головної. Глибина читання трималася на 1,3 статті за візит, більше половини відвідувачів ішли з головної, не відкривши жодного матеріалу. Базу зафіксували за 30-денним вікном до впровадження — щоб після порівнювати на тих самих метриках.
Що змінили
Стрічку зібрали гібридною моделлю під колаборативна фільтрація: історія читання конкретного відвідувача, поведінка читачів зі схожими інтересами, свіжість матеріалу та рубрична вага від редакції.
Видача перераховується при кожному оновленні сторінки, для нових відвідувачів її наповнює популярне в рубриці за останні години, а пріоритетні матеріали редакція тримає на початку окремим списком.
| Метрика | До впровадження | Після |
|---|---|---|
| Глибина читання, статей за візит | 1,3 | 3,1 |
| Уходи з головної без відкриття матеріалу | 57% | 31% |
| Повернення на портал протягом тижня | 22% | 38% |
| Частка візитів з персональною видачею | — | 74% |
Обмеження залишилися, і ми їх не ховаємо. Відвідувачам без згоди на персоналізацію віддаємо редакційну видачу — це близько чверті аудиторії. Модель перенавчається раз на добу, тому на різкий новинний привод реагує не миттєво — у такі дні вага свіжості піднімається вручну.
Глибина читання зросла більш ніж удвічі, а порожніх заходів на головну стало менше: персоналізація бере на себе рутину розкладки, редагування залишається за людьми.
Чим поведінкова підбірка відрізняється від редакційної?
Поведінкова підбірка визначає порядок матеріалів за фактичними діями читачів: що відкривали, як глибоко дочитували, до чого поверталися, на якому абзаці йшли.
Редакційна підбірка будується на рішенні людини — вона задає пріоритет теми, черговість рубрик і те, який матеріал виходить на першу шпальту.
Алгоритм об’єктивно сильніший там, де аудиторія велика й різнорідна. Він тримає довгий хвіст публікацій, який редактор фізично не встигає розставляти вручну, і видає кожному читачеві свій порядок видачі.
Редактор незамінний в іншому: у дні великих подій, коли важлива не броскість заголовка, а єдина картина дня, і коли потрібно свідомо втримати баланс тем.
Слабкі місця дзеркальні. Алгоритм без достатньої історії переглядів замикається на найпопулярнішому, витягує броскі заголовки й поступово звужує тематику до пари рубрик.
Редактор не масштабується: один порядок для всіх, ручна правка не встигає за потоком новин, а суб’єктивність рішення складно перевірити метрикою.
Звідси гібридний режим — робочий варіант для більшості порталів. Алгоритм ранжує всередині тематичних блоків, а межі задає редакція: фіксовані позиції на першій шпальті, обмеження частки однієї теми у видачі, зниження матеріалу з високим уходом читачів.
Вибір схеми визначається часткою постійних читачів, частотою публікацій і тим, наскільки редакції важливо керувати першою шпальтою вручну.
Сумніви щодо якості даних і холодного старту
Заперечення перед стартом звучать майже однаково: розмітки немає, новим матеріалам рекомендації не потрібні, торішні вподобання не відображають інтересу аудиторії. Відповідаємо по суті.
Починаємо не з моделі, а з ревізії даних: логи показів і кліків, частка автоматичного трафіку, глибина сесії, повнота рубрикатора. Де історії мало, працює близькість за текстом і тегами — підбірка збирається з першого дня, персональні ваги підтягуються в міру подій.
Як видаєте рекомендації без історії користувача?
Для нових читачів — популярне в рубриці з поправкою на пору доби та регіон; персональні сигнали вмикаються після кількох прочитаних матеріалів. Свіжі статті потрапляють у підбірку за розбором тексту й тегів, не чекаючи кліків.
Як оцінюєте якість підбірки?
На історичних даних — відкладена вибірка за часом, щоб модель не підглядала в майбутнє, плюс метрики влучань і різноманітності. На живому трафіку порівнюємо з контрольною групою: глибина сесій, повернення.
Що зі свіжістю новин?
Вага свіжості — окремий параметр видачі, а не перенавчання всієї моделі. Матеріал піднімається в перші години, далі поступається тим, що утримують увагу. Вікно налаштовується за рубриками: у термінових новин коротше, в аналітики довше.
Як часто перенавчаєте моделі й чи можна відкотитися?
Перенавчання йде за розкладом і за тригером деградації метрик. Ваги оновлюються без зупинки видачі, попередня версія збережена для відкату, включення — після прогону на тіньовому трафіку.
Обговоримо задачу: що потрібно знати перед стартом
Щоб обговорити задачу предметно, нам не потрібен повний доступ до продакшену — вистачить опису порталу та вивантажень.
Чим точніші вхідні дані, тим швидше повернемося з оцінкою та планом робіт: розкладемо обсяг за етапами, вкажемо, що робимо на нашій стороні, а які дані та рішення потрібні від вашої команди перед стартом проєкту.
- Профіль контенту та обсяги: скільки матеріалів публікується за добу, яка частка нових проти архіву, як часто оновлюються рубрики і як довго матеріал живе в стрічках.
- Доступи до аналітики: вивантаження подій за 3–6 місяців — покази, кліки, дочитування, повернення, пошук усередині порталу. Обезличені ідентифікатори читача та мітка часу достатньо, персональні дані не потрібні.
- Розмітка матеріалів: чи є теги, рубрики, сутності, ембедінги у вашому сховищі — або їх доведеться зібрати з текстів на нашій стороні.
- Точки видачі: де рекомендації мають з’явитися — головна стрічка, блок «схоже» всередині статті, розсилки, мобільний застосунок. Для кожної точки важливий свій набір сигналів.
- Обмеження інфраструктури: де працює прод, який відгук видачі вважається прийнятним і який запас за навантаженням потрібен на пікових годинах.
- Правила редакції: що не можна рекомендувати, скільки ручних промо потрібно залишати в стрічці, чи є вимоги щодо різноманітності рубрик.
- Метрики успіху: що вважаємо результатом — частку дочитувань, глибину сесії, повернення наступного дня. Від них залежить схема порівняння з поточною стрічкою.
- Хто ухвалює рішення: людина з боку редакції та з боку продукту, яка підтверджує приймання етапів.
Опишіть задачу у вільній формі — цього вистачить, щоб повернутися з оцінкою, планом робіт і списком того, що уточнимо на першому дзвінку.







