**Контекст.** Продуктовая команда 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. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть 530+ Python задачи с проверкой через Pyodide, конспекты Python и pandas, AI мок-собеседование с разбором ваших ответов.
← Все задания