Эффективное моделирование множества частотных распределений за тысячи итераций в numpyPython

Программы на Python
Anonymous
Эффективное моделирование множества частотных распределений за тысячи итераций в numpy

Сообщение Anonymous »

У меня на работе возникла следующая проблема:
У нас есть, скажем, 1 миллион возможных событий, которые определяют распределение частоты и серьезности.
Для каждого события у нас есть годовая ставка, которая определяет распределение Пуассона, а также параметры альфа и бета для бета-распределений. Цель состоит в том, чтобы смоделировать порядка >100 000 «лет», при этом каждый год определяется как получение частоты N для каждого события и получение N выборок относительного бета-распределения.
Обременительным для меня фактом является то, как я могу эффективно получить образцы N_i ~ Пуассона (lambda_i) из бета-распределения Beta_i, одновременно гарантируя, что я могу отнести их к правильному году?
Что касается результатов, я мне нужно будет посмотреть как максимальное, так и общее значение образцов за год, поэтому временно я просто сохраняю его
как массив словарей (не предназначенный для использования в качестве выходного формата)

Код: Выделить всё

years = 5000

rng = np.random.default_rng()
losses = []
for year in range(years):
occurences = rng.poisson(data['RATE'])
annual_losses = []
for idx, occs in enumerate(occurences):
if occs > 0:
event = data.iloc[idx]
for occ in range(occs):
loss = rng.beta(event['alpha'], event['beta']) * event['ExpValue']
annual_losses.append(loss)
annual_losses.append(0)
losses.append({'year': year, 'losses': annual_losses})
Я пытался выполнить оптимизацию кода Python/Numpy, используемого для моделирования, но не могу понять, как эффективно векторизовать этот код.
Изменения, которые я сделал перед публикацией здесь (раз за 5000 лет):
  • замена с scipy на numpy (72 с -> 66 с)
  • вычисление частот за все годы за один раз вне цикла (66 с -> 73 с... упс)
В идеале я бы вот так, чтобы работать как можно быстрее или с максимально возможным количеством итераций, и ранее у меня также возникали проблемы с памятью при использовании scipy.

Подробнее здесь: https://stackoverflow.com/questions/790 ... sands-of-i

Вернуться в «Python»