Содержание
Коэффициент вариации продаж не совпал: проверьте делитель
В двух расчётах один SKU попал в разные группы стабильности, хотя исходные продажи одинаковые. До изменения порогов классификации сравните формулу стандартного отклонения. Расхождение может возникнуть из-за делителя, даже когда оба инструмента корректно выполняют свою настройку.
Зафиксируйте одну строку данных
Выберите товар с расхождением и сохраните продажи по равным периодам в исходном порядке. Укажите единицу, начало и конец окна, число периодов и правила отбора. Для диагностики нужны сами значения, а не только готовый процент.
Проверьте, что оба расчёта получили одинаковый набор. Отсутствующая строка периода и реальный ноль продаж имеют разный смысл. Если пропуск выгрузки молча превратить в ноль, проверка формулы потеряет смысл. Сначала восстановите полноту данных. Отдельно пометьте периоды отсутствия товара: измеренные продажи в них не описывают весь возможный спрос.
Сверьте среднее и число наблюдений в обоих инструментах. Если уже они различаются, начните с фильтров и состава ряда. Менять делитель пока рано.
Сравните две настройки отклонения
Коэффициент вариации равен стандартному отклонению, делённому на среднее. Для процента результат умножают на 100. В документации SciPy variation делитель при расчёте отклонения задан как N - ddof. Значение по умолчанию ddof=0, а ddof=1 используется для выборочного стандартного отклонения через несмещённую оценку дисперсии.
Это две разные договорённости. Для сверки запишите, описываете ли вы весь фиксированный набор периодов или используете его как выборку. Затем согласуйте настройку с владельцем методики. Не выбирайте её отдельно для каждого SKU, чтобы получить желаемую букву группы.
При неизменном ряде, положительном среднем и N > 1 переход от делителя N к N - 1 умножает коэффициент на sqrt(N / (N - 1)). Это следует из формул дисперсии. Если фактическое отношение отличается, ищите ещё одну причину: пропуски, другой ряд, единицы либо округление.
Пересчитайте без скрытых допущений
Для независимой сверки достаточно обычного Python. Подставьте в sales реальные значения одного товара по равным периодам; многоточие нужно заменить всем рядом. Код ничего не загружает и не меняет в учётной системе.
import math
import statistics
sales = [...] # замените реальными числами, включая проверенные нули
if len(sales) < 2:
raise ValueError("Нужно не менее двух периодов")
if any(not math.isfinite(x) or x < 0 for x in sales):
raise ValueError("Проверьте конечные неотрицательные значения")
mean = statistics.mean(sales)
if mean == 0:
raise ValueError("Среднее равно нулю: процент не определён")
print("N", len(sales), "mean", mean)
print("CV ddof=0, %", statistics.pstdev(sales) / mean * 100)
print("CV ddof=1, %", statistics.stdev(sales) / mean * 100)
Сопоставьте каждую строку с настройкой своего отчёта. Отдельно проверьте, где процент, а где доля: формат отображения не должен повторно умножать значение на 100. Сравнивайте неокруглённые результаты, а округление оставьте для показа.
Верните результат в классификацию
Документация SciPy описывает и особые случаи: при нулевых среднем и отклонении возвращается nan. Это не нулевая изменчивость, которую можно автоматически отнести к стабильной группе. В приведённом коде такой ряд останавливает расчёт для отдельного разбора.
Сохраните рядом с итогом окно, N, среднее, выбранное отклонение, коэффициент в процентах и версию правил классификации. Если товар пересёк границу только из-за смены делителя, отметьте изменение методики отдельно от изменения поведения продаж.
Проверка завершена, когда одинаковые данные и согласованная настройка дают один результат. Дальше оценивайте рабочие пороги и пригодность ряда для планирования. Сам коэффициент не объясняет причину колебаний и не задаёт автоматически размер закупки.
Комментарии 0