CapeCod Apriori Sensitivity

CapeCod Apriori Sensitivity#

import chainladder as cl

This example demonstrates the usage of the deterministic CapeCod method and shows the sensitivity of the apriori expectation to various choices of trend and decay. Instead of using GridSearch we declare our own looping.

# Grab data
ppauto_loss = cl.load_sample('clrd').groupby('LOB').sum().loc['ppauto', 'CumPaidLoss']
ppauto_prem = cl.load_sample('clrd').groupby('LOB').sum() \
                .loc['ppauto']['EarnedPremDIR'].latest_diagonal

def get_apriori(decay, trend):
    """ Function to grab apriori array from cape cod method """
    cc = cl.CapeCod(decay=decay, trend=trend)
    cc.fit(ppauto_loss, sample_weight=ppauto_prem)
    return cc.detrended_apriori_.to_frame()

def get_plot_data(trend):
    """ Function to grab plot data """
    # Initial apriori DataFrame
    detrended_aprioris = get_apriori(0,trend)
    detrended_aprioris.columns=['decay: 0%']

    # Add columns to apriori DataFrame
    for item in [25, 50, 75, 100]:
        detrended_aprioris[f'decay: {item}%'] = get_apriori(item/100, trend)
    return detrended_aprioris

# Plot Data
plot1 = get_plot_data(-0.05)
plot2 = get_plot_data(-.025)
plot3 = get_plot_data(0)
plot4 = get_plot_data(0.025)
import matplotlib.pyplot as plt
plt.style.use('ggplot')
%config InlineBackend.figure_format = 'retina'

fig, ((ax00, ax01), (ax10, ax11)) = plt.subplots(
    ncols=2, nrows=2, sharex=True, figsize=(10,10))
fig.suptitle("Private Passenger Auto Cape Cod Detrended Aprioris")
plot1.plot(ax=ax00, title='Trend: -5.0%')
plot2.plot(ax=ax01, title='Trend: -2.5%')
plot3.plot(ax=ax10, title='Trend: 0.0%')
plot4.plot(ax=ax11, title='Trend: 2.5%');
../_images/33d52566b0221240fd75a859cfd152d313866a82b0810514cacbabd8ebb2f5f3.png