Когда делал проект по рекомендательной системе для одного туристического сайта, обнаружил, что простой и понятной теории по ним не так уж и много. Решил заполнить этот пробел.
Учебный git-проект по рекомендательным системам: от данных, baseline-моделей и метрик до hybrid-подходов и введения в neural recommenders.
Проект задуман как курс-практикум для начинающих и продолжающих: с понятным учебным маршрутом, воспроизводимыми notebook'ами и минимальными Python-модулями без преждевременного ухода в production-инфраструктуру.
recommender-systems-from-zero — это учебный проект по основам рекомендательных систем.
Цель проекта:
- последовательно объяснить базовые идеи рекомендательных систем;
- показать минимальные рабочие реализации основных подходов;
- научить правильно оценивать качество рекомендаций;
- разобрать типичные ошибки, которые делают новички;
- дать аккуратное введение в более современные подходы, включая neural recommenders.
Это не production-платформа и не готовый recommender service. Проект ориентирован на обучение, а не на industrial-grade инфраструктуру.
Этот репозиторий — не просто набор notebooks, а структурированный учебно-практический проект по рекомендательным системам. Он показывает полный путь от базовых эвристик до более сложных моделей и акцентирует внимание на корректной постановке экспериментов.
Проект демонстрирует следующие навыки:
- Baseline-first подход — сначала строятся простые и понятные бейзлайны, после чего более сложные модели сравниваются с ними, а не оцениваются “в вакууме”.
- Leakage-aware evaluation — используются разбиения данных, которые учитывают временной порядок взаимодействий и снижают риск утечки будущей информации в train.
- Top-K evaluation — качество рекомендаций оценивается через метрики, релевантные для recommender systems:
Precision@K,Recall@K,HitRate@K,MAP@K,NDCG@K. - Работа с implicit feedback — проект показывает, как переходить от сырых пользовательских событий к данным, пригодным для ranking/evaluation задач.
- Обработка датасетов — есть инструкции и вспомогательные функции для подготовки MovieLens, Amazon Reviews и Retailrocket datasets.
- Модульная структура кода — повторно используемая логика вынесена в
src/, а notebooks используются не как единственное место реализации, а как слой объяснения и экспериментов. - Тестируемость — ключевые компоненты проекта покрыты тестами: метрики, разбиение данных, baseline-модели, content-based, item-item, hybrid и sequence components.
- Сравнение разных классов моделей — проект покрывает popularity baseline, content-based, item-item collaborative filtering, hybrid recommendations, ALS, LightFM, neural collaborative filtering, two-tower retrieval и sequential recommendation.
- Понимание ограничений — проект явно отделяет учебно-исследовательский pipeline от production recommender system: это не real-time serving, не A/B testing platform и не production-grade инфраструктура.
Проект уже можно использовать как учебный tutorial для новичка по Core path.
В репозитории уже есть:
- core-документация;
- core-notebooks;
- минимальный учебный код в
src/recsys_basics; - advanced-материалы в виде docs, notebooks и supporting modules.
Advanced-часть уже полезна как второй проход после базы. Её лучше трактовать как optional-расширение: runnable-главы имеют docs, notebooks и supporting code, а обзорные разделы остаются в первую очередь концептуальными.
На 7 июня 2026 года все 6 core-notebooks и 9 advanced-notebooks проверены через restart kernel + run all в окружении проекта на Python 3.12.1.
Если вы впервые изучаете recommender systems, начинайте с Core path, а не с Advanced.
| Part | Docs | Notebook | Code | Status | Recommended for beginners |
|---|---|---|---|---|---|
| 01. Intro + dataset and interactions | ✅ | ✅ | ✅ | Ready | ✅ |
| 02. Popularity baseline | ✅ | ✅ | ✅ | Ready | ✅ |
| 03. Content-based TF-IDF | ✅ | ✅ | ✅ | Ready | ✅ |
| 04. Item-item collaborative filtering | ✅ | ✅ | ✅ | Ready | ✅ |
| 05. Metrics | ✅ | ✅ | ✅ | Ready | ✅ |
| 06. Hybrid recommendations | ✅ | ✅ | ✅ | Ready | ✅ |
| 07. Common mistakes | ✅ | — | — | Conceptual guide | ✅ |
| 08. Cold-start | ✅ | — | — | Conceptual guide | ✅ |
| Advanced: ALS | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: LightFM hybrid factorization | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: LightFM feature engineering | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: LightFM hyperparameter tuning | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: Neural Collaborative Filtering | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: Two-Tower retrieval | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: Sequential recommendations | ✅ | ✅ | ✅ | Ready | Optional |
| Advanced: Retrieval vs ranking | ✅ | ✅ | — | Conceptual guide | Optional |
| Advanced: Production overview | ✅ | — | — | Conceptual guide | Optional |
Status legend:
Ready— runnable-материал завершён и проверен сверху вниз в заявленном окружении.Conceptual guide— завершённая концептуальная глава без обязательного notebook или отдельного модуля.Recommended for beginners = ✅— входит в обязательныйCore path.Recommended for beginners = Optional— изучается послеCore path; это не статус готовности.
Статусов Draft и Planned в текущей таблице нет: все перечисленные материалы либо проверены как Ready, либо завершены как Conceptual guide.
Если вы новичок в рекомендательных системах, не начинайте с Advanced notebooks.
Сначала пройдите Core path: dataset -> popularity baseline -> content-based -> item-item CF -> metrics -> hybrid.
Проект рассчитан на:
- начинающих ML-инженеров;
- аналитиков, которые хотят понять, как работают рекомендации;
- backend/data-разработчиков, которым нужен практический вход в recommender systems;
- студентов, которым нужен структурированный путь от простого к сложному.
Минимальный вход:
- базовый Python;
- базовый
pandas; - понимание таблиц и joins;
- базовое представление о train/test split;
- желательно общее знакомство с machine learning.
После прохождения core-части проекта должно быть понятно:
- какие данные нужны рекомендательной системе;
- чем отличаются
explicit feedbackиimplicit feedback; - почему baseline-модель обязательна;
- как работают content-based и collaborative filtering подходы;
- как правильно делать split без leakage;
- как считать и интерпретировать top-K метрики;
- зачем нужны hybrid-рекомендации;
- что такое
cold-startи почему система должна уметь работать и с тёплыми, и с новыми пользователями / объектами; - какие ограничения есть у простых моделей;
- какие типичные ошибки искажают выводы.
После Core path уже можно самостоятельно собрать простую учебную рекомендательную систему, сравнить её с baseline и честно оценить через top-K метрики.
После advanced-части должно появиться общее понимание:
- что дают matrix factorization и ALS;
- как hybrid factorization связывает collaborative-сигнал и признаки объектов;
- как neural recommenders связаны с классическими подходами;
- где применяются two-tower и sequential модели;
- как recsys-пайплайн выглядит ближе к production-среде.
Обязательный маршрут для новичка:
- Concepts and problem framing
- Data and interaction table
- Popularity baseline
- Content-based recommendations
- Collaborative filtering
- Evaluation and metrics
- Hybrid recommendations
- Common mistakes
- Cold-start
Расширение после освоения базы:
- Matrix factorization and ALS
- LightFM Hybrid Factorization
- LightFM feature engineering
- LightFM hyperparameter tuning
- Neural Collaborative Filtering
- Two-Tower retrieval models
- Sequential recommenders
- Ranking / Learning-to-Rank intro
- Production overview
В advanced-части проекта важен не только порядок тем, но и порядок роста сложности.
Здесь действует более жёсткое правило:
- сначала меняем тип модели, а не всё сразу;
- не вводим новый датасет одновременно с новой сложной постановкой, если это можно избежать;
- сохраняем baseline comparison;
- не ломаем split policy и ID mapping, уже зафиксированные в
core; - каждая глава должна отвечать на вопрос: что именно стало понятно после неё, чего не было после
core.
Логика advanced-маршрута такая:
ALSдаёт переход от neighbourhood-подходов к latent factors.LightFMпоказывает, как latent factor модель может использовать item-features и hybrid-логику.- Отдельный шаг
feature engineeringпозволяет усилить hybrid-модель, не меняя её класс. - Отдельный шаг
hyperparameter tuningотделяет gain от признаков и gain от настройки модели. Neural CFменяет класс модели, но держит постановку близкой кALSиLightFM.Two-Towerпереводит разговор из pair scoring в retrieval-мышление.Sequentialдобавляет порядок событий и next-item логику.Ranking / LTRобъясняет, почему реальная система обычно многостадийная.Production overviewсобирает всё в одну карту системы.
Core-часть — это обязательный минимум, который должен пройти каждый, кто хочет понять рекомендательные системы с нуля.
План тем:
- Введение Что такое рекомендательная система, какие бывают постановки задачи, почему рекомендации отличаются от обычной классификации. doc notebook
- Данные и interactions Что такое interaction table, какие поля в ней обязательны, как устроены user-item взаимодействия. doc notebook
- Popularity baseline Самая простая модель рекомендаций и зачем она нужна как точка отсчёта. doc notebook
- Content-based recommendations Как рекомендовать похожие объекты по признакам самих объектов. doc notebook
- Collaborative filtering Как использовать поведение пользователей для рекомендаций. doc notebook
- Метрики качества
Почему
accuracyздесь почти бесполезна и как считатьPrecision@K,Recall@K,MAP@K,NDCG@K. doc notebook - Hybrid recommendations Как комбинировать несколько источников сигналов. doc notebook
- Типичные ошибки Leakage, неправильный split, неверная интерпретация implicit feedback, ошибки в candidate universe, сломанный ID mapping. doc
- Cold-start Что делать с новыми пользователями и новыми объектами, почему разные модели по-разному ведут себя в холодном старте и какие fallback-подходы нужны даже в учебном проекте. doc
Advanced-часть нужна не для первого знакомства, а для расширения кругозора и постепенного перехода к более сильным подходам.
План тем:
- Matrix factorization и ALS doc notebook
- LightFM Hybrid Factorization doc notebook
- LightFM Feature Engineering doc notebook
- LightFM Hyperparameter Tuning doc notebook
- Neural Collaborative Filtering doc notebook
- Two-Tower models doc notebook
- Sequential recommenders doc notebook
- Ranking / LTR intro doc notebook
- Production overview doc
Рекомендуемый режим разработки advanced:
- Сначала доводится до внятного состояния одна глава целиком:
docs+notebook+ минимальный модульный каркас. - Только после этого открывается следующая глава.
- Для первых пяти advanced-глав желательно сохранять максимально похожую offline-постановку, чтобы новичок видел эффект именно смены модели, признаков и настройки.
- Для глав
Ranking / LTR introиProduction overviewосновной артефакт — сильная документация; тяжёлый production-код для проекта не обязателен.
Привязка датасетов к advanced-пути:
ALS: старт наMovieLens latest smallв упрощённой implicit-постановке.LightFM 02a: тот же базовыйMovieLens, но уже с item-features, чтобы показать hybrid factorization без смены домена.LightFM 02b: тот жеMovieLens, но с richer-features, чтобы отдельно показать эффект feature engineering.LightFM 02c: тот жеMovieLensи тот же engineered feature set, чтобы отдельно показать эффект tuning.Neural CF: та же базовая постановка, что и вALSиLightFM, чтобы сравнение было честным.Two-Tower: text-rich сценарий, по умолчаниюAmazon Reviews 2023 / All_Beauty.Sequential: сценарий с естественным порядком событий, по умолчаниюRetailrocket.Ranking / LTR intro: в основном концептуальная глава с toy-примерами признаков и многостадийного пайплайна.Production overview: обзорная глава без обязательного отдельного датасета.
Во всём проекте базовый формат interaction table фиксируется явно.
Минимальная схема:
user_iditem_ideventилиratingtimestamp
Ключевые правила:
explicit feedbackиimplicit feedbackне смешиваются без пояснения;- отсутствие взаимодействия не трактуется автоматически как явный negative label;
- train/test split должен соответствовать задаче и не допускать leakage из будущего;
- отображение между исходными
user_id,item_idи внутренними индексами модели должно быть консистентным.
Отдельный раздел по датасету должен отвечать на вопросы:
- какой датасет используется;
- почему он подходит для обучения;
- где лежат raw и processed данные;
- как именно строится split.
На текущем этапе для проекта рекомендуется не один датасет, а небольшой учебный набор:
MovieLens latest smallкак основной датасет дляcore;Retailrocketкак датасет дляimplicit feedback, временного split и e-commerce сценариев;Amazon Reviews 2023в виде одной небольшой категории, по умолчаниюAll_Beauty, как text-rich расширение для hybrid и advanced-тем.
Подробности и ограничения описываются в docs/datasets.md. Отдельный список источников и краткий разбор покрытия тем вынесены в docs/bibliography.md.
В core уже разобраны основные offline top-K метрики:
Precision@KRecall@KHitRate@KMAP@KNDCG@K
CoverageDiversityNovelty
Coverage уже встречается в базовых notebook'ах. Более широкие свойства вроде Diversity и Novelty относятся к следующим итерациям расширения проекта и не должны восприниматься как полностью закрытая часть текущего beginner-маршрута.
Принцип проекта: нет метрики без объяснения её смысла и ограничений.
- сначала простая модель, потом сложная;
- каждая новая модель сравнивается с baseline;
- нет метрики без объяснения;
- нельзя допускать leakage из будущего;
- split должен соответствовать постановке задачи;
- notebooks должны запускаться сверху вниз;
- код должен быть минимальным, читаемым и учебным;
- выводы не должны быть сильнее, чем позволяют данные;
- advanced-темы не должны ломать понятность core-маршрута.
Ниже показана рабочая структура репозитория на текущем этапе. Внутри некоторых директорий материалы ещё будут расширяться, но основные пути уже используются именно так.
recommender-systems-from-zero/
├── README.md
├── requirements.txt
├── pyproject.toml
├── .gitignore
│
├── docs/
│ ├── basic/
│ │ ├── README.md
│ │ ├── 01_intro.md
│ │ ├── 02_data_and_interactions.md
│ │ ├── 03_popularity_baseline.md
│ │ ├── 04_content_based.md
│ │ ├── 05_collaborative_filtering.md
│ │ ├── 06_metrics.md
│ │ ├── 07_hybrid_recommendations.md
│ │ ├── 08_common_mistakes.md
│ │ └── 09_cold_start.md
│ │
│ ├── advanced/
│ │ ├── README.md
│ │ ├── 01_matrix_factorization_als.md
│ │ ├── 02a_lightfm_hybrid_factorization.md
│ │ ├── 02b_lightfm_feature_engineering.md
│ │ ├── 02c_lightfm_hyperparameter_tuning.md
│ │ ├── 02d_neural_collaborative_filtering.md
│ │ ├── 03_two_tower_models.md
│ │ ├── 04_sequence_based_recommendations.md
│ │ ├── 05_ranking_and_ltr_intro.md
│ │ └── 06_production_overview.md
│ │
│ ├── bibliography.md
│ └── datasets.md
│
├── notebooks/
│ ├── basic/
│ │ ├── README.md
│ │ ├── 01_intro_dataset.ipynb
│ │ ├── 02_popularity_baseline.ipynb
│ │ ├── 03_content_based_tfidf.ipynb
│ │ ├── 04_item_item_cf.ipynb
│ │ ├── 05_metrics.ipynb
│ │ └── 06_hybrid_intro.ipynb
│ │
│ └── advanced/
│ ├── README.md
│ ├── 00_latent_factors_intuition.ipynb
│ ├── 01_als_implicit.ipynb
│ ├── 02a_lightfm_hybrid_factorization.ipynb
│ ├── 02b_lightfm_feature_engineering.ipynb
│ ├── 02c_lightfm_hyperparameter_tuning.ipynb
│ ├── 02d_neural_collaborative_filtering.ipynb
│ ├── 03_two_tower_model_intro.ipynb
│ ├── 04_sequence_recommender_intro.ipynb
│ └── 05_retrieval_vs_ranking_toy.ipynb
│
├── src/
│ └── recsys_basics/
│ ├── __init__.py
│ ├── data.py
│ ├── split.py
│ ├── metrics.py
│ │
│ ├── basic/
│ │ ├── popularity.py
│ │ ├── content_based.py
│ │ ├── item_item.py
│ │ └── hybrid.py
│ │
│ └── advanced/
│ ├── als.py
│ ├── lightfm.py
│ ├── neural_cf.py
│ ├── two_tower.py
│ └── sequence_model.py
│
└── data/
├── README.md
├── raw/
└── processed/
Сейчас это не “план будущего курса”, а уже рабочий учебный репозиторий.
Что уже можно использовать прямо сейчас:
- весь
Core path: docs + notebooks + базовые модули вsrc/; - загрузку учебных датасетов
MovieLens,Amazon Reviews 2023иRetailrocket; - весь заявленный
Advanced pathкак optional-продолжение после базы.
Что всё ещё расширяется:
- глубина conceptual / production-oriented разделов advanced-пути;
- вспомогательные пояснения и дополнительные учебные примеры.
Практический статус на текущем этапе:
Core path— рекомендуемый beginner-маршрут и основная готовая часть проекта;Advanced path— уже содержит runnable optional-материалы; наиболее концептуальные части здесь —Ranking / LTRиProduction overview;- production-ориентированные темы даны как обзор и карта следующего шага, а не как обещание production-ready системы.
Проект предназначен для запуска на Linux и macOS.
Windows не поддерживается: используемая в advanced-разделах библиотека LightFM на этой платформе работать не будет.
Окружение описано через requirements.txt и pyproject.toml. В requirements.txt уже включены зависимости для core и runnable advanced-notebooks, включая implicit, lightfm-next, torch и optuna.
README пока не пытается превратиться в большой install-manual для всех advanced-сценариев сразу, но сам core-маршрут уже не является “планом на будущее” и доступен для прохождения.
Минимальная проверка зависит от типа изменения:
.pyфайл:python -m py_compile- метрики: tiny fixture с известным expected result
- split: проверка дат, размеров и отсутствия leakage
- модель: smoke
fit -> recommend -> no duplicates - notebook: restart kernel + run all cells
- docs: сверка путей, команд и порядка глав
Если полная проверка дорогая, нужно явно отделять:
- что проверено;
- что не проверено;
- какой остаётся риск.
Первая версия проекта не ставит целью:
- production-ready online API;
- feature store;
- A/B testing platform;
- real-time serving;
- сложную orchestration-инфраструктуру;
- полноценный deep learning курс по recommender systems;
- industrial monitoring stack.
Эти темы могут появиться позже как отдельные advanced-расширения.
В репозитории используется разделение лицензий по типу материалов:
- код в
src/и служебные файлы проекта лицензируются подMIT, см. LICENSE; - учебные материалы в
README.md,docs/иnotebooks/лицензируются подCC BY 4.0, см. LICENSE-docs.
Если для конкретного файла позже понадобится другое правило, оно должно быть указано явно рядом с этим файлом или в соответствующей директории.
Короткое описание для GitHub:
Учебный проект по рекомендательным системам: от baseline, content-based и collaborative filtering до метрик, hybrid-подходов и введения в neural recommenders.
English version:
A course-style recommender systems project: from baselines, content-based filtering, and collaborative filtering to metrics, hybrid methods, and an introduction to neural recommenders.