应采用残差z-score过滤与滚动回归动态调参双策略:先用z-score剔除|z|>3的异常残差样本,再通过statsmodels滚动ols检测连续3次超限残差,自动触发delta=-0.015的斜率调整指令并实时生效。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在使用 Hermes Agent 进行交通流量、传感器读数或业务指标等时序数据建模时,发现线性回归预测结果持续偏离真实值、残差呈现系统性偏移或异常点频发,则可能是由于原始数据中存在未识别的异常值干扰了模型参数估计。以下是解决此问题的步骤:
一、基于 residuals 的 Z-Score 异常过滤
该方法利用线性回归拟合后的残差分布服从近似正态的假设,通过计算标准化残差绝对值是否超过阈值(通常为3),识别并剔除对斜率与截距造成显著扰动的离群样本。
1、在 Hermes Agent 的 environments/hermes_swe_env/hermes_swe_env.py 中加载原始训练数据集 X_train 和 y_train。
2、调用 sklearn.linear_model.LinearRegression().fit(X_train, y_train) 得到初始模型与预测值 y_pred。
3、计算残差数组 residuals = y_train - y_pred,并使用 scipy.stats.zscore(residuals) 获取每个残差的 Z-Score。
4、构建布尔掩码 mask = np.abs(z_scores)
5、使用该掩码重新切片 X_train 和 y_train,生成清洗后的 clean_X_train 与 clean_y_train,用于后续模型重训练。
二、集成 Isolation Forest 的多维异常预筛
当输入特征维度大于1(如同时包含时间戳、温度、湿度、车速均值等协变量)时,单变量残差法易漏检高维空间中的局部异常点。Isolation Forest 能在不依赖分布假设的前提下,通过随机分割路径长度识别稀疏区域样本,适合作为 Hermes Agent 数据预处理流水线中的前置模块。
1、从 Hermes Agent 的 tools/file_operations.py 加载结构化 CSV 数据,并确保数值型特征已做缺失值填充与标准化。
2、导入 sklearn.ensemble.IsolationForest,初始化模型:iso_forest = IsolationForest(contamination=0.05, random_state=42)。
3、对全部特征矩阵 X_full 调用 iso_forest.fit_predict(X_full),返回数组中值为 1 表示正常点,-1 表示异常点。
4、提取预测标签为 -1 的所有行索引,记录至 anomaly_indices 列表。
5、将 anomaly_indices 传入 Hermes Agent 的 batch_runner.py 中的 drop_rows_by_index() 工具函数,执行批量剔除操作。
三、ACP 协议驱动的在线异常反馈闭环
针对 Hermes Agent 在运行时持续接收流式数据的场景,需避免每次全量重训模型。本方案利用 ACP 协议(Adaptation–Control–Prediction)中的 Adaptation 层,将异常检测逻辑封装为可热插拔 Skill,并通过 session/prompt 接口向会话池实时注入修正信号,实现模型参数的渐进式校准。
1、在 skills/mlops/anomaly_feedback/SKILL.md 中定义技能元信息,声明其触发条件为 “residual > threshold × std(y_pred)”。
2、编写 Python 实现文件 skills/mlops/anomaly_feedback/runner.py,内含 detect_and_adapt() 函数,该函数调用 statsmodels.api.OLS 对最近 N 个样本执行滚动回归,并比对当前残差与滚动标准差。
3、当检测到连续 3 次残差超限,自动触发 hermes session/prompt 请求,携带 payload: {"action": "adjust_slope", "delta": -0.015}。
4、CliAcpSessionPool 接收该 prompt 后,调用 StdioAcpTransport 向 Hermes ACP 子进程发送指令,子进程解析后动态调整线性模型权重系数。
5、更新后的模型参数立即生效于下一轮预测,无需中断会话或重启进程。











