
我做了一个打败 FEMA 地图的洪水模型。然后它拒绝让我报备。
我没想到做这个演示时最有意思的一刻,竟是软件对我说不。
我有一个复合评级因子,在它从未见过的数据上,对真实洪水损失的排序优于 FEMA 洪水分区。凭我作为构建者的一切直觉,这就是胜利。该上线了。可管道的最后一阶段亮起红灯,打印出 NOT FILING-READY,点名了最差的那个变量,并把它转给人工精算师。我自己的代码判定,我引以为傲的那个费率还不够安全、不能报备。我愣坐了一分钟,琢磨这到底是个 bug,还是整件事的意义所在。
那正是整件事的意义所在。这篇文章讲的是:我如今为何认为,那个拒绝报备的门禁,比它背后的模型更有价值。
这个演示叫 FloodProof。它跑在 OpenFEMA 提供的、得克萨斯州哈里斯县国家洪水保险计划(NFIP)真实公开理赔账本上。我一点击「重新运行诊断」,九个阶段就会在真实记录上实时执行,并在一秒内完成。没有任何硬编码。固定种子让划分可复现,所以我接下来要引用的数字每次运行都会重新计算。

第一个让我停住的数字,不是任何模型算出来的
我不断回到这个数字,因为它不是我算出来的,是理赔自己算出来的。在这份哈里斯县账本里,真实已赔付建筑理赔金额中,31 亿美元,占 45.9%,赔付给了 FEMA 划定在高风险区之外的房产(即特殊洪水危险区)。没有模型。没有评分。只是对真实账本的求和。分区地图——承保方至今仍据以锚定洪水费率的东西——对近一半的钱保持沉默,而这些钱实际已经流出了大门。
这与我入局前读到的一致。美国超过三分之二的洪灾损失发生在 FEMA 高风险区之外;哈维飓风过后,哈里斯县大约 70% 的洪水理赔来自这些区域之外(Veriprajna 解决方案页研究,2026)。我作为统计数字相信它。可当你看着它在自己屏幕上逐片区累计成真实美元时,体感完全不同。

分区地图不是稍有偏差。它对单一县域账本中 31 亿美元的真实损失保持沉默。
所以这张地图是一把粗笨的工具。做洪水定价的人都已经知道。市场的答案一向是向供应商买更好的模型。我想弄清:更好的模型是否真是难点,还是难点在我没在看的地方。
六个朴素的建筑属性,能否打败分区地图?
我并不认为普通岭回归能带来多大改变。评分核心刻意朴素:用真实 OpenFEMA 建筑属性做岭回归复合——建筑年龄、楼层数、抬高标志、后 FIRM 规范合规、占用类型,以及障碍物。六个诚实特征。我的第一反应是也把投保建筑保额喂进去,因为保额与赔付相关。我拦住了自己。赔付在机制上受保额上限约束,纳入它会让评分偷看答案,回测变成循环论证。我删掉了它。这一处删减,就是演示与魔术的分界。
回测刻意做成非循环。在 70% 训练划分上拟合复合评分。在它从未见过的留出 30% 上评分,也就是 40,615 条真实理赔。对照真实的 ratedFloodZone 作为基线,以及真实的 amountPaidOnBuildingClaim 作为标签。基线与标签都独立于模型,所以赢是真正的样本外胜利,不是自我打分。

赢的幅度超出我的预期。复合捕获了留出理赔上 FEMA 分区最高十分位损失金额的 1.694 倍,Gini 为 0.31,对分区的 0.08。我用不同随机种子反复跑,确认自己没有抽到幸运划分。提升站住了,各种子大致在 1.69 到 1.85 之间。六个朴素属性,诚实地拟合,在从未见过的金钱上打败了联邦洪水地图。
而这正是我差点犯下整个市场都在犯的那个错误的地方。
重塑整次构建的那次顿悟
我记得当时以为演示基本上做完了,结果想错了。一个自我打分的更好模型并不是证据。如果我把一个因子交给首席精算师,说「相信我,它打败了分区」,我不过是把写着自己成绩的作业递了过去。价值从来不会落在模型上。ZestyAI、ICEYE、First Street 这类供应商已经在卖很强的洪水模型。真正经得起时间的是 任何模型周围那套乏味的基础设施:一份怀疑者无法轻易否定的回测、一次模型无法辩解过关的公平性审计,以及一道产出报备或拒绝报备的门禁。这在任何模型质量下都成立,因此它不会随着模型变好而过时。你可以亲自查看机制与诚实披露:veriprajna.com/zh-Hans/demos/flood-risk-underwriting。
一个自我打分的更好模型并不是证据。那只是写着自己成绩的作业。
还有第二个、更硬的理由说明模型不可能是全部故事。一个能很好排序损失的因子也可能携带人口统计信号;通不过差别性影响测试的费率,是保险部审查员会打回的报备。排得好与可报备是两个不同的问题。我回答了第一个。第二个还在等着。
我把公平性审计对准自己的模型,并以为它会是反派
我真的做好了心理准备,以为复合评分会是问题所在。审计用 CDC/ATSDR 社会脆弱性指数(2022 版)的真实片区少数族裔占比,筛查每一个已定价变量,计算各自的不利影响比率,并对照 EEOC 五分之四规则,即 0.80 到 1.25 的区间(29 CFR 1607.4(D))。我以为那个炫目的 AI 评分会是携带人口统计代理的那个。
并不是。复合评分本身以 0.938 的不利影响比率通过。我做这个演示,并不是假装自己的模型是坏人,它也不是。但审计会筛查一切,而 5 个已定价变量未通过 80% 规则。最差的是楼层数,为 0.363。投保保额以 0.526 未通过。真正让我吃惊的是:FEMA 自己的分区档位以 1.467 未通过,在高侧偏斜上比我的复合评分在任何一侧都更糟。人人当作安全、中立、监管背书锚点的那条基线,所携带的人口统计偏斜,比人们紧张的那个 AI 因子还多。

我的 AI 因子以 0.938 通过了公平性测试。FEMA 的分区档位以 1.467 未通过。
这种倒置,正是我最希望精算师坐下来细想的一点。在这份账本上,不信任模型、信任地图的直觉是反的。
在我还来不及报备之前,它先挡住了自己
我想把接下来发生的事说精确,因为这是我最自豪的部分,而它完全是平淡无奇的代码。策略门禁是纯 Python,只有一条规则:只有当留出样本足够大、相对 FEMA 分区的提升达到要求的最低值、且每一个被筛查变量都落在公平性区间内时,报备才就绪。默认拒绝。filing_ready 当且仅当零项阻断性发现时成立。 在这份账本上有一个变量未通过,于是门禁返回 NOT FILING-READY,将楼层数点名为最严重违规项,并把它转给人工精算论证,而不是直接上线费率。它还跑了逐州清单,科罗拉多州的逐变量论证要求显示为未完成。
技术栈中可选的部分是一小队 Pydantic-AI 智能体:因子解释器、与对抗性挑战者配对的公平性论证器,以及报备备忘录起草器。它们提供建议。它们起草叙事。它们无法覆盖门禁;没有 API 密钥时它们干脆弃权,确定性结果不变。每一个信任关键数字都是坐在智能体框架之外的普通 numpy。智能体建议,代码裁决。本构建中的供应商数据源(ZestyAI Z-FLOOD、ICEYE SAR-depth)和 Guidewire 连接器,是真实 schema 背后的桩实现——文档化的生产替换,不是实时集成。我宁愿把话说清楚,也不暗示一条并不存在的管道。完整方案,连同报备产物,都在 veriprajna.com/zh-Hans/demos/flood-risk-underwriting。
门禁在拒绝时产出的并不是死胡同。它是一份审查员就绪的 DOI 报备包:精算备忘录、样本外回测表、特征归因、公平性筛查,以及对转给人工的内容及其原因的明确陈述。它是证据产物,不是认证,也不是任何审查员已批准任何内容的承诺。它是审查员会要求的书面证据链,在他们开口之前就已经组装好。
我一直把这叫做在审查员之前抓住合规风险。这就是一句话概括的买方价值。另一种结局,是在你已经报备之后,在一封信里、在公开场合,才发现你的费率存在歧视。
我一直反复琢磨的事
我进入这次构建时,以为自己在做更好的洪水模型;离开时,我确信模型是最不重要的那一块。诚实披露比准确度更重要。FEMA 把理赔地理坐标模糊到大约片区质心,所以这套系统跑在公开数据诚实允许的分辨率上,演示也在屏幕上如实说明。提升来自一份哈里斯县账本和一次留出划分,不是开放世界的保证。点名这些限制不是推销里的弱点。它就是推销本身。
随着超过 24 个州采纳 NAIC AI 模型公告,且纽约 DFS 2024-7 号通函把代理歧视测试变成期望而非客套,拒绝报备的代码不再是文书工作,而开始成为产品。评级因子从来不是难点。证明它并治理它才是。
如果你更想亲眼看它做决定,而不是听我口头保证,整套端到端运行就在这里。
所以这是一个我自己还没有完全答完的问题,我也真心想听听精算师的看法。如果你自己的审计告诉你,你多年来据以锚定费率的 FEMA 分区档位,通不过你即将套用到新 AI 因子上的同一套公平性测试——你会先停止信任哪一个?


