def mack_p(data, average, est_sigma, tail): if tail: return cl.MackChainladder().fit( cl.TailCurve(curve='exponential').fit_transform( cl.Development(average=average, sigma_interpolation=est_sigma).fit_transform( cl.load_sample(data)))) else: return cl.MackChainladder().fit( cl.Development(average=average, sigma_interpolation=est_sigma).fit_transform( cl.load_sample(data)))
def test_mack_to_triangle(): assert ( cl.MackChainladder() .fit( cl.TailConstant().fit_transform( cl.Development().fit_transform(cl.load_sample("ABC")) ) ) .summary_ == cl.MackChainladder() .fit(cl.Development().fit_transform(cl.load_sample("ABC"))) .summary_ )
def test_mack_asymmetric(): r("Paid <- matrix(NA, 45, 45)") r("Paid[seq(1,45,4),] <- qpaid") out = r("M <- MackChainLadder(Paid)") tri = cl.load_sample("quarterly")["paid"] xp = tri.get_array_module() assert round(float(xp.array(out.rx("Mack.S.E")[0])[-1, -1]), 2) == round( float(cl.MackChainladder().fit(tri).summary_.to_frame().iloc[-1, -1]), 2 )
def test_mack_predict(): mack = cl.MackChainladder().fit(raa_1989) mack.predict(raa_1989)
def test_mack_malformed(): a = cl.load_sample('raa') b = a.iloc[:, :, :-1] x = cl.MackChainladder().fit(a) y = cl.MackChainladder().fit(b) assert x.process_risk_.iloc[:, :, :-1] == y.process_risk_
def test_mack_to_triangle(): assert cl.MackChainladder().fit(cl.TailConstant().fit_transform(cl.Development().fit_transform(cl.load_dataset('ABC')))).summary_ == \ cl.MackChainladder().fit(cl.Development().fit_transform(cl.load_dataset('ABC'))).summary_
""" ======================== Mack Chainladder Example ======================== This example demonstrates how you can can use the Mack Chainladder method. """ import pandas as pd import chainladder as cl import seaborn as sns sns.set_style('whitegrid') # Load the data data = cl.load_dataset('raa') # Compute Mack Chainladder ultimates and Std Err using 'simple' average mack = cl.MackChainladder() dev = cl.Development(average='volume') mack.fit(dev.fit_transform(data)) # Plotting plot_data = mack.summary_.to_frame() g = plot_data[['Latest', 'IBNR']] \ .plot(kind='bar', stacked=True, yerr=pd.DataFrame({'latest': plot_data['Mack Std Err']*0, 'IBNR': plot_data['Mack Std Err']}), ylim=(0, None), title='Mack Chainladder Ultimate') g.set_xlabel('Accident Year') g.set_ylabel('Loss')