寿险精算实验三——传统寿险毛保费的计算

寿险精算实验三——传统寿险毛保费的计算


       本实验的目的是熟悉毛保费的计算,了解费用率结构对毛保费的影响。
       本章节的实验内容为:设计定期寿险、终身寿险、两全保险的不同缴费期的费用比例,从而得到毛保费费率表。

1.1 毛保费计算公式

       本章节仍然采用编制生命表换算表设计的保险产品,定期寿险、两全保险的费用率假设如下:
在这里插入图片描述
       终身寿险费用假设如下:
在这里插入图片描述
       (1)趸缴20年定期寿险毛保费计算公式
        G P x = 10000 ( M x − M x + 20 ) 0.9 D x GP_x=\frac{10000(M_x-M_{x+20})}{0.9D_x} GPx=0.9Dx10000(MxMx+20)
       (2)10年缴费20年定期寿险毛保费计算公式
        G P x = 10000 ( M x − M x + 20 ) N x − N x + 10 − ( 0.5 D x + 0.3 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{10000(M_x-M_{x+20})}{N_x-N_{x+10}-(0.5D_x+0.3D_{x+1}+...+0.08D_{x+10})} GPx=NxNx+10(0.5Dx+0.3Dx+1+...+0.08Dx+10)10000(MxMx+20)
       (3)20年缴费20年定期寿险毛保费计算公式
        G P x = 10000 ( M x − M x + 20 ) N x − N x + 20 − ( 0.6 D x + 0.4 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{10000(M_x-M_{x+20})}{N_x-N_{x+20}-(0.6D_x+0.4D_{x+1}+...+0.08D_{x+10})} GPx=NxNx+20(0.6Dx+0.4Dx+1+...+0.08Dx+10)10000(MxMx+20)
       (4)10年缴费终身寿险毛保费计算公式
        G P x = M x N x − N x + 10 − ( 0.5 D x + 0.3 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{M_x}{N_x-N_{x+10}-(0.5D_x+0.3D_{x+1}+...+0.08D_{x+10})} GPx=NxNx+10(0.5Dx+0.3Dx+1+...+0.08Dx+10)Mx
       (5)20年缴费终身寿险毛保费计算公式
        G P x = M x N x − N x + 20 − ( 0.6 D x + 0.4 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{M_x}{N_x-N_{x+20}-(0.6D_x+0.4D_{x+1}+...+0.08D_{x+10})} GPx=NxNx+20(0.6Dx+0.4Dx+1+...+0.08Dx+10)Mx
       (6)缴费至59岁(至少缴费10年)终身寿险毛保费计算公式
        G P x = M x N x − N 60 − ( 0.6 D x + 0.3 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{M_x}{N_x-N_{60}-(0.6D_x+0.3D_{x+1}+...+0.08D_{x+10})} GPx=NxN60(0.6Dx+0.3Dx+1+...+0.08Dx+10)Mx

1.2 运用Python计算保费

       首先,在编制生命表换算表这一章节,我们已经得到编制好的换算表。下面将根据生命表中的“非养老类业务一表”,并假设保额以1万元为单位保额,运用Python计计算单位保额对应的毛保费。
       (1)定期寿险
       重定义换算表函数

def middle(data,ii=0.025):
    i = ii # 定价利率
    v = 1 / (1+i)
    w = data['QxM'].count() -1 # 极限年龄
    data['PxM'] = 1- data['QxM']   # 计算生存概率
    data['PxF'] = 1- data['QxF'] 

    ############# 计算中间变量
    data['lxM'] = None
    data['lxF'] = None
    data['dxM'] = None
    data['dxF'] = None
    data['exM'] = None
    data['exF'] = None
    ## 计算生存人数
    for k in range(w+1):
        if k == 0:
            data['lxM'][0] = 100000
            data['lxF'][0] = 100000
        else:
            data['lxM'][k] = data['lxM'][k-1] * data['PxM'][k-1]
            data['lxF'][k] = data['lxF'][k-1] * data['PxF'][k-1]
    ## 计算死亡人数
    for k in range(w+1):
        if k < w:
            data['dxM'][k] = data['lxM'][k] - data['lxM'][k+1] 
            data['dxF'][k] = data['lxF'][k] - data['lxF'][k+1] 
        else:
            data['dxM'][k] = data['lxM'][k]
            data['dxF'][k] = data['lxF'][k]
    # 计算平均余命
    for k in range(w+1):
        if k < w:
            exM =0
            exF =0
            for t in range(k+1,w+1):
                exM = exM + data['lxM'][t]
                exF = exF + data['lxF'][t]
            data['exM'][k] = exM / data['lxM'][k]  + 0.5
            data['exF'][k] = exF / data['lxF'][k]  + 0.5
        else:
            data['exM'][k] = 0.5
            data['exF'][k] = 0.5


    data['DxM'] =  (v ** data['x']) * data['lxM'] # 计算Dx 
    data['DxF'] =  (v ** data['x']) * data['lxF']
    data['CxM'] =  (v ** (data['x']+0.5)) * data['dxM'] # 计算Cx 
    data['CxF'] =  (v ** (data['x']+0.5)) * data['dxF']
    # 计算Mx 
    data['MxM'] = None
    data['MxF'] = None
    for k in range(w+1):
        mxM=0
        mxF=0
        for t in range(k,w+1):
            mxM = mxM + data['CxM'][t]
            mxF = mxF + data['CxF'][t]
        data['MxM'][k] = mxM
        data['MxF'][k] = mxF
    # 计算Nx 
    data['NxM'] = None
    data['NxF'] = None
    for k in range(w+1):
        nxM=0
        nxF=0
        for t in range(k,w+1):
            nxM = nxM + data['DxM'][t]
            nxF = nxF + data['DxF'][t]
        data['NxM'][k] = nxM
        data['NxF'][k] = nxF
    # 计算Rx 
    data['RxM'] = None
    data['RxF'] = None
    for k in range(w+1):
        rxM=0
        rxF=0
        for t in range(k,w+1):
            rxM = rxM + data['MxM'][t]
            rxF = rxF + data['MxF'][t]
        data['RxM'][k] = rxM
        data['RxF'][k] = rxF
    # 计算Sx 
    data['SxM'] = None
    data['SxF'] = None
    for k in range(w+1):
        sxM=0
        sxF=0
        for t in range(k,w+1):
            sxM = sxM + data['NxM'][t]
            sxF = sxF + data['NxF'][t]
        data['SxM'][k] = sxM
        data['SxF'][k] = sxF
    return data
dt_sen = middle(data,ii=0.025)
w = dt_sen['QxM'].count() -1 # 极限年龄

       定期寿险毛保费计算, u 、 v 0 − v 4 u、v_0-v_4 uv0v4表示费用结构假设

def DingQi(t,s,w,data,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08):
    GPxM = 'DSGPxM' + '_' +str(t) +'_' + str(s)
    GPxF = 'DSGPxF' + '_' +str(t) +'_' + str(s)
    ChargeM = 'ChargeM' + '_' +str(t) +'_' + str(s)
    ChargeF = 'ChargeF' + '_' +str(t) +'_' + str(s)
    data[GPxM]=None
    data[GPxF]=None
    data[ChargeM]=None
    data[ChargeF]=None
    for k in range(w+1-t):
        if s==0:
            data[GPxM][k] = (data['MxM'][k] - data['MxM'][k+t])/(u*data['DxM'][k])*10000
            data[GPxF][k] = (data['MxF'][k] - data['MxF'][k+t])/(u*data['DxF'][k])*10000
        else:
            if s < t+1:
                if s==1:
                    data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1
                    data[ChargeF][k] = data['MxF'][k]*v0 + data['MxF'][k+1]*v1
                elif s==2:
                    data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2
                    data[ChargeF][k] = data['MxF'][k]*v0 + data['MxF'][k+1]*v1 + data['MxF'][k+2]*v2
                elif s==3:
                    data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3
                    data[ChargeF][k] = data['MxF'][k]*v0 + data['MxF'][k+1]*v1 + data['MxF'][k+2]*v2 + data['MxF'][k+3]*v3
                elif s==4:
                    data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3 + data['DxM'][k+4]*v4
                    data[ChargeF][k] = data['MxF'][k]*v0 + data['MxF'][k+1]*v1 + data['MxF'][k+2]*v2 + data['MxF'][k+3]*v3 + data['MxF'][k+4]*v4
                else:
                    data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3 + data['DxM'][k+4]*v4
                    data[ChargeF][k] = data['MxF'][k]*v0 + data['MxF'][k+1]*v1 + data['MxF'][k+2]*v2 + data['MxF'][k+3]*v3 + data['MxF'][k+4]*v4
                    for ss in range(5,s+1):
                        data[ChargeM][k] = data[ChargeM][k] + data['DxM'][k+ss]*v4
                        data[ChargeF][k] = data[ChargeF][k] + data['DxF'][k+ss]*v4
                data[GPxM][k] = (data['MxM'][k] - data['MxM'][k+t])/(data['NxM'][k]-data['NxM'][k+s]-data[ChargeM][k])*10000
                data[GPxF][k] = (data['MxF'][k] - data['MxF'][k+t])/(data['NxF'][k]-data['NxF'][k+s]-data[ChargeF][k])*10000
    return data[['x',GPxM,GPxF]]

       根据费用假设,分别求出20年定期寿险在趸交,10年缴,20年缴的毛保费

t=20
dt1= DingQi(20,0,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 趸缴
dt2= DingQi(20,10,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 10年缴费
dt3= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dtnew = pd.concat([dt1,dt2,dt3],axis=1)[0:w+1-t].iloc[:,[0,1,2,4,5,7,8]]

       部分结果如下图所示:
在这里插入图片描述

       (2)终身寿险
       根据费用假设计算终身寿险的毛保费

data = pd.read_excel('LifeTable.xlsx',sheet_name=0)  # 第0个表是非养老类业务一表,第1个表是非养老类业务二表,第2个表是养老类业务表
data
# 其中QxM表示男性死亡率,QxF表示女性死亡率

dt_sen = middle(data,ii=0.025)
w = dt_sen['QxM'].count() -1 # 极限年龄

       定义费用减项函数

def ChargeDeduction(data,k,st,s,agez,v0,v1,v2,v3,v4,AgeF=True):
    if AgeF==True:
        ChargeM = 'ChargeM' + '_'  + str(agez)
        ChargeF = 'ChargeF' + '_'  + str(agez)
        data[ChargeM]=None
        data[ChargeF]=None
    else:
        ChargeM = 'ChargeM' + '_'  + str(s)
        ChargeF = 'ChargeF' + '_'  + str(s)
        data[ChargeM]=None
        data[ChargeF]=None
    if st==0:
        data[ChargeM][k] = data['DxM'][k]*v0 
        data[ChargeF][k] = data['DxF'][k]*v0 
    elif st==1:
        data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1
        data[ChargeF][k] = data['DxF'][k]*v0 + data['DxF'][k+1]*v1
    elif st==2:
        data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2
        data[ChargeF][k] = data['DxF'][k]*v0 + data['DxF'][k+1]*v1 + data['DxF'][k+2]*v2
    elif st==3:
        data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3
        data[ChargeF][k] = data['DxF'][k]*v0 + data['DxF'][k+1]*v1 + data['DxF'][k+2]*v2 + data['DxF'][k+3]*v3
    elif st==4:
        data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3 + data['DxM'][k+4]*v4
        data[ChargeF][k] = data['DxF'][k]*v0 + data['DxF'][k+1]*v1 + data['DxF'][k+2]*v2 + data['DxF'][k+3]*v3 + data['DxF'][k+4]*v4
    else:
        data[ChargeM][k] = data['DxM'][k]*v0 + data['DxM'][k+1]*v1 + data['DxM'][k+2]*v2 + data['DxM'][k+3]*v3 + data['DxM'][k+4]*v4
        data[ChargeF][k] = data['DxF'][k]*v0 + data['DxF'][k+1]*v1 + data['DxF'][k+2]*v2 + data['DxF'][k+3]*v3 + data['DxF'][k+4]*v4
        for ss in range(5,st+1):
            data[ChargeM][k] = data[ChargeM][k] + data['DxM'][k+ss]*v4
            data[ChargeF][k] = data[ChargeF][k] + data['DxF'][k+ss]*v4
    return data

       定义终身寿险毛保费计算函数

def ZhongShen(data,w,s=0,AgeF=True,agez=60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08):
    if AgeF==True:##表示缴费至某年龄,默认为60-1=59岁
        GPxM = 'ZSSGPxM' + '_'  + str(agez)
        GPxF = 'ZSSGPxF' + '_'  + str(agez)
        ChargeM = 'ChargeM' + '_'  + str(agez)
        ChargeF = 'ChargeF' + '_'  + str(agez)
        data[GPxM]=None
        data[GPxF]=None
        data[ChargeM]=None
        data[ChargeF]=None
        for k in range(agez):
            data =  ChargeDeduction(data,k,s,s,agez,v0,v1,v2,v3,v4,AgeF)
            data[GPxM][k] = data['MxM'][k] / (data['NxM'][k]-data['NxM'][agez]-data[ChargeM][k]) * 10000
            data[GPxF][k] = data['MxF'][k] / (data['NxF'][k]-data['NxF'][agez]-data[ChargeF][k]) * 10000
    else:
        GPxM = 'ZSSGPxM' + '_'  + str(s)
        GPxF = 'ZSSGPxF' + '_'  + str(s)
        ChargeM = 'ChargeM' + '_'  + str(s)
        ChargeF = 'ChargeF' + '_'  + str(s)
        data[GPxM]=None
        data[GPxF]=None
        data[ChargeM]=None
        data[ChargeF]=None
        if s==0: ## 趸缴
            for k in range(w+1):
                data[GPxM][k] = data['MxM'][k] / (data['DxM'][k]-data['DxM'][k]*v0) * 10000
                data[GPxF][k] = data['MxF'][k] / (data['DxF'][k]-data['DxF'][k]*v0) * 10000
        elif s==106: ## 终身缴费
            for k in range(w+1):
                st=w-k
                data =  ChargeDeduction(data,k,st,s,agez,v0,v1,v2,v3,v4,AgeF)
                data[GPxM][k] = data['MxM'][k] / (data['NxM'][k] - data[ChargeM][k]) * 10000
                data[GPxF][k] = data['MxF'][k] / (data['NxF'][k] - data[ChargeF][k]) * 10000
        else:
            for k in range(w+1-s):
                st=w-k
                data =  ChargeDeduction(data,k,st,s,agez,v0,v1,v2,v3,v4,AgeF)
                data[GPxM][k] = data['MxM'][k] / (data['NxM'][k] - data['NxM'][k+s] - data[ChargeM][k]) * 10000
                data[GPxF][k] = data['MxF'][k] / (data['NxF'][k] - data['NxF'][k+s] - data[ChargeF][k]) * 10000
    return data[['x',GPxM,GPxF]]
dt1= ZhongShen(dt_sen,w,0,True,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费至59岁
dt2= ZhongShen(dt_sen,w,0,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 趸缴
dt3= ZhongShen(dt_sen,w,10,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费10年
dt4= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt5= ZhongShen(dt_sen,w,106,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 终身缴费
dtnew = pd.concat([dt1,dt2,dt3,dt4,dt5],axis=1).iloc[:,[0,1,2,4,5,7,8,10,11,13,14]]

       计算结果部分截图如下:
在这里插入图片描述

1.3 毛保费的敏感性分析

       同上章传统寿险净保费的计算,仍然对毛保费的计算结果进行敏感性分析,相比上章,增加了费用率敏感性分析。
       (1)死亡率敏感性分析
       以20年缴费的20年定期寿险和20年缴费的终身寿险为例,观察死亡率分别增加和减少10%对毛保费的影响,并截取21-40年龄段数据观察。

data = pd.read_excel('LifeTable.xlsx',sheet_name=0)
dt_sen = middle(data,ii=0.025)
w = dt_sen['QxM'].count() -1 # 极限年龄
## 死亡率为基准情形
dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic1 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic1
## 死亡率负变化10%
ttt = 0.1
dt_sen['QxM'] = dt_sen['QxM'] * (1-ttt)
dt_sen = middle(dt_sen,ii=0.025)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic2 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic2
## 死亡率正变化10%
ttt = 0.1
dt_sen['QxM'] = dt_sen['QxM'] / (1-ttt) * (1+ttt)  # 先倒算回标准死亡率
dt_sen = middle(dt_sen,ii=0.025)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic3 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic3
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3],axis=1).iloc[:,[0,1,2,4,5,7,8]]
pcol=['x','DSGPxM_20_20','ZSSGPxM_20','DSGPxM_20_20-','ZSSGPxM_20-','DSGPxM_20_20+','ZSSGPxM_20+']
dt_basic.columns = pcol
dt_basic

       结果如下:
在这里插入图片描述

       绘图

import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20-'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20+'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('20年缴费20年定期寿险毛保费随死亡率的变化')
plt.legend()
plt.show()

在这里插入图片描述

plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20-'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20+'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('终身缴费终身寿险毛保费随死亡率的变化')
plt.legend()
plt.show()

在这里插入图片描述
       从上述实验可以看出,毛保费岁死亡率的变化趋势基本与净保费的一致,而且定期寿险毛保费对死亡率的敏感性相对大于终身寿险。
       (2)利率敏感性分析
       以20年缴费的20年定期寿险和20年缴费的终身寿险为例,观察利率变化对毛保费的影响。

data = pd.read_excel('LifeTable.xlsx',sheet_name=0)
dt_sen = middle(data,ii=0.025)
w = dt_sen['QxM'].count() -1 # 极限年龄
## 利率为基准情形
ii = 0.025
dt_sen = middle(dt_sen,ii=ii)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic1 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic1
## 利率为下浮0.5%情形
ii = 0.02
dt_sen = middle(dt_sen,ii=ii)
dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic2 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic2
## 利率为下浮1%情形
ii = 0.015
dt_sen = middle(dt_sen,ii=ii)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic3 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic3
## 利率为上浮0.5%情形
ii = 0.03
dt_sen = middle(dt_sen,ii=ii)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic4 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic4
## 利率为上浮1%情形
ii = 0.035
dt_sen = middle(dt_sen,ii=ii)

dt1= DingQi(20,20,w,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt2= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费20年
dt_basic5 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic5
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3,dt_basic4,dt_basic5],axis=1).iloc[:,[0,1,2,4,5,7,8,10,11,13,14]]
pcol=['x','DSGPxM_20_20','ZSSGPxM_20','DSGPxM_20_20-0.5%','ZSSGPxM_20-0.5%','DSGPxM_20_20-1%',
      'ZSSGPxM_20-1%','DSGPxM_20_20+0.5%','ZSSGPxM_20+0.5%','DSGPxM_20_20+1%','ZSSGPxM_20+1%']
dt_basic.columns = pcol
dt_basic

       部分结果如下:
在这里插入图片描述
       绘图:

import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
mpl.rcParams['axes.unicode_minus']=False #用来正常显示负号
plt.figure(figsize=(10,10))
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20-0.5%'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20-1%'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20+0.5%'],color='darkgreen',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSGPxM_20_20+1%'],color='orange',linewidth=2.0,linestyle='--')
plt.title('不同利率下20年定期寿险20年缴费期毛保费')
plt.legend()
plt.show()

在这里插入图片描述

plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20-0.5%'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20-1%'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20+0.5%'],color='darkgreen',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20+1%'],color='orange',linewidth=2.0,linestyle='--')
plt.title('不同利率下终身寿险20年缴费期毛保费')
plt.legend()
plt.show()

在这里插入图片描述
       显然,各种产品的毛保费与利率呈现一定的负相关关系,并且利率越小时,敏感性越强。另外,终身寿险的毛保费对利率的敏感性明显强于定期寿险,主要原因是终身寿险的保险期限较长。
       (3)费用率敏感性分析
       以20年缴费的终身寿险和缴费至65岁的终身寿险为例,观察利率变化对毛保费的影响。

data = pd.read_excel('LifeTable.xlsx',sheet_name=0)
dt_sen = middle(data,ii=0.025)
w = dt_sen['QxM'].count() -1 # 极限年龄
## 费用率为基准情形
dt1= ZhongShen(dt_sen,w,20,False,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 终身寿险缴费20年
dt2= ZhongShen(dt_sen,w,0,True,60,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 终身寿险缴费至65岁
dt_basic1 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic1
## 费用率为上升20%情形
dt1= ZhongShen(dt_sen,w,20,False,60,v0=0.6,v1=0.36,v2=0.18,v3=0.096,v4=0.096)  # 终身寿险缴费20年
dt2= ZhongShen(dt_sen,w,0,True,60,v0=0.6,v1=0.36,v2=0.18,v3=0.096,v4=0.096)  # 终身寿险缴费至65岁
dt_basic2 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic2
## 费用率为下降20%情形
dt1= ZhongShen(dt_sen,w,20,False,60,v0=0.4,v1=0.24,v2=0.12,v3=0.064,v4=0.064)  # 终身寿险缴费20年
dt2= ZhongShen(dt_sen,w,0,True,60,v0=0.4,v1=0.24,v2=0.12,v3=0.064,v4=0.064)  # 终身寿险缴费至65岁
dt_basic3 =  pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,4]]
dt_basic3
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3],axis=1).iloc[:,[0,1,2,4,5,7,8]]
pcol=['x','ZSSGPxM_20','ZSSGPxM_65','ZSSGPxM_20+0.2','ZSSGPxM_65+0.2','ZSSGPxM_20-0.2','ZSSGPxM_65-0.2']
dt_basic.columns = pcol
dt_basic

       结果如下:
在这里插入图片描述
       可视化:

plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20+0.2'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_20-0.2'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('20年缴费终身寿险毛保费随费用率的变化')
plt.legend()
plt.show()

在这里插入图片描述

plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_65'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_65+0.2'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSGPxM_65-0.2'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('缴费至65岁终身寿险毛保费随费用率的变化')
plt.legend()
plt.show()

在这里插入图片描述
       显然,随着费用率的增加,毛保费也相应提高,另外,缴费期限越长,毛保费对于费用率的假设越不敏感。虽然缴费期限越长受费用率影响的期限也越长,但是因为缴费期限的变长,毛保费可以在更长的时间之内分摊降低了费用变化的影响。
       综合来看,利率假设对产品定价的影响最大,远超死亡率和费用率假设对定价结果的影响。

参考

[1] 李秀芳 编著:寿险精算实务实验教程[M],中国财政经济出版社2008年版

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值