CUPED -- уменьшение дисперсии через ковариату

Medium NumPy статистика Яндекс

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

Дано: массивы `y_control`, `y_treatment` -- метрика (выручка) после теста, и `x_control`, `x_treatment` -- та же метрика ДО теста (ковариата). Примените CUPED-коррекцию для уменьшения дисперсии и сравните с обычным t-тестом. Шаги: - theta = Cov(X, Y) / Var(X) по всем данным - y_cuped = y - theta × (x - mean(x)) - t-тест по скорректированным данным Сохраните dict {"naive": {"p_value":...}, "cuped": {"p_value":..., "theta":..., "var_reduction":...}} (округлённые до 4 знаков) в `result`.

Темы

cuped variance_reduction ab_test statistics

Подсказки

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

Задача «CUPED -- уменьшение дисперсии через ковариату» учит векторно считать на numpy без медленных циклов. Такие задачи дают на собеседованиях в Яндекс и других IT-компаниях. Уровень средний — типичная боевая задача на уверенный Python.

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

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

В numpy ключ к скорости — векторизация и broadcasting вместо циклов Python. Понимание dtype, формы массива (shape) и того, какие операции возвращают копию, а какие view, отличает джуна от мидла. На собеседовании просят не просто посчитать, а объяснить, почему векторный код быстрее и где он экономит память.

Прокачать Python для аналитики — бесплатный курс «Pandas с нуля» и Python-тренажёр.

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