本实验的目的是用换算表来计算基本类型寿险产品的净保费。
本章节的实验内容:设计定期寿险、终身寿险、两全保险的投保年龄、缴费期及不同利率、不同生命表假设下的不同缴费期的净保费费率表。
以下公式适用期初缴费、期末赔付的l离散情形。
(1)20年期定期寿险的公式
趸缴净保费: N P x = M x − M x + 20 D x NP_x=\frac{M_x-M_{x+20}}{D_x} NPx=DxMx−Mx+20
10年缴费净保费: N P x = M x − M x + 20 N x − N x + 10 NP_x=\frac{M_x-M_{x+20}}{N_x-N_{x+10}} NPx=Nx−Nx+10Mx−Mx+20
20年缴费净保费: N P x = M x − M x + 20 N x − N x + 20 NP_x=\frac{M_x-M_{x+20}}{N_x-N_{x+20}} NPx=Nx−Nx+20Mx−Mx+20
(2)终身寿险
趸缴净保费: N P x = M x D x NP_x=\frac{M_x}{D_x} NPx=DxMx
10年缴费净保费: N P x = M x N x − N x + 10 NP_x=\frac{M_x}{N_x-N_{x+10}} NPx=Nx−Nx+10Mx
20年缴费净保费: N P x = M x N x − N x + 20 NP_x=\frac{M_x}{N_x-N_{x+20}} NPx=Nx−Nx+20Mx
缴费至59岁净保费: N P x = M x N x − N 60 NP_x=\frac{M_x}{N_x-N_{60}} NPx=Nx−N60Mx
终身缴费净保费: N P x = M x N x NP_x=\frac{M_x}{N_x} NPx=NxMx
(3)20年期两全险
趸缴净保费: N P x = M x − M x + 20 + D x + 20 D x NP_x=\frac{M_x-M_{x+20}+D_{x+20}}{D_x} NPx=DxMx−Mx+20+Dx+20
10年缴费净保费: N P x = M x − M x + 20 + D x + 20 N x − N x + 10 NP_x=\frac{M_x-M_{x+20}+D_{x+20}}{N_x-N_{x+10}} NPx=Nx−Nx+10Mx−Mx+20+Dx+20
20年缴费净保费: N P x = M x − M x + 20 + D x + 20 N x − N x + 20 NP_x=\frac{M_x-M_{x+20}+D_{x+20}}{N_x-N_{x+20}} NPx=Nx−Nx+20Mx−Mx+20+Dx+20
首先,在编制生命表换算表这一章节,我们已经得到编制好的换算表。下面将根据生命表中的“非养老类业务一表”,并假设保额以1万元为单位保额,运用Python计计算单位保额对应的净保费。
(1)定期寿险
## 定期寿险净保费计算
## 定期寿险净保费计算
def DingQi(t,s,data):
NPxM = 'DSNPxM' + '_' +str(t) +'_' + str(s)
NPxF = 'DSNPxF' + '_' +str(t) +'_' + str(s)
data[NPxM]=None
data[NPxF]=None
for k in range(w+1-t):
if s==0:
data[NPxM][k] = (data['MxM'][k] - data['MxM'][k+t])/data['DxM'][k]*10000
data[NPxF][k] = (data['MxF'][k] - data['MxF'][k+t])/data['DxF'][k]*10000
else:
if s < t+1:
data[NPxM][k] = (data['MxM'][k] - data['MxM'][k+t])/(data['NxM'][k]-data['NxM'][k+s])*10000
data[NPxF][k] = (data['MxF'][k] - data['MxF'][k+t])/(data['NxF'][k]-data['NxF'][k+s])*10000
return data[['x',NPxM,NPxF]]
t=20 # 20年定期寿险
dt1= DingQi(t,0,data) # 趸缴
dt2 = DingQi(t,10,data) # 10年缴费
dt3 = DingQi(t,20,data) # 20年缴费
pd.concat([dt1,dt2,dt3],axis=1)[0:w+1-t].iloc[:,[0,1,2,4,5,7,8]]
## 终身寿险净保费计算
def ZhongShen(data,s=0,AgeF=True,agez=60):
if AgeF==True:##表示缴费至某年龄,默认为60-1=59岁
NPxM = 'ZSSNPxM' + '_' + str(agez)
NPxF = 'ZSSNPxF' + '_' + str(agez)
data[NPxM]=None
data[NPxF]=None
for k in range(agez):
data[NPxM][k] = data['MxM'][k] / (data['NxM'][k]-data['NxM'][60]) * 10000
data[NPxF][k] = data['MxF'][k] / (data['NxF'][k]-data['NxF'][60]) * 10000
else:
NPxM = 'ZSSNPxM' + '_' + str(s)
NPxF = 'ZSSNPxF' + '_' + str(s)
data[NPxM]=None
data[NPxF]=None
if s==0: ## 趸缴
for k in range(w+1):
data[NPxM][k] = data['MxM'][k] / data['DxM'][k] * 10000
data[NPxF][k] = data['MxF'][k] / data['DxF'][k] * 10000
elif s==106: ## 终身缴费
for k in range(w+1):
data[NPxM][k] = data['MxM'][k] / data['NxM'][k] * 10000
data[NPxF][k] = data['MxF'][k] / data['NxF'][k] * 10000
else:
for k in range(w+1-s):
data[NPxM][k] = data['MxM'][k] / (data['NxM'][k] - data['NxM'][k+s]) * 10000
data[NPxF][k] = data['MxF'][k] / (data['NxF'][k] - data['NxF'][k+s]) * 10000
return data[['x',NPxM,NPxF]]
dt1= ZhongShen(data,0,True,60) # 缴费至59岁
dt2= ZhongShen(data,0,False,60) # 趸缴
dt3= ZhongShen(data,10,False,60) # 缴费10年
dt4= ZhongShen(data,20,False,60) # 缴费20年
dt5= ZhongShen(data,106,False,60) # 终身缴费
pd.concat([dt1,dt2,dt3,dt4,dt5],axis=1).iloc[:,[0,1,2,4,5,7,8,10,11,13,14]]
## 两全保险净保费计算
def LiangQuan(t,s,data):
NPxM = 'LQNPxM' + '_' +str(t) +'_' + str(s)
NPxF = 'LQNPxF' + '_' +str(t) +'_' + str(s)
data[NPxM]=None
data[NPxF]=None
for k in range(w+1-t):
if s==0:
data[NPxM][k] = (data['MxM'][k] - data['MxM'][k+t] + data['DxM'][k+t]) / data['DxM'][k]*10000
data[NPxF][k] = (data['MxF'][k] - data['MxF'][k+t] + data['DxF'][k+t]) / data['DxF'][k]*10000
else:
if s < t+1:
data[NPxM][k] = (data['MxM'][k] - data['MxM'][k+t] + data['DxM'][k+t]) / (data['NxM'][k]-data['NxM'][k+s])*10000
data[NPxF][k] = (data['MxF'][k] - data['MxF'][k+t] + data['DxF'][k+t]) / (data['NxF'][k]-data['NxF'][k+s])*10000
return data[['x',NPxM,NPxF]]
t=20 # 20年两全保险
dt1= LiangQuan(t,0,data) # 趸缴
dt2 = LiangQuan(t,10,data) # 10年缴费
dt3 = LiangQuan(t,20,data) # 20年缴费
pd.concat([dt1,dt2,dt3],axis=1)[0:w+1-t].iloc[:,[0,1,2,4,5,7,8]]
净保费的计算基于一定的死亡率以及 利率假设,如果死亡率或者利率发生变化,那么净保费的计算结果也会跟着改变。下面将对死亡率和利率分别进行敏感性分析,采用的具体方法为控制变量法。
(1)死亡率敏感性分析
首先我们先观察当死亡率发生变化时,相应净保费产生的变化。我们将以终身寿险终身缴费和20年定期寿险20年期缴为例,计算当利率假设不变(2.5%)、基准死亡率采用 C L 1 CL1 CL1时,死亡率发生正负10%的变化时,相应的净保费为多少。
dt_sen = data[['x','QxM']]
## 定期寿险净保费计算
def DingQi2(t,s,data,BH):
DSNPx = 'DSNPx' + BH
data[DSNPx]=None
for k in range(w+1-t):
if s==0:
data[DSNPx][k] = (data['MxM'][k] - data['MxM'][k+t])/data['DxM'][k]*10000
else:
if s < t+1:
data[DSNPx][k] = (data['MxM'][k] - data['MxM'][k+t])/(data['NxM'][k]-data['NxM'][k+s])*10000
return data[['x',DSNPx]]
## 终身寿险终身缴费净保费计算
def ZhongShen2(data,BH):
ZSSNPx = 'ZSSNPx' + BH
data[ZSSNPx]=None
for k in range(w+1):
data[ZSSNPx][k] = data['MxM'][k] / data['DxM'][k] * 10000
return data[['x',ZSSNPx]]
## 计算换算表
def middle(data,ii=0.025):
# 定价利率不变
v = 1 / (1+ii)
w = data['QxM'].count() -1 # 极限年龄
data['PxM'] = 1- data['QxM'] # 计算生存概率
############# 计算中间变量
data['lxM'] = None
data['dxM'] = None
data['exM'] = None
## 计算生存人数
for k in range(w+1):
if k == 0:
data['lxM'][0] = 100000
else:
data['lxM'][k] = data['lxM'][k-1] * data['PxM'][k-1]
## 计算死亡人数
for k in range(w+1):
if k < w:
data['dxM'][k] = data['lxM'][k] - data['lxM'][k+1]
else:
data['dxM'][k] = data['lxM'][k]
# 计算平均余命
for k in range(w+1):
if k < w:
exM =0
for t in range(k+1,w+1):
exM = exM + data['lxM'][t]
data['exM'][k] = exM / data['lxM'][k] + 0.5
else:
data['exM'][k] = 0.5
data['DxM'] = (v ** data['x']) * data['lxM'] # 计算Dx
data['CxM'] = (v ** (data['x']+0.5)) * data['dxM'] # 计算Cx
# 计算Mx
data['MxM'] = None
for k in range(w+1):
mxM=0
for t in range(k,w+1):
mxM = mxM + data['CxM'][t]
data['MxM'][k] = mxM
# 计算Nx
data['NxM'] = None
for k in range(w+1):
nxM=0
for t in range(k,w+1):
nxM = nxM + data['DxM'][t]
data['NxM'][k] = nxM
# 计算Rx
data['RxM'] = None
for k in range(w+1):
rxM=0
for t in range(k,w+1):
rxM = rxM + data['MxM'][t]
data['RxM'][k] = rxM
# 计算Sx
data['SxM'] = None
for k in range(w+1):
sxM=0
for t in range(k,w+1):
sxM = sxM + data['NxM'][t]
data['SxM'][k] = sxM
return data
## 死亡率为基准情形
dt_sen = middle(dt_sen,ii=0.025)
dt1 = DingQi2(20,20,dt_sen,BH='bubian')
dt2 = ZhongShen2(dt_sen,BH='bubian')
dt_basic = pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,3]]
dt_basic
## 死亡率负变化10%
ttt = 0.1
dt_sen['QxM'] = dt_sen['QxM'] * (1-ttt)
dt_sen = middle(dt_sen,ii=0.025)
dt1 = DingQi2(20,20,dt_sen,BH='fubianhua')
dt2 = ZhongShen2(dt_sen,BH='fubianhua')
dt_basic2 = pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,3]]
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 = DingQi2(20,20,dt_sen,BH='zhengbianhua')
dt2 = ZhongShen2(dt_sen,BH='zhengbianhua')
dt_basic3 = pd.concat([dt1,dt2],axis=1)[21:41].iloc[:,[0,1,3]]
dt_basic3
dt_basic = pd.concat([dt_basic,dt_basic2,dt_basic3],axis=1).iloc[:,[0,1,2,4,5,7,8]]
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['DSNPxbubian'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSNPxfubianhua'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['DSNPxzhengbianhua'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('20年缴费20年定期寿险净保费随死亡率的变化')
plt.legend()
plt.show()
plt.figure(figsize=(10,10))
plt.plot(dt_basic['x'],dt_basic['ZSSNPxbubian'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPxfubianhua'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPxzhengbianhua'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('终身缴费终身寿险净保费随死亡率的变化')
plt.legend()
plt.show()
结果如下两张图所示:
由上面两张图可知,随着死亡率升高,两种保险的保费都增加,这是死亡保险的共同特征。另外,以39岁为例,定期寿险保费变化的相对比率大于终身寿险的保费变化的相对比率,所以,相对而言,定期寿险对于死亡率的变化更加敏感。
(2)利率敏感性分析
同样思路,我们固定死亡率假设,仍然采用采用 C L 1 CL1 CL1,通过改变利率假设,计算不同利率条件下对应的净保费。以缴费期20年的终身寿险和以缴费期20年的两全保险为例,观察利率变动对净保费的影响,并截取18-60年龄段的数据来做简单分析。
dt_sen = data[['x','QxM']]
## 两全保险净保费计算
def LiangQuan2(t,s,data,ii=0.025):
LQNPx = 'LQNPx' + '_' + str(ii)
data[LQNPx]=None
for k in range(w+1-t):
if s==0:
data[LQNPx][k] = (data['MxM'][k] - data['MxM'][k+t] + data['DxM'][k+t]) / data['DxM'][k]*10000
else:
if s < t+1:
data[LQNPx][k] = (data['MxM'][k] - data['MxM'][k+t] + data['DxM'][k+t]) / (data['NxM'][k]-data['NxM'][k+s])*10000
return data[['x',LQNPx]]
## 终身寿险缴费20年净保费计算
def ZhongShen3(data,s,ii=0.025):
ZSSNPx = 'ZSSNPx' + '_' + str(ii)
data[ZSSNPx]=None
for k in range(w+1-s):
data[ZSSNPx][k] = data['MxM'][k] / (data['NxM'][k] - data['NxM'][k+s]) * 10000
return data[['x',ZSSNPx]]
## 利率为基准情形
ii = 0.025
dt_sen = middle(dt_sen,ii=ii)
dt1 = LiangQuan2(20,20,dt_sen,ii=ii)
dt2 = ZhongShen3(dt_sen,s=20,ii=ii)
dt_basic = pd.concat([dt1,dt2],axis=1)[18:61].iloc[:,[0,1,3]]
dt_basic
## 利率为下浮0.5%情形
ii = 0.02
dt_sen = middle(dt_sen,ii=ii)
dt1 = LiangQuan2(20,20,dt_sen,ii=ii)
dt2 = ZhongShen3(dt_sen,s=20,ii=ii)
dt_basic2_1 = pd.concat([dt1,dt2],axis=1)[18:61].iloc[:,[0,1,3]]
dt_basic2_1
## 利率为下浮1%情形
ii = 0.015
dt_sen = middle(dt_sen,ii=ii)
dt1 = LiangQuan2(20,20,dt_sen,ii=ii)
dt2 = ZhongShen3(dt_sen,s=20,ii=ii)
dt_basic2_2 = pd.concat([dt1,dt2],axis=1)[18:61].iloc[:,[0,1,3]]
dt_basic2_2
## 利率为上浮0.5%情形
ii = 0.03
dt_sen = middle(dt_sen,ii=ii)
dt1 = LiangQuan2(20,20,dt_sen,ii=ii)
dt2 = ZhongShen3(dt_sen,s=20,ii=ii)
dt_basic3_1 = pd.concat([dt1,dt2],axis=1)[18:61].iloc[:,[0,1,3]]
dt_basic3_1
## 利率为上浮1%情形
ii = 0.035
dt_sen = middle(dt_sen,ii=ii)
dt1 = LiangQuan2(20,20,dt_sen,ii=ii)
dt2 = ZhongShen3(dt_sen,s=20,ii=ii)
dt_basic3_2 = pd.concat([dt1,dt2],axis=1)[18:61].iloc[:,[0,1,3]]
dt_basic3_2
dt_basic = pd.concat([dt_basic,dt_basic2_1,dt_basic2_2,dt_basic3_1,dt_basic3_2],axis=1).iloc[:,[0,1,2,4,5,7,8,10,11,13,14]]
dt_basic
plt.figure(figsize=(10,5))
plt.plot(dt_basic['x'],dt_basic['LQNPx_0.025'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['LQNPx_0.02'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['LQNPx_0.015'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['LQNPx_0.03'],color='darkgreen',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['LQNPx_0.035'],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['ZSSNPx_0.025'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPx_0.02'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPx_0.015'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPx_0.03'],color='darkgreen',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['ZSSNPx_0.035'],color='orange',linewidth=2.0,linestyle='--')
plt.title('不同利率下20年两全保险20年缴费期净保费随死亡率的变化')
plt.legend()
plt.show()
结果如下两图所示:
通过以上两张图,我们可以发现,净保费随着利率的升高而减少,并且在利率较小的时候,净保费对利率的敏感性更强。从年龄上看,随着投保年龄的增长,所需要缴纳的净保费也会升高。
本实验的目的是熟悉毛保费的计算,了解费用率结构对毛保费的影响。
本章节的实验内容为:设计定期寿险、终身寿险、两全保险的不同缴费期的费用比例,从而得到毛保费费率表。
本章节仍然采用上章编制生命表换算表设计的保险产品,定期寿险、两全保险的费用率假设如下:
终身寿险费用假设如下:
(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万元为单位保额,运用Python计计算单位保额对应的毛保费。
未完待续