返回 Skill 列表
extension
分类: 其它无需 API Key

工程安全监测HST模型拟合分析skill

HST 统计回归模型——将变形/渗流测值分解为水压+温度+时效三分量,输出 R²/残差/分量占比

person作者: user_2ac354f5hubcommunity

所属体系: 监测分析原子技能集 (5/5) 引擎路径: ../监测数据分析/engine/hst_model.py 核心算法: HST δ = δ_H(H~H⁴) + δ_T(sin/cos) + δ_θ(θ+lnθ)


执行铁律(强制)

违反任一条即视为技能调用失败。禁止以"结果看起来合理"为由绕过。

  1. 强制调用中央引擎:本技能算法实现唯一来源为 ../监测数据分析/engine/hst_model.py,必须调用 run_hst。执行前先引导路径,二选一:
    • E:\Desktop\临时工作测试文件\Z\监测数据分析 为工作目录,直接 from engine.hst_model import run_hst;或
    • 在脚本/会话开头 import sys, os; sys.path.insert(0, os.path.abspath("../监测数据分析")) 后导入。
  2. 配置版本校验(C-002):调用 run_hst 前,传入的 config 字典必须含 schema_version 字段(当前版本 "2.0");缺失或类型不匹配则立即中止调用,不得静默使用默认参数或跳过校验继续拟合。
  3. 禁止自行编写算法(C-003):不得用 numpy/scipy 手写最小二乘、逐步回归、谐波拟合、差分回归等替代引擎函数;不得复制引擎源码到本技能目录另建副本。
  4. 禁止脱引擎直算:不得在会话中逐行重算 HST 分量(水压/温度/时效)后伪造 engine 输出。
  5. import 失败即停:按第 1 条引导后仍无法 import engine.hst_model 时,明确报错"引擎不可用,无法执行 HST 拟合",禁止另起炉灶自写算法顶替。
  6. 结果以引擎输出为准status/r2/component_ratios/monitor 等字段是最终判读依据,禁止凭直觉改写数值;输出结构以本文件"输出契约"为准,禁止自行增删字段。

功能

对清洁的监测时间序列建立 HST 统计回归模型,实现三分量分解,输出模型品质指标和残差序列。

支持 7 种模型结构:标准 HST、温度为主 HT、水位为主 HST-H、仅时效、土石坝滞后模型、逐步回归、较佳时效模型(指数衰减 + 年/半年谐波,式3.2.17)

理论依据与因子选择(吴中如 HST 体系)

依据:吴中如《水工建筑物安全监控理论及其应用》第3章(位移分解/三分量因子)、第9章(监控指标)。完整推导与实例见知识库 02_变形和应力统计模型.md06_关键公式速查.md

位移分解与模型通式

$$\delta(H, T, \theta) = \delta_H + \delta_T + \delta_\theta ; (+\delta_J)$$

| 分量 | 通式 | 因子选择要点(按坝型) | |------|------|------------------------| | 水压 δ_H | $\delta_H = \sum_{i=1}^{3(4)} a_i H^i$ | 重力坝 H³;拱坝/连拱坝 H⁴(⁵)(分配荷载非线性);重力坝可附加扬压力因子 $a\Delta\bar{H}j$(观测日水位与前 j 天平均水位差)与 $a_b(\Delta\bar{H}j)^2$;泥沙压力并入时效因子 | | 温度 δ_T | $\sum b_j T_j$ 或谐波 | 有坝内温度计:各计测值 $T_j$ 或等效温度 $(\bar{T},\beta)$(因子减半);只有气温水温:前 i 天均值(重力坝 i=5/20/60/90,连拱坝 i=1/2/3);只有气温:年/半年谐波 $\sum{i=1}^{2}(b{1i}\sin\frac{2\pi it}{365}+b_{2i}\cos\frac{2\pi it}{365})$ | | 时效 δ_θ | $c_1\theta + c_2\ln\theta$ | 蓄水初期/高精度:较佳模型 $\delta_\theta = C[1-e^{-r\theta}] + \sum_{n=1}^{2}(K_n\sin\frac{2\pi nt}{365}+K'_n\cos\frac{2\pi nt}{365})$(指数衰减 + 可恢复徐变谐波,Gauss-Newton 拟合);运行多年后可分段线性 | | 裂缝 δ_J | $\sum d_j J_j$ | 下游面水平缝等有规律裂缝:测缝计开合度 $J_j$ 为因子 |

因子相关警示(第一性难题)

  • H、H²、H³ 之间简单相关系数 r > 0.9;水温因子 $H^i$ 与水压因子形式相同 → 分量不唯一
  • 标准回归系数/偏回归平方和在因子相关时不能单独表征贡献 → 必须用逐步回归筛选(引入/剔除 F 阈值一般取 2~4,容许值 T = 0.0001~0.001);
  • 样本数 / 因子数建议 5~10 倍;建模建议扣除初始状态(H₀, T₀, θ₀)使常数项 ≈ 0 且有物理意义;
  • 当水位-温度年周期强相关时,可先用差值回归(等水位两两相减消水压)分离温度/时效,再回归水位项——已实现为 engine.hst_model.difference_regression()(显式含 ΔH 项吸收残余水压差 + Lasso 稀疏化;差值误差可达常规回归 2 倍,用于辅助分离判断而非精确估计)。

监控指标联动(第9章,评估输出的物理锚点)

  • 置信区间法:模型预测值 ± t·S(α=1%~5%),残差超限且无趋势 → 异常;
  • 一级监控指标(警戒值) = 安全系数法(允许抗力)反推荷载 → 模型计算效应量;二级监控指标(极值) = 极限状态法(极限抗力)反推;
  • 表达式统一形式:$\delta_m = \text{水压项} + \text{温度项} + \text{时效项}$,按时段(汛期/非汛期)分别标定;
  • 实测 > 二级极值 = 异常/险情;时效分量突变/急剧变化 = 大坝或地基"病态"征兆。

触发关键词

HST、HST模型、回归分析、统计模型、三分量分离、水压温度时效、模型拟合、变形分解、渗流分解、run_hst

输入契约

{
    "design_id": str,              # 测点编号
    "time_series": list[str],      # 时间标签 ["2024-01", "2024-02", …]
    "value_series": list[float],   # 测值(已清洁)
    "water_level": list[float],    # 同步水位序列(可选,用于水压分量)
    "temperature": list[float],    # 同步温度序列(可选,用于温度分量)
    "dam_type": str,               # 工程类型: "concrete_gravity"(默认) | "concrete_arch" |
                                   #   "earth_rockfill" | "foundation_pit" | "slope" | "tunnel"
    "do_stepwise": bool,           # 是否自动逐步回归(默认 True)
}

输出契约

{
    "status": str,                 # "ok" | "error"
    "design_id": str,
    "n": int,                      # 有效样本数
    "r2": float,                   # 决定系数(0~1,≥0.85 良好)
    "r2_adj": float,               # 调整后 R²
    "rmse": float,                 # 均方根误差
    "f_stat": float, "f_pvalue": float,   # F 检验
    "aic": float, "bic": float,    # 信息准则
    "k": int,                      # 入选因子数
    "dw": float,                   # Durbin-Watson 统计量(≈2 为无自相关)
    "vif_max": float,              # 最大 VIF(>10 共线性严重)
    "bp_pvalue": float,            # Breusch-Pagan 异方差检验 p 值
    "component_ratios": {          # 三分量贡献率(基于方差分解)
        "hydrostatic": float,      # 水压分量占比 %
        "temperature": float,      # 温度分量占比 %
        "time_effect": float       # 时效分量占比 %
    },
    "coefficients": dict,          # 回归系数
    "fitted": list[float],         # 拟合值
    "residuals": list[float],      # 残差(观测−拟合)
    "equation": str,               # 模型表达式文本
    "monitor": dict,               # 监控指标(残差标准差 S / ±1.96S·±3S 带 / 超限点数 / 时效趋势)
    "aging_model_used": str        # 实际采用的时效模型
}

执行方法

from engine.hst_model import run_hst

result = run_hst(
    design_id="IN-01",
    time_series=["2024-01", …, "2024-12"],
    value_series=[10.2, …, 12.8],
    water_level=[…],    # 可选
    temperature=[…],    # 可选
    dam_type="concrete_gravity",
)

print(result.status, result.r2, result.component_ratios)

JSON 序列化

# 转换为 dict / JSON
d = result.to_dict()
# {"r2": 0.952, "dw": 1.87, "component_ratios": {...}, …}
j = result.to_json()
# JSON 字符串

# 长序列截断选项(控制输出大小)
d_trimmed = result.to_dict(trim_series=True)

示例

输出片段:

{
    "status": "ok",
    "design_id": "IN-01",
    "n": 120,
    "r2": 0.952,
    "dw": 1.87,
    "f_pvalue": 0.0001,
    "component_ratios": {
        "hydrostatic": 45.2,
        "temperature": 32.1,
        "time_effect": 22.7
    },
    "equation": "δ = 0.312·H - 0.018·H² + ... + 1.24·sin(2πt/365) + ... + 2.15·θ + 1.03·ln(θ)"
}

状态语义与诊断

| 字段 | 判读 | 处理建议 | |------|------|---------| | status="error" | 拟合失败(样本<5 等) | 补充数据或跳过 | | r2<0.7 | 拟合差 | 检查数据质量或改用非线性模型 | | dw 远离 2 | 残差自相关 | 考虑 ARMA 残差校正 | | vif_max>10 | 共线性严重 | 启用 do_stepwise 逐步回归筛选 | | monitor.n_exceed_level1>0 | 超一级统计警戒(±1.96S) | 关注该测点 | | monitor.aging_trend | 时效分量突变/急剧变化 | 大坝/地基"病态"征兆,重点排查 |

Description

[auto-generated placeholder]

Usage

[auto-generated placeholder]

Trigger

[auto-generated placeholder]

Example

[auto-generated placeholder]