1. 项目概述与核心价值
最近刚带着团队做完一个挺有意思的数据分析项目,核心就是围绕“影响城市居民身体健康的因素”这个主题展开深度挖掘。这其实源于去年我们内部的一次头脑风暴,当时大家讨论到,现在各种健康数据、城市数据那么多,但真正能把它们串起来,说清楚“一个城市里,到底哪些东西在悄悄影响我们的健康”的研究,其实并不多见。正好,去年“深圳杯”数学建模挑战赛的A题就是这个方向,虽然比赛已经过去,但这个课题的现实意义和挑战性一直吸引着我。所以,我们决定以这个赛题为蓝本,结合更丰富的真实世界数据和更贴近业务的分析思路,重新做一次完整的探索性研究。
这个项目本质上是一个多源数据融合下的城市健康影响因素归因分析。它要回答的核心问题很直接:在像深圳这样的一线城市,居民的身体健康指标(比如慢性病发病率、体检异常率、主观健康感受等)究竟与哪些城市环境、社会经济和个人行为因素存在显著关联?这些关联是线性的还是非线性的?不同人群(如不同年龄段、职业、居住区域)受到的影响是否存在差异?搞明白这些,不仅对公共卫生政策制定、城市规划有参考价值,对我们每个人理解自身健康与生活环境的关系也很有启发。
整个分析流程会涉及到数据工程、统计分析、机器学习和地理信息科学等多个领域的交叉。你需要处理的数据可能包括:宏观的城市统计年鉴(经济、教育、医疗资源)、中观的街道/社区级数据(绿化率、噪音、空气质量监测点数据)、微观的居民健康调查数据(可能来自匿名化的体检报告或问卷调查),甚至还有手机信令数据衍生的出行模式、POI(兴趣点)数据反映的生活便利度等。把这些维度各异、尺度不同的数据“对齐”并挖掘出有价值的信息,是项目最大的挑战,也是魅力所在。
如果你是对数据分析、公共健康、城市科学感兴趣的研究者、学生或从业者,或者你所在机构正关注“健康城市”建设,那么这次分享的从数据获取、清洗、建模到解读的全流程实战经验,应该能给你带来不少可以直接借鉴的思路和避坑指南。
2. 项目整体设计与分析框架
2.1 核心问题拆解与指标定义
接到“影响因素分析”这种题目,最忌讳一上来就埋头找数据、跑模型。第一步必须是把模糊的问题具体化、可操作化。我们团队首先花了大量时间进行问题拆解。
健康结局指标的定义:什么是“身体健康”?在研究中,我们需要将其转化为可量化的指标。我们将其分为三类:
- 客观生理指标:例如,从体检数据中提取的BMI指数、血压(收缩压/舒张压)、空腹血糖、血脂四项(总胆固醇、甘油三酯等)、肝功能酶(ALT/AST)。这些是连续变量或根据临床阈值转换的分类变量(如是否高血压、是否肥胖)。
- 疾病发生指标:特定慢性病的患病率,如高血压、糖尿病、冠心病、慢性阻塞性肺疾病(COPD)的医生诊断记录。这通常是二分类变量(是/否)。
- 主观健康感知:通过调查问卷获取的“自评健康状况”(如非常好、好、一般、差、非常差),可以转化为有序分类变量或分数。
潜在影响因素的维度梳理:我们将可能的影响因素归纳为四个层面,构建了一个分析框架:
- 个体与行为层:年龄、性别、教育程度、职业、收入水平、吸烟史、饮酒频率、体育锻炼频率、饮食习惯(如蔬果摄入量)、睡眠时长。
- 社区与建成环境层:这是分析的重点和特色。包括:
- 物理环境:年均PM2.5浓度、年均噪音分贝、社区绿化覆盖率、到最近公园的距离、步行道密度。
- 服务设施可达性:到最近社区健康服务中心的距离、到最近三甲医院的距离、到最近大型超市的距离、到最近体育设施的距离。这些距离通常通过路网分析计算最短路径时间或距离。
- 社会邻里环境:社区安全感、邻里互助程度(来自调查)、人口密度。
- 社会经济层:所在行政区的人均GDP、基尼系数(衡量收入不平等)、每千人医生数、每千人病床数。
- 宏观政策与环境层:这个层面数据较难获取,我们主要通过时间序列分析或引入年份虚拟变量来间接捕捉政策变化的影响,例如控烟条例实施的年份。
注意:指标并非越多越好。要优先选择理论上相关性强、数据可获得性高、质量相对可靠的指标。例如,“社区安全感”这种主观指标虽然重要,但如果缺乏可靠的调查数据,宁可不纳入,或用夜间灯光指数、街道摄像头密度等客观指标进行部分替代。
2.2 技术路线与模型选型
基于上述框架,我们设计的技术路线遵循“由浅入深、多模型验证”的原则。
第一阶段:描述性分析与相关性探索这是所有分析的基石。我们会制作一系列图表:
- 健康指标的空间分布图:使用GIS软件(如QGIS或ArcGIS)将社区级的疾病患病率在地图上可视化,直观发现是否存在“热点区域”。
- 单因素分析:对每一个潜在影响因素,分别分析与健康指标的关系。对于连续变量,用散点图加趋势线(线性或局部回归)观察;对于分类变量,用箱线图或分组条形图比较。同时计算Pearson或Spearman相关系数。
- 这个阶段的目标不是得出结论,而是发现数据特征、异常值,以及初步的相关性线索,为后续建模提供方向。
第二阶段:核心建模——多元回归与机器学习单因素分析会受混杂因素干扰,因此必须进行多因素综合分析。
- 多元线性/逻辑回归模型:这是解释性最强的经典方法。
- 模型形式:
健康指标 = β0 + β1*因素1 + β2*因素2 + ... + βk*因素k + ε - 关键操作:进行逐步回归或基于AIC/BIC准则的变量选择,防止过拟合。对于逻辑回归(用于二分类健康结局,如是否患病),结果以优势比(OR)呈现,解释为“在其他因素不变的情况下,该因素每增加一个单位,患病风险变为原来的OR倍”。
- 必须检查:多重共线性(通过方差膨胀因子VIF诊断,通常要求VIF<10)、残差的正态性和同方差性。
- 模型形式:
- 地理加权回归模型:这是本项目的亮点。普通回归假设关系在全研究区域内是恒定的(即β是常数),但这显然不符合现实。GWR允许回归系数随空间位置变化。
- 核心思想:在每一个社区的位置上,建立一个局部回归方程,其参数由邻近社区的数据加权估计得到(距离越近,权重越大)。
- 应用场景:非常适合回答“空气污染对健康的影响在市中心和郊区一样大吗?”、“医疗资源可及性的效应是否存在空间差异?”这类问题。我们使用
mgwr库(Python)或spgwr包(R)来实现。
- 机器学习模型(用于预测与特征重要性排序):当变量间存在复杂非线性交互时,传统回归可能力不从心。
- 随机森林 / 梯度提升树(如XGBoost):这类树模型能自动处理非线性关系和交互效应,且能输出变量的特征重要性分数。这为我们识别关键影响因素提供了另一个视角。
- 操作要点:将数据分为训练集和测试集,用交叉验证调参防止过拟合。模型的首要目的不是追求极致预测精度,而是解读特征重要性,并与回归模型的结果相互印证。
第三阶段:结果整合与机制探讨比较不同模型的结果。如果某个因素在逻辑回归中OR值显著大于1,在GWR中大部分区域系数为正且显著,在随机森林中的特征重要性排名也很靠前,那么它就是非常稳健的强影响因素。接下来,就需要结合文献和专业知识,去解释其背后的可能机制(如,PM2.5如何通过炎症反应影响心血管健康)。
3. 数据获取、清洗与融合实战
3.1 多源数据获取渠道与挑战
数据是项目的血液。我们的数据来源五花八门,各有各的“坑”。
- 居民健康数据:这是最核心也最敏感的数据。我们通过与本地一家大型体检中心合作(已完全匿名化、聚合化,不涉及任何个人隐私),获得了近三年约50万条社区级聚合数据(如某社区2022年高血压患病率)。替代方案:对于无法获取真实数据的研究者,可以使用公开的学术调查数据,如中国健康与养老追踪调查(CHARLS)、中国家庭追踪调查(CFPS)中有关健康和居住地的模块,然后自行匹配城市环境数据。
- 城市环境数据:
- 空气污染与气象:来自国家或地方生态环境局公开的监测站小时级数据,需整理成年均、季均指标。
- 绿地与POI:利用高德或百度地图的开放API,通过编程调用接口获取公园、医院、超市、体育馆等POI的经纬度,再使用GIS软件计算每个社区中心到这些设施的网络距离。社区边界矢量数据通常从地方自然资源局或学术网站获取。
- 夜间灯光、土地利用数据:来自NASA或国内遥感数据中心,用于间接反映经济活跃度和建成环境密度。
- 社会经济数据:主要来自市/区统计年鉴,精确到街道或社区层级。
实操心得:数据获取耗时可能占整个项目的60%以上。一定要尽早开始,并建立清晰的数据字典,记录每个数据的来源、时间范围、空间单元和可能的偏差。对于API获取的数据,注意设置合理的请求间隔,避免被封IP。
3.2 数据清洗、空间对齐与特征工程
原始数据几乎不可能直接使用,清洗与融合是关键步骤。
- 缺失值处理:这是第一个难关。对于社区级的健康指标缺失,如果比例很小(<5%),可以考虑删除;如果比例较大,可采用空间插值法(如反距离权重插值IDW、克里金插值Kriging),利用邻近社区的值进行估算。对于环境变量缺失,也可用类似方法或使用时间序列插值。
- 空间对齐(至关重要!):所有数据必须统一到相同的空间分析单元上。我们选择以“社区”为基本单元。但健康数据可能是按医院服务区域汇总,环境数据是监测点数据,POI是点数据。这就需要:
- 点数据聚合:将监测点(如空气质量)的测量值,通过泰森多边形划分其影响范围,再与社区多边形进行叠加,计算面积加权平均值,作为该社区的暴露水平。
- 面数据匹配:将统计年鉴中街道级的数据,按面积比例或人口权重分摊到下属的各个社区。
- 使用GIS软件或GeoPandas库可以高效完成这些空间操作。
- 特征工程:创造更有解释力的变量。
- 衍生变量:例如,用“到最近公园的距离”和“社区人均绿地面积”合成一个“绿色空间可及性与质量”综合指数。
- 交互项:在回归模型中,可以引入“年龄*空气污染”的交互项,检验污染对老年人健康的影响是否更大。
- 标准化:在将不同量纲的变量(如收入(万元)和PM2.5浓度(μg/m³))放入模型前,通常需要进行标准化(如Z-score标准化),使得回归系数具有可比性。
4. 核心建模过程与结果解读实例
4.1 多元逻辑回归模型构建与解读
我们以“是否患高血压”作为二分类因变量,构建逻辑回归模型。假设经过变量选择和共线性诊断后,最终模型包含以下变量:年龄、性别、BMI、吸烟(是/否)、年均PM2.5、社区绿化率、到最近医院的时间。
模型跑出的结果,我们主要关注两点:
- 回归系数和OR值:例如,
PM2.5的系数为0.05,OR = exp(0.05) ≈ 1.051。解读为:在控制其他因素不变的情况下,年均PM2.5浓度每上升10 μg/m³,居民患高血压的风险是原来的1.051^10 ≈ 1.65倍,即风险增加约65%。这个效应非常显著。 - P值和置信区间:
PM2.5的P值<0.001,95%置信区间为[1.048, 1.054],不包含1,进一步证实了关联的统计显著性。
一个常见的陷阱:当绿化率的OR值显著小于1(比如0.8)时,很多人会直接说“绿化率高能降低高血压风险20%”。这不够严谨。更准确的说法是:“在控制其他因素后,社区绿化率每增加10个百分点,居民患高血压的风险约为原来的0.8倍(即风险降低约20%)”。务必强调“控制其他因素后”这个前提。
4.2 地理加权回归(GWR)揭示空间异质性
我们以“高血压患病率”作为连续因变量,运行GWR模型。与全局回归只输出一套系数不同,GWR会为每一个社区都估计一套系数。
结果可视化与分析:
- 制作系数空间分布图:将
PM2.5的局部回归系数渲染在地图上。我们可能发现,在工业区密集、人口老化的城北片区,PM2.5的系数显著为正且值很大(颜色深红),意味着在这些区域,空气污染对高血压的影响尤为强烈。 - 制作统计显著性图:将P值小于0.05的区域高亮显示。可能发现,在南部新兴的、居民整体更年轻、健身设施完善的片区,
PM2.5的系数虽然为正,但不显著(颜色浅或灰色)。这说明污染的健康效应存在明显的空间异质性。 - 解释:这种异质性可能源于人群构成的差异(如老年人对污染更敏感)、其他环境因素的协同作用(如北部可能同时存在高噪音),或医疗资源分布的差异(南部居民就医更方便,可能部分抵消了污染的影响)。GWR的结果能引导我们去做更深入的子群分析或机制探究。
4.3 随机森林模型识别非线性关系与关键因子
我们将处理好的数据放入随机森林模型,目标同样是预测高血压患病风险。调整好树的数量、最大深度等参数后,模型在测试集上达到了不错的预测性能。
关键输出:特征重要性排序。随机森林通常提供两种重要性度量:
- 基于Gini不纯度的减少:更常用。
- 基于排列的精度下降:计算更耗时但更可靠。
假设我们得到的重要性排序前五是:年龄>BMI>PM2.5>到医院的时间 >绿化率。这个排序与逻辑回归中OR值的显著性大体一致,增强了结论的可信度。更重要的是,我们可以用部分依赖图来可视化单个特征与预测结果之间的非线性关系。例如,PDP图可能显示,当PM2.5浓度从低到中等水平上升时,患病风险快速增加;但达到一个高浓度平台后,风险增速放缓。这种非线性关系是线性回归难以捕捉的。
5. 常见问题、挑战与应对策略实录
在实际操作中,我们踩过不少坑,也总结了一些应对策略。
| 问题/挑战 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 逻辑回归中关键变量不显著 | 1. 数据量不足,统计功效不够。 2. 存在严重的多重共线性,掩盖了真实效应。 3. 变量测量误差大或定义不合理。 4. 真实关系是非线性的,线性模型误设。 | 1. 增加样本量或使用更精确的数据。 2. 计算VIF,剔除或合并高相关变量(如“人均收入”和“汽车保有量”可能高度相关)。 3. 重新审视指标定义,考虑使用更客观的测量方式。 4. 在模型中尝试加入该变量的二次项,或使用机器学习方法探索非线性。 |
| GWR模型结果不稳定,系数波动极大 | 1. 带宽参数选择不当。带宽过大,模型退化为全局回归;带宽过小,局部估计方差过大。 2. 某些社区样本量过少,导致局部估计不可靠。 | 1. 使用黄金搜索法或交叉验证法选择最优带宽。这是GWR建模中最关键的一步,务必谨慎。 2. 考虑对样本量极少的社区进行合并或剔除,或者使用自适应带宽的GWR模型。 |
| 机器学习模型预测效果好,但难以解释 | 这是树模型固有的“黑箱”特性。 | 1.不要只依赖特征重要性。结合使用SHAP值,它可以量化每个特征对单个预测样本的贡献度,并能可视化特征影响的全局分布和方向(正/负)。 2. 用LIME方法对单个预测进行局部解释,生成一个围绕该样本的、可解释的线性模型。 |
| 健康数据与环境数据空间尺度不匹配 | 健康数据在区级,环境数据在社区级,无法直接关联。 | 采用多级模型。第一层在社区级,用环境变量解释健康变异;第二层在区级,引入区级变量(如医疗财政投入)来解释第一层截距项的变异。这能更合理地处理数据的层次结构。 |
| 发现显著关联,但无法确定因果关系 | 横截面研究的固有局限。可能存在反向因果(如健康人更倾向于搬到绿化好的地方)或遗漏变量偏差。 | 1. 在结论中明确说明这是“关联性”而非“因果性”。 2. 尽可能控制更多混杂因素。 3. 寻找自然实验或工具变量。例如,研究某个公园新建前后周边居民健康的变化,或者利用地形、主导风向作为空气污染的工具变量。这是更高级的研究设计。 |
最后一点个人体会:做城市健康影响因素分析,技术模型固然重要,但对研究问题的深刻理解和对数据的敬畏之心更重要。一个在统计上显著的“影响因素”,必须放在真实的城市生活场景中去审视其合理性。例如,我们发现“到地铁站距离近”与“肥胖风险高”正相关,这看似反直觉。但深入分析发现,地铁站周边往往是商住混合、快餐店林立的高密度区域,居民步行可能减少而外食增加。这提醒我们,变量背后往往有复杂的生活行为链,分析不能停留在表面数字,需要结合多学科知识进行审慎解读。这个项目做下来,更像是一次用数据与城市对话的过程,每一个系数、每一张地图,都在讲述居民健康与城市空间之间微妙而深刻的故事。