Как определить важность заказа на продукт
Что проверяют
Это открытый вопрос на проектирование, и первое, что оценивают: начнёте ли вы с уточнений или сразу с формулы. Интервьюеру важно, как вы превращаете расплывчатую «важность» в проверяемое правило и где это правило живёт в коде. Следом обычно спрашивают, кто и как будет менять веса.
Как отвечать
Сначала задайте вопросы: важность нужна для очереди сборки, для поддержки или для распределения дефицитного товара? Что дороже бизнесу: сорванный срок или потерянный крупный клиент? От ответов зависит модель.
Рабочий каркас:
- жёсткие правила: то, что не обсуждается, идёт первым. Нарушается SLA, заказ по договору с неустойкой, ручная пометка менеджера. Это класс приоритета от P0 до P3;
- балл внутри класса: взвешенная сумма факторов вроде срочности, маржи, статуса клиента. Каждый фактор сначала нормируется в диапазон от 0 до 1, иначе прибыль в рублях задавит всё остальное;
- сортировка: в Python удобно отдать кортеж
(priority_class, -score, created_at)как ключ дляsorted()или элементheapq, в базе то же выражается черезORDER BY; - время: срочность меняется с каждым часом, поэтому балл считается на момент запроса с переданным
now, а не сохраняется навсегда при создании заказа; - объяснимость: рядом с баллом храните разбивку по факторам. Когда менеджер спросит, почему его заказ десятый, ответ должен найтись в данных.
Веса выносятся из кода в конфиг или таблицу с версией, а функция оценки остаётся чистой: score(order, now, weights) -> float. Её легко покрыть параметризованными тестами на pytest, включая граничные случаи. Модель машинного обучения уместна позже, когда накопится история и появится целевая метрика, например доля заказов с нарушенным сроком.
Где спотыкаются
Складывают величины разного масштаба без нормировки: количество штук, баллы от 1 до 10 и деньги. Итог определяет самый крупный по модулю фактор, а веса теряют смысл.
Прячут веса в коде магическими числами, и любое изменение приоритетов требует релиза.
Не договариваются, как проверить результат. Без метрики вроде доли сорванных сроков по ключевым клиентам нельзя сказать, стала ли приоритизация лучше.