Поліпшення рекомендаційної системи сайту на основі поведінки користувачів
На багатьох сайтах новин і блогах є система рекомендацій. Вона потрібна для того, щоб користувачеві, який прочитав статтю, можна було показати інші цікаві статті.
Від того, наскільки грамотно підібрано рекомендації, залежить те, скільки часу люди будуть проводити на сайті, переглядаючи нові статті. Цей фактор є дуже важливим для збільшення позицій сайту в пошукових системах.
У цій статті я поділюся одним із способів, за допомогою якого можна покращити точність рекомендаційної системи на сайті новин або блозі.
Раніше на code-live.ru для підбору рекомендацій використовувалася система тегів. Тобто для цієї статті шукалися інші статті з максимальним збігом тегів і видавалися як рекомендації.
Проблема в тому, що такий спосіб не завжди дає хороший результат у плані інтересу користувача до показаних йому рекомендацій.
Вирішили застосувати інший підхід — показувати насамперед ті статті, на які найчастіше переходять користувачі зі сторінки поточної статті.
Згадавши, що в логі сайту за місяць потрапляє більше півгігабайта даних, я написав простий парсер на пітоні, який парсить лог веб-сервера і записує дані з відвідувань до бази даних для подальшого аналізу.
Парсер відкриває файл, зчитує з нього дані, розбирає кожен рядок в окремий екземпляр класу LogItem і поміщає цей екземпляр до списку insert_pool.
Коли розмір списку досягає двох тисяч записів, відбувається вставка даних у базу даних через один INSERT-запит. Після цього список очищується і парсинг продовжується доти, доки всі дані в логах не будуть перенесені до бази.
Пам'ятайте, що формат ліг вашого web-сервера може відрізнятися від мого. Нижче наводжу прикладзапису лога, під формат якого писав парсер.
Цей сайт написаний на Django, тому я використовував вбудовану систему консольних команд та моделей для запуску парсингу логів та роботи з базою даних.
Я створив програму analytics, в якій визначив моделі для зберігання даних з відвідувань сайту. Всередині директорії додатку додав файл management/commands/collect_page_views.py , який буде викликатися раз на тиждень по крону і оновлювати таблицю відвідувань на основі нових логів.
Ось приклад команди, за допомогою якої відбувається оновлення даних відвідувань у базі даних.
Перший запуск скрипту додав до бази понад два мільйони записів. І пішло на це хвилин двадцять.
У наступні рази, скрипт ігноруватиме записи старих логів, які вже були додані до бази.
За цими даними ми вже зможемо показати покращені рекомендації для будь-якої статті на сайті.
Рекомендації підвантажуються через Ajax під час відкриття статті, щоб не уповільнювати завантаження сторінки. Нижче наведено код Django-подання (View), який повертає рекомендації статті.
Для нових статей, за якими ще не зібрані дані переходів, використовується старий метод підбору рекомендацій щодо тегів.
Рекомендації, підібрані новим способом, стали більш актуальними. Порівняйте результати до і після статті першого уроку по C++.
Рекомендації на основі тегів:

Рекомендації на основі відвідувань:

Нижче наведено код моделей Django, які використовуються для зберігання даних щодо відвідувань та рекомендацій.
Підхід з парсингом логів досить хардкорний, але дозволяє добре знизити навантаження на сайт, порівняно з тим, якби ми писали логи відвідувань безпосередньо в базу.
Якщо у вас наНа сайті вже працює система аналітики, яка логує відвідування в БД, то можете використовувати її для показу рекомендацій.
Основне завдання цієї статті – поділитися принципом, який працює та дозволить збільшити відвідуваність сайту без сильних трудовитрат.