ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

TDengine TDgpt 时间序列预测(二):ETS 误差-趋势-季节状态空间模型使用指南

2026/9/14 13:20:23 拓冰建站 浏览量
TDengine TDgpt 时间序列预测(二):ETS 误差-趋势-季节状态空间模型使用指南 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 内置 AI 分析引擎 TDgpt 提供的时间序列预测算法之一。它基于指数平滑的状态空间模型将时间序列显式分解为误差、趋势和季节三个成分既可以由算法自动选择成分组合也可以由用户显式指定加法A、乘法M成分并支持阻尼趋势与预测置信区间输出。本文以 07-ets.md 文档为主线结合 ETS 算法源码 与 预测算法测试用例系统讲解 ETS 的模型原理、参数含义、调用方式与输入约束。读完本文你将能够在 TDengine 中通过FORECASTSQL 函数独立完成 ETS 预测分析并正确解读返回的 MSE 与置信区间结果。ETS 算法概述ETS 是 Error、Trend、Seasonal 三个英文单词首字母的组合即误差、趋势和季节模型。ETS 使用状态空间模型State Space Model分别描述时间序列中的误差、趋势和季节三个成分是经典指数平滑Exponential Smoothing方法的现代形式化表达。TDgpt 内置的是自动化 ETS 模型算法会根据输入参数和时间序列自身的特征自动选择合适的成分组合并预测后续数据。此外ETS 支持计算预测结果的置信区间范围便于量化预测的不确定性。从源码实现看ETS 服务类继承自AbstractStatsForecastService定义于 taosanalytics/base.py实际建模底层调用开源statsforecast库的AutoETS模型。在 ets.py 的_fit_model方法中服务将用户配置的period、model、damped三个参数原样传递给AutoETS完成模型拟合def _fit_model(self, values: np.ndarray): Fit and return the configured ETS model. season_length self.period if self.period 0 else 1 model AutoETS( season_lengthseason_length, modelself.model, dampedself.damped ) return model.fit(values)依赖版本可参考 tools/tdgpt/requirements_docker.txtstatsforecast2.1.1。参数说明ETS 算法支持三个核心参数均通过FORECAST函数的option_expr中以KV方式传入参数说明必填项period输入时间序列每个周期包含的数据点个数。如果不设置该参数或设置为 0将使用非季节性模型预测选填model三个字符组成的 ETS 模型。三个字符依次表示误差、趋势和季节成分默认值为ZZZ表示自动选择各个成分选填damped是否使用阻尼趋势设置为1表示使用设置为0表示不使用不设置时由算法根据模型自动处理选填model 参数成分字符与模型格式模型字符串中的三个字符依次表示**误差Error、趋势Trend、季节Seasonal**成分各字符取值含义如下A加法成分AdditiveM乘法成分MultiplicativeN不包含该成分NoneZ由算法自动选择Auto例如ANN表示加法误差、不包含趋势和季节成分即经典的简单指数平滑模型。在 ets.py 的set_params中模型参数会被强制转换为大写并进行严格校验必须恰好为 3 个字符且第一个字符只能是A、M、Z第二、三个字符只能是N、A、M、Z否则抛出ValueError(model parameter is not a valid ETS model)。这一校验规则也在测试用例 test_ets_invalid_params 中覆盖如AA、NAA、AXA、AAAA等非法取值均会被拒绝。damped 参数阻尼趋势阻尼趋势Damped Trend通过衰减因子让趋势在预测远期时逐渐趋于平缓避免趋势被无限外推。取值规则1使用阻尼趋势0不使用阻尼趋势不设置由算法根据模型自动处理源码中对应dampedNone源码 ets.py 接受0、1、false、true四种取值其他值如yes、2、-1会抛出异常。通用 FORECAST 参数除上述 ETS 专有参数外调用时还可使用FORECAST的通用控制参数详见 预测分析总览参数含义默认值rows预测结果的记录数10最大 1024every预测数据的采样间隔输入数据的采样间隔start预测结果的开始时间戳输入数据最后一个时间戳加一个采样间隔conf预测置信水平0.95有效范围(0, 1)wncheck是否对输入做白噪声检查1检查0表示不检查timeout预测分析等待的最长时间60秒最大 1200秒输入数据要求ETS 对输入数据有明确的约束违反任一条件都会导致调用失败输入数据只能包含有限数值不能包含NaN、正无穷或负无穷。测试用例 test_ets_rejects_non_finite_input 验证了包含非有限值时抛出NaN or infinite异常。数据量下限非季节性预测period为 0 或未设置至少需要2 个输入值当period大于 0 时输入数据至少需要包含2 个完整周期即至少2 × period个点。对应测试见 test_new_forecasters_require_two_complete_periods输入不足时抛出less than the required periods异常。乘法成分要求正数只要model中包含M乘法成分输入数据必须严格为正数不能包含 0 或负数。这一约束由 ets.py 的_validate_input_values强制校验测试用例 test_ets_multiplicative_requires_positive_input 验证了包含 0 或负数时抛出strictly positive异常。原因在于乘法模型使用比例形式分解成分非正数无法参与乘法运算。此外从 base.py 的公共参数校验逻辑看period不能为负数、conf必须位于[0, 1)区间这些约束对 ETS 同样生效。使用示例基本调用针对i32列进行数据预测假设输入列每 12 个点是一个周期由 ETS 自动选择误差、趋势和季节成分并启用阻尼趋势FORECAST(i32, algoets,period12,modelZZZ,damped1)完整的调用 SQL 语句如下SELECT _frowts, FORECAST(i32, algoets,period12,modelZZZ,damped1) from foo其中_frowts是预测结果的对应时间戳伪列。foo为示例时序数据表其模式包含ts、val等列参见 预测分析总览。返回结果结构ETS 预测返回 JSON 格式结果{ rows: rows, // 返回结果的行数 period: period, // 返回结果的周期性同输入 algo: ets, // 返回结果使用的算法 mse: mse, // 拟合输入时间序列生成模型的均方误差 (MSE) res: res // 列模式的预测结果及置信区间 }字段含义说明rows返回结果的行数对应rows参数period返回结果的周期性与输入period一致algo固定为etsmse模型在输入时间序列上的拟合均方误差Mean Squared Error用于衡量模型对历史数据的拟合程度值越小说明拟合越好res预测结果数组包含预测均值序列以及置信区间下界、上界序列。从 base.py 的实现可见当启用置信区间return_conf为真时res为[均值序列, 下界序列, 上界序列]三行结构置信水平由conf参数控制默认 0.95。在 SQL 查询侧也可以通过_FLOW、_FHIGH伪列直接读取每个预测点的置信区间上下界其用法示例见 预测分析总览。测试验证仓库中的测试套件 tools/tdgpt/tests/forecast_test.py 对 ETS 进行了多维度验证可作为理解算法行为的参考test_ets_forecast以period12, modelZZZ, damped1调用 ETS验证能正常返回 10 行预测结果test_ets_invalid_params验证非法model与damped取值被拒绝test_new_forecasters_constant_series对常数列输入ETS 返回有限预测值且拟合 MSE 接近 0说明模型对平稳序列的拟合表现test_new_forecasters_invalid_common_params验证rows、period、conf等公共参数的边界约束。选型建议与使用注意事项在 TDgpt 内置预测算法中ETS 与 CES、Theta 定位相近选型时可参考如下建议详见 预测分析总览希望显式解释误差、趋势和季节成分时优先选择 ETS它可以自动选择或显式配置加法、乘法成分并支持阻尼趋势季节模式较复杂、难以用常规加法或乘法描述时可考虑 CES序列具有明显长期趋势和相对规律季节性时可考虑 Theta不确定模型结构时先用modelZZZ让算法自动选择成分。实际使用 ETS 时需特别注意进行季节性预测必须设置period且历史数据至少包含两个完整周期否则模型无法估计季节成分乘法成分M要求输入严格为正工业场景中若数据含 0 值或负值如某些能耗、温度类数据建议改用加法成分或先做数据清洗预测前默认会进行白噪声检查wncheck1若输入序列本身接近白噪声预测结果可能被判定为无意义可通过wncheck0关闭ETS 属于 TDgpt 预测算法服务使用时需确保 TDgpttaosanode/anode服务已部署并可用部署方式参见 tools/tdgpt/INSTALL.md。小结ETS 是 TDgpt 提供的最具解释性的预测算法之一它把时间序列拆解为误差、趋势、季节三个可解释成分并通过modelZZZ的自动选择机制降低使用门槛。结合period、damped参数与置信区间输出ETS 既能用于快速自动预测也能满足对模型结构有明确要求的场景。理解其参数校验与输入约束正数要求、双周期要求是正确使用 ETS 获得有效预测结果的关键。参考文献AutoETS - StatsForecast 模型文档ETS 自动选择模型的底层实现Forecasting with Exponential Smoothing: The State Space Approach指数平滑状态空间方法的经典专著ETS 模型的理论基础【免费下载链接】TDengineHigh-performance, scalable time-series database designed for Industrial IoT (IIoT) scenarios项目地址: https://gitcode.com/GitHub_Trending/tde/TDengine创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考