Теория множеств и дедупликация: вопросы для собеседования (часть 3)
Объединение, пересечение, разность множеств, DISTINCT, дедупликация — базовые операции при работе с данными. На собеседовании просят найти пользователей, которые есть в одной таблице, но отсутствуют в другой, или объяснить, почему UNION и UNION ALL дают разные результаты. Ошибки в дедупликации ведут к двойному подсчёту метрик.
Вопросы 11–15 из 20
11В отчёте: множество A = 400 тыс уникальных пользователей, множество B = 300 тыс уникальных пользователей. При этом заявлено, что объединение равно 900 тыс уникальных пользователей. Какая проверка адекватности по границам самая верная?
AЭто невозможно: по границам размер объединения должен лежать между нижней границей 400 тыс и верхней границей 700 тыс уникальных пользователей.
BЭто возможно, если пересечение между двумя множествами очень большое и при этом доля общих пользователей превышает половину каждого множества.
CЭто возможно, если перед расчётом выполнить дедупликацию по `event_id` и пересобрать оба множества с учётом обновлённых правил агрегации.
DЭто возможно, если пересечение равно нулю и добавить ещё один канал привлечения, чтобы расширить итоговое число уникальных пользователей.
Ответ: Для двух множеств размер объединения имеет очевидные границы: не меньше максимума и не больше суммы.
Нижняя граница объединения равна максимуму из размеров множеств, потому что объединение содержит как минимум самое большое из них. Верхняя граница равна сумме размеров множеств, и она достигается, когда пересечение пустое. Если отчёт нарушает эти границы, скорее всего перепутали единицы, ключ дедупликации или сложили метрики неправильно. Такая проверка адекватности быстро отсекает невозможные значения.
Подробный разбор → 12Маркетинг просит сегмент уникальных пользователей, которые являются покупателями продукта `A` и покупателями продукта `B` за месяц. Какая операция над множествами покупателей соответствует запросу?
AОбъединение множеств покупателей продукта `A` и продукта `B` за выбранный период наблюдения.
BПерекрытие покупателей продукта `A` и продукта `B` плюс объединение этих двух множеств целиком.
CПересечение множеств покупателей продукта `A` и продукта `B` за один и тот же месяц наблюдения.
DДедупликация записей по столбцу `order_id` без учёта `user_id` и без объединения по продукту.
Ответ: Сегмент `users`, совершивших оба действия, соответствует `intersection` двух `set`.
Объединение отвечает на вопрос, кто купил хотя бы один из продуктов, а пересечение — кто купил оба. В аналитике это типичный источник ошибок, когда «кросс-селл» считают как сумму или объединение. Правильная постановка через операции над множествами сразу делает задачу однозначной и помогает избежать неверной дедупликации.
Подробный разбор → 13У вас число уникальных пользователей в `web` равно 500 тыс, в `app` равно 400 тыс, а общее объединение по `user_id` равно 700 тыс. Каков размер пересечения между `web` и `app`?
A200 тыс по формуле `500 + 400 - 700`: дважды посчитанные пользователи в обоих источниках
B700 тыс по совпадению с объединением: оценка предполагает, что все пользователи `web` есть в `app`
C900 тыс по сумме `500 + 400`: оценка предполагает пустое пересечение между источниками
D100 тыс по разности `500 - 400`: оценка отождествляет пересечение с разницей размеров источников
Ответ: Для двух множеств размер пересечения восстанавливается из объединения: `|A ∩ B| = |A| + |B| - |A ∪ B|`.
Если известны размеры двух множеств и их объединение, то пересечение — это та часть, которую посчитали дважды при сложении. По формуле включений-исключений `|A ∩ B| = |A| + |B| - |A ∪ B|`, в нашем случае `500 + 400 - 700 = 200` тыс. Такие расчёты помогают объяснить, почему сумма уникальных пользователей по источникам не совпадает с общим числом уникальных пользователей. Это также полезная проверка здравого смысла на реалистичность доли пересечения.
Подробный разбор → 14Для рекламной кампании у вас есть таблицы `impressions` и `clicks` (обе — журналы событий). Маркетинг спрашивает, сколько уникальных пользователей и видели рекламу, и кликнули по ней. Что нужно посчитать?
AСложить число уникальных `user_id` в `impressions` и в `clicks` без вычитания общих
BВзять объединение множеств `user_id` из таблиц `impressions` и `clicks`
CПосчитать общее число строк в таблице `clicks` без дедупликации `user_id`
DВзять пересечение множеств уникальных `user_id` из `impressions` и `clicks`
Ответ: Число уникальных пользователей, сделавших оба действия, — это пересечение двух множеств `user_id` после дедупликации в каждом источнике.
Сначала определите два множества: `user_id` из `impressions` и `user_id` из `clicks`. Затем найдите их пересечение, потому что вам нужны те, кто принадлежит обоим множествам. Сумма или объединение ответят на другой вопрос и будут завышены из-за отсутствия правильной дедупликации. Считать число строк в `clicks` тоже неверно — один пользователь может кликнуть несколько раз, и счётчик завысит охват.
Подробный разбор → 15Вы хотите оценить общее число уникальных пользователей в объединении веб и приложения. В вебе ключ — `cookie_id`, в приложении — `user_id`, прямой связи между ними нет. Какое решение наиболее корректно с точки зрения дедупликации и ограничений данных?
AПросто сложить уникальных пользователей из веб и приложения по ключам `cookie_id` и `user_id`, считая, что пересечение можно игнорировать.
BСчитать пересечение нулевым, так как ключи `cookie_id` и `user_id` разные, и просто сложить аудитории без учёта возможных дубликатов.
CПризнать, что точная дедупликация невозможна без связи идентификаторов, и либо построить маппинг `cookie_id`→`user_id`, либо дать диапазон.
DСчитать пересечение равным 100 процентам, поскольку речь об одном продукте, и принять максимум аудиторий `web` и `app` за итоговое число.
Ответ: Без общего ключа идентификации точное объединение уникальных пользователей не получить — остаются маппинг или диапазон оценки.
Разные идентификаторы создают неопределённое пересечение: часть людей будет в обоих источниках, но вы не знаете, сколько именно. Корректная аналитика либо строит маппинг `cookie_id`→`user_id`, либо честно даёт диапазон. Нижняя граница объединения — это максимум из двух аудиторий, верхняя — их сумма. Простое сложение завышает оценку, а допущения «0%» или «100%» пересечения почти всегда неверны.
Подробный разбор →