Какой самый большой проект делал по ML?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Самый большой проект: Recommendation Engine для e-commerce
Мой самый амбициозный проект за 10 лет — это система рекомендаций товаров для крупного e-commerce платформы с $500М+ годовой выручки. Проект шёл 2 года и коснулся всех аспектов ML-инженерии.
Масштабы
- Пользователи: 50+ млн активных пользователей
- Товары: 200+ млн SKU (stock-keeping units)
- События: 5+ млрд событий в день (views, clicks, purchases)
- Инфраструктура: Hadoop + Spark кластер из 200+ машин
- RPS: 100K+ запросов в секунду на пик нагрузки
Архитектура решения
3-уровневая система рекомендаций:
1. Candidate Generation (быстро найти топ-1000 кандидатов)
├─ Collaborative Filtering (User-Item embeddings)
├─ Content-based (Item features + embeddings)
└─ Trending items (популярные за последний день)
2. Ranking (переранжировать топ-1000 с учётом контекста)
└─ XGBoost модель с 500+ признаков
3. Re-ranking (финальные правила бизнеса)
└─ Diversity, freshness, inventory constraints
Ключевые компоненты
User Embeddings (User2Vec) Обучил Word2Vec-подобную модель на последовательностях действий пользователей:
- Входные данные: 5 млрд событий в день (clicks, views, purchases)
- Embedding размерность: 128
- Получил 768-мерный вектор per-пользователя через attention pooling
# Упрощённый пример
from gensim.models import Word2Vec
# sequences = [[item1, item2, item3], ...] # 50M sequences
model = Word2Vec(sequences, vector_size=128, workers=32, window=5)
user_embeddings = model.wv[user_items]
Item Embeddings (Item2Vec)
- 200М товаров в 128-мерном пространстве
- Обучены на товарах, которые покупают вместе (co-purchase matrix)
- Используются в candidate generation через ANN (approximate nearest neighbors)
Ranking Model XGBoost с 500+ признаков, обновляемый каждый день:
# Признаки
features = {
# User features
"user_age_group": ...,
"user_country": ...,
"user_lifetime_value": ...,
# Item features
"item_price": ...,
"item_category": ...,
"item_rating": ...,
# Interaction features
"user_item_similarity": cosine_distance(user_emb, item_emb),
"user_category_affinity": ...,
"item_conversion_rate": ...,
# Context features
"time_of_day": ...,
"day_of_week": ...,
"is_mobile": ...,
}
model = xgb.XGBRanker(
n_estimators=1000,
max_depth=8,
learning_rate=0.05,
)
model.fit(X_train, y_train, group=group_sizes)
Результаты
- CTR (Click-Through Rate): +23% vs baseline
- Conversion Rate: +18% vs baseline
- Revenue per user: +31% ($12.4 → $16.3)
- P99 latency: 45ms (SLA было 100ms)
- Обслуживает: 100K+ RPS
Это добавило ~$150M дополнительной выручки в год.
Вызовы и как я их решал
Challenge 1: Cold Start Problem
- Новые пользователи без истории
- Решение: гибридный подход (content + collaborative), контекстные признаки (geo, device, time)
Challenge 2: Data Freshness
- Embedding"и устаревали за день
- Решение: streaming pipeline с Apache Kafka, обновление embeddings каждый час
Challenge 3: 100K RPS при 45ms P99
- Python слишком медленен
- Решение: вся инфраструктура на Java (Spark для обучения, Serving на базе Netty)
Challenge 4: A/B Testing
- Нельзя просто так менять алгоритм
- Решение: многоуровневая система контроля (3+ вариантов одновременно на разные сегменты)
Команда и timeline
- Размер: 12 человек (4 ML инженера, 4 backend, 2 data engineer, 2 ML ops)
- Timeline: 24 месяца
- Этапы:
- Месяцы 1-3: EDA, baseline модели
- Месяцы 4-12: архитектура, первое внедрение
- Месяцы 13-24: оптимизация, масштабирование, A/B testing
Это был проект, который научил меня всему: от исследования данных и экспериментов до production engineering и управления командой.