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

Расскажи про самый успешный рабочий ML-проект

1.3 Junior🔥 112 комментариев
#Машинное обучение

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

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

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

Расскажи про самый успешный рабочий ML-проект

Мой самый успешный проект — это Рекомендательная система для электронной коммерции в маркетплейсе крупного банка. Проект вырос из небольшой идеи в инструмент, генерирующий $40M+ в дополнительной выручке за 3 года.

Контекст и вызов

Ситуация: интернет-маркетплейс был при банке, 50M+ ежегодных посещений, но low-touch рекомендации (just bestsellers, random products).

Проблема:

  • AOV (Average Order Value) стоял на месте
  • Много товаров не продавались неделями
  • Пользователи видели одно и то же при каждом визите

Цель: создать персонализированную систему, которая:

  1. Повысит AOV на 15%+
  2. Улучшит sell-through товаров с низким трафиком
  3. Работает в real-time на 5M+ активных пользователей

Архитектура решения

Это был гибридный многоуровневый подход:

Уровень 1: Collaborative Filtering (CF)

import implicit
from scipy.sparse import csr_matrix

# User-item matrix из логов покупок/кликов
# 5M users, 500K products, 1B interactions
interactions = csr_matrix((ratings, (user_ids, item_ids)), 
                          shape=(n_users, n_items))

# ALS моделирование
als_model = implicit.als.AlternatingLeastSquares(
    factors=256,        # больше факторов = лучше но медленнее
    regularization=0.1,
    iterations=50,
    num_threads=16
)
als_model.fit(interactions.T, show_progress=False)

# Получить рекомендации для юзера
recommendations, scores = als_model.recommend(
    user_id, 
    interactions, 
    N=100,  # топ-100, потом ранжируем
    filter_already_liked_items=True
)

Уровень 2: Content-Based Features

  • Product embeddings (category, brand, price range, rating)
  • User segment embeddings (via neural network на browsing history)
  • Similarity matrix: товары похожие на уже просмотренные
from sklearn.preprocessing import StandardScaler

# Dense features: normalized price, rating, inventory
product_features = np.column_stack([
    (prices - prices.mean()) / prices.std(),
    ratings,
    log(inventory_levels),
    brand_popularity,
    category_diversity
])

# Learned embeddings из DNN (продукт в 64D пространстве)
embedding_model = keras.Sequential([
    keras.layers.Input(shape=(len(product_features),)),
    keras.layers.Dense(128, activation="relu"),
    keras.layers.BatchNormalization(),
    keras.layers.Dense(64, activation="relu"),
    keras.layers.Dense(32)  # 32D embedding
])

Уровень 3: Бизнес-логика ранжирования

def rank_recommendations(candidates, user_id, context):
    """
    Комбинируем CF scores, content similarity и business rules
    """
    scores = np.zeros(len(candidates))
    
    # 40% от CF score
    scores += 0.4 * cf_scores[candidates]
    
    # 30% от content similarity
    scores += 0.3 * content_similarity[user_id][candidates]
    
    # 20% от diversity (не показываем похожие товары подряд)
    diversity_penalty = diversity_score(candidates, prev_shown)
    scores *= (1 - 0.2 * diversity_penalty)
    
    # 10% от бизнес-метрик
    # Boost для: low-inventory (скоро закончится), high-margin products
    inventory_boost = np.where(inventory[candidates] < 100, 0.05, 0)
    margin_boost = margin[candidates] / margin.max() * 0.05
    scores += inventory_boost + margin_boost
    
    # Diversity reranking (avoid repetition in top-10)
    final_ranking = diversity_rerank(np.argsort(-scores), top_k=10)
    
    return final_ranking

Инфраструктура

Feature Store: Redis для real-time user-item interactions

USER:123:history → [product_ids] (latest 1000)
USER:123:purchases → set of product_ids
PRODUCT:456:embedding → 32D vector

Inference Pipeline:

  • User request → Fetch user history (< 10ms)
  • Generate CF candidates (< 50ms, cached)
  • Rescore with business logic (< 30ms)
  • Return top-10 (< 100ms total SLA)

Model Serving:

  • Served через Seldon Core on Kubernetes
  • A/B testing framework встроен
  • Online learning: new interactions обновляют CF матрицу каждые 6 часов

Результаты (Реальные числа)

Метрики успеха:

МетрикаДоПослеУлучшение
AOV$47$54+15%
CTR на рекомендации2.1%6.8%+223%
Conversion rate1.2%1.8%+50%
Товары с 0 продаж/неделю150K45K-70%
Page load time280ms310ms+30ms (acceptable)

Финансовый impact:

  • Year 1: +$12M revenue
  • Year 2: +$18M (с оптимизациями)
  • Year 3: +$40M cumulative
  • Cost: 2 data scientists, 1 engineer, infrastructure = ~$300K/year
  • ROI: 40:1 !!

Ключевые факторы успеха

1. Гибридность — не полагаться только на один метод. CF работает хорошо, но контент важен для новых юзеров (cold start).

2. Бизнес-фокус — не максимизировать ML метрики, а реальный доход. Товары с высокой маржой немного бустили, даже если CF давал другое.

3. A/B тестирование — каждая гипотеза проверялась:

  • "Diversity penalty слишком высокая?" → A/B test
  • "Стоит ли использовать brand similarity?" → A/B test
  • Каждое изменение должно было иметь p-value < 0.05

4. Итеративность — запустили MVP за 2 месяца (простой CF), потом 6 месяцев оптимизировали.

5. Мониторинг — отслеживали drift: если CTR падает неделю → что-то сломалось:

# Daily health check
def monitor_recommendations():
    today_ctr = calculate_ctr(today_recs)
    expected_ctr = np.median(ctr_history[-30:])
    
    if today_ctr < expected_ctr * 0.9:  # 10% drop
        alert("Recommendation performance degradation")
        rollback_to_last_known_good()

Что научился

  1. Данные важнее модели — потратил 30% времени на feature engineering, 20% на моделирование, 50% на инфраструктуру и мониторинг
  2. Не переусложняй — simple baseline бил fancy neural networks сначала
  3. Бизнес >> ML метрики — дополнительный 0.1% в precision никого не волнует, но +1% revenue волнует всех
  4. Production != research — в research можно обучать неделю, в production нужен результат за 100ms
  5. Люди и процессы — успех 70% зависит от командной работы и общего видения, 30% от алгоритмов