Перейти к содержанию
Содержание

Среднее время сборки: добавьте бутстрэп-интервал к отчёту

Одно среднее время сборки не показывает, насколько устойчив вывод по выбранным заказам. Если вы используете выборку для оценки типичного процесса, рядом со средним можно рассчитать доверительный интервал. Бутстрэп позволяет оценить неопределённость статистики повторным пересэмплированием исходных наблюдений.

Сначала определите, что измеряете

Нужен файл с одной строкой на завершённую сборку и колонкой minutes: длительность от согласованного начала до согласованного конца, в минутах. Сохраните идентификатор заказа и исходные отметки времени отдельно для проверки. Не смешивайте время ожидания задания и время работы, если отчёт обещает именно скорость сборки.

Среднее время сборки: добавьте бутстрэп-интервал к отчёту

Проверьте повторы, пропуски, отрицательные значения и единицы измерения. Ошибку отметки времени исправляйте по источнику, а долгую, но настоящую сборку не удаляйте только ради красивого среднего. Не включайте ещё не законченные операции с искусственно проставленным нулём. Если открытых операций много, отчёт по завершённым может давать смещённую картину.

Обычный бутстрэп строк предполагает подходящие независимые наблюдения. Заказы одного работника, смены или общей волны могут зависеть друг от друга. При такой структуре не выдавайте результат простого кода ниже за надёжную оценку всего склада: нужен дизайн выборки и, например, пересэмплирование групп, согласованное с аналитиком.

Рассчитайте интервал на своей выборке

В SciPy bootstrap доступны методы BCa, basic и percentile. Ниже выбран BCa; n_resamples задаёт число повторных выборок, а rng фиксирует генератор для воспроизводимости. Нужны Python, NumPy и версия SciPy с аргументом rng.

import csv
import numpy as np
from scipy.stats import bootstrap

with open("assembly.csv", encoding="utf-8-sig", newline="") as f:
    x = np.array([float(r["minutes"]) for r in csv.DictReader(f)])

if x.size < 2 or not np.isfinite(x).all() or (x < 0).any():
    raise ValueError("Проверьте размер выборки и длительности")
if np.unique(x).size < 2:
    raise ValueError("Одинаковые значения: проверьте исходные данные")

result = bootstrap(
    (x,), np.mean, method="BCa", confidence_level=0.95,
    n_resamples=9999, batch=100,
    rng=np.random.default_rng(2026)
)
ci = result.confidence_interval
if not np.isfinite([ci.low, ci.high]).all():
    raise ValueError("Интервал не определён: проверьте выборку")
print("n:", x.size, "mean:", x.mean())
print("95% CI:", ci.low, ci.high)

Значение 9999 задаёт вычислительную процедуру, а не необходимое число заказов. Проверка двух строк в коде также не означает, что двух заказов достаточно для рабочего решения. Выборка должна отражать процесс, о котором делается вывод. При вырожденных данных SciPy может выдать предупреждение и неопределённые границы; сохраните предупреждение и разберите данные, вместо подстановки удобного числа.

Правильно подпишите результат

В отчёте сохраните период, правила включения заказов, размер выборки, среднее, границы, метод и версии библиотек. Укажите, какие смены и виды заказов представлены. Если данные включают все сборки за период, их среднее уже описывает этот период; интервал требует отдельного смысла, например оценки процесса за пределами конкретного набора.

95%-й доверительный интервал относится к процедуре оценки среднего. Он не означает, что 95% отдельных заказов будут собраны внутри границ. Для контроля долгих сборок нужен другой показатель, например квантиль длительности, а для обещания срока конкретному заказу такой интервал использовать нельзя.

Если интервал слишком широк для решения о процессе, сначала выясните, что делает наблюдения неоднородными. Разделите существенно разные операции и проверьте качество исходников. Увеличение числа пересэмплирований не создаёт новые реальные наблюдения и не исправляет плохую выборку.

Теги

Комментарии 0

0 / 1500

Популярные статьи