Sample Ratio Mismatch (SRM) тест

Medium Python ab-testing general

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

Реализуй функцию `srm_check(n_a, n_b, alpha=0.001)` — проверка на **нарушение баланса групп** в A/B-эксперименте. **Зачем:** если выкатили split 50/50 но получили 49500 / 50500 — это может быть багом в randomizer. SRM-тест — обязательный **pre-flight** check **до** интерпретации метрик эксперимента. **Что вернуть:** dict `{"p_value": <round до 6 знаков>, "srm_detected": <bool>}`, где `srm_detected = True`, если `p_value < alpha`. **Ограничения:** - `scipy` запрещён — только `math` (`sqrt`, `erf`) - Используй **хи-квадрат тест с одной степенью свободы**, ожидаемое split = 50/50 **Пример:** `srm_check(49500, 50500)` → разница 1000 на 100k наблюдений, нужно определить — баг или случайность.

Темы

statistics A/B SRM chi-square

Подсказки

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

Задача «Sample Ratio Mismatch (SRM) тест» учит решать задачи на Python так, как это спрашивают на собеседовании аналитика данных. Такие задачи дают на собеседованиях в general и других IT-компаниях. Уровень средний — типичная боевая задача на уверенный Python.

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

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

На собеседовании по Python для аналитика ценят чистый читаемый код, корректную обработку крайних случаев (пустой ввод, дубли, None) и умение вслух оценить сложность по времени и памяти. Часто просят не просто решить, а разобрать альтернативные подходы и показать, где наивное решение сломается на большом объёме данных.

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

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