Более эффективная альтернатива ожидаемой функции scipy.stats - PullRequest
0 голосов
/ 27 марта 2020

Я работаю над простой симуляцией для запаса продуктов. В частности, c, я хочу рассчитать ожидаемый дефицит продуктов для различных уровней обслуживания. Например, если я предполагаю, что спрос на продукт соответствует нормальному распределению со средним значением 100 и стандартным отклонением 20, для уровня обслуживания 90% необходимо иметь 125,63 единицы товара на складе. И тогда я бы все еще ожидал дефицит в 0,9469 единиц:

enter image description here

Мой текущий подход заключается в следующем:

# 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 или знает, как повысить производительность путем настройки существующего кода, я был бы очень рад.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...