В мире, перегруженном контентом и товарами, рекомендательные системы перестали быть опцией — они стали необходимостью. Для многих компаний, особенно стартапов и среднего бизнеса, коммерческие SaaS-решения могут быть дороги, негибки или не соответствовать специфическим требованиям бизнес-логики. Выходом становится мир Open Source. Наш кейс рассказывает о том, как команда агрегатора онлайн-курсов «EduFlow» построила и внедрила собственную рекомендательную систему, используя исключительно открытые технологии.
Проблема, с которой столкнулся «EduFlow», была классической: высокий процент оттока пользователей после первого просмотра курса. Платформа предлагала тысячи курсов по программированию, дизайну и анализу данных, но навигация была сложной. Стандартная фильтрация и поиск не помогали пользователю открывать для себя новое, оставаться вовлеченным и, как следствие, продолжать обучение. Нужен был персонализированный гид.
Команда, состоявшая из трех backend-разработчиков и одного data scientist, начала с анализа доступных Open Source инструментов. Критерии были четкими: активное сообщество, хорошая документация, возможность развертывания on-premise и поддержка гибридных методов рекомендаций (collaborative filtering + content-based). После рассмотрения таких вариантов, как Surprise, LightFM и FastAI, выбор пал на проект от Apache — Apache Mahout, а позднее был дополнен векторными эмбеддингами из библиотеки Gensim.
Архитектура решения была разделена на два контура: офлайн-обучение и онлайн-обслуживание. В офлайн-режиме ежедневно запускался Spark-джоб (использовался Apache Spark), который обрабатывал сырые данные о просмотрах, завершениях лекций, оценках и тегах курсов. На выходе формировались две модели: одна — для collaborative filtering («пользователям, похожим на вас, понравилось…»), вторая — для content-based фильтрации на основе семантической близости описаний курсов и профилей интересов пользователей.
Для онлайн-обслуживания был выбран легковесный фреймворк Flask. Он предоставлял REST API, который, получая ID пользователя, обращался к предзагруженным моделям, выполнял быстрый ранжирование и возвращал список из 10 рекомендованных курсов. Ключевым «лайфхаком» стало внедрение механизма feature store на базе Redis. В нем в реальном времени кэшировались последние действия пользователя (последние 5 просмотренных тегов), что позволяло немного «подкручивать» рекомендации в сторону свежих интересов даже без пересчета тяжелых моделей.
Самым сложным этапом оказалась не техническая реализация, а оценка качества. Команда внедрила A/B-тестирование: 50% трафика получало старые рекомендации (популярное в категории), 50% — новые. Метриками стали кликабельность (CTR) рекомендаций, конверсия в начало курса и, что важнее всего, метрика удержания пользователей на платформе через 7 дней. Поначалу результаты были скромными, но после нескольких итераций по обогащению признаков (учет сложности курса, языка преподавания) и калибровке весов гибридной модели, новый движок показал рост CTR на 34%, а доля пользователей, возвращающихся на платформу в течение недели, увеличилась на 18%.
Итоговый стек выглядел так: Apache Spark + Mahout (офлайн-пайплайн), Flask (API), Redis (feature store и кэш), PostgreSQL (хранение метаданных), Airflow (оркестрация пайплайнов). Общие затраты свелись к времени разработки и стоимости серверов, что было на порядок дешевле коробочного решения с аналогичной кастомизацией.
Главный вывод этого кейса: Open Source дает свободу и контроль. Команда «EduFlow» не только решила бизнес-задачу, но и создала внутреннюю экспертизу, которая теперь является их конкурентным преимуществом. Система продолжает эволюционировать, и в планах — эксперименты с нейросетевыми подходами на базе Torch, также открытого и бесплатного.
От хаоса к системе: кейс построения рекомендательной системы на базе Open Source
Реальный кейс построения гибридной рекомендательной системы для агрегатора курсов с использованием стека Apache Spark, Mahout, Flask и Redis. Статья раскрывает этапы от выбора инструментов и архитектуры до внедрения, A/B-тестирования и полученных бизнес-результатов.
8
5
Комментарии (7)