我有一个承受损失的大型数据集-我想通过Monte Carlo Simulation计算未来损失的分布。
首先,我先计算频率分布,然后计算严重性分布(在保险中,这称为频率严重性模型)。
请找到随附的代码:
from scipy.stats import lognorm, norm, poisson, gamma, expon
from scipy import stats
from matplotlib import pyplot as plt
import numpy as np
import pandas as pd
df = pd.read_excel('m3g.xlsx')
schaden = df["Schaden"]
fre = df.groupby("Jahr").size()
print(fre)
lam = np.sum(fre.values) / 13.0
print(lam)
print(stats.kstest(df["Schaden"],"lognorm",lognorm.fit(df["Schaden"])))
(arg,loc,scale) = lognorm.fit(df["Schaden"])
x = np.linspace(0, 0.3, 100)
_, ax = plt.subplots(1, 1)
plt.hist(schaden, bins = 'auto')
ax2 = ax.twinx()
ax2.plot(x, lognorm.pdf(x,arg, loc=loc, scale=scale), '-', color = "r", lw=2)
plt.show()
print(loc,scale,arg)
我想做的是拟合最合适的分布...是否可以尝试许多分布然后选择最合适的分布?
在此先感谢您
答案 0 :(得分:0)
这是一个典型的优化/机器学习问题。 我不认为完整的答案应该在堆栈溢出的范围之内,因为有很多方法可以做到这一点。
简化答案:
使用Google的关键字(例如泊松,梯度下降等),您应该能够找到合适的软件包来为您完成大部分工作