September 15, 2022

Нормальное распределение с Python

Рассмотрим инструментарий нормального распределения в Python и ключевые аналитические кейсы. Для работы с ним можно использовать модуль stats библиотеки scipy. В частности, с помощью функции norm можно создать само распределение, у которого есть методы для проведения типичных операций:

  • ppf (percent point function/функция процентных значений) — величина, большая заданной доли значений распределения;
  • cdf (cumulative distribution function/кумулятивная функция распределения) - доля значений, распределения которых меньше заданной величины;
  • rvs (random variates/случайные значения) - возвращает случайное значение из заданного распределения.

Допустим, вы владеете магазином, в котором товары сбываются по нормальному закону со средним 500 и стандартным отклонением 100. Для визуализации кейса можно использовать следующий код:

import seaborn as sns
from scipy.stats import norm

distr = norm(500, 100)
sns.kdeplot(distr.rvs(1000))

Перечисленные выше методы понадобятся для подсчета разных статистик. Например, посчитаем вероятность продать:

  • менее 300 изделий:
distr.cdf(300)
  • более 800 изделий (1 - вероятность продать менее 800):
1 - distr.cdf(800)

А теперь решим обратную задачу и найдем число продуктов, которое надо закупить, чтобы все продать с вероятностью 80%. Это все равно, что найти число, меньше которого в распределении 20% величин (т.е. 80% продаж больше). Тут нам поможет функция ppf:

distr.ppf(1-0.8)

Еще одна типовая задача - найти такой порог продаж, который в три раза меньше 60% продаж. Сначала находим число меньшее 60% продаж, а затем делим его на три:

distr.ppf(1-0.6)/3