Найти пользователей с аномальным ростом заказов неделя к неделе

medium Python Продукт

Условие задания

**Контекст.** Продуктовая команда e-commerce хочет ловить пользователей, у которых число заказов резко подскочило неделя к неделе — это может быть как признак роста лояльности (кандидаты в промо), так и сигнал фрода (перепродажа, накрутка бонусов). Нужен скрипт, который выделяет таких пользователей для ручного ревью.

**Что дано.** DataFrame `orders`:

| колонка | тип | описание |
|---|---|---|
| `order_id` | int | id заказа |
| `user_id` | int | id пользователя |
| `order_ts` | datetime | момент оформления заказа |
| `amount` | float | сумма заказа, руб |

Заказы охватывают несколько недель, у одного пользователя их может быть много.

**Задание.**
1. Для каждого пользователя посчитайте число заказов по ISO-неделям (неделя начинается с понедельника).
2. Для каждой пары (пользователь, неделя) посчитайте прирост заказов относительно его же предыдущей недели: `growth = orders_this_week - orders_prev_week`.
3. Верните пользователей, у которых хотя бы в одной неделе прирост `>= 5` заказов И относительный рост `>= 2x` (число заказов минимум удвоилось). Пользователи, у которых на прошлой неделе было 0 заказов, из относительного критерия исключаются (деление на ноль).
4. Формат ответа: DataFrame с колонками `user_id`, `week`, `orders_prev_week`, `orders_this_week`, `growth`, отсортированный по `growth` по убыванию.

**Пример входа (фрагмент):**
[см. код в задании]

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

orders = pd.DataFrame({
    'order_id': range(1, 13),
    'user_id': [10]*8 + [20]*4,
    'order_ts': pd.to_datetime([
        '2024-06-03', '2024-06-04',                     # нед.1: 2
        '2024-06-10','2024-06-11','2024-06-12',
        '2024-06-13','2024-06-14','2024-06-15',        # нед.2: 6 -> growth 4, не 5
        '2024-06-03','2024-06-10','2024-06-11','2024-06-12',
    ]),
    'amount': [100]*12,
})

Темы

pandas pivot резэмплинг week-over-week аномалии

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Найти пользователей с аномальным ростом заказов неделя к неделе"?

Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «Python» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: pandas, pivot, резэмплинг, week-over-week, аномалии.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «Python»?

На zasqlpython.ru есть 530+ Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.

← Все задания