Использование numpy.random.exponential для рисования 10 000 000 выборок X для оценки ожидаемого значения выплаты - PullRequest
0 голосов
/ 06 апреля 2019

Предположим, что сумма ущерба в долларовом выражении, связанного с автомобильной аварией, является экспоненциальной случайной величиной со средним значением 1000. Из этого страховая компания выплачивает только сумму, превышающую франшизу в 400. Если X является случайной величиной, представляющей доллар сумма ущерба, то страховая выплата не более (X-400,0).

Я пытаюсь использовать функцию квадрата Сципи для оценки интеграла между 0 и бесконечностью max (x-400)

Вот ссылка для лучшей наглядности: https://imgur.com/a/XIglH8i

Мне нужно проверить ответ 670.32, используя симуляцию Монте-Карло, и я считаю, что мне нужно использовать функцию nramp .random.exponential, чтобы нарисовать 10 000 000 выборок X.

Как уже упоминалось, я пытаюсь использовать квадроцикл Сципи для определения интеграла, но я борюсь за то, чтобы включить повторяющееся число циклов таким образом, чтобы X рисовалось 10 000 000 раз. Я ожидаю, что цикл for будет крайне неэффективным, поэтому считаю, что вещание с использованием матричных манипуляций может быть более эффективным решением. К сожалению, это выходит за рамки моего опыта программирования и может действительно помочь понять, как это сделать: эффективно собрать образцы X, а затем 2, включить его в функцию, которая оценивает интеграл X, и сохранить его в некоторой структуре данных. и повторить процесс 10 000 000 раз

from scipy.integrate import quad
from numpy import exp, log, inf
import numpy as np
exponential_var=np.random.exponential(1,10000000)
def Expected_Payout(x):
    return max(exponential_var - 400,0)
v,b = quad(Expected_Payout, 0 ,inf )

Как мне определить мою функцию, чтобы взять экспоненциальное число переменных и сохранить их, чтобы повторить процесс?

Результат должен быть ~ = 670.32

1 Ответ

1 голос
/ 06 апреля 2019

Я думаю, ты слишком много делаешь.

import numpy as np
a = np.random.exponential(1000., size=10000000)
np.maximum(a-400, 0).mean()
Out[13]: 670.3739442241515

Если вы делаете выборку, я не думаю, что вам нужно интегрировать.

...