昨天跟一个做医药研发的朋友喝酒,他愁眉苦脸地说,搞了一年多数据,模型死活跑不通,HR曲线稀烂,P值永远大于0.05。我问他:“你拿什么做的生存分析?”他说:“拿地理位置啊,每个病人的坐标点,经纬度都存着。”
我差点把酒喷出来。
这就是典型的为了用技术而用技术。很多甲方或者刚入行的分析师,总觉得手里攥着GIS里的Geo数据,就能玩出花来。但实际上,geo的哪个数据可以做生存分析?这个问题如果答错了,你前面的数据清洗全是废纸。
先说结论。做生存分析(Survival Analysis),核心看的是两个东西:一是“时间”,即从起点到终点事件发生的时间;二是“事件”,比如死亡、复发、出院。地理位置,本身不是时间变量,也不是二值化状态变量。它只能作为协变量(Covariate),或者通过距离推导衍生出新的指标。
很多人误以为,把患者坐标画在地图上,颜色深浅代表存活率,这就是生存分析。错!大错特错!那是热力图,是描述性统计,不是推断性统计。如果你想用Geo数据做真正的Cox比例风险模型,你得把Geo信息转化成能反映风险的因素。
比如,你手头有医院到客户的距离。这个“距离”就可以作为一个连续变量放入模型。研究发现,离肿瘤中心越远,复发的风险HR值可能是1.2。这时候,_geo数据被转化为了“交通便利性_距离”这个变量_参与了生存分析。
再比如,你统计客户所在区域的平均空气质量指数(AQI)。这个区域的聚合数据,也可以作为生存时间的协变量。这时候,geo的哪个数据可以做生存分析?答案是:经过业务逻辑转化后的空间衍生指标。
这里有个巨大的坑,也是我想提醒你的。别直接拿经纬度进模型。经纬度是笛卡尔坐标系的,它没有方向性意义。你把北纬30度和北纬31度当作1和1.1代入公式,模型会疯的。你必须把它们转化为“欧氏距离”、“路网距离”、“行政区域编码”或者“周边竞争密度”。
我记得两年前,有个项目做慢病管理。数据量很大,有十万级。一开始想做个炫酷的时空演进图。结果发现,单纯看距离对死亡率的影响,p值高达0.08,不显著。后来我们引入了“最后就诊地至最近三甲医院的实时路况预估时间”,这才显著起来了。因为对于急性心梗来说,堵车那二十分钟,才是生死的关键,而不是单纯的直线距离。
所以,别再问“哪个Geo字段”了,根本没有现成的字段。你要做的是数据工程。
怎么落地?
第一步,清洗。把空坐标、漂移坐标剔除。有些GPS设备在隧道或地下室,定位飘到隔壁市,这种脏数据不处理,模型偏差会极大。
第二步,特征工程。计算“居住点”到“医疗机构”的多式联运时间。注意,是真实路网时间,不是地图软件的直线距离。这个时间差,就是真实的生存风险暴露变量。
第三步,建模。将时间、距离、年龄、性别、基础病史一起放进Cox模型。看距离变量的Beta系数。
如果你还在用纯几何距离,那我建议你换个思路。或者找更懂业务的人聊聊。
说实话,现在市面上很多代做数据的项目,为了显得高大上,硬是把Geo标签往上贴。其实客户根本看不懂,也不关心你的模型是不是用了空间自回归。他们关心的是,哪些客户下周可能会流失,或者哪类高风险人群容易复发。
我们团队做这行五年了,见过太多因概念混淆导致的返工。如果你手头有地理信息,想真正用起来,先别急着跑算法。先把业务逻辑理清楚:这个地理位置,影响了用户的什么行为?是获取资源的难度?还是环境暴露的风险?
把业务逻辑转化为数学指标,这才是生存分析的灵魂。
我是老陈,干了十年数据。不讲虚的,只讲怎么干活。如果你手里也有类似的复杂数据,不知道特征该怎么工程化,或者模型调参调不通,可以私信聊聊。不用不好意思,大家都是在坑里爬出来的。