← Назад к вопросам

Какой самый большой проект делал по ML?

1.3 Junior🔥 131 комментариев
#Опыт и проекты

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Самый большой проект: 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 и управления командой.