3. 死亡率数据基础
死亡率改善与长寿风险建模的第一步,不是选模型,而是把“人—时间—事件”三件事对齐。所谓死亡率数据基础,本质上是回答:在某个观察期内,有多少人处于风险中(暴露数),其中发生了多少死亡(死亡数),以及如何把这些计数转化为可比较、可建模的率。若这一层数据口径混乱,后续的Lee-Carter、CBD、APC等模型都会建立在流沙之上。
一、核心原理:从计数到率的桥梁
死亡率建模的原始输入通常只有两类:暴露数(Exposure)和死亡数(Deaths)。暴露数刻画“风险敞口”,死亡数刻画“事件发生”。两者相除得到粗死亡率,再经过时间与年龄的居中处理,得到中心死亡率。其核心关系可表示为:
粗死亡率(Crude Death Rate, CDR) = 死亡数 ÷ 平均暴露数
中心死亡率(Central Death Rate, mx) ≈ 死亡数 ÷ 中心暴露数(即年龄区间中点处的暴露)
死亡概率(qx) 与 mx 的近似关系:qx ≈ mx / (1 + 0.5·mx)(在均匀死亡假设下)
这里的关键区别在于:粗死亡率通常用于描述总体或粗略分组,而中心死亡率是生命表与随机死亡率模型的标准输入。中心死亡率假设死亡在年龄区间内均匀发生,因此用区间中点的暴露作为分母更合理。
二、数据来源与质量检查
常见数据来源包括:国家统计部门的人口普查与年度人口抽样、社保与养老金管理机构的参保死亡记录、保险公司的承保与理赔数据库、以及Human Mortality Database(HMD)等公开整理数据。不同来源的覆盖人群、年龄申报准确性、死亡登记完整性差异很大。
数据质量检查应至少覆盖以下清单:
| 检查项 | 常见问题 | 处理建议 |
|---|---|---|
| 年龄申报 | 高龄堆积、尾数偏好(0/5) | 平滑、合并高龄组、使用可信高龄数据 |
| 死亡登记完整性 | 漏报、延迟登记 | 与普查或社保记录交叉验证 |
| 暴露数口径 | 年初/年末人口混用 | 统一使用平均人口或中心暴露 |
| 时间对齐 | 死亡数与暴露数年份错位 | 按日历年和年龄组严格对齐 |
| 异常值 | 死亡数为0或率突变 | 标记、平滑或合并相邻年龄组 |
建议在建模前生成“数据质量日志”,记录每个年龄组、每个日历年的暴露数、死亡数、粗死亡率及异常标记。这份日志是后续复盘和模型解释的重要依据。
三、方法流程:从原始数据到中心死亡率
- 确定观察单元:通常为“日历年 × 年龄组 × 性别”。
- 计算暴露数:若有人口年初数P0和年末数P1,平均暴露为 (P0+P1)/2;若只有年中人口,可直接作为中心暴露。
- 汇总死亡数:按同一观察单元统计死亡人数,注意死亡发生时间应落在观察期内。
- 计算粗死亡率:CDR = D / E,其中D为死亡数,E为暴露数。
- 计算中心死亡率:mx = Dx / Excenter,Excenter为年龄区间中点暴露。
- 质量校验:检查mx是否随年龄单调上升、是否存在零值或极端值。
# 示例:用Python计算中心死亡率
import pandas as pd
df = pd.DataFrame({
'age_group': ['60-64', '65-69', '70-74'],
'exposure': [100000, 80000, 60000],
'deaths': [800, 1200, 1500]
})
df['cdr'] = df['deaths'] / df['exposure']
df['mx'] = df['deaths'] / df['exposure'] # 若exposure已是中心暴露
df['qx'] = df['mx'] / (1 + 0.5 * df['mx'])
print(df)
四、案例与误区复盘
假设某养老金计划有65-69岁男性参保人80,000人(年中数),当年死亡1,200人。则粗死亡率 = 1200/80000 = 0.015,即15‰。若该年龄组年初人口为78,000、年末为82,000,则平均暴露为80,000,结果一致。若误用年初人口78,000,则粗死亡率为15.38‰,高估约2.5%。
常见误区:①把粗死亡率直接当作中心死亡率用于生命表,忽略暴露数口径;②高龄组死亡数极少时直接计算率,导致mx为0或剧烈波动;③暴露数与死亡数的时间窗口不一致,例如用年中人口除以全年死亡;④忽略年龄申报堆积,导致某些年龄组死亡率异常偏高或偏低。
复盘时建议按“数据来源—口径—计算—校验”四步回溯。若发现某年龄组mx不随年龄上升,优先检查暴露数是否被低估或死亡数是否漏报,而不是急于调整模型。