加载中…
宜老天气通 · 更多
今天
天气
计算方法与透明度

每一个风险数字都应该能被解释

本页公开网站当前实际执行的公式、变量、权重、阈值、时间窗口、缺失值处理和局限。 页面数字旁的 可以先看短解释,再回到这里核对完整方法。

为什么同样 10°C 会有不同结果?

温度只是一个输入。湿度、夜间最低温、前几天温度、年龄、慢病、社区脆弱性、历史病例窗口和数据完整度都可能改变结果。 主要风险与行动结果页会同时展示本次使用的关键输入,便于逐项核对。

适用范围:所有分数用于公共健康行动提醒、家庭照护或社区资源排序。它们不提供医疗诊断、处方或治疗建议;出现明显不适时应及时寻求专业帮助。
方法 1

今日热风险与行动

公开风险页、首页和老人模式共用的即时热风险规则。

热风险综合评分(0–100)

HeatActionService 线性加权规则

衡量今天需要多积极采取防暑行动。它是行动优先级,不是疾病发生概率。

当前公式
Score = 100 × [0.50×HI_norm + 0.30×Night_norm + 0.20×Streak_norm]
变量与权重
  • HI_norm = clip((体感热−30)/12, 0, 1)
  • Night_norm = clip((夜间最低温−24)/6, 0, 1)
  • Streak_norm = clip((连续高温天数−1)/4, 0, 1)
分级与阈值
低风险 <35中风险 35–54.9高风险 55–74.9极高风险 ≥75
时间窗口当前温度/湿度、当日夜间最低温、截至当天的连续高温天数
缺失值处理公开风险与行动页仅接受来源明确的真实天气;气温、最高温、最低温或湿度任一缺失时停止计算并显示“等待真实天气”。连续天数缺失时按 0 天。
局限:用于通用行动提醒;不包含个人病史;缺失历史天气时可能低估连续高温风险
实现位置:services/heat_action_service.py

体感热(Heat Index)

气温与湿度经验公式

把气温和相对湿度合成一个体感温度。湿度越高,同一气温下通常越闷热。

当前公式
HI = −8.784695 + 1.61139411T + 2.338549R − 0.14611605TR − 0.012308094T² − 0.016424828R² + 0.002211732T²R + 0.00072546TR² − 0.000003582T²R²
变量与权重
  • T = 摄氏气温
  • R = 相对湿度百分数
分级与阈值
30°C 以下在热风险分项中记 042°C 及以上在热风险分项中记满分
时间窗口当前天气观测
缺失值处理公开风险与行动页在湿度缺失时停止风险计算;底层公式单独调用时会退回当前气温。
局限:未单独加入风、太阳辐射、衣着或活动强度
实现位置:services/heat_action_service.py

个人阈值拨片

浏览器本地分级规则

只改变页面如何把同一个分数分级,不改变服务器计算出的原始分数。

当前公式
分级阈值 = 0.35/0.55/0.75 + 调整值(−0.1、0、+0.1)
变量与权重
  • −0.1 = 更早提醒
  • 0 = 默认
  • +0.1 = 更晚升级
分级与阈值
阈值会进行边界保护,保持四级顺序
时间窗口持续保存在当前浏览器
缺失值处理没有保存值时使用 0。
局限:不会上传服务器;不会改变模型或其他用户看到的结果
实现位置:templates/risk.html

行动确认覆盖率

行动状态计数

当天至少完成并保存一项行动的有效监测对象,占该社区全部有效监测对象的比例。

当前公式
ConfirmRate = ConfirmedToday / ActivePairsInCommunity
变量与权重
  • ConfirmedToday = 当天 confirmed_at 已填写、actions_done_count 至少为 1 且绑定仍为 active 的对象数
  • ActivePairsInCommunity = 状态为 active 的绑定数
分级与阈值
只描述行动覆盖,不代表健康改善
时间窗口本地日期当天
缺失值处理有效监测对象为 0 时不可计算,页面显示 --。
局限:该指标衡量行动记录覆盖,不等于老人安全状态或健康改善;未确认可能代表尚未操作
实现位置:services/user/_helpers.py

升级触发率

行动升级链计数

当天已进入 backup 或更高升级阶段的对象,占社区有效监测对象的比例。

当前公式
EscalationRate = EscalatedToday / ActivePairsInCommunity
变量与权重
  • EscalatedToday = 当天 relay_stage 顺序达到 backup 及以上且绑定仍为 active 的对象数
分级与阈值
数值升高表示需要更多人工跟进
时间窗口本地日期当天
缺失值处理有效监测对象为 0 时不可计算,页面显示 --。
局限:受人工点击、超时规则和流程执行完整度影响
实现位置:services/user/_helpers.py

求助率

行动求助标记计数

当天 help_flag 为真的对象,占社区有效监测对象的比例。

当前公式
HelpRate = HelpFlagToday / ActivePairsInCommunity
变量与权重
  • 同一 active 绑定对象当天按一条状态记录计数
  • inactive 绑定的历史状态不进入分子或分母
分级与阈值
用于安排回访优先级,没有医学严重程度含义
时间窗口本地日期当天
缺失值处理有效监测对象为 0 时不可计算,页面显示 --。
局限:未点击求助不能证明没有困难
实现位置:services/user/_helpers.py
方法 2

7 天预测

地区级复合暴露关注分、未启用的门诊高负荷概率和可预报性。

7 天复合暴露评分(0–100)

ForecastService 复合暴露规则

地区级天气与环境暴露分数。当前计算不使用家庭成员的慢病资料。

当前公式
Score = clip(0.34×Heat + 0.28×PM2.5 + 0.18×Humidity + 0.20×HotNight + SynergyBonus, 0, 100)
变量与权重
  • Heat = clip((校正平均温度−28)×6, 0, 100)
  • PM2.5 = clip((PM2.5−35)×1.8, 0, 100)
  • Humidity = clip((相对湿度−70)×2.4, 0, 100)
  • HotNight = 夜间最低温分档为 8/45/72/100
  • 协同加分:热+污染加8,热+高湿加6,热夜+污染加4,可叠加到18
分级与阈值
低关注 <45中关注 45–69.9高关注 ≥70;仅作沟通与行动接口
时间窗口未来 7 天逐日预报
缺失值处理生产页面要求 7 天逐日最高温、最低温、平均温和湿度均为有限数,任一缺失时整页显示预报不可用。PM2.5 优先级:未来日直接值 → 当前实况 PM2.5 复用 → 未来日 AQI×0.65 → 当前实况 AQI×0.65 → 默认 AQI 50×0.65;浮层逐日标记真实来源。底层独立调用仍保留湿度60%与最低温回退,并明确标为插补。
局限:地区级筛查分数;不等于个人疾病概率;当前实况复用不代表未来日空气质量预报;AQI 转 PM2.5 与默认 AQI 50 均为代理值
实现位置:services/forecast_service.py

门诊高负荷概率(未启用)

探索性门诊负担模型

当前门诊模型缺少时间切分概率校准,线上不输出超历史 P90 概率,也不触发红橙黄模型预警。

当前公式
RawVisits = SeasonalBaseline × RR × WeekdayFactor;P(high)=不可用
变量与权重
  • 探索性点估计仍保留用于研究审计
  • 固定 theta=2 的范围没有完成本地校准
  • 官方天气预警使用独立链路,不受本项停用影响
分级与阈值
模型预警阈值停用
时间窗口未来 7 天;温度滞后最多 7 天
缺失值处理概率字段、Likelihood 矩阵与模型预警状态固定标记为未校准不可用。
局限:点估计与范围仍属探索性;不能替代医疗资源排班判断;恢复前需要时间切分回测与概率校准
实现位置:services/forecast_service.py

可预报性评分

预报分歧启发式评分

表示多模型分歧、提前天数和模型数量对天气预报可信度的影响。

当前公式
外部分支:clip(ExternalScore,0,100);本地分支:clip(100−16×模型温差−3×(提前天数−1)+min(8,2×(模型数−1)),5,99)
变量与权重
  • 只要上游提供 ExternalScore 就直接使用外部分支
  • 本地分支中模型温差与提前天数降低分数,多模型最多加 8 分
分级与阈值
低 <50中 50–74.9高 ≥75
时间窗口每个预报日单独计算
缺失值处理没有外部分数时走本地分支;模型温差缺失按 0,模型数最少按 1。浮层会标记本日分支。
局限:衡量天气输入稳定性,不代表健康模型准确率
实现位置:services/forecast_service.py
方法 3

个人健康与慢病评估

个人风险融合、即时筛查、慢病相对风险和决策矩阵。

家庭成员档案风险(0–100)

家庭成员档案加分规则

根据档案中的年龄、慢病、风险标签、自测指标和天气敏感阈值进行规则加分。

当前公式
Score = clip(15 + AgePoints + DiseasePoints + TagPoints + MetricPoints + SensitivityPoints, 0, 100)
变量与权重
  • 年龄加 0/10/20/25/30 分
  • 慢病每项加 8 分,最多 30 分
  • 风险标签每项加 5 分,最多 20 分
  • 血压偏高加 10,血糖偏高加 10,心率偏快加 8
  • 高温/低温敏感阈值各可加 6 分
分级与阈值
低风险 <40中风险 40–69高风险 ≥70
时间窗口当前保存的成员档案
缺失值处理未填写字段不加分。
局限:没有使用当天实时天气数值;只用于家庭照护排序;不提供医学诊断
实现位置:core/health_profiles.py

档案完善度

字段完整性计数

已填写的档案项目占当前参与检查项目的比例。

当前公式
Completion = FilledFields / TotalCheckedFields × 100%
变量与权重
  • 基础档案检查关系、年龄、性别、慢病
  • 有扩展档案时再检查过敏、药物、指标、风险标签、天气阈值和联系人
分级与阈值
百分比只表示字段是否存在,不评价内容质量
时间窗口当前保存的成员档案
缺失值处理没有扩展档案时只以 4 个基础字段为分母。
局限:不同成员的分母可能为 4 或 10;不能代表健康数据准确性
实现位置:core/health_profiles.py

个人健康风险得分(0–100)

HealthRiskService 三路径融合

融合温度相对风险、空气质量、即时筛查、个人易感性、社区背景和慢病规则。

当前公式
Final = 0.85×(0.45×PathA + 0.30×PathB + 0.25×PathC) + 0.15×Chronic
变量与权重
  • TempScore = clip((温度RR−1)/1.2×100, 0, 100)
  • PathA = 50%温度分 + 28%个人易感性 + 22%AQI
  • PathB = 30%极端天气 + 30%AQI + 15%湿度 + 25%即时筛查
  • CommunityBackground = 65%社区VI + 35%社区30日负担分
  • PathC = 40%社区背景 + 35%个人易感性 + 25%温度分
分级与阈值
低风险 <40中风险 40–69.9高风险 ≥70
时间窗口当前天气、温度滞后、30 天社区病例、当天 5 项筛查
缺失值处理实时天气为模拟、来源不明或缺少气温时停止评估且不保存结果。AQI 缺失时保留为空,并对路径内其余可用指标重新归一权重。社区 VI 缺失时使用 45 分代理;人口缺失导致30日每千人负担不可计算时使用 30 分代理,页面逐项标记。缺少筛查项时使用各题默认档。
局限:属于行动筛查;权重为可审计规则;社区代理值会在结果页明确标记;不提供诊断或处方
实现位置:services/health_risk_service.py

即时筛查分数

五项问卷线性加权

把 5 个当日自报项目转换成一个 0–100 的规则分数。

当前公式
Screen = 0.30×症状 + 0.25×户外暴露 + 0.15×饮水 + 0.20×服药 + 0.10×睡眠
变量与权重
  • 每个答案先映射为固定档位分数,再按权重相加
分级与阈值
该分数只作为个人融合模型中的一个分项
时间窗口用户本次提交
缺失值处理未识别答案会退回该题默认档。
局限:自报信息可能有偏差;严重症状应直接寻求专业帮助
实现位置:services/health_risk_service.py

慢病风险得分(0–100)

DLNM RR + 年龄/共病/生命体征规则

公开 DLNM 病种修正、慢病层唯一年龄/共病修正,以及已提交血压/血糖对分数的影响。

当前公式
DLNMAdjustedRR = min(RawDLNMRR×DLNMDiseaseModifier, RRcap);PersonalRR = DLNMAdjustedRR×ChronicAgeAmplifier×ComorbidityAmplifier;DiseaseScore = min(100, 30×PersonalRR + VitalAdjustment×Relevance)
变量与权重
  • DLNM 层不接收个体年龄,DLNMAgeModifier 固定为 1
  • ChronicAgeAmplifier 是唯一进入个人 RR 的年龄规则
  • 总体得分取各相关病种得分的最大值
  • Relevance:general/心血管=1.0,其他病种=0.4
  • 血压/血糖原始修正最多 18 分
分级与阈值
低风险 <40中风险 40–69.9高风险 ≥70
时间窗口当前天气与近 7 天自测指标
缺失值处理模拟天气、来源不明或气温缺失时页面停止评估;未填写血压或血糖时不加生命体征修正。
局限:年龄与共病放大规则仍需真实样本校准;用药依从和自由文本症状当前只作补充观察,不进入总分;不用于调整药物
实现位置:services/chronic_risk_service.py

个人行动筛查影响分

个人行动筛查分

保留个人健康影响强度供行动参考;个人高风险概率未校准,Likelihood 与矩阵当前停用。

当前公式
Impact = 0.70×FinalRisk + 0.30×Screening;P(high)=不可用;Likelihood=不可用;Matrix=不可用
变量与权重
  • Impact 仍按 0–24.9/25–49.9/50–74.9/75–100 分档
  • 不从规则分数反推个人结局概率
分级与阈值
影响分只作为沟通与行动接口
时间窗口跟随本次个人健康评估
缺失值处理个人概率、Likelihood 和 1–16 矩阵固定标记为未校准不可用。
局限:用于行动沟通;不表示发病概率;风险档位尚未经过临床校准
实现位置:services/health_risk_service.py
方法 4

机器学习分类

RandomForest 疾病类别输出及特征重要性,供风险线索参考。

天气调整疾病类别关注分(0–100)

RandomForest 多分类模型 + 天气规则修正

RandomForest 原始类别概率经天气敏感规则放大后的关注分。各类别没有再次归一化,合计可能超过 100。

当前公式
AttentionScore = 100 × min(RFClassProbability × AppliedWeatherMultiplier, 0.95)
变量与权重
  • 输入含年龄、性别、时间和天气特征
  • 页面同时展示原始 RF 概率、实际天气倍率和最终关注分
  • 极端温湿度可按病种敏感度放大
分级与阈值
只用于类别线索排序,没有临床风险分级
时间窗口当前输入快照
缺失值处理模拟天气、来源不明或气温缺失时页面停止推理。真实天气的最低/最高温缺失时按平均温度±5°C;体感温度缺失时由温湿度现场计算,其余训练特征按模型默认值补齐。
局限:训练准确率约 65.3%,F1 约 64.2%;天气调整后没有概率归一化;未证明为个体发病概率;不能用于诊断
实现位置:services/ml_prediction_service.py / models/feature_config.json

模型特征重要性

RandomForest impurity-based feature importance

表示某个特征在整棵随机森林中平均贡献了多少分裂信息。

当前公式
Importance = 该特征带来的归一化不纯度下降总和
变量与权重
  • 所有特征重要性之和约为 1
分级与阈值
数值用于全局排序,没有个人正负因果含义
时间窗口模型训练数据整体
缺失值处理模型元数据缺失时不展示示例数值。
局限:不能说明因果;相关特征可能分摊重要性;不等于本次个人贡献
实现位置:models/feature_config.json
方法 5

社区风险地图

天气危险度、社区脆弱性、历史病例负担、不确定性与空间热点。

社区天气危险度 Hazard(0–100)

超额门诊估计 + 指数饱和映射

把当前天气相对风险、社区脆弱性和日基线门诊量合成可比较的天气危险度。

当前公式
Excess = max(WeatherRR−1, 0)×VI×BaselineVisits;Hazard = clip((1−exp(−Excess/Efold))×100, 0, 100)
变量与权重
  • WeatherRR = 当前及滞后温度相对风险
  • VI = 社区脆弱性倍数
  • BaselineVisits = clip(社区人口×0.03, 1, 20)
  • Efold = 指数映射尺度,默认 10,可由配置调整
分级与阈值
Hazard 越高表示天气驱动的社区行动优先级越高最终项目综合风险仍会再加入 SVI 与历史负担
时间窗口当天及在线 RR 实际使用的滞后温度窗口
缺失值处理天气相对风险不高于 1 时 Excess 为 0;天气数据不可用时整条社区风险链停止计算。
局限:BaselineVisits 是人口规则估计;Efold 为项目配置参数;Hazard 不等于发病概率
实现位置:services/community_risk_service.py

社区综合风险指数(0–100)

社区多维线性综合指数

将天气危险度、SVI-like 脆弱性和历史病例负担合成社区行动排序分数。

当前公式
有历史:Risk=(0.45×Hazard+0.35×SVI+0.20×Burden)×Penalty;无历史:Risk=0.5625×Hazard+0.4375×SVI
变量与权重
  • Hazard = 天气超额风险的 0–100 映射
  • SVI = 多主题脆弱性分位
  • Burden = 平滑 O/E 的社区分位
  • 有历史且不确定性≥70时 Penalty=0.93,否则为1
分级与阈值
项目综合风险等级:0=0–19,1=20–39,2=40–59,3=60–79,4=80–100
时间窗口当天气象 + 选定历史病例窗口(默认 30 天)
缺失值处理Community 表为空或查询失败时不生成地图与排名。没有匹配门诊记录时历史分量为 null,并将天气与 SVI 权重重新归一;单个社区结构字段缺失时使用稳定中性代理。
局限:用于社区排序;代理字段仍需真实调查数据替换;不用于比较个人
实现位置:services/community_risk_service.py

社区 Impact × Likelihood 矩阵

社区四档人工分流矩阵

把社区影响强度与门诊记录 O/E 高于 1 的可能性分档,用于人工分流和资源排序。

当前公式
Impact = min(100, 0.75×RiskIndex + 6×ExpectedExcess);Likelihood = clip(100×P(O/E>1) + CertaintyAdjustment, 0, 100);Matrix = ImpactRank×LikelihoodRank
变量与权重
  • 确定性 high 加 10,low 减 10,medium 不调整
  • 两轴均按 0–34.9/35–54.9/55–74.9/75–100 分成 1–4 档
分级与阈值
矩阵得分为 1–16;无匹配病例时 Likelihood 不可计算
时间窗口当天综合风险与所选病例窗口
缺失值处理没有匹配病例时历史可能性与矩阵结果标记为数据不足。
局限:用于人工核查和行动排序;不表示自动医疗决策
实现位置:services/community_risk_service.py

天气相对风险(RR)

离线 quasi-Poisson GLM + DLNM 曲线;在线读取 RR profile

表示当前及滞后温度下,相对参考温度的门诊风险倍数。RR=1 表示基线。

当前公式
训练分支:FinalRR = min(BaseRR × DiseaseModifier × AgeModifier, CumulativeCap);未训练分支:RR = 1 + 0.015×|T−20|
变量与权重
  • BaseRR 来自已导出的累积温度–RR 曲线,在线按温度插值;profile 分支不再二次叠加 lag 权重
  • 当前 production profile 的单日 cap=2.6;profile 未加载时文献先验单日 cap=2.2;累计 cap=3.5
  • 未训练分支直接返回简化 RR,不叠加病种/年龄修正
分级与阈值
RR >1 表示高于参考水平训练分支会在返回明细中标记实际 cap 与是否触发
时间窗口production profile 已包含离线累积效应;仅旧的非 profile 探索分支保留在线 lag 权重
缺失值处理profile 不可用时退回本地数据/文献先验及 2.2 单日 cap;模型未训练时使用简化偏离公式并返回提示。
局限:当前 production profile 仍有残差自相关;RR 曲线需要继续做时间切分验证
实现位置:analysis/duchang_health_weather/scripts/fit_dlnm.R / services/dlnm_risk_service.py

社区脆弱性指数(VI)

社区线性脆弱性规则

按老龄、慢病、绿地、热岛和医疗可达性计算的可审计线性指数。

当前公式
VI = max(0.5, 1 + 1.5×老龄率 + 1.8×慢病率 − 0.8×绿地率 + 0.5×热岛指数 − 0.3×医疗可达性)
变量与权重
  • 比例均应使用 0–1 单位
  • 负权重代表保护因素
分级与阈值
低 <1.2中 1.2–1.49高 ≥1.5
时间窗口社区档案当前版本
缺失值处理缺失结构字段使用稳定的中性代理值,不再随机生成。
局限:代理字段不等于实测 GIS 或医疗可达性;现有社区原始脆弱性字段存在单位不一致警告
实现位置:services/community_risk_service.py

SVI-like 脆弱性分位(0–100)

当前社区集合内的三主题分位指数

表示某社区相对当前社区集合的脆弱程度,100 代表相对最脆弱。

当前公式
SVI = 0.40×SensitivityPct + 0.25×ExposurePct + 0.35×AdaptiveGapPct
变量与权重
  • Sensitivity = 0.6×老龄率 + 0.4×慢病率
  • Exposure = 热岛指数
  • AdaptiveGap = 0.5×(1−绿地率) + 0.5×(1−医疗可达性)
分级与阈值
Q1 <25Q2 25–49.9Q3 50–74.9Q4 ≥75
时间窗口本次参与分析的社区集合
缺失值处理主题字段缺失时使用稳定代理值。
局限:SVI-like 为项目内部指标;不能直接等同 CDC SVI;社区集合变化会改变分位
实现位置:services/community_risk_service.py

门诊记录观察/期望比(O/E,兼容字段 SIR)及 95% CI

人口天数校正的门诊记录 O/E + 对数正态近似区间

比较某社区窗口内的门诊记录条数与按全体粗率、人口和分析天数推算的期望记录数。

当前公式
O/E = ObservedVisitRecords / ExpectedVisitRecords;Expected = 全体匹配记录粗率×社区人口×窗口天数
变量与权重
  • Observed 是 MedicalRecord 行数,不能保证每行代表一位新发患者
  • 观察数>0时 CI≈exp(log(O/E)±1.96/√Observed);观察数=0时上界=3/Expected
分级与阈值
O/E=1 为当前粗率基线O/E>1 表示记录数高于期望区间跨 1 时证据不稳定
时间窗口用户选择的 14/30/60/90 天病例窗口
缺失值处理没有匹配记录时 O/E、区间、平滑值和历史负担均不可计算,综合风险降级为天气与 SVI。
局限:未按年龄或性别分层标准化;不能解释为新发病人数;小社区波动大;依赖社区字段匹配质量
实现位置:services/community_risk_service.py

经验贝叶斯平滑 O/E(兼容字段 smoothed_sir)

经验贝叶斯收缩

把小样本社区的 O/E 向全体 O/E 拉回,减少一次偶然记录造成的极端值。

当前公式
SmoothedOE = w×OE + (1−w)×GlobalOE;w = Expected/(Expected+8)
变量与权重
  • 期望病例越多,w 越接近 1,保留更多社区自身信息
分级与阈值
用于历史病例负担排序
时间窗口与门诊记录 O/E 相同
缺失值处理O/E 不可计算时不输出平滑值。
局限:先验强度 8 为当前可审计规则参数
实现位置:services/community_risk_service.py

P(O/E > 1)

对数 O/E 正态近似

估计门诊记录观察/期望比高于粗率基线 1 的近似概率,用于社区可能性分档。

当前公式
Observed>0:由 log(O/E) 与 SE≈1/√Observed 计算正态尾部概率;Observed=0:固定返回 0.05
变量与权重
  • 观察记录越多,概率估计通常越稳定
  • 0.05 是当前零观察记录启发式下限,不是从样本估计出的精确概率
分级与阈值
0–100%,越高表示更可能高于基线
时间窗口与门诊记录 O/E 相同
缺失值处理整个分析窗口没有匹配记录或 O/E 不可计算时不输出概率;窗口有匹配记录且某社区 Observed=0 时显示 0.05。
局限:近似概率;零观察分支为固定规则;不等于某位居民患病概率
实现位置:services/community_risk_service.py

不确定性指数(0–100)

置信区间宽度启发式指数

把 O/E 置信区间宽度和期望记录量合成,数值越高表示证据越不稳定。

当前公式
Uncertainty = min(100, 30×CI宽度 + 样本惩罚)
变量与权重
  • 期望病例 <3 加 20 分
  • 3–7.9 加 8 分
  • ≥8 不加
分级与阈值
≥70 时社区综合风险乘 0.93 的不确定性折减
时间窗口与门诊记录 O/E 相同
缺失值处理有匹配记录但无法计算 CI 时宽度按 3;完全无匹配记录时整个指标为 null。
局限:用于提示谨慎解读;不是真实误差概率
实现位置:services/community_risk_service.py

Gi* 热点显著性

Getis-Ord Gi* 近似

判断高风险社区是否在空间上聚集。热点表示周边也偏高。

当前公式
z = (邻域加权风险和 − 全局均值×权重和) / 理论标准差
变量与权重
  • 邻域半径 = 最近邻距离中位数×1.6,并限制在 300–5000 米
  • 半径内权重为 1,孤立点至少连接最近邻
  • p 值由 z 分数近似计算
分级与阈值
|z|≥1.96 为 95%|z|≥2.58 为 99%
时间窗口本次社区风险横截面
缺失值处理历史分量不可用时标记数据不足;有效社区少于 3 个时标记样本不足。
局限:点位和邻域选择会影响结果;代理坐标不能用于精细空间推断
实现位置:services/community_risk_service.py

预计额外就诊

天气 RR 驱动的增量估计

估计相对基线由天气增加的社区门诊量。

当前公式
ExcessVisits = max(RR−1, 0) × VI × BaselineVisits
变量与权重
  • BaselineVisits = clip(社区人口×0.03, 1, 20)
分级与阈值
只累计正向超额;RR≤1 时记 0
时间窗口目标日期
缺失值处理人口缺失时按 100 人估计,再应用上下限。
局限:用于行动资源排序;不是精确门诊量预测
实现位置:services/community_risk_service.py

病例数据覆盖率

病例社区字段匹配

分析窗口中成功匹配到已知社区的病例记录占比。

当前公式
Coverage = MatchedRecords / TotalRecords
变量与权重
  • 社区名为空或不在当前社区表中会记为未匹配
分级与阈值
覆盖率越低,社区比较越需要谨慎
时间窗口用户选择的历史病例窗口
缺失值处理没有记录时显示不可计算。
局限:只衡量社区字段匹配,不衡量诊断编码质量
实现位置:services/community_risk_service.py
方法 6

1 km 热暴露 GIS

都昌县可追溯 MODIS 网格中的晴空地表温度、年龄结构人口、地表覆盖和表面高程。

原生 MODIS 网格与县域纳入规则

中心点纳入法与完整原生几何发布

以 MYD11A1 h28v06 原生正弦投影像元为分析单位,GeoJSON 保留中心点严格落入都昌县研究边界的完整网格。

当前公式
Include(cell) = 1{Center(cell) ∈ Duchang research boundary}
变量与权重
  • 原生像元边长约 926.625 m,下载 GeoJSON 保存完整原生像元多边形
  • 经纬度由 MODIS 正弦投影在球半径 6,371,007.181 m 下转换为 WGS84
分级与阈值
中心点严格位于研究边界内才纳入共纳入 2,593 个县域中心网格
时间窗口静态空间框架;研究边界为 geoBoundaries ADM3 开放研究边界
缺失值处理边界外网格不进入公开集合;县界边缘像元仍保留完整原生几何。
局限:边缘网格可跨越研究边界;开放研究边界不能替代法定行政边界;1 km 为产品名义尺度,实际原生像元边长约 926.6 m
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

网格显示几何

浏览器端中心保持、经纬轴对齐的局部等边近似显示

页面默认绘制中心保持、经纬轴对齐的局部等边近似显示格,便于北向上阅读;原生 MODIS 四角仍保存在 GeoJSON,并可在地图中切回。

当前公式
δlat = p/(2R);δlon = p/(2R×cos φc)
变量与权重
  • p = 原生像元边长 926.625433 m
  • R = MODIS 正弦投影球半径 6,371,007.181 m
  • φc = 当前网格中心纬度,角度量先以弧度计算再转换为度;四角为中心经纬度分别加减 δlon 与 δlat
分级与阈值
默认模式为正交显示切换模式不会改变网格 ID、中心点、图层数值或当前选中网格
时间窗口静态显示规则,适用于本页全部 2,593 个 MODIS 中心网格
缺失值处理显示几何元数据缺失或异常时,GIS 地图与数据表按失败关闭策略停止初始化。
局限:正交近似显示格不是原生网格边界;全部 2,593 格逐角审计的最大同名角大圆表面位移为 465.805852 m;点落格、边界相交、面积计算和下载分析必须使用原生 GeoJSON 几何
实现位置:docs/gis/heat-exposure-gis-method.md; static/js/heat-exposure-gis.js; services/heat_exposure_gis_service.py

65 岁及以上人口比例

ASPECT 2020 随机森林人口空间分配结果的网格聚合

ASPECT 2020 年龄结构人口栅格聚合到原生 MODIS 网格后,65 岁及以上模型化人口占模型化总人口的比例。

当前公式
Share65 = 100 × ΣP65 / ΣPtotal
变量与权重
  • P65 = MODIS 网格内 ASPECT 100 m 像元的 65 岁及以上模型化人口
  • Ptotal = 同一网格内 ASPECT 100 m 像元的模型化总人口
分级与阈值
仅在 ΣPtotal > 0 时显示地图六分位色阶只服务空间比较,不是医学阈值
时间窗口人口基准年 2020;空间单位为都昌县研究边界内的原生 MODIS 中心网格
缺失值处理模型化总人口为 0 的 872 个网格显示无数据;公开产物不输出绝对人口计数。
局限:属于模型化空间分布;受人口基准年和协变量精度影响;不能定位个人、家庭或具体住址
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

Aqua 白天晴空地表温度均值

NASA Aqua MYD11A1.061 原生 1 km 像元逐日质量筛选后求均值

Aqua MYD11A1.061 在 Q3 质量口径下的白天晴空地表温度多年夏季均值。

当前公式
LST_C = Raw×0.02−273.15;Mean = ΣLST_C / n_Q3
变量与权重
  • Raw = MYD11A1 LST_Day_1km 有效原始编码
  • n_Q3 = mandatory QA 位为 00 或 01 且原始编码有效的网格日数
分级与阈值
地图六分位色阶来自全县有效网格分布,只用于相对空间比较
时间窗口2020 至 2024 年,每年 6 月 1 日至 8 月 31 日;本地冻结 448 个场景
缺失值处理云遮、质量筛选或缺失场景会减少 n_Q3;没有 Q3 合格观测时显示无数据。
局限:晴空采样存在天气选择效应;地表温度不能替代 2 米气温、室内温度或体感温度;多年均值会平滑短期极端事件
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

Q3 合格观测覆盖率

逐网格质量控制计数

衡量每个网格在 448 个本地冻结场景中有多少天通过 Q3 质量筛选,用于识别云遮和数据稀疏。

当前公式
CoverageQ3 = 100 × n_Q3 / 448
变量与权重
  • n_Q3 = 当前网格 Q3 合格观测天数
  • 448 = 研究期本地冻结且可复核的 MYD11A1 场景数
分级与阈值
覆盖率越高代表可用于均值的天数越多该指标不衡量温度高低或健康危险程度
时间窗口2020 至 2024 年夏季本地冻结场景
缺失值处理分母固定为 448;质量不合格、云遮和场景缺失均不会进入分子。
局限:只能描述有效观测数量;不能校正晴空采样偏差;空间差异可能由云量和质量标志共同造成
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

树木覆盖比例

10 m 分类栅格按源像元覆盖权重聚合

ESA WorldCover 2020 v100 中类别 10 的源像元覆盖权重,聚合到原生 MODIS 网格。

当前公式
TreeCover = 100 × Σw(class=10) / Σw(valid)
变量与权重
  • w = WorldCover 源像元与目标 MODIS 网格相交时使用的覆盖权重
  • class=10 = Tree cover
分级与阈值
地图六分位色阶只服务空间比较
时间窗口ESA WorldCover 2020 v100
缺失值处理目标网格没有有效 WorldCover 支持时显示无数据。
局限:全球产品存在分类误差;2020 快照不能反映后续土地覆盖变化;比例不描述树冠高度或遮阴可达性
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

建成区覆盖比例

10 m 分类栅格按源像元覆盖权重聚合

ESA WorldCover 2020 v100 中类别 50 的源像元覆盖权重,聚合到原生 MODIS 网格。

当前公式
BuiltUp = 100 × Σw(class=50) / Σw(valid)
变量与权重
  • w = WorldCover 源像元与目标 MODIS 网格相交时使用的覆盖权重
  • class=50 = Built-up
分级与阈值
地图六分位色阶只服务空间比较
时间窗口ESA WorldCover 2020 v100
缺失值处理目标网格没有有效 WorldCover 支持时显示无数据。
局限:全球产品存在分类误差;比例不描述建筑密度、高度、材料或室内热环境;2020 快照不能反映后续建设变化
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

近似永久水域比例

10 m 分类栅格按源像元覆盖权重聚合

ESA WorldCover 2020 v100 中类别 80 的源像元覆盖权重,用于描述网格内近似永久水体背景。

当前公式
PermanentWater = 100 × Σw(class=80) / Σw(valid)
变量与权重
  • w = WorldCover 源像元覆盖权重
  • class=80 = Permanent water bodies
分级与阈值
地图六分位色阶只服务空间比较
时间窗口ESA WorldCover 2020 v100
缺失值处理目标网格没有有效 WorldCover 支持时显示无数据。
局限:属于近似覆盖比例;未进行严格大地测量面积计算;季节性水体和岸线分类误差会影响结果
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

平均表面高程

约 30 m 数字表面模型覆盖权重平均

Copernicus DEM GLO-30 数字表面模型按有效源像元权重聚合到原生 MODIS 网格。

当前公式
MeanElevation = Σ(Elevation×w_valid) / Σw_valid
变量与权重
  • Elevation = GLO-30 源像元表面高程
  • w_valid = 有效源像元覆盖权重
分级与阈值
地图六分位色阶只服务空间比较
时间窗口Copernicus DEM GLO-30 产品版本对应的静态表面
缺失值处理目标网格没有有效 DEM 支持时显示无数据。
局限:数字表面模型包含植被和建筑等地物高度;不能直接解释裸地地形;空间聚合会平滑局地起伏
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py

冻结产物独立复核门槛

独立复核程序与发布前失败关闭校验

发布器只接收通过失败关闭复核的冻结输入,并在 GeoJSON 中保留输入 SHA-256 指纹和质量摘要。

当前公式
Publish = 1{validation_pass = true ∧ status = pass ∧ hard_failures = 0}
变量与权重
  • 复核范围包含网格全集、日历与本地场景、资产完整性和抽样面板重算
  • SHA-256 指纹用于确认发布输入与冻结证据一致
分级与阈值
任何硬失败都会停止 GeoJSON 构建当前冻结报告硬失败数为 0
时间窗口本次 2020 至 2024 年夏季冻结数据版本
缺失值处理验证报告缺失、状态不通过、网格 ID 不一致或边界要素异常时停止构建。
局限:程序复核用于检查可重复性与内部一致性;不代表外部机构认证;上游数据集自身误差仍会传递到结果
实现位置:docs/gis/heat-exposure-gis-method.md; services/heat_exposure_gis_service.py
方法 7

模型可靠性

回测误差与区间覆盖指标。

MAE(平均绝对误差)

离线回测指标

预测门诊量与实际门诊量之间绝对差值的平均数。越低越好。

当前公式
MAE = mean(|Actual − Predicted|)
变量与权重
  • 单位与门诊量相同
分级与阈值
应结合实际日门诊量规模判断
时间窗口回测报告覆盖期
缺失值处理没有回测报告时不展示数值。
局限:不反映误差方向;不能单独证明预警校准良好
实现位置:scripts/backtest_forecast.py

RMSE(均方根误差)

离线回测指标

对较大的预测错误惩罚更重。越低越好。

当前公式
RMSE = sqrt(mean((Actual − Predicted)²))
变量与权重
  • 单位与门诊量相同
分级与阈值
与 MAE 一起看;RMSE 明显更高常表示存在少数大误差
时间窗口回测报告覆盖期
缺失值处理没有回测报告时不展示数值。
局限:容易被少数极端日影响
实现位置:scripts/backtest_forecast.py

预测区间覆盖率

离线回测区间指标

实际门诊量落在预测下界和上界之间的天数比例。

当前公式
Coverage = 区间包含实际值的有效天数 / 同时具有实际值、下界和上界的回测天数
变量与权重
  • 应同时观察区间宽度,过宽也会得到高覆盖率
分级与阈值
目标应接近区间名义置信水平
时间窗口回测报告覆盖期
缺失值处理缺少实际值或上下界的日期会从分子、分母同时排除;没有有效日期时不展示。
局限:高覆盖率不一定代表区间有用
实现位置:scripts/backtest_forecast.py
数据与模型版本

输入从哪里来,在线到底算什么

天气与空气质量

  • 实时天气和 7 天预报以和风天气(QWeather)为主要来源。
  • 部分非核心天气读取允许 Open-Meteo 兜底;页面会标记来源、缓存和更新时间。
  • 公开风险、行动、照护、社区、个人评估、慢病和 ML 等生产风险链在天气不可用时停止输出结论,不用演示天气代替。
  • 和风 7 日预报逐日最高温、最低温、平均温或湿度缺失、NaN、无穷时,整组预报会被拒绝,不缓存也不计算风险。
  • 7 日复合暴露的 PM2.5 代理链会逐项标记来源;个人健康评估的 AQI 缺失时保留为空,并对该路径其余可用指标重新归一权重。

DLNM 在线链路

  • 离线模型属于 quasi-Poisson 广义线性回归,DLNM cross-basis 表达温度的非线性和滞后效应。
  • 网站在线请求不会重新拟合回归;它读取 final_single_model_ar1_profile.json 中导出的温度–RR 曲线并插值。
  • 当前 profile 版本为 2026-02-11,参考温度 MMT 为 23.8°C。该曲线按累积 RR 使用,线上不会再叠加 lag 权重。
  • 当前研究证据状态为 exploratory,MMT 边界标记为 1。冷端 RR 1.45 与热夜 RR 1.34 只保留为未启用的研究元数据。
  • 当前 production profile 的单日 RR 上限为 2.6,profile 未加载时文献先验单日上限为 2.2;累计上限均为 3.5。
  • 模型未训练时使用 RR=1+0.015×|T−20| 的简化分支,并跳过病种与年龄修正;结果明细会标记该分支。

健康与社区数据

  • 历史模型数据覆盖 2023-12-13 至 2025-01-30,共 2,258 条门诊记录;60 岁以上 1,213 条。
  • 社区风险使用社区人口、老龄率、慢病率、绿地、热岛、医疗可达性和历史病例。
  • Community 表为空或查询失败时,社区地图返回空结果并显示数据不可用,不加载内置 8 村演示档案。
  • 已有社区缺少实测绿地、热岛和医疗可达性时,系统使用稳定的中性代理值,并在页面标明局限。
  • 病例覆盖率只表示社区字段成功匹配比例,不代表诊断编码已完全验证。

RandomForest 分类器

  • 模型为 13 类疾病多分类器,输入包括年龄、性别、时间和天气特征。
  • 现有模型元数据记录准确率约 65.3%,F1 约 64.2%。
  • 原始 RandomForest 输出是类别概率;天气规则调整后没有再次归一化,页面因此显示“关注分”,不会把它解释为未来发病概率。
  • 没有真实推理结果时,页面不会再展示虚构的示例贡献条。
已知局限

当前仍需要继续验证的地方

  • 当前 production RR profile 的残差仍存在自相关,应该继续做按时间切分的回测与校准。
  • 仓库内可复现的 v1 DLNM 报告把 MMT 标记为搜索边界值,不应直接替换线上 profile。
  • 社区原始脆弱性字段存在 0–1 与 0–100 单位混用警告,绿地、热岛、慢病率和医疗可达性仍需更可靠的实测数据。
  • 个人、慢病和 7 天评分包含人工设定的可审计权重;这些权重用于行动筛查,尚未完成临床校准。个人概率、门诊高负荷概率及其模型预警与 Likelihood 矩阵因此停用;官方天气预警保持独立。
  • 慢病评分只在慢病层应用一次个体年龄放大;该年龄规则仍需真实试点数据校准。
  • 数据缺失、代理值、模型回退或天气 API 不可用时,页面必须显示状态,不能把默认值包装成真实观测。
隐私与使用边界

系统会保存什么

  • 注册与照护功能会在账号权限范围内保存用户名、家庭成员档案、健康字段、评估记录和行动记录。
  • 短码和行动令牌使用哈希与有效期保护;公开页面不应暴露原始健康档案。
  • 个人阈值拨片只保存在当前浏览器,不上传服务器。
  • 历史建模输出应使用去标识或聚合数据;原始病历字段不进入公开页面和公开报告。
  • 微信小程序不使用第三方生成式 AI,也不会把老人档案、健康记录或自由文本发送给 AI 服务。
  • Web 正式入口的 AI 问答当前关闭;如未来启用,会在发送前单独说明处理方、数据用途、保存期限并取得明确同意。
  • “分享给医生/社区”的字段不等同于完整授权体系,真实医生试点前仍需补充角色、授权、审计和数据最小化。

发现公式、数值或页面解释不一致时,请附上页面、指标名、时间和截图。

反馈数据问题