WHO各国预期寿命影响因素分析与轻量回归预测
1 研究背景
预期寿命是衡量一个国家或地区总体死亡水平的重要综合指标。世界卫生组织将其定义为:在特定年份和地区,如果一个人余生持续经历当时各年龄、各性别死亡率,其平均可预期生存年数。该指标既与医疗服务和疾病防控直接相关,也受到教育、收入、营养、环境、公共治理和社会保障等因素影响。
2000年以来,全球传染病控制、母婴保健、疫苗接种和慢性病管理总体改善,许多国家预期寿命持续上升。与此同时,不同国家的改善速度并不一致,低收入地区仍可能面临成人早逝、艾滋病、儿童死亡、营养不足和基础公共卫生服务不足等复合风险。仅观察全球均值容易掩盖这种结构性差异。
研究背景中的三个现实矛盾
总体进步与国家分化平均预期寿命上升并不意味着低寿命国家同步追赶,首尾国家的长期平均水平仍相差数十年。
经济增长与健康转化GDP 与寿命呈正向关系,但高收入区间存在边际趋缓,经济资源需要通过教育、公共卫生和医疗体系转化为健康产出。
预测能力与因果解释机器学习能够识别复杂的预测结构,但模型重要性不是政策因果效应,仍需结合面板设计和外部验证。
完整代码报告数据https://mbd.pub/o/bread/YZaUlJ1uaw==
2 研究意义与研究问题
2.1 研究意义
方法意义:展示一个数据量适中、流程完整的 Kaggle 回归案例,从原始 CSV 到中文可视化、统计解读和模型评估均可复现,适合作为 Python 数据分析与机器学习入门案例。
实践意义:通过国家—年度数据观察寿命、疾病负担、教育、收入和免疫接种的共同变化,为公共卫生资源优先级讨论提供描述性证据。
表达意义:所有图题、坐标轴和分析说明均采用中文,图后直接给出数据解读,便于形成博客文章、课程报告或业务分析稿。
2.2 研究问题
问题一2000—2015 年全球平均预期寿命呈现怎样的变化趋势?
问题二发达国家与发展中国家的寿命水平、离散程度和改善速度有何不同?
问题三成人死亡率、教育、资源收入、艾滋病负担、疫苗接种和 GDP 与预期寿命存在怎样的统计关系?
问题四简单线性模型与轻量随机森林的预测表现有何差异,哪些变量在模型中最重要?
3 数据来源
数据来自《Life Expectancy (WHO)》页面。根据数据集说明,数据汇集了世界卫生组织及联合国相关指标,包含预期寿命、死亡率、免疫接种、卫生支出、疾病负担、GDP、人口、教育和资源收入构成等变量。原始文件经核验为 2,938 行、22 列,覆盖 193 个国家。
项目 | 内容 |
Kaggle数据集 | Life Expectancy (WHO) / kumarajarshi |
时间范围 | 2000—2015年 |
空间范围 | 193个国家 |
样本结构 | 国家—年度面板,共2,938条记录 |
目标变量 | Life expectancy(预期寿命,岁) |
4 变量体系与数据处理
变量组 | 字段示例 | 分析含义 |
识别变量 | Country、Year、Status | 国家、年份与发展状态 |
目标变量 | Life expectancy | 预期寿命(岁) |
死亡与疾病 | Adult Mortality、infant deaths、under-five deaths、HIV/AIDS、Measles | 成人与儿童死亡、疾病负担 |
免疫与卫生 | Hepatitis B、Polio、Diphtheria、Total expenditure、percentage expenditure | 疫苗覆盖与卫生投入 |
生活与营养 | Alcohol、BMI、thinness | 酒精、体重与消瘦指标 |
社会经济 | GDP、Population、Income composition of resources、Schooling | 经济、人口、资源与教育 |
5 数据质量与目标变量分布
# FIGURES: 01_缺失率.png missing = (df.isna().mean() * 100).sort_values(ascending=False) missing = missing[missing > 0] missing_cn = { "Population": "人口", "Hepatitis B": "乙肝接种率", "GDP": "人均GDP", "Total expenditure": "卫生总支出", "Alcohol": "酒精消费", "Income composition of resources": "资源收入构成指数", "Schooling": "受教育年限", "thinness 1-19 years": "1—19岁消瘦率", "thinness 5-9 years": "5—9岁消瘦率", "BMI": "BMI", "Diphtheria": "白喉接种率", "Polio": "脊灰接种率", "Life expectancy": "预期寿命", "Adult Mortality": "成人死亡率" } missing_labels = [missing_cn.get(x, x) for x in missing.index] fig, ax = plt.subplots(figsize=(10, 5.8)) sns.barplot(x=missing.values, y=missing_labels, color=COLORS[0], ax=ax) ax.set_title("图1 各字段缺失率", fontsize=16, fontweight="bold", pad=14) ax.set_xlabel("缺失率(%)") ax.set_ylabel("字段") for i, value in enumerate(missing.values): ax.text(value + 0.25, i, f"{value:.1f}%", va="center", fontsize=9) ax.set_xlim(0, max(missing.values) * 1.18) sns.despine(left=True, bottom=True) plt.tight_layout() plt.savefig(CHART_DIR / "01_缺失率.png", dpi=180, bbox_inches="tight") plt.show() print("缺失率最高的 10 个字段:") print(missing.head(10).round(2).to_string())人口、乙肝接种率和 GDP 的缺失率分别约为 22.2%、18.8% 和 15.2%,明显高于其他字段。若直接删除所有缺失行,会损失大量国家—年度记录,因此模型使用中位数填补,并将缺失问题纳入结果局限。
2,928 条有效记录的平均预期寿命为 69.22 岁,中位数为 72.10 岁。均值低于中位数,说明低寿命国家形成左侧长尾;四分位区间为 63.10—75.70 岁。
6 全球趋势与发展状态趋势
发达国家均值由 76.80 岁升至 80.71 岁,发展中国家由 64.62 岁升至 69.69 岁。2015 年两组差距仍约 11.02 岁,总体进步并未消除结构性差异。
7 发展状态差异
发达国家预期寿命均值为 79.20 岁,发展中国家为 67.11 岁,均值差约 12.09 岁。发展中国家箱体更宽、低值离群点更多,内部差异明显更大。
7.1 实证含义
发展状态是对经济与制度环境的高度概括。箱线图说明它与寿命水平显著相关,但组内仍存在大量重叠和离散,后续需要用教育、疾病负担、免疫和收入等更具体变量解释差异。
8 国家长期平均水平排名
# FIGURES: 06_国家排名.png country_mean = df.groupby("Country")["Life expectancy"].mean().dropna().sort_values() bottom = country_mean.head(10) top = country_mean.tail(10).sort_values() rank_df = pd.concat([bottom, top]).reset_index() rank_df["组别"] = ["后10名"] * 10 + ["前10名"] * 10 country_cn = { "Sierra Leone": "塞拉利昂", "Central African Republic": "中非共和国", "Lesotho": "莱索托", "Angola": "安哥拉", "Malawi": "马拉维", "Côte d'Ivoire": "科特迪瓦", "Chad": "乍得", "Zimbabwe": "津巴布韦", "Swaziland": "斯威士兰", "Nigeria": "尼日利亚", "Japan": "日本", "Sweden": "瑞典", "Iceland": "冰岛", "Switzerland": "瑞士", "France": "法国", "Italy": "意大利", "Spain": "西班牙", "Australia": "澳大利亚", "Norway": "挪威", "Canada": "加拿大" } rank_df["国家"] = rank_df["Country"].map(country_cn).fillna(rank_df["Country"]) fig, ax = plt.subplots(figsize=(10, 8)) bar_colors = rank_df["组别"].map({"后10名": COLORS[3], "前10名": COLORS[1]}) ax.barh(rank_df["国家"], rank_df["Life expectancy"], color=bar_colors) ax.axvline(country_mean.mean(), color="#52606D", linestyle="--", linewidth=1.5, label=f"国家均值 {country_mean.mean():.1f}") ax.set_title("图6 2000—2015年国家平均预期寿命前10名与后10名", fontsize=15, fontweight="bold", pad=14) ax.set_xlabel("平均预期寿命(岁)") ax.set_ylabel("") ax.legend(frameon=False, loc="lower right") for y, value in enumerate(rank_df["Life expectancy"]): ax.text(value + 0.5, y, f"{value:.1f}", va="center", fontsize=8.5) ax.set_xlim(0, 90) sns.despine(left=True, bottom=True) plt.tight_layout() plt.savefig(CHART_DIR / "06_国家排名.png", dpi=180, bbox_inches="tight") plt.show() print("前10名:") print(country_mean.sort_values(ascending=False).head(10).round(2).to_string()) print("\n后10名:") print(country_mean.head(10).round(2).to_string())日本、瑞典和冰岛等国家研究期平均预期寿命超过 82 岁;塞拉利昂、中非共和国和莱索托不足 49 岁。最高国家与最低国家相差 36.42 岁,长期健康产出差异十分突出。
9 变量相关性结构
10 成人死亡与教育关系
成人死亡率与预期寿命相关系数为 -0.696,整体呈明显负向关系。降低 15—60 岁人群的过早死亡,可能是改善国家寿命水平的重要组成部分。
11 资源条件与疾病负担
艾滋病负担与预期寿命相关系数为 -0.557。高负担记录主要集中在较低寿命区间,且多属于发展中国家,提示持续筛查、治疗和防控的重要性。
12 模型设计与表现比较
建模样本共 2,928 条,训练集 2,342 条、测试集 586 条。模型不使用国家名称,仅使用年份、发展状态和 18 个健康与社会经济变量。评估指标包括 MAE、RMSE 和 R²;误差指标越低越好,R² 越接近 1 越好。
模型 | MAE(岁) | RMSE(岁) | R² |
线性回归 | 2.927 | 3.951 | 0.819 |
随机森林 | 1.155 | 1.761 | 0.964 |
13 预测诊断
# FIGURES: 16_预测诊断.png best_pred = predictions["随机森林"] residuals = y_test.to_numpy() - best_pred fig, axes = plt.subplots(1, 2, figsize=(12, 5)) axes[0].scatter(y_test, best_pred, alpha=0.45, s=26, color=COLORS[0], edgecolor="none") low = min(y_test.min(), best_pred.min()) high = max(y_test.max(), best_pred.max()) axes[0].plot([low, high], [low, high], linestyle="--", color=COLORS[3], linewidth=2) axes[0].set_title("实际值与预测值") axes[0].set_xlabel("实际预期寿命(岁)") axes[0].set_ylabel("预测预期寿命(岁)") sns.histplot(residuals, bins=24, kde=True, color=COLORS[1], ax=axes[1]) axes[1].axvline(0, color=COLORS[3], linestyle="--", linewidth=2) axes[1].set_title("预测残差分布") axes[1].set_xlabel("残差:实际值-预测值(岁)") axes[1].set_ylabel("记录数") for ax in axes: sns.despine(ax=ax) fig.suptitle("图16 随机森林模型预测诊断", fontsize=16, fontweight="bold", y=1.02) plt.tight_layout() plt.savefig(CHART_DIR / "16_预测诊断.png", dpi=180, bbox_inches="tight") plt.show() print(f"平均残差:{residuals.mean():.3f} 岁") print(f"残差标准差:{residuals.std():.3f} 岁") print(f"绝对误差不超过2岁的比例:{(np.abs(residuals) <= 2).mean():.1%}")预测值总体贴近 45° 参考线,残差以 0 为中心,平均残差为 -0.057 岁;测试集中绝对误差不超过 2 岁的记录占 85.0%。低寿命极端样本处仍可见更大误差。
16 综合讨论
16.1 总体改善不等于差距消失
全球均值在 16 年间提高近 4.9 岁,发达国家和发展中国家均有改善,但 2015 年两组仍相差约 11 岁。排名和箱线图进一步显示,低寿命国家不仅平均水平较低,内部波动也更大。
16.2 健康结果具有多因素共同作用特征
教育、资源收入、GDP 与预期寿命呈正向关系,成人死亡和艾滋病负担呈负向关系,疫苗覆盖在两类国家间存在差距。这些因素并非相互独立:教育与收入可能共同影响医疗利用,疾病负担又与公共卫生能力和营养水平相互关联。
16.3 非线性模型更适合预测,但不自动更可解释
随机森林显著优于线性回归,说明简单线性假设不足以刻画复杂关系。然而,预测性能提升伴随解释复杂度增加。报告通过特征重要性和残差图补充解释,同时明确其非因果属性。
16.4 数据质量决定结论上限
人口、GDP 和乙肝接种率缺失较多,部分指标可能存在国家统计能力差异或口径变化。中位数填补保证了模型可运行,但无法消除非随机缺失带来的偏差。
17 研究结论与实践建议
17.1 主要结论
结论一:2000—2015 年样本内全球平均预期寿命持续提高,累计增长约 4.87 岁。
结论二:发达国家与发展中国家平均预期寿命相差约 12.09 岁,且发展中国家内部差异更大。
结论三:教育和资源收入构成与寿命呈较强正相关,成人死亡和艾滋病负担呈较强负相关。
结论四:发达国家三类基础疫苗覆盖率整体更高,发展中国家仍有约 8—14 个百分点的改善空间。
结论五:轻量随机森林测试集 R² 约为 0.964,优于线性回归,但普通随机划分可能高估对全新国家的泛化能力。
17.2 实践建议
公共卫生优先:低寿命国家应持续降低成人早逝与艾滋病负担,完善基层筛查、连续治疗和慢性病管理。
基础服务补短:提高脊灰、白喉和乙肝疫苗覆盖率,强化儿童健康和基础免疫体系。
教育与健康协同:将健康素养、基础教育、妇幼健康和医疗可及性作为协同投入方向。
分析体系升级:后续使用按国家分组验证、时间外推和面板回归,区分预测关联与政策因果。
具体细节见原文
创造不易,谢谢各位多多点赞收藏