Содержание
Ошибки сборки в двух группах: проверьте различие тестом Фишера
В отчёте две группы проверенных заказов имеют разную долю ошибок сборки. Прежде чем объявлять одну группу более качественной, сохраните исходные количества и проверьте, насколько убедительно наблюдаемое различие. Для двух независимых групп с бинарным исходом можно использовать точный тест Фишера.
Сначала определите единицу проверки
Выберите один исход: заказ с хотя бы одной ошибкой или заказ без ошибок. Один заказ должен попасть только в одну группу и ровно в одну ячейку таблицы. Не подставляйте количество дефектных строк вместо количества заказов с ошибкой.
Как отделить эти показатели, разобрано в материале о точности сборки по строкам и заказам.
Запишите критерий ошибки, период, способ отбора и размер каждой группы. Проверка случайно отобранных заказов и разбор только жалоб покупателей дают разные базы. Если группы собирали по разным правилам, сначала исправьте сравнение. Повторная проверка тех же заказов не образует две независимые группы.
Соберите таблицу из четырёх чисел
| Группа | Заказ с ошибкой | Заказ без ошибки |
|---|---|---|
| A | a | b |
| B | c | d |
Здесь буквы обозначают ваши фактические количества, а не учебный результат. Для каждой строки проверьте: сумма двух ячеек равна числу проверенных заказов. Отсутствующий результат проверки нельзя автоматически считать отсутствием ошибки.
Сохраните доли a / (a + b) и c / (c + d), а также их разность в процентных пунктах. Без размеров групп одинаковые проценты могут создавать ложное впечатление одинаковой определённости.
Выполните один заранее выбранный тест
Ниже программа просит ввести четыре целых неотрицательных количества. Нужен Python с установленной SciPy. Направление проверки и порог значимости согласуйте до просмотра результата; код использует двустороннюю проверку.
from scipy.stats import fisher_exact
a, b, c, d = map(int, input("a b c d: ").split())
if min(a, b, c, d) < 0 or a + b == 0 or c + d == 0:
raise ValueError("Проверьте количества и состав групп")
if a + c == 0 or b + d == 0:
raise ValueError("Один исход отсутствует во всей таблице")
result = fisher_exact([[a, b], [c, d]], alternative="two-sided")
print("Доля A:", a / (a + b))
print("Доля B:", c / (c + d))
print("Разность, п.п.:", 100 * (a / (a + b) - c / (c + d)))
print("Отношение шансов:", result.statistic)
print("p-value:", result.pvalue)
Документация SciPy описывает для таблицы 2×2 проверку нулевой гипотезы об отношении шансов, равном единице, с фиксированными суммами строк и столбцов. В стандартном вызове statistic является оценкой отношения шансов. Это не отношение долей ошибок. При нулевой ячейке оценка может оказаться нулевой или бесконечной; не заменяйте её произвольным удобным числом.
Прочитайте результат в пределах задачи
Малое p-value относительно заранее выбранного порога указывает на несовместимость данных с нулевой гипотезой в рамках модели теста. Оно не показывает вероятность того, что одна команда работает хуже, и не измеряет размер потерь. Большое p-value не доказывает равенство качества: данных может быть недостаточно.
Различие между сменами может сопровождаться разным ассортиментом, сложностью заказов и способом контроля. Тест не устраняет эти различия и не доказывает причинный эффект нового процесса. Не перебирайте десятки разбиений, публикуя только понравившееся p-value: для серии сравнений нужен отдельный план анализа.
Рабочий результат состоит из сохранённой выборки, таблицы, долей, разности, параметров теста и ограничения вывода. Если различие имеет практический смысл, разберите конкретные ошибки и условия групп. Если нужен вывод об эквивалентности качества, сформулируйте допустимую разницу и отдельный план проверки: отсутствие значимости эту задачу не решает.
Комментарии 0