Демо-сайт рекомендательных систем на базе Django. Вместо фильмов используется датасет школьных/офисных товаров Amazon (23 000+ товаров, 700 000+ оценок).
На странице каждого товара демонстрируются 9 алгоритмов рекомендаций:
| # | Алгоритм | Тип | Описание |
|---|---|---|---|
| 1 | Item-based CF | Collaborative Filtering | Похожие товары по матрице сходства (Jaccard) |
| 2 | Neighborhood CF | Collaborative Filtering | Рекомендации на основе похожих пользователей |
| 3 | Content-Based (item) | Content-Based | TF-IDF по описаниям товаров |
| 4 | Content-Based (user) | Content-Based | Профиль интересов пользователя через TF-IDF |
| 5 | ALS | Matrix Factorization | Alternating Least Squares (implicit) |
| 6 | BPR | Matrix Factorization | Bayesian Personalized Ranking (implicit) |
| 7 | SVD | Matrix Factorization | Truncated SVD (scipy) |
| 8 | FWLS | Hybrid | Feature Weighted Linear Stacking (CB + CF) |
| 9 | Popularity | Baseline | Популярные товары в той же категории |
python -m venv venv
# Windows:
venv\Scripts\activate
# Linux/Mac:
source venv/bin/activate
pip install -r requirements.txtpython manage.py makemigrations
python manage.py migrate --run-syncdbДатасеты находятся в папке data/:
# Загрузка товаров (23 000+ записей)
python populate_office_school_items.py
# Загрузка оценок пользователей (700 000+ записей)
python populate_office_school_ratings.pypython manage.py runserver 127.0.0.1:8000Сайт доступен по адресу: http://127.0.0.1:8000
python -m builder.item_similarity_calculatorpython build_tfidf_similarity.py
python build_content_similarity.pypython train_implicit_models.pyСкрипт evaluate_models.py вычисляет метрики Precision@K, Recall@K, NDCG@K, MAP@K, Hit Rate@K и Coverage для всех моделей:
python evaluate_models.py --users 100000 --min-ratings 5 --k 5 10Скрипт автоматически переобучает MF-модели (ALS, BPR, SVD) только на train-данных, чтобы исключить утечку данных. Сплит сохраняется в data/splits/split.json, результаты — в data/results/evaluation_results.csv.
Для повторной оценки на том же сплите:
python evaluate_models.py --load-split data/splits/split.json --k 5 10├── data/
│ ├── office_school_items.csv # Датасет товаров
│ ├── office_school_interactions.csv # Датасет оценок
│ ├── results/ # Результаты оценки (gitignored)
│ └── splits/ # Train/test сплиты (gitignored)
├── populate_office_school_items.py # Скрипт загрузки товаров в БД
├── populate_office_school_ratings.py # Скрипт загрузки оценок в БД
├── train_implicit_models.py # Обучение ALS, BPR, SVD
├── evaluate_models.py # Оценка всех моделей (с переобучением на train)
├── builder/
│ ├── item_similarity_calculator.py # Построение Item-based CF
│ └── tfidf_similarity_builder.py # Построение TF-IDF сходства
├── recs/
│ ├── als_recommender.py # ALS (implicit)
│ ├── implicit_bpr_recommender.py # BPR (implicit)
│ ├── svd_recommender.py # SVD (scipy)
│ ├── neighborhood_based_recommender.py # Neighborhood CF
│ ├── content_based_recommender.py # Content-Based (LDA/TF-IDF)
│ ├── fwls_recommender.py # Hybrid FWLS
│ └── popularity_recommender.py # Popularity baseline
├── school_items/ # Django app: модели товаров
├── analytics/ # Django app: рейтинги
├── recommender/ # Django app: API рекомендаций
└── templates/ # HTML шаблоны
- Товары: Amazon Office & School Supplies (title, description, features, categories, price, rating — на EN и RU)
- Оценки: user_id, parent_asin, rating (1-5), timestamp
- Категории извлекаются из 3-го уровня поля
categories_en(split по|) и переведены на русский
- Python 3.10+
- Django 4.2+
- implicit (ALS, BPR)
- scipy (SVD)
- scikit-learn (TF-IDF)
- gensim (LDA)
- pandas, numpy