RFM-сегментация: разделить юзеров на сегменты по recency и monetary

Hard pandas pandas (groupby) Wildberries

Условие задачи

Дано: DataFrame `orders` с user_id, order_date, amount — 15 заказов от 5 юзеров. "Сегодня" = 2024-04-01. Постройте RFM-сегментацию пользователей. Для каждого user_id посчитайте: 1. recency_days -- дни с последнего заказа 2. frequency -- количество заказов 3. monetary -- суммарная выручка 4. segment по правилу: - "champion" если recency_days ≤ 7 И monetary ≥ 5000 - "loyal" если frequency ≥ 3 (и не champion) - "at_risk" если recency_days > 30 - "regular" -- остальные Результат отсортирован по monetary по убыванию. Сохраните в `result` (колонки: user_id, recency_days, frequency, monetary, segment).

Темы

rfm groupby np.select segmentation

Подсказки

Что проверяет эта задача

Задача «RFM-сегментация: разделить юзеров на сегменты по recency и monetary» учит обрабатывать табличные данные в pandas как аналитик. Такие задачи дают на собеседованиях в Wildberries и других IT-компаниях. Уровень сложный — проверяет глубину и умение собрать решение из нескольких приёмов.

Как подступиться к решению

Сначала разбери условие и формат входа-выхода, прикинь крайние случаи (пустой ввод, дубли, NaN). Затем выбери структуру данных и собери решение по шагам — начни с простого рабочего варианта, потом оптимизируй сложность. Код пишешь и запускаешь прямо в браузере: Python-тренажёр исполняет его через Pyodide (pandas, numpy, scipy) и проверяет результат автоматически.

В pandas один и тот же результат часто достаётся разными путями — через groupby, pivot_table, merge или векторные операции над колонками. Важно выбрать читаемый и быстрый: встроенные векторные методы почти всегда обгоняют циклы и построчный apply. На собеседовании ценят не только правильный ответ, но и то, как ты объясняешь выбор подхода, обрабатываешь пропуски (NaN) и оцениваешь, что будет на больших данных.

Разобраться в pandas системно — бесплатный курс «Pandas с нуля» и гайды по pandas.

Открыть задачу в тренажёре → ← Все Python-задачи