我正在尝试在我的python代码中实施蒙特卡洛模拟,这将帮助我确定实现与收入目标相关的各种阈值的几率。例如,每个会计年度我们达到$ 6,000,$ 7,000或$ 8,000的可能性是多少。我能够计算期望值,但是没有编写模拟代码的运气。我尝试创建一个可以运行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运行Monte Carlo。有没有办法做到这一点?我创建了一个函数,该函数将为每个条目创建一个数组,但是我仍然需要基于ID和Filter字段进行过滤,以将10,000个模拟填充到每个数组中。
def monte_carlo_array(df):
for _ in range(len(df)):
yield []
答案 0 :(得分:2)
该解决方案效率不高,因为并行执行任何操作都没有,但是您可以清楚地看到仿真是如何执行的。
urxvt