示例#1
0
    def test_Aggregate(self):
        sig = .75
        d1b1 = Aggregate('single', exp_en=10, sev_name='lognorm', sev_a=[sig, sig / 2, sig / 5],
                         sev_scale=100 * np.exp(-sig ** 2 / 2), sev_wt=1, freq_name='gamma', freq_a=0.81)
        xs = np.linspace(0, 1023, 1024)
        d1b1.update(xs, verbose=False)
        self.assertTrue(d1b1.statistics_total_df.T.loc['el', :].sum() == 5146.408347357843)

        sig = 0.75
        d1b2 = Aggregate('sublines', exp_en=[10, 10, 10, 10], exp_attachment=[0, 0, 100, 50],
                         exp_limit=[np.inf, 100, np.inf, 100], sev_name='lognorm', sev_a=sig,
                         sev_scale=100 * np.exp(-sig ** 2 / 2),
                         sev_wt=1, freq_name='gamma', freq_a=0.81)
        self.assertTrue(d1b2.statistics_total_df.T.loc['el', :].sum() == 6152.9037739696396)

        d2b1 = Aggregate('mixed', exp_en=50, exp_attachment=[0, 50, 100, 150, 200],
                         exp_limit=[250, 250, np.inf, 100, 5000],
                         sev_name='lognorm', sev_mean=100, sev_cv=np.linspace(0.05, 2, 5), sev_wt=0.2 * np.ones(5),
                         freq_name='gamma', freq_a=1.2)
        self.assertTrue(d2b1.statistics_total_df.T.loc['el', :].sum() == 42977.102931408575)

        fixed = Aggregate('chistogram', exp_en=1, sev_name='dhistogram', sev_xs=[0, 1, 2, 3, 4], sev_ps=.2,
                          freq_name='fixed')
        self.assertTrue(fixed.statistics_df['sev_cv'].sum() +
                        fixed.statistics_total_df['sev_cv'].sum()== 2.1213203435596428)
示例#2
0
    def test_big_example(self):
        # bigger agg example
        sa = Aggregate('my test', exp_en=np.ones(50), exp_premium=0, exp_lr=.75,
                       exp_attachment=20, exp_limit=np.linspace(10, 500, 50), sev_name='lognorm', sev_mean=100,
                       sev_cv=0.8, freq_name='poisson', freq_a=0)

        bs = 1  # 2 and 13
        log2 = 13
        N = 1 << log2
        MAXL = N * bs
        xs = np.linspace(0, MAXL, N, endpoint=False)
        audit = sa.update(xs, 1, None, 'exact', sev_calc='discrete', discretization_calc='survival', verbose=True)
        # average of square errors is small:
        self.assertTrue(
            np.sum(np.abs(audit.iloc[0:-3, :]['rel sev err']) ** 2) ** .5 / (len(audit) - 3) < 1e-6)
        self.assertTrue(
            np.sum(np.abs(audit.iloc[0:-3, :]['abs sev err']) ** 2) ** .5 / (len(audit) - 3) < 1e-4)