TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #301 1.89K
📊 Теперь через 0.95-квантиль! Топ-5% пользователей с наибольшим количеством заказов

Я понимаю - пятница, но я обещала дать расчет как можно решить задачку с собеса другим способом. Вдруг в выходные захочется потренироваться? 😜
Мы брали топ 5% пользователей по порядковому номеру (row_number).

Этот способ особенно полезен, когда важно выделить пользователей, которые попадают в верхнюю часть распределения по значению, а не просто занимают первые 5% позиций в сортировке.

📌 Что такое квантиль?
Квантиль — это значение, “разрезающее” распределение данных на доли.
95-й квантиль (0.95) — это число, ниже которого лежит 95% всех значений.
Соответственно, всё, что равно или выше этого порога, — это верхние 5% распределения.
👉 Это и есть математическое определение топ 5% по значению, а не по рангу.

📘 Пример на наших цифрах. Методика расчёта квантиля, чтобы понимать саму теорию
У нас есть количество заказов по пользователям cnt, всего 20 значений.
1️⃣Сортируем 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4(тут лень вписывать имена), 6(Алиса), 8(Саша), 10(Ева)
95-й квантиль = 10
Значит, в топ-5% попадут пользователи с количеством заказов ≥ 9.

2️⃣ Находим позицию квантиля
Используем формулу: k=p×n, где p — нужный квантиль (для 95% это 0.95), n — размер массива.
𝑘=0.95×20=19

3️⃣ Берём k-ый, то есть 19-й элемент = 8. 📌 Значит, 95-й квантиль = 8
Это значит - 95% пользователей сделали ≤ 8 заказов.
А значит топ 5% — это те, у кого 👉 cnt > 8 Это как раз одна Ева с кол-вом заказов cnt = 10

🧩 Ну и код, не в ручную же считать, когда у нас sql есть. Используем approx_quantile
query = """
with user_orders as (
select u.user_id, u.name, count(o.order_id) as cnt
from users u
left join orders o on u.user_id = o.user_id
group by u.user_id, u.name
),
threshold as (
select approx_quantile(cnt, 0.95) as p95
from user_orders
)
select user_id, name, cnt
from user_orders uo
cross join threshold t
where uo.cnt > t.p95
"""

result = duckdb.query(query).to_df()

🎯 Итог
Существуют разные определения квантилей (в numpy, R, SQL, Spark, Excel — свои методы).
Но в задачах на собеседования чаще всего используют именно эту базовую методику
  • 🔥 6
  • 👍 5
  • ❤‍🔥 1
  • ❤ 1
  • 🦄 1
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →