Собесов

Красный Яр / 585: прирост средней конверсии (LFL по магазинам СПб)

PythonExcel и pandasЛёгкаяJunior

Условие

Рассчитайте прирост средней конверсии на 1 магазин в Санкт-Петербурге из «входящих» в «покупатели». В анализе должны участвовать только сопоставимые магазины (LFL) — те, что работали в обоих периодах.

Период 1 vs Период 2.

Решение

Подход

  1. Конверсия магазина = Покупатели / Входящие.
  2. LFL: фильтр магазинов, у которых в обоих периодах Входящие > 0 (либо просто есть данные).
  3. Отдельно по СПб (Город='Санкт-Петербург').
  4. Прирост = avg_conv_2 − avg_conv_1 (или avg_conv_2 / avg_conv_1 − 1 в %).

Реализация

import pandas as pd
 
df = pd.read_excel('585.xlsx', sheet_name='Задание1')
df = df[df.Город == 'Санкт-Петербург'].copy()
 
# Конверсия по магазину × период
df['conv'] = df['Покупатели,чел.'] / df['Входящие,чел']
df = df.replace([float('inf'), -float('inf')], pd.NA).dropna(subset=['conv'])
 
# LFL: магазины, присутствующие в обоих периодах
lfl_shops = df.groupby('Кодмагазина').Период.nunique()
lfl_shops = lfl_shops[lfl_shops == 2].index
lfl = df[df.Кодмагазина.isin(lfl_shops)]
 
# Средняя конверсия по периодам
avg = lfl.groupby('Период').conv.mean()
print(avg)
print(f"Прирост (абс., п.п.): {(avg.loc[2] - avg.loc[1]) * 100:.2f}")
print(f"Прирост (отн., %):    {(avg.loc[2] / avg.loc[1] - 1) * 100:.2f}")

Excel-формула

  • Доп. колонка Конверсия = Покупатели / Входящие.
  • Сводная по магазину × период.
  • Помечаем LFL: магазины, где в обоих периодах есть значения (COUNTA = 2).
  • На отдельной строке — AVERAGEIFS(Конверсия, Период, X, LFL_flag, "Y", Город, "Санкт-Петербург").

Подводные камни

  1. Деление на ноль: если Входящие = 0 (магазин закрыт), конверсия = ∞ или ошибка. Фильтровать.
  2. LFL ≠ «все», нельзя считать общий avg по всем строкам (будет учитываться открывшийся магазин с малым числом дней).
  3. Средняя конверсия по магазинам ≠ конверсия суммы. AVG(Покуп/Вход) ≠ SUM(Покуп)/SUM(Вход). Уточнить, какая нужна заказчику.
  4. Один и тот же магазин может появляться в нескольких строках одного периода — сначала агрегировать до уровня магазина.
  5. Если данные содержат запятые в числах ('3,560' строкой) — to_numeric с replace(',','.').

Эталонный ответ

Фильтр СПб → конверсия по магазину → LFL = магазины в обоих периодах → среднее по магазинам в каждом периоде → прирост 2-го периода относительно 1-го.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти