К обычному разбору
Тренировка по собеседованиюТехническое собеседованиеGRII RED2026-03-12

GRII RED: ML System Design

Идите сверху вниз: сначала попробуйте сами, затем откройте разбор. Если шаг с кодом, пишите решение прямо здесь и запускайте проверки на странице.

Шагов
15
Вопросов
15
Задач
0
1Кейс10 мин

Постановка cart recommendations при масштабе каталога

Нужно сделать блок рекомендаций в корзине для 10 млн пользователей и 100 тыс. товаров. Как сформулировать цель, ограничения и MVP?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Цель блока задается через add-to-cart/order/AOV, а MVP строится на item-item co-occurrence и category/popular fallback с фильтрами availability и already-in-cart.

Подробный разбор

Cart recommendations отличаются от обычной главной ленты: пользователь уже выразил intent через текущую корзину. Цель можно задать через incremental add-to-cart, order conversion, AOV/GMV, margin и отсутствие негативного UX. CTR сам по себе вторичен.

При 100 тыс. товаров полный online перебор не нужен. MVP: offline считать top-N соседей для item-item co-occurrence, хранить candidates в low-latency storage, на запросе агрегировать кандидатов товаров из корзины, фильтровать уже добавленные и недоступные, затем применять category/business rules.

Ограничения фиксируются сразу: latency budget, freshness каталога, cold start, fallback cascade, diversity, compatibility categories и мониторинг empty response/fallback share.

2Вопрос10 мин

Метрики для рекомендаций в корзине

Какие offline, online и guardrail-метрики подходят для блока рекомендаций в корзине, если клики не равны покупке?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Online primary лучше связывать с add-to-cart, order conversion, AOV/GMV или margin. Guardrails: complaints, repeated category, returns, latency, coverage и diversity.

Подробный разбор

CTR полезен как диагностический сигнал, но для корзины он может обманывать. Пользователь может кликнуть на любопытный товар и не купить, либо купить без клика, если товар добавляется прямо из блока. Поэтому primary metric должна быть ближе к бизнес-действию: incremental add-to-cart, order conversion, items per order, AOV, GMV, margin или retention.

Offline можно считать recall@K/nDCG на co-purchase или add-to-cart labels, но важно помнить про bias старых показов и популярность. Нужны slice metrics: новые товары, long-tail, категории, регионы, price bands.

Guardrails: уже добавленные товары, unavailable items, diversity, repeated category rate, complaints/hide, returns/cancellations, latency, empty response rate, fallback share и coverage каталога.

3Вопрос10 мин

Фильтры и business rules для cart recommendations

Какие товары нельзя показывать в рекомендациях корзины и где применять эти ограничения в candidate generation/reranking?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Базовые фильтры: товары уже в корзине, unavailable/out-of-stock, несовместимые категории, запрещенные товары, price outliers и дубли. Часть фильтров hard, часть идет в rerank.

Подробный разбор

Первый обязательный фильтр - не рекомендовать товар, который уже лежит в корзине. Дальше идут availability, stock, регион доставки, возрастные/legal ограничения, несовместимость категорий, дубли вариантов одного товара и товары с плохим quality status.

Hard filters применяются до ранжирования, чтобы не тратить latency и не показать недопустимый вариант. Soft constraints можно учитывать в reranker: diversity по категориям, price compatibility, margin, novelty и business boosts. При этом boosts не должны пробивать hard constraints.

Для production нужны объяснимые counters: сколько кандидатов отброшено каждым фильтром, как часто блок пустеет после фильтров и какой fallback включается.

4Кейс10 мин

Baseline для рекомендаций в корзине через item-item co-occurrence

Нужно сделать рекомендации товаров в блоке корзины: 10 млн пользователей и 100 тыс. товаров. Как построить простой baseline через совместные покупки?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Baseline: считать item-item co-occurrence по заказам/сессиям, хранить top-N соседей на товар, для корзины агрегировать соседей товаров из корзины, исключать уже добавленные и сортировать по score.

Подробный разбор

Для первого решения не нужен сложный персонализированный ranker. Можно взять историю покупок и посчитать, какие товары часто встречаются вместе в одном заказе, в одной сессии или в коротком временном окне.

На offline этапе строим sparse item-item matrix или top-N neighbors per item: score может быть count, lift, PMI, cosine over item vectors или normalized co-occurrence. На online этапе берем товары из корзины, достаем соседей для каждого, агрегируем scores, выкидываем уже добавленные товары и показываем top-K.

Обязательно нужны freshness и ограничения: пересчет раз в день/несколько часов, фильтр availability, stock, price, category, business rules и fallback на popular/top sellers, если соседей мало.

Типичные ошибки

  • Начать с тяжелой персонализации без простого baseline.
  • Считать полную dense matrix 100k x 100k без sparse top-N хранения.
  • Не исключить товары, которые уже есть в корзине.

Как сказать на собеседовании

  • Произнеси "sparse top-N per item", а не полную матрицу.
  • Добавь availability и fallback.
5Кейс9 мин

Что делать, если рекомендации в корзине не нашлись

В item-item рекомендациях для корзины может не быть соседей: новый товар, редкий товар, новый пользователь или корзина из многих товаров. Какие fallback предусмотреть?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужна cascade fallback: item-item neighbors, category-level popular, global popular, персональные favorites/history, business-curated complements, с фильтром наличия и исключением уже купленного/добавленного.

Подробный разбор

Система должна быть robust: пользователь не должен увидеть пустой блок только потому, что товар новый или редкий. Поэтому строим каскад.

Первый уровень — item-item соседи товаров из корзины. Второй — популярные товары в категориях, связанных с корзиной. Третий — глобальные top sellers или personalized popular по истории пользователя. Для нового пользователя можно использовать контекст: гео, магазин, устройство, время, текущая категория.

Если корзина большая, нужно не только набрать кандидатов, но и исключить уже присутствующие товары, дедуплицировать, ограничить повторяющиеся категории и не показывать несовместимые товары. Для каждого fallback стоит логировать причину, чтобы мониторить долю fallback traffic.

Типичные ошибки

  • Сказать только "покажем популярное" без каскада.
  • Не исключить товары из корзины.
  • Не мониторить долю fallback и пустых ответов.

Как сказать на собеседовании

  • Назови fallback cascade по уровням.
  • Добавь метрики: empty response rate, fallback share, CTR/conversion per fallback level.
6Вопрос10 мин

Long tail и novelty у item-item baseline

Какие слабые места появляются у item-item co-occurrence baseline для корзины: long tail, новые товары, популярность и novelty?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Co-occurrence усиливает популярные товары, плохо покрывает новые/редкие items и может снижать novelty. Нужны normalization, category fallback, exploration и content features.

Подробный разбор

Item-item baseline использует исторические совместные покупки, поэтому он естественно отдает преимущество товарам с большим числом взаимодействий. Новые и редкие товары получают мало соседей, а популярные товары могут появляться почти в каждой корзине, даже если они не самые релевантные.

Снижение проблем: использовать lift/PMI/cosine вместо raw counts, ограничивать dominant popular items, добавлять category-level и content-based candidates, учитывать availability, вводить diversity/novelty reranking и оставлять exploration traffic для long-tail.

Метрики должны смотреть не только общий CTR, но и coverage каталога, долю long-tail показов, novelty, repeated category rate и качество на cold-start товарах.

7Кейс10 мин

ALS и матричная модель для cart recommendations

Как использовать уже существующую матричную модель или ALS в задаче рекомендаций к текущей корзине, не потеряв постановку item-to-cart?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

ALS может дать item/user embeddings и candidates, но cart surface требует score от текущей корзины: aggregation item vectors, user context и фильтры complements/availability.

Подробный разбор

ALS обычно учит user и item factors по implicit feedback. Для корзины есть два варианта использования. Первый - item-to-item: похожесть item embeddings помогает находить соседей товаров из корзины. Второй - персональный слой: user embedding добавляет предпочтения пользователя поверх текущего cart intent.

Граница постановки важна. Если просто показывать top items для пользователя, система может игнорировать текущую корзину. Для cart recommendations score должен учитывать товары в корзине: агрегировать их embeddings, взвешивать последние добавления, применять category complementarity и фильтровать already-in-cart.

ALS стоит сравнивать с co-occurrence baseline по offline labels и online uplift, отдельно контролируя latency, freshness и cold-start, где content/category fallback часто надежнее.

8Вопрос10 мин

Substitutes vs complements в корзине

Почему рекомендация похожего кольца к уже добавленному кольцу может быть хуже, чем рекомендация комплементарной категории?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

В корзине intent уже зафиксирован, поэтому часто ценнее complements: серьги, подвеска, уход или аксессуар. Substitutes могут конкурировать с выбранным товаром.

Подробный разбор

Похожий товар не всегда полезен. Если пользователь уже положил кольцо с рубином, второе похожее кольцо может не увеличить заказ, а лишь создать сомнение или каннибализацию. Для cart surface часто важнее дополнить покупку совместимыми категориями.

Модель должна различать similarity и complementarity. Источники сигнала: co-purchase pairs, category compatibility matrix, правила мерчандайзинга, price ratio, стиль, материал, occasion и последовательность добавления товаров. В ранжировании можно штрафовать повтор уже представленной категории и поднимать совместимые категории.

Проверка идет online: add-to-cart/order uplift, AOV, repeated category rate, diversity, returns и complaints. Offline co-occurrence без категории может смешивать substitutes и complements, поэтому нужна доменная интерпретация.

9Вопрос10 мин

Граница item-to-item и персонализации

Как объяснить, где заканчивается item-to-item рекомендация к корзине и начинается персонализированный user recommender?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Item-to-item использует текущую корзину как главный context; персонализация добавляет user history как дополнительный сигнал, но не заменяет cart intent.

Подробный разбор

Item-to-item слой отвечает на вопрос: какие товары обычно полезны рядом с товарами из текущей корзины. Его можно построить без user profile: co-occurrence, item embeddings, category complements и бизнес-правила.

Персонализация добавляет информацию о пользователе: любимые категории, price sensitivity, brands, sizes, регион, прошлые покупки и recent views. Но если персональный top-N игнорирует текущую корзину, это уже другая поверхность рекомендаций.

Практичная архитектура разделяет слои: cart-based candidate generation, optional user-aware reranking и constraints. В логах и метриках стоит отдельно измерять вклад cart signal и user signal, чтобы не потерять основной use case.

10Кейс10 мин

Как учитывать категории и комплементарность в корзине

Если пользователь добавил кольцо, стоит ли рекомендовать еще кольца? Как сформулировать цель и ограничения для рекомендаций в корзине?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Для корзины часто нужны complements, а не substitutes. Нужно добавить category/business constraints: не повторять уже представленную категорию, рекомендовать совместимые категории и контролировать diversity.

Подробный разбор

Цель блока в корзине обычно не "показать похожее", а увеличить чек и полезность заказа. Поэтому если в корзине кольцо, второе кольцо может быть менее полезно, чем серьги, браслет или уходовый аксессуар, в зависимости от домена.

Это можно учесть на candidate generation или reranking. В генерации строим item-to-item neighbors с учетом complementary categories. В ранжировании добавляем признаки: category of cart items, candidate category, category compatibility, price ratio, material, style, occasion. После ранжирования применяем diversity constraints.

Важно обсуждать business rules и availability: нельзя рекомендовать отсутствующие товары, несовместимые пары, слишком дорогие/дешевые outliers без причины. Метрики: add-to-cart, conversion, AOV/GMV, diversity, repeated category rate, complaints/negative feedback.

Типичные ошибки

  • Оптимизировать только item similarity.
  • Не определить цель блока рекомендаций.
  • Не обсудить category constraints и diversity.

Как сказать на собеседовании

  • Сначала спроси: хотим substitutes или complements?
  • Приведи пример с корзиной и категориями.
11Кейс12 мин

Category constraints поверх ANN retrieval

Как наложить ограничения по категориям и комплементарности, если candidates достаются через ANN по embeddings?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Ограничения можно применять pre-filter в индексе, post-filter после retrieval или category-aware reranking. Обычно комбинируют shortlist побольше и hard/soft constraints.

Подробный разбор

ANN возвращает ближайшие embeddings, но близость не гарантирует допустимую категорию или complementarity. Есть несколько уровней контроля. Pre-filter применяет category/availability constraints внутри индекса или через отдельные per-category indices. Это быстрее после retrieval, но может снизить recall, если фильтр слишком жесткий.

Post-filter берет shortlist больше K, удаляет недоступные и неподходящие категории, затем reranker выбирает top-K. Category-aware reranker добавляет признаки cart category, candidate category, compatibility score, price ratio и diversity penalties. Для важных hard rules нужен deterministic слой, который нельзя перебить model score.

Мониторинг: доля кандидатов, удаленных фильтрами, empty results после constraints, latency, coverage категорий и online uplift по complements.

12Вопрос10 мин

Категории и признаки каталога для cart RecSys

Какие catalog features нужны для рекомендаций в корзине и какие проблемы бывают с категориями товаров?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Нужны category hierarchy, attributes, brand, price, availability, stock, images/text embeddings, style/material и quality flags. Проблемы: шумные категории, дубли и stale catalog.

Подробный разбор

Каталог задает большую часть ограничений для cart recommendations. Полезны category hierarchy, brand, model, material, style, size, color, price, discount, margin, stock, delivery availability, seasonality, text/image embeddings, popularity и quality flags.

Категории часто шумные: разные уровни иерархии, неправильная разметка, дубли SKU, новые товары без атрибутов, устаревший stock и локальные бизнес-исключения. Поэтому pipeline должен иметь validation, default categories, confidence атрибутов и правила для missing values.

Для обучения важно хранить признаки на момент показа. Если использовать текущий каталог для старых impressions, можно получить leakage: товар мог сменить категорию, цену, availability или фото после события.

13Вопрос12 мин

User-фичи, item-фичи и cart-level scoring

При обучении MLP или бустинга для корзины какие признаки подавать: user, item, item-to-cart или category features?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Строка ranker обычно описывает candidate в контексте корзины и пользователя: item features, cart aggregate, user history, cross-features и business constraints.

Подробный разбор

Для cart ranker единица скоринга - candidate item в конкретном cart/user context. Item features описывают сам candidate: category, price, brand, availability, margin, embeddings, popularity. Cart features агрегируют текущую корзину: категории, сумма, последние добавленные товары, price range, embeddings и уже покрытые needs.

User features добавляют персонализацию: история категорий, брендов, средний чек, price sensitivity, регион, размеры, recent views. Самые сильные признаки часто cross-level: candidate-category compatibility with cart, candidate price vs cart price, user affinity to candidate category и item already bought recently.

Модель может быть MLP, GBDT или two-stage ranker, но train/serving parity важнее типа модели. Все признаки должны быть доступны на момент показа и иметь latency/freshness budget.

14Кейс12 мин

Production-архитектура рекомендаций в корзине

После baseline и ranker нужно объяснить production: где считаются кандидаты, где хранятся фичи, как часто пересчитывать рекомендации при изменении корзины?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Offline считаем item-item neighbors, item/user/category features и обучаем ranker. Online при изменении корзины достаем candidates, обогащаем cached features, скорим ranker и возвращаем top-K с throttling/cache.

Подробный разбор

Архитектура обычно двухконтурная. Offline: ETL собирает события, заказы, каталог и availability; считает item-item candidates, popular lists, user/item/category features; обучает ranker и публикует артефакты.

Online: cart service вызывает recommendation service при значимом изменении корзины. Сервис берет товары корзины, достает candidates из low-latency storage, фильтрует unavailable/already-in-cart, обогащает признаками из feature store/cache, скорит ranker и возвращает top-K.

Нужны latency budget, throttling и cache: не пересчитывать каждую секунду, а пересчитывать на add/remove item, смену магазина/адреса или через короткий TTL. Мониторинг: latency, empty response rate, fallback share, CTR, conversion, revenue, drift фичей и freshness каталога.

Типичные ошибки

  • Считать тяжелые co-occurrence или ranker features синхронно на запросе.
  • Не обсудить latency и cache.
  • Забыть про availability и freshness каталога.

Как сказать на собеседовании

  • Раздели offline и online контуры.
  • Назови триггеры пересчета: add/remove, context change, TTL.
15Вопрос10 мин

Serving с учетом текущего состояния корзины

Корзина меняется в текущей сессии. Как online serving должен учитывать add/remove item, cache invalidation и fallback?

Ответьте без подсказки

Сначала проговорите ответ вслух или тезисами.

Запишите черновик

Формулы, план решения, риски и примеры.

Сравните с разбором

Откройте разбор только после своей попытки.

Показать разбор

Короткий ответ

Recommendation service пересчитывает candidates на значимые изменения корзины, использует short TTL/cache, валидирует актуальный cart state и имеет degraded fallback.

Подробный разбор

Cart state является частью запроса, поэтому рекомендации должны меняться при add/remove item, смене адреса/магазина, промо или availability. При каждом событии не обязательно запускать тяжелую модель с нуля: item candidates и features можно хранить offline, а online слой быстро агрегирует по текущей корзине и rerank-ит shortlist.

Cache должен учитывать cart signature: sorted item ids, quantities, store/region, user segment и experiment arm. TTL короткий, а перед ответом применяются фильтры already-in-cart и availability. Если сервис не успел ответить, включается fallback: category popular, curated complements или скрытие блока.

Мониторинг: p95/p99 latency, stale response rate, cache hit, empty response, fallback share, invalid recommendations и mismatch между cart state на запросе и в ответе.