用Python分配数据

时间:2018-11-28 09:53:45

标签: python

我有一个承受损失的大型数据集-我想通过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)

我想做的是拟合最合适的分布...是否可以尝试许多分布然后选择最合适的分布?

在此先感谢您

1 个答案:

答案 0 :(得分:0)

这是一个典型的优化/机器学习问题。 我不认为完整的答案应该在堆栈溢出的范围之内,因为有很多方法可以做到这一点。

简化答案:

  1. 定义一个损失函数(不是您所说的损失,这里的损失是“我的错误估计很糟糕”)
  2. 提出一种计算损耗函数w.r.t.的梯度的方法参数(lambda,x)
  3. 从随机lambda,x开始并运行梯度下降算法,以找到(几乎)使损失函数最小的最佳参数

使用Google的关键字(例如泊松,梯度下降等),您应该能够找到合适的软件包来为您完成大部分工作