寿险精算实验四——年金产品的净保费和毛保费计算


       本实验的目的是熟悉年金产品的特点,熟练计算各种年金的保费。
       本章节的实验内容为:根据利率、死亡率、费用率等假设,计算设计年金产品的净保费以及毛保费。

4.1 产品设计

       设计产品如下:60岁给付终生年金,利率2.5%,给付金额1万元,不同缴费模式下的费用率假设如下所示:
在这里插入图片描述

4.2 计算产品的保费

4.2.1 保费计算公式

       净保费:
       趸缴净保费: N P x = N 60 D x NP_x=\frac{N_{60}}{D_x} NPx=DxN60

       10年缴费净保费: N P x = N 60 N x − N x + 10 NP_x=\frac{N_{60}}{N_x-N_{x+10}} NPx=NxNx+10N60

       20年缴费净保费: N P x = N 60 N x − N x + 20 NP_x=\frac{N_{60}}{N_x-N_{x+20}} NPx=NxNx+20N60

       缴费至59岁净保费: N P x = N 60 N x − N x + 60 NP_x=\frac{N_{60}}{N_x-N_{x+60}} NPx=NxNx+60N60

       毛保费:
       趸交毛保费: G P x = 10000 N 60 0.9 D x GP_x=\frac{10000N_{60}}{0.9D_x} GPx=0.9Dx10000N60

       10年缴费毛保费: G P x = 10000 N 60 N x − N x + 10 − ( 0.5 D x + 0.3 D x + 1 + . . . + 0.08 D x + 10 ) GP_x=\frac{10000N_{60}}{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)10000N60

       20年缴费毛保费: G P x = 10000 N 60 N x − N x + 20 − ( 0.6 D x + 0.4 D x + 1 + . . . + 0.08 D x + 20 ) GP_x=\frac{10000N_{60}}{N_x-N_{x+20}-(0.6D_x+0.4D_{x+1}+...+0.08D_{x+20})} GPx=NxNx+20(0.6Dx+0.4Dx+1+...+0.08Dx+20)10000N60

       缴费至59岁毛保费: G P x = 10000 N 60 N x − N x + 60 − ( 0.6 D x + 0.4 D x + 1 + . . . + 0.08 D x + 60 ) GP_x=\frac{10000N_{60}}{N_x-N_{x+60}-(0.6D_x+0.4D_{x+1}+...+0.08D_{x+60})} GPx=NxNx+60(0.6Dx+0.4Dx+1+...+0.08Dx+60)10000N60

4.2.2 净保费计算

       首先,在寿险精算实验三——传统寿险毛保费的计算这一章节,我们已经重新定义了换算表函数。下面将根据生命表中的“养老类业务表”,并假设保额以1万元为单位保额,运用Python计算单位保额对应的净保费。

data = pd.read_excel('LifeTable.xlsx',sheet_name=2)  # 第0个表是非养老类业务一表,第1个表是非养老类业务二表,第2个表是养老类业务表

def NianJin(s,data): #s=0趸交,s=61缴费至59岁
    NPxM = 'NJNPxM' + '_'  + str(s)
    NPxF = 'NJNPxF' + '_'  + str(s)
    data[NPxM]=None
    data[NPxF]=None
    if s==0 or s==61:
        ww=59
    elif s<60:
        ww=60-s
    for k in range(ww+1):
        if s == 0:
            data[NPxM][k] = data['NxM'][60] / data['DxM'][k]*10000
            data[NPxF][k] = data['NxF'][60] / data['DxF'][k]*10000
        elif s == 61:
            data[NPxM][k] = data['NxM'][60] / (data['NxM'][k]-data['NxM'][60])*10000
            data[NPxF][k] = data['NxF'][60] / (data['NxF'][k]-data['NxF'][60])*10000
        elif s<61:
            if k<61-s:
                data[NPxM][k] = data['NxM'][60] / (data['NxM'][k]-data['NxM'][k+s])*10000
                data[NPxF][k] = data['NxF'][60] / (data['NxF'][k]-data['NxF'][k+s])*10000
    return data[['x',NPxM,NPxF]]
dt_sen = middle(data,ii=0.025)
dt1 = NianJin(0,dt_sen)  # 趸交
dt2 = NianJin(10,dt_sen) # 缴费10年
dt3 = NianJin(20,dt_sen)  # 缴费20年
dt4 = NianJin(61,dt_sen)  # 缴费至59岁

pd.concat([dt1,dt2,dt3,dt4],axis=1)[20:31].iloc[:,[0,1,2,4,5,7,8,10,11]]

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

4.2.3 毛保费计算

       更新数据:

data = pd.read_excel('LifeTable.xlsx',sheet_name=2)  # 第0个表是非养老类业务一表,第1个表是非养老类业务二表,第2个表是养老类业务表

       依据设计的产品特征,重新定义费用减项函数:

def ChargeDeduction(data,s,k,u,v0,v1,v2,v3,v4):  #s=0表示趸交
    ChargeM = 'ChargeM' + '_'  + str(s)
    ChargeF = 'ChargeF' + '_'  + str(s)
    data[ChargeM]=None
    data[ChargeF]=None
    if s==0 or k==59:
        data[ChargeM][k] = data['DxM'][k]*u 
        data[ChargeF][k] = data['DxF'][k]*u 
    elif s==1 or (k in [55,56,57,58] and s==1):
        data[ChargeM][k] = data['DxM'][k]*v0 
        data[ChargeF][k] = data['DxF'][k]*v0 
    elif s==2 or (k in [55,56,57] and s==2):
        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 s==3 or (k in [55,56] and s==3):
        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 s==4 or (k ==55 and 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['DxF'][k]*v0 + data['DxF'][k+1]*v1 + data['DxF'][k+2]*v2 + data['DxF'][k+3]*v3 
    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
        if s<61:
            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
        else:
            for ss in range(5,61-k):
                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 NianJinG(s,data,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08): #s=0趸交,s=61缴费至59岁
    GPxM = 'NJGPxM' + '_'  + str(s)
    GPxF = 'NJGPxF' + '_'  + 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 or s==61:
        ww=59
    elif s<60:
        ww=60-s
    for k in range(ww+1):
#         st = 59 - k
        if s == 0:
            data =  ChargeDeduction(data,s,k,u,v0,v1,v2,v3,v4)
            data[GPxM][k] = data['NxM'][60] / (data['DxM'][k] - data[ChargeM][k])*10000
            data[GPxF][k] = data['NxF'][60] / (data['DxF'][k] - data[ChargeF][k])*10000
        elif s == 61:
            data =  ChargeDeduction(data,s,k,u,v0,v1,v2,v3,v4)
            data[GPxM][k] = data['NxM'][60] / (data['NxM'][k] - data['NxM'][60] - data[ChargeM][k])*10000
            data[GPxF][k] = data['NxF'][60] / (data['NxF'][k] - data['NxF'][60] - data[ChargeF][k])*10000
        elif s<61:
            data =  ChargeDeduction(data,s,k,u,v0,v1,v2,v3,v4)
            data[GPxM][k] = data['NxM'][60] / (data['NxM'][k] - data['NxM'][k+s] - data[ChargeM][k])*10000
            data[GPxF][k] = data['NxF'][60] / (data['NxF'][k] - data['NxF'][k+s] - data[ChargeF][k])*10000
    return data[['x',GPxM,GPxF]]
dt_sen = middle(data,ii=0.025)

dt1= NianJinG(0,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 趸缴
dt2= NianJinG(10,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 10年缴费
dt3= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt4= NianJinG(61,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 缴费至59岁
pd.concat([dt1,dt2,dt3,dt4],axis=1)[20:31].iloc[:,[0,1,2,4,5,7,8,10,11]]

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

4.3 毛保费敏感性分析

       以缴费期为20年的年金产品为例,分别分析年金产品毛保费对死亡率、利率和费用率的敏感性,具体如下:

4.3.1死亡率敏感性分析

       观察死亡率分别增加、减少10%对毛保费的影响,并截取21-40年龄段数据观察。

data = pd.read_excel('LifeTable.xlsx',sheet_name=2) 

## 死亡率为基准情形
dt_sen = middle(data,ii=0.025)
dt_basic1= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic1
## 死亡率负变化10%
ttt = 0.1
dt_sen['QxM'] = dt_sen['QxM'] * (1-ttt)
dt_sen = middle(dt_sen,ii=0.025)
dt_basic2= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic2
## 死亡率正变化10%
ttt = 0.1
dt_sen['QxM'] = dt_sen['QxM'] / (1-ttt) * (1+ttt)  # 先倒算回标准死亡率
dt_sen = middle(dt_sen,ii=0.025)
dt_basic3= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic3
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3],axis=1)[21:41].iloc[:,[0,1,2,4,5,7,8]]
pcol=['x','NJGPxM_20','NJGPxF_20','NJGPxM_20-','NJGPxF_20-','NJGPxM_20+','NJGPxF_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=(8,5))
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20-'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20+'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('年金毛保费随死亡率变化')
plt.legend()
plt.show()

在这里插入图片描述

4.3.2利率敏感性分析

       当利率分别为1.5%、2%、2.5%、3%、3.5%时,观察毛保费的变化。

data = pd.read_excel('LifeTable.xlsx',sheet_name=2) 
data1 = middle(data,ii=0.025)

## 利率为基准情形
ii = 0.025
dt_sen = middle(data1,ii=ii)
dt_basic1= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic1
## 利率为下浮0.5%情形
ii = 0.02
dt_sen = middle(data1,ii=ii)
dt_basic2= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic2
## 利率为下浮1%情形
ii = 0.015
dt_sen = middle(data1,ii=ii)
dt_basic3= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic3
## 利率为上浮0.5%情形
ii = 0.03
dt_sen = middle(data1,ii=ii)
dt_basic4= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic4
## 利率为上浮1%情形
ii = 0.035
dt_sen = middle(data1,ii=ii)
dt_basic5= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic5
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3,dt_basic4,dt_basic5],axis=1)[21:41].iloc[:,[0,1,2,4,5,7,8,10,11,13,14]]
pcol=['x','NJGPxM_20','NJGPxF_20','NJGPxM_20-0.5%','NJGPxF_20-0.5%','NJGPxM_20-1%',
      'NJGPxF_20-1%','NJGPxM_20+0.5%','NJGPxF_20+0.5%','NJGPxM_20+1%','NJGPxF_20+1%']
dt_basic.columns = pcol
dt_basic

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

plt.figure(figsize=(10,6))
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20-0.5%'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20-1%'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20+0.5%'],color='darkgreen',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20+1%'],color='orange',linewidth=2.0,linestyle='--')
plt.title('不同利率下的年金毛保费')
plt.legend()
plt.show()

在这里插入图片描述

4.3.3费用率敏感性

       分别假设费用率正负变化20%,观察毛保费变化。

data = pd.read_excel('LifeTable.xlsx',sheet_name=2) 

## 费用率为基准情形
dt_sen = middle(data,ii=0.025)
dt_basic1= NianJinG(20,dt_sen,u=0.1,v0=0.5,v1=0.3,v2=0.15,v3=0.08,v4=0.08)  # 20年缴费
dt_basic1
## 费用率负变化20%基准情形
dt_sen = middle(data,ii=0.025)
dt_basic2= NianJinG(20,dt_sen,u=0.1,v0=0.4,v1=0.24,v2=0.12,v3=0.064,v4=0.064)  # 20年缴费
dt_basic2
## 费用率正变化20%基准情形
dt_sen = middle(data,ii=0.025)
dt_basic3= NianJinG(20,dt_sen,u=0.1,v0=0.6,v1=0.36,v2=0.18,v3=0.096,v4=0.096)  # 20年缴费
dt_basic3
dt_basic = pd.concat([dt_basic1,dt_basic2,dt_basic3],axis=1)[21:41].iloc[:,[0,1,2,4,5,7,8]]
pcol=['x','NJGPxM_20','NJGPxF_20','NJGPxM_20-','NJGPxF_20-','NJGPxM_20+','NJGPxF_20+']
dt_basic.columns = pcol
dt_basic

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

plt.figure(figsize=(8,5))
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20'],color='red',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20-'],color='blue',linewidth=2.0,linestyle='--')
plt.plot(dt_basic['x'],dt_basic['NJGPxM_20+'],color='darkturquoise',linewidth=2.0,linestyle='--')
plt.title('年金毛保费随费用率变化')
plt.legend()
plt.show()

在这里插入图片描述

4.3.4结论

       年金产品毛保费随着死亡率的增加而减少,这种变化规律与寿险产品是相反的,因为年金产品为生存给付责任,死亡率越低,长寿风险越大,未来给付现值也就越大。
       年金产品毛保费随着利率减少而增大,随着费用率增加而增加,这种变化趋势与寿险是一样的,但是,年金产品对利率的敏感性比寿险产品大的多。

参考

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

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值