BH-коррекция (FDR) для 20 p-values

Hard NumPy статистика Ozon

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

Дано: массив `p_values` -- 20 p-values от A/B тестов по 20 метрикам. Реализуйте процедуру Benjamini-Hochberg (BH) вручную для контроля FDR и сравните количество значимых метрик с поправкой Бонферрони. Алгоритм BH: 1. Отсортировать p-values по возрастанию 2. Для каждого i: threshold_i = (i / m) × alpha 3. Найти максимальный i, где p_(i) ≤ threshold_i 4. Все p-values с рангом ≤ i считаются значимыми Сохраните dict {"bh_significant": [индексы], "bonferroni_significant": [индексы], "bh_adjusted": [...], "bonferroni_adjusted": [...], "bh_count": N, "bonferroni_count": N} (округлённые до 4 знаков) в `result`.

Темы

benjamini_hochberg fdr multiple_testing statistics

Подсказки

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

Задача «BH-коррекция (FDR) для 20 p-values» учит векторно считать на numpy без медленных циклов. Такие задачи дают на собеседованиях в Ozon и других IT-компаниях. Уровень сложный — проверяет глубину и умение собрать решение из нескольких приёмов.

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

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

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

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

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