模型实战指南)
TDengine TDgpt 时间序列预测ETS误差-趋势-季节性模型实战指南【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengineETSError, Trend, Seasonal误差-趋势-季节性是一种基于状态空间模型的经典指数平滑预测方法TDengine 通过 TDgpt 分析平台将其封装为 SQL 可直接调用的FORECAST算法。本文以官方文档 07-ets.md 为主体结合仓库中的算法实现与测试用例系统讲解 ETS 的模型原理、参数配置、输入数据要求、SQL 调用方式与返回结果格式帮助读者在 TDengine 中快速落地具备置信区间的时序预测能力。ETS 模型简介ETS 使用状态空间模型state-space model来分别描述时间序列的三个核心成分Error误差预测残差的表现形式可为加法additive或乘法multiplicativeTrend趋势序列随时间变化的长期走向可省略、加法、乘法或自动选择Seasonal季节性周期性波动可省略、加法、乘法或自动选择。在 TDgpt 中ETS 采用**自动建模automated ETS modeling**策略算法会根据输入时间序列的特征自动挑选合适的误差、趋势、季节性组合再对未来数据进行外推预测。这一能力来自 ets.py 中对statsforecast.models.AutoETS的封装——模型拟合时以season_length self.period if self.period 0 else 1作为季节长度并将用户指定的model与damped参数直接透传给AutoETS。ETS 的另一个重要特性是为预测结果提供置信区间confidence interval这在设备指标波动评估、容量规划等场景中非常实用。参数说明ETS 算法通过FORECAST函数的第二个字符串参数以keyvalue形式传入共支持三个 ETS 专属参数参数说明是否必填period每个周期包含的数据点数量。不指定或设为0时使用非季节性模型否model三位字符的 ETS 模型标识依次指定误差、趋势、季节性成分。默认值为ZZZ即自动选择各成分否damped是否使用阻尼趋势damped trend。填1启用0禁用。不指定时由算法根据模型自动决定否在模型字符串中各字符含义如下A加法成分additiveM乘法成分multiplicativeN省略该成分noneZ自动选择automatic。例如ANN表示加法误差、无趋势、无季节性即经典的简单指数平滑模型MAM则代表乘法误差、加法趋势、乘法季节性的完整 ETS 模型。值得注意的是model与damped的取值在参数解析阶段就会被严格校验。从 ets.py 的set_params实现可以看到model会被强制转为大写且必须满足长度为 3、第一位只能是A/M/Z、第二和第三位只能是N/A/M/Z否则抛出ValueErrordamped只接受0、1、false、true四种取值不区分大小写其他值如2、-1、yes、空串都会被拒绝。输入数据要求ETS 对输入数据有明确约束调用前需要确认数据满足以下条件只能包含有限的数值finite numeric values。NaN、正负无穷都会被拒绝——在 base.py 的execute中通过np.isfinite全量检查不通过则报错input data contains NaN or infinite values非季节性预测至少需要 2 个输入值当period大于 0 时输入数据必须包含至少两个完整周期。这一点在 base.py 中体现为min_rows max(2, self.period * 2)即输入长度必须不少于period * 2乘法成分要求输入数据全部为正数。校验逻辑位于 ets.py当模型字符串中出现M且存在小于等于 0 的数据时抛出ValueError。这是由乘法状态空间模型的数学性质决定的——乘法运算要求观测值严格为正。从源码结构看ETS 与 CES、Theta 共用同一套AbstractStatsForecastService基类因此上述输入校验有限数值、最小周期数同样适用于这些算法可参见测试文件 forecast_test.py 中的test_ets_rejects_non_finite_input与test_ets_multiplicative_requires_positive_input用例。使用示例下面以官方文档中的示例说明 ETS 的 SQL 调用方式。该示例对foo表的i32列进行预测每 12 个数据点构成一个周期由 ETS 自动选择误差、趋势与季节性成分并使用阻尼趋势FORECAST(i32, algoets,period12,modelZZZ,damped1)完整的 SQL 语句为SELECT _frowts, FORECAST(i32, algoets,period12,modelZZZ,damped1) from foo其中_frowts为预测结果的时间戳列。ETS 与 TDgpt 的预测框架衔接紧密框架会自动完成数据预处理含白噪声检查、重采样与时间戳对齐详见 04-preprocess.md并对齐输出时间戳用户只需聚焦于参数调优。除 ETS 专属参数外ETS 还继承FORECAST函数通用的框架级参数见 base.py 与 01-forecast.mdrows必填预测返回的行数start_ts必填预测结果的起始时间戳time_step必填预测结果相邻点的时间间隔conf可选默认0.95置信区间置信水平取值区间为[0, 1)return_conf可选默认1置0时不返回置信区间。返回结果格式ETS 的调用结果以 JSON 形式返回字段含义如下{ rows: rows, // 返回的行数 period: period, // 结果的时间周期 algo: ets, // 算法名称 mse: mse, // 均方误差Mean square error res: res // 预测结果及置信区间以列形式组织 }其中res的列组织方式与预测框架约定一致。从 base.py 与 execute 的实现可以看到结果首列为按start_ts index * time_step生成的时间戳序列当return_conf1时依次包含预测均值列、置信区间下界lo列与上界hi列当return_conf0时仅返回预测均值列mse通过样本内拟合值predict_in_sample与原序列计算得到nanmean((values - fitted) ** 2)输出中还会附带model_info值为ETS用于标识所用模型。源码级实现与测试验证ETS 在 TDgpt 中的完整实现位于 tools/tdgpt/taosanalytics/algo/fc/ets.py核心流程如下服务注册name ets、desc forecast algorithm by using error, trend and seasonal models并标记为内置算法_builtins True参数解析set_params完成model、damped的取值校验与归一化模型拟合_fit_model构造AutoETS(season_length..., model..., damped...)并调用fit(values)结果格式化复用基类AbstractStatsForecastService生成预测均值、置信区间与 MSE。仓库中的单元测试 forecast_test.py 对 ETS 进行了系统验证可作为调用行为的权威参考test_ets_forecast以period12, modelZZZ, damped1预测 10 行数据验证结果结构test_ets_invalid_params验证非法model如AA、NAA、AXA、AAAA与非法damped如2、-1、yes、空串均被拒绝test_ets_rejects_non_finite_input验证输入含NaN、正负无穷时抛错test_ets_multiplicative_requires_positive_input验证modelMNN时输入含0或负数会抛错test_new_forecasters_require_two_complete_periods验证period12时仅 23 个输入点不足两个周期会被拒绝test_new_forecasters_constant_series验证常量序列可正常预测且拟合 MSE 接近 0。使用建议与注意事项选对period季节性预测的周期应与数据真实周期一致。例如按小时采样且存在日周期波动时可设period24按日采样存在周周期时可设period7。周期设置错误会显著影响预测质量优先使用ZZZ自动建模若不熟悉各成分组合的语义保留默认的modelZZZ让算法自动选择通常是最稳妥的做法同时可利用damped1防止趋势外推过度发散注意乘法模型的正数约束含M成分的模型要求数据严格为正含零值或负值的指标如温差、净流量应改用加法模型或先做数据变换确保输入数据经过预处理ETS 对缺失数据不自动填充输入序列的时间戳必须等间隔对齐否则预测会报错详见 04-preprocess.md善用置信区间默认conf0.95给出 95% 置信水平下的上下界可用于异常判定、容量告警阈值设定等业务场景。【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考