寿险精算实验二——传统寿险净保费的计算
本实验的目的是用换算表来计算基本类型寿险产品的净保费。
本章节的实验内容:设计定期寿险、终身寿险、两全保险的投保年龄、缴费期及不同利率、不同生命表假设下的不同缴费期的净保费费率表。
1.1 净保费计算公式
以下公式适用期初缴费、期末赔付的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.2 运用Python计算保费
首先,在编制生命表换算表这一章节,我们已经得到编制好的换算表。下面将根据生命表中的“非养老类业务一表”,并假设保额以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]]
部分结果如图所示:
(2)终身寿险
## 终身寿险净保费计算
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]]
部分结果如图所示:
(3)两全保险
## 两全保险净保费计算
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.3 保费的敏感性分析
净保费的计算基于一定的死亡率以及 利率假设,如果死亡率或者利率发生变化,那么净保费的计算结果也会跟着改变。下面将对死亡率和利率分别进行敏感性分析,采用的具体方法为控制变量法。
(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] 李秀芳 编著:寿险精算实务实验教程[M],中国财政经济出版社2008年版
今天的文章净保险费怎么计算_寿险现金价值怎么计算[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/74009.html