Skip to content
AngelinaRemarkPublic

About

Diploma project: hybrid movie recommendation system (collaborative + content-based filtering, NMF matrix factorization, JWT-authenticated web UI).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🎬 Система рекомендацій для стрімінгового сервісу

📝 Опис проекту

Це дипломна робота на тему "Система рекомендацій для стрімінгового сервісу", яка реалізує сучасні алгоритми машинного навчання для персоналізованих рекомендацій фільмів.

✨ Основні функції:

  • 🤖 Колаборативна фільтрація (user-based, item-based)
  • 📊 Контентна фільтрація на основі метаданих
  • 🔄 Гібридний підхід для максимальної точності
  • 🎯 Матрична факторизація (NMF)
  • 📱 Сучасний веб-інтерфейс у стилі Netflix
  • 🔐 Система авторизації з JWT токенами
  • 📈 Система збору та аналізу взаємодій користувачів

🚀 Швидкий старт

1. Клонування проекту

git clone <your-repo-url>
cd streaming-recommender

2. Автоматичне налаштування

python scripts/quick_setup.py

3. Запуск системи

python app/main.py

4. Відкрийте браузер

📋 Ручне налаштування

Передумови

  • Python 3.8+
  • MongoDB (локально або Atlas)
  • TMDb API ключ (опціонально)

Встановлення залежностей

pip install -r requirements.txt

Конфігурація

Створіть файл .env:

SECRET_KEY=your_secret_key
MONGO_URI=mongodb://localhost:27017/streaming_recommender
TMDB_API_KEY=your_tmdb_api_key
DEBUG=True

Імпорт даних

python scripts/enhanced_data_importer.py

🏗️ Архітектура системи

streaming-recommender/
├── app/
│   ├── main.py              # Головний Flask додаток
│   ├── config.py            # Конфігурація
│   ├── database.py          # Підключення до MongoDB
│   ├── models/              # Моделі даних
│   ├── recommenders/        # Алгоритми рекомендацій
│   │   ├── collaborative.py
│   │   ├── content_based.py
│   │   └── hybrid.py
│   └── api/                 # API маршрути
├── scripts/
│   ├── quick_setup.py       # Швидке налаштування
│   └── enhanced_data_importer.py
├── data/                    # Дані MovieLens
├── static/                  # Статичні файли
└── templates/               # HTML шаблони

🔧 API Документація

Аутентифікація

  • POST /api/auth/register - Реєстрація
  • POST /api/auth/login - Вхід
  • GET /api/auth/me - Поточний користувач

Контент

  • GET /api/content/ - Список контенту
  • GET /api/content/<id> - Деталі контенту

Рекомендації

  • GET /api/recommendations/personal - Персональні рекомендації
  • POST /api/recommendations/interaction - Запис взаємодії

Система

  • GET /api/health - Стан системи
  • GET /api/stats - Статистика

🧪 Алгоритми рекомендацій

1. Колаборативна фільтрація

  • User-based: Рекомендації на основі схожих користувачів
  • Item-based: Рекомендації на основі схожого контенту
  • Matrix Factorization: NMF для зниження розмірності

2. Контентна фільтрація

  • Аналіз метаданих (жанри, актори, режисери)
  • TF-IDF векторизація описів
  • Cosine similarity для знаходження схожості

3. Гібридний підхід

  • Адаптивні ваги залежно від активності користувача
  • Комбінування різних алгоритмів
  • Диверсифікація за жанрами

📊 Структура даних

Користувачі

{
  "username": "string",
  "email": "string",
  "preferences": {
    "genres": ["Action", "Drama"],
    "favorite_actors": ["Actor Name"],
    "favorite_directors": ["Director Name"]
  },
  "demographics": {
    "age": 25,
    "location": "City"
  }
}

Контент

{
  "title": "Movie Title",
  "genres": ["Action", "Drama"],
  "release_year": 2023,
  "director": "Director Name",
  "actors": ["Actor1", "Actor2"],
  "description": "Movie description",
  "poster_url": "https://...",
  "average_rating": 8.5,
  "tmdb_id": 123456
}

Взаємодії

{
  "user_id": "ObjectId",
  "content_id": "ObjectId",
  "interaction_type": "rating|view|bookmark",
  "value": 4.5,
  "timestamp": "2024-01-01T00:00:00Z"
}

🧪 Тестування

Запуск тестів

python -m pytest tests/

Демонстрація алгоритмів

python scripts/demo_recommendations.py

📈 Моніторинг та метрики

Система збирає наступні метрики:

  • Precision@K та Recall@K
  • Покриття каталогу
  • Різноманітність рекомендацій
  • Час відгуку системи

🔒 Безпека

  • JWT токени для авторизації
  • Хешування паролів з bcrypt
  • Валідація вхідних даних
  • CORS налаштування

🚀 Продакшен

Docker (планується)

docker build -t streaming-recommender .
docker run -p 5000:5000 streaming-recommender

Налаштування для продакшену

  • Змініть SECRET_KEY та JWT_SECRET_KEY
  • Встановіть DEBUG=False
  • Налаштуйте зовнішню MongoDB
  • Налаштуйте HTTPS
  • Додайте моніторинг

👥 Тестові користувачі

Після імпорту даних доступні наступні користувачі:

  • admin / admin123
  • movie_critic / password123
  • action_fan / password123
  • comedy_lover / password123
  • horror_enthusiast / password123

📚 Використані технології

  • Backend: Flask, PyMongo, JWT
  • ML: scikit-learn, pandas, numpy
  • Frontend: HTML5, CSS3, Bootstrap 5, JavaScript
  • Database: MongoDB
  • APIs: TMDb API, MovieLens dataset

📄 Ліцензія

Цей проект створено для освітніх цілей як дипломна робота.

About

Diploma project: hybrid movie recommendation system (collaborative + content-based filtering, NMF matrix factorization, JWT-authenticated web UI).

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages