寿险精算实验三——传统寿险毛保费的计算
本实验的目的是熟悉毛保费的计算,了解费用率结构对毛保费的影响。
本章节的实验内容为:设计定期寿险、终身寿险、两全保险的不同缴费期的费用比例,从而得到毛保费费率表。
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(Mx−Mx+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=Nx−Nx+10−(0.5Dx+0.3Dx+1+...+0.08Dx+10)10000(Mx−Mx+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=Nx−Nx+20−(0.6Dx+0.4Dx+1+...+0.08Dx+10)10000(Mx−Mx+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=Nx−Nx+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=Nx−Nx+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=Nx−N60−(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 u、v0−v4表示费用结构假设
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年版