X5X5 Groupсобеседованиеаналитика данныхretailПятёрочкагеоаналитикакарьера

Вопросы собеса в X5 на аналитика 2026: 25+ реальных + разбор

2026-06-04 21 мин

X5 — крупнейший розничный ритейлер РФ (Пятёрочка / Перекрёсток / Чижик). Собес туда фокусируется на retail-специфике: basket analysis, корзина, geo-аналитика, форматы магазинов. В этом гайде разберу 25+ реальных вопросов с 5 раундов собеса аналитика X5 (X5 Tech / Pyaterochka / Perekrestok / X5 ID) — с разбором сильного и слабого ответа.

Главное про X5
X5 — **offline + online retail**. Анализируешь баскет, geo-сетку магазинов, форматы. Stack: ClickHouse + PostgreSQL + Greenplum + Python + Yandex DataLens.

Грейды аналитика в X5 (2026)

ГрейдCompensation/мес РФОпыт
Junior130-200K ₽0-1 год
Middle200-310K ₽1-3 года
Senior310-470K ₽3-6 лет
Lead470-620K+ ₽6+ лет

5 раундов собеса X5

РаундЧтоДлительность
1. HRМотивация, retail опыт30 мин
2. SQL live2-3 задачи + retail cases60 мин
3. Python + статистикаpandas + cohort + A/B60 мин
4. Retail-кейсBasket / format / geo60 мин
5. ФиналBehavioral + business45 мин

6 SQL-вопросов с собеса X5

Топ-10 категорий по выручке в Пятёрочке за месяц.

✅ Сильный ответ:

\\\sql

SELECT

category,

sum(amount) AS revenue,

count(distinct check_id) AS checks,

sum(amount) / count(distinct check_id) AS avg_check

FROM transactions

WHERE store_format = 'Pyaterochka'

AND tx_date >= toStartOfMonth(today())

GROUP BY category

ORDER BY revenue DESC

LIMIT 10;

\\\

Senior follow-up: «Эта query на 5B транзакций в месяц медленная — нужен MV \daily_revenue_by_category_format\ с AggregatingMergeTree.»

Basket analysis: сколько checks с >5 items vs <3 items.

✅ Сильный ответ:

\\\sql

WITH basket_sizes AS (

SELECT check_id, count() AS items

FROM transactions

WHERE tx_date >= today() - 30

GROUP BY check_id

)

SELECT

CASE

WHEN items <= 2 THEN '1-2 items (snack)'

WHEN items <= 5 THEN '3-5 items (small)'

WHEN items <= 10 THEN '6-10 items (medium)'

ELSE '11+ items (big)'

END AS bucket,

count() AS checks,

count() * 100.0 / sum(count()) OVER () AS pct

FROM basket_sizes

GROUP BY bucket;

\\\

Cross-sell: какие пары products покупаются вместе.

✅ Сильный ответ:

\\\sql

SELECT

a.product_id AS product_a,

b.product_id AS product_b,

count() AS co_occurrence

FROM transactions a

JOIN transactions b

ON a.check_id = b.check_id

AND a.product_id < b.product_id

WHERE a.tx_date >= today() - 7

GROUP BY product_a, product_b

HAVING co_occurrence >= 100

ORDER BY co_occurrence DESC

LIMIT 50;

\\\

Senior follow-up: «Это market basket analysis. Для actionable insights нужны support / confidence / lift.»

Geo-aналитика: revenue per store по регионам.

✅ Сильный ответ:

\\\sql

SELECT

s.region,

s.format,

count(distinct s.store_id) AS stores,

sum(t.amount) AS revenue,

sum(t.amount) / count(distinct s.store_id) AS revenue_per_store

FROM stores s

JOIN transactions t ON s.store_id = t.store_id

WHERE t.tx_date >= today() - 30

GROUP BY s.region, s.format

ORDER BY revenue_per_store DESC;

\\\

Promo effectiveness: revenue lift во время промо.

✅ Сильный ответ:

\\\sql

WITH promo_periods AS (

SELECT product_id, promo_start, promo_end

FROM promos

WHERE promo_start >= '2026-01-01'

),

sales_during_promo AS (

SELECT t.product_id, sum(t.amount) AS promo_revenue

FROM transactions t

JOIN promo_periods p

ON t.product_id = p.product_id

AND t.tx_date BETWEEN p.promo_start AND p.promo_end

GROUP BY t.product_id

),

sales_baseline AS (

SELECT t.product_id, avg(t.amount) AS baseline_daily_revenue

FROM transactions t

WHERE t.tx_date >= '2025-12-01' AND t.tx_date < '2026-01-01'

GROUP BY t.product_id

)

SELECT s.product_id,

p.promo_revenue,

b.baseline_daily_revenue,

(p.promo_revenue - b.baseline_daily_revenue * dateDiff('day', pp.promo_start, pp.promo_end)) AS revenue_lift

FROM sales_during_promo s

JOIN promo_periods pp ON s.product_id = pp.product_id

JOIN sales_baseline b ON s.product_id = b.product_id;

\\\

Customer segmentation by recency-frequency.

✅ Сильный ответ:

\\\sql

WITH user_rf AS (

SELECT user_id,

dateDiff('day', max(tx_date), today()) AS recency,

count(distinct check_id) AS frequency

FROM transactions

WHERE tx_date >= today() - 90

GROUP BY user_id

)

SELECT

CASE

WHEN recency <= 7 AND frequency >= 10 THEN 'Champion'

WHEN recency <= 14 AND frequency >= 5 THEN 'Loyal'

WHEN recency <= 30 THEN 'Active'

WHEN recency <= 60 THEN 'At-risk'

ELSE 'Dormant'

END AS segment,

count() AS users

FROM user_rf

GROUP BY segment;

\\\

→ RFM сегментация в SQL

5 Python/A-B вопросов

Pandas: average basket size по часам дня.

✅ Сильный ответ:

\\\python

import pandas as pd

df['hour'] = df['tx_ts'].dt.hour

basket_by_hour = (

df.groupby(['check_id', 'hour'])['amount'].sum()

.groupby('hour').mean()

)

\\\

Store format A/B test design.

✅ Сильный ответ:

«Cluster A/B (рандомизация на store level):

Key metrics:

Guardrails:

Promo cannibalization measurement.

✅ Сильный ответ:

«Каннибализация в retail:

Promo на бренд A может cannibalize бренд B в той же категории.

Measurement:

Если total category revenue не вырос → 100% cannibalization (просто перераспределение).

Решение: measure incremental volume не by brand but by category total. Categorical lift = net win.

В X5 cannibalization мониторится weekly для оценки promo ROI.»

Customer lifetime modeling.

✅ Сильный ответ:

«Approaches для retail:

Для X5 specifically:

LTV used для:

Sample size для basket size A/B.

✅ Сильный ответ:

\\\python

from scipy import stats

import math

def sample_size_continuous(baseline_mean, baseline_std, mde_pct, alpha=0.05, power=0.80):

mde_abs = baseline_mean * mde_pct

z_alpha = stats.norm.ppf(1 - alpha/2)

z_beta = stats.norm.ppf(power)

n = ((z_alpha + z_beta) ** 2 * 2 * baseline_std 2) / (mde_abs 2)

return math.ceil(n)

# Basket size: baseline = 500₽, std = 300₽, MDE = 2%

n = sample_size_continuous(500, 300, 0.02)

print(f"Sample size: {n}") # ~141,000 per group

\\\

5 retail-кейсов

Открытие нового магазина — какие данные нужны?

✅ Сильный ответ:

«Data для location decision:

Demographic (catchment area):

Competition:

Foot traffic:

Real estate:

Internal:

Output: financial model — payback period, NPV.»

Цены: как сравнить с конкурентами?

✅ Сильный ответ:

«Price tracking system:

Analysis:

X5 strategy:

Format expansion: Перекрёсток vs Чижик где открывать?

✅ Сильный ответ:

«Decision framework:

Perekrestok (premium):

Чижик (discount):

Data inputs:

Output: rank candidate locations by NPV per format.»

Customer churn в loyalty program.

✅ Сильный ответ:

«Definition: active = 1+ purchase в 90d. Churn = no purchase 90+ days.

Drivers analysis:

Action:

X5 SmartTeam (loyalty data team) has dedicated churn prediction pipeline.»

Pricing elasticity для category management.

✅ Сильный ответ:

«Elasticity = % change in volume / % change in price.

Estimation:

X5 specific:

Action:

2 behavioral (раунд 5)

Расскажи про analytical insight который привёл к business change.

✅ Сильный ответ (STAR):

«Ситуация: анализ basket показал что customers покупающие fresh produce имеют 3× LTV vs customers без fresh produce.

Задача: убедить product team расширить fresh секцию.

Действие:

- Expand fresh produce SKU range

- Better location в магазине (front of store)

- Quality investment (faster turnover, daily restocking)

Результат: Fresh produce SKU expansion approved. After 6 months — overall LTV +12%. Fresh shelf real-estate redesigned.»

Конфликт с category manager.

✅ Сильный ответ:

«Ситуация: Category manager хотел drop SKU с low margin (-5% margin), но data showed что this SKU draws customers и они покупают other items basket worth 800₽.

Действие:

Результат: SKU kept, position optimized. Overall category margin +1% (small win) due to no customer loss.»

Red flags

Как готовиться к X5

Месяц 1: retail metrics + ClickHouse

Месяц 2: geo / format / pricing

Месяц 3: кейсы + behavioral

FAQ

X5 vs Магнит?

X5 больше формат-разнообразие (Pyaterochka + Perekrestok + Чижик), Магнит более homogeneous. X5 более tech-progressive.

Можно ли пройти без retail опыта?

Junior — да. Middle+ — желательно retail или CPG (consumer packaged goods) опыт.

Стек технологий?

ClickHouse + PostgreSQL + Greenplum + Python + Yandex DataLens + R (statistics).

Что дальше

Сравнить Free и Pro → (1999 ₽/мес)

Источники

Тренируй SQL/Python на 521+532 задачах
Тренажёр с авто-проверкой + кейсы retail. AI мок-собес. Первые 5 задач бесплатно.
Открыть тренажёр →