Я пытаюсь внедрить симуляцию Монте-Карло в мой код Python, который поможет мне определить шансы на достижение различных пороговых значений, связанных с целевыми показателями дохода. Например, какова вероятность того, что мы получим 6000, 7000 или 8000 долларов США за каждый финансовый год. Я могу рассчитать ожидаемое значение, но мне не повезло с кодированием симуляции. Я пытался создать функцию, которая запускает 1000 симуляций, но не смог ее получить (благодаря моим очень начинающим способностям кодирования). В идеале я мог бы вернуть среднее значение и стандартное отклонение для итоговой суммы и каждого контракта, которые можно использовать для их построения на нормальной кривой.
import pandas as pd
ID = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Revenue = [1000, 1200, 1300, 100 ,500, 0, 800, 950, 4321, 800, 1000, 1200, 1300, 100 ,500, 0, 800, 950, 4321, 800]
odds = [0.5, 0.6, 0.33, 0.1, 0.9, 0.87, 0.37, 0.55, 0.97, 0.09, 0.5, 0.6, 0.33, 0.1, 0.9, 0.87, 0.37, 0.55, 0.97, 0.09]
FY = [2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019]
d = {'ID': ID, 'Revenue': Revenue, 'Odds': odds, 'Fiscal Year': FY}
df = pd.DataFrame(d)
df['Expected Value'] = df['Revenue']*df['Odds']
print(df)
Это немного кода, который я писал, но я заблудился.
import pandas_montecarlo
mc = OtisPrediction_df['Realization Rate'].montecarlo(sims = 100)
mc.plot()
print(mc.stats)
Или
def win_loss_func(iterator):
odds = random.randint(1,100)/100
X = []
Y = []
i = 1
while i <= iterator:
if df['Odds'] >= odds:
i+=1
X.append(i)
Y.append(OtisPrediction_df[''])
print(odds)
Мне нужно иметь возможность использовать Монте-Карло для каждого удостоверения личности в каждом финансовом году. Есть ли способ сделать это? Я создал функцию, которая будет создавать массив для каждой записи, но мне все еще нужно фильтровать на основе полей ID и Filter, чтобы заполнить каждый массив 10000 имитациями.
def monte_carlo_array(df):
for _ in range(len(df)):
yield []