Я работаю над простой симуляцией для запаса продуктов. В частности, c, я хочу рассчитать ожидаемый дефицит продуктов для различных уровней обслуживания. Например, если я предполагаю, что спрос на продукт соответствует нормальному распределению со средним значением 100 и стандартным отклонением 20, для уровня обслуживания 90% необходимо иметь 125,63 единицы товара на складе. И тогда я бы все еще ожидал дефицит в 0,9469 единиц:
![enter image description here](https://i.stack.imgur.com/ry4FJ.png)
Мой текущий подход заключается в следующем:
# Import libraries
import pandas as pd
import numpy as np
from scipy.stats import norm
# Create an exemplary dataset
idx = pd.Index(range(0, 1000), name='productid')
df = pd.DataFrame({'loc': np.random.normal(100, 30, 1000),
'scale': np.random.normal(20, 5, 1000)}, index=idx)
# Calculate quantile
df['quantile'] = norm.ppf(0.9, df['loc'], df['scale'])
# Calculate expected shortage
df['shortage'] = df.apply(lambda row: norm(row['loc'], row['scale'])\
.expect(lambda x: x-row['quantile'], lb=row['quantile']), axis=1)
Код на самом деле работает тихо, но есть проблема с производительностью. Расчет ожидаемого дефицита занимает около 15 секунд для 1000 продуктов. В реальном наборе данных у меня есть 10000 продуктов, и мне нужно повторить операцию примерно 100 раз, так как я хочу выполнить моделирование для различных уровней обслуживания.
Так что, если кто-нибудь знает более эффективную альтернативу функции ожидаемого scipy.stats или знает, как повысить производительность путем настройки существующего кода, я был бы очень рад.