ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

TDengine 集成 Facebook Prophet 时间序列预测:FORECAST 函数使用与源码解析

TDengine 集成 Facebook Prophet 时间序列预测:FORECAST 函数使用与源码解析 数据库时序数据库物联网大数据实时分析云原生【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址https://gitcode.com/taosdata/tdengine点击查看免费下载导读本文围绕 TDengine 分析平台tdgpt内置的 Prophet 时间序列预测算法展开说明如何通过 SQL 中的FORECAST函数对具有趋势、季节性和节假日效应的时序数据如按天记录的客流、业务指标、生态监测数据进行预测。读完本文你将掌握 Prophet 模型在 TDengine 中的完整调用语法、全部可调参数的含义与默认值、返回结果的结构化解读方式以及该算法在 tdgpt 中的底层实现原理与数据约束。功能概述为什么选择 ProphetProphet 是由 Facebook 开发的开源时间序列预测算法适用于具有明显季节性、节假日效应以及趋势变化的时间序列数据。在 TDengine 分析平台中Prophet 被内置为名为prophet的预测算法可通过FORECAST函数直接调用。Prophet 具备以下显著特点对缺失值和异常值具有较强的鲁棒性模型基于可分解的加性结构对局部噪声不敏感自动检测周期模式能够识别并建模年、周、日等多重周期支持自定义季节性和节假日参数用户可显式开启/关闭各周期项或注入自定义事件效应不要求时间序列平稳与 ARIMA 不同Prophet 直接对原始序列建模对多周期性如年周期、周周期、日周期具有良好的建模能力。Prophet 模型的核心组成包括三部分趋势部分涵盖线性或饱和增长/下降趋势并支持趋势变化点changepoint的自动检测季节性部分通过傅里叶级数拟合周期性模式可分别控制年、周、日季节性的启用与否节假日部分支持注入自定义的节假日或事件效应TDengine 内置实现中主要通过季节性与趋势配置间接体现。在 TDengine 中的定位FORECAST 函数与 tdgpt 服务Prophet 预测能力由仓库中的 tdgpt 组件提供。算法服务注册中心通过loader.get_service(prophet)获取服务实例参见 service_registry.py其实现类定义在 prophet.pyclass _ProphetService(AbstractForecastService): Prophet algorithm to do forecast on input list name prophet desc do time series data forecast using Facebook Prophet model _builtins True该类继承自AbstractForecastService定义于 base.py。从源码结构看FORECAST的调用链路为SQL 解析与执行器forecastoperator.c→ 算法 URL 注册tanalytics.c→ tdgpt 服务端加载prophet算法实例。因此文档中algoprophet的取值必须与_ProphetService.name一致。参数详解控制 Prophet 的拟合与预测行为在分析平台中PROPHET 模型支持自动化配置但用户也可通过参数调整模型的拟合和预测过程。除所有预测算法通用的参数start_ts、time_step、rows、conf、return_conf、precision外Prophet 特有参数如下参数说明必填项growth趋势类型可选linear或logistic默认linear选填yearly_seasonality是否启用年季节性true/false/auto默认auto选填weekly_seasonality是否启用周季节性true/false/auto默认auto选填daily_seasonality是否启用日季节性true/false/auto默认auto选填changepoint_prior_scale趋势转折点灵活度数值越大越容易变化默认0.05选填参数底层解析逻辑对照源码prophet.py各参数的默认值与文档一致growth默认linear三个季节性参数默认autochangepoint_prior_scale默认0.05。其中季节性参数通过_convert_seasonality静态方法做兼容转换prophet.py合法输入包括字符串auto保持auto由 Prophet 依据数据长度自动判断是否拟合对应周期字符串true/false不区分大小写转换为布尔值True/False数值字符串如10转换为float作为傅里叶级数项数传递给 Prophet布尔值原样传递None或无法转换的值回退为auto。这一设计意味着三个季节性参数实际上支持auto、布尔值、以及数值三种形态比文档表格中列出的true/false/auto更为灵活。growth参数直接透传给 Prophet 的Prophet(growth...)构造函数changepoint_prior_scale则控制趋势变化点的先验灵活度数值越大模型越容易在数据中识别趋势转折但过大可能导致过拟合。完整调用示例针对列passengers进行时间序列预测数据按天记录假设存在周周期性和年周期性趋势转折点灵活度为 0.1进行预测。参数写法FORECAST(passengers, algoprophet,growthlinear,yearly_seasonalitytrue,weekly_seasonalitytrue,changepoint_prior_scale0.1)完整的调用 SQL 语句如下SELECT _frowts, FORECAST(passengers, algoprophet,growthlinear,yearly_seasonalitytrue,weekly_seasonalitytrue,changepoint_prior_scale0.1) FROM air;在上述语句中passengers是输入的时间序列列_frowts为原始时间戳列FORECAST第二参数以逗号分隔的键值对形式传递算法名与模型参数。通用参数所有预测算法共享FORECAST的公共参数在AbstractForecastService.set_params中统一校验base.py参数说明默认值/约束start_ts预测结果起始时间戳必填无默认缺失直接报错time_step相邻数据点的时间步长必填必须大于 0rows生成的预测行数必填必须大于 0conf置信区间宽度默认0.95取值范围[0, 1)return_conf是否返回置信区间上下界默认1返回precision时间戳精度默认msperiod周期长度默认0须非负例如结合conf与rows的完整写法SELECT _frowts, FORECAST(passengers, algoprophet,rows30,conf0.9,start_ts1700000000000,time_step86400000,yearly_seasonalitytrue,weekly_seasonalitytrue) FROM air;返回结果格式解析Prophet 预测的返回结果为一个 JSON 对象各字段含义如下{ rows: fc_rows, // 返回的预测结果行数即生成多少条预测数据 algo: prophet, // 使用的算法名称这里是 Prophet growth: linear, // 趋势类型可选 linear 或 logistic源码默认 linear yearly_seasonality: auto, // 是否启用年季节性true/false/auto源码默认 auto weekly_seasonality: auto, // 是否启用周季节性true/false/auto源码默认 auto daily_seasonality: auto, // 是否启用日季节性true/false/auto源码默认 auto changepoint_prior_scale: 0.05, // 趋势转折点灵活度数值越大越容易发生趋势变化源码默认 0.05 mse: mse, // 模型拟合误差指标均方误差 (Mean Squared Error) res: res // 预测结果列表包含每个时间点的预测值及其区间上下限 }字段说明rows、algo以及各模型参数会回显实际生效值mse为模型拟合的均方误差需要注意的是Prophet 服务在源码中默认返回mseNone见 prophet.py 注释 Prophet does not expose MSE by default与其它内置预测算法不同res为预测结果列表。当return_conf1默认时包含 4 个子列表时间戳列表[ts]、预测值列表yhat、置信下界yhat_lower、置信上界yhat_upper当return_conf0时仅返回时间戳与预测值见 prophet.py。源码级实现原理_ProphetService的核心预测逻辑在__do_forecast_helper中prophet.py整体流程如下构建时间索引以输入序列首时间戳ts_list[0]为起点按time_step生成等间隔的pd.date_range与输入值组成{ds, y}两列的 DataFrame构造并拟合模型将用户参数含interval_widthself.conf传入Prophet构造函数并调用model.fit(df)生成未来时间轴model.make_future_dataframe(periodsfc_rows, freqtime_step)扩展未来时间点预测与截取model.predict(future)得到完整预测tail(fc_rows)截取未来时段提取yhat、yhat_lower、yhat_upper时间戳回填通过insert_ts_list将预测值按start_ts与time_step组织成带时间戳的结果序列。输入数据约束重要execute()方法对输入做了严格校验prophet.py输入点数少于 2 个时抛出number of input data is less than 2输入点数超过 3000 个时抛出number of input data is too large受 Prophet 拟合开销限制建议控制单次输入规模未指定rows预测行数时报错time_step未指定时也会在预测前报错。测试用例佐证仓库单元测试 forecast_test.py 中的test_prophet_forecast使用经典的航空乘客月度数据airline_passengers144 个点验证了完整流程s loader.get_service(prophet) data, ts self.get_input_list() s.set_input_list(data, ts) self.assertRaises(ValueError, s.execute) # 未设置参数时执行应报错 s.set_params({ rows: 10, start_ts: 171000000, time_step: 86400 * 30, seasonality_mode: additive, changepoint_prior_scale: 0.05, }) r s.execute()该用例同时验证了未设置rows/start_ts/time_step等必填参数时执行会抛出ValueError并通过draw_forecast_results绘制预测对比图。扩展Prophet 的动态预测用法除静态FORECAST调用外Prophet 还被用于动态预测服务。在 dynamic_forecast.py 中algo_name为prophet时走独立分支先构造含ds/y列的输入 DataFrame调用 Prophet 预测器后由于make_future_dataframe会包含历史行还需通过result.tail(self.rows)仅保留未来预测区间最后按start_ts i * time_step生成结果时间戳。若需在流式或动态场景下持续滚动预测可参考该实现理解 Prophet 的增量接入方式。使用建议与注意事项数据量单次输入建议控制在 3000 点以内且至少 2 个点否则会触发输入校验报错时间步长time_step必须与数据实际采样间隔一致按天记录则为86400000毫秒precision需匹配时间戳精度默认毫秒季节性配置数据长度不足以支撑周期拟合时可将对应季节性参数保持auto让模型自动判断明确存在年/周/日周期时可显式置为true趋势灵活度changepoint_prior_scale默认0.05序列趋势突变频繁时可适当调大如示例中的0.1但过大易过拟合MSE 说明Prophet 算法默认不计算并返回 MSE 字段需要拟合误差指标时可结合其他预测算法或自行对yhat与真实值评估。参考文献Prophet 官方文档与论文《Forecasting at Scale》2017描述 Prophet 的加性分解模型、傅里叶季节性拟合与趋势变化点机制本文上述参数语义与之一致。赞分享数据库时序数据库物联网大数据实时分析云原生【免费下载链接】tdengineTDengine is an open source, high-performance, cloud native time-series database optimized for Internet of Things (IoT), Connected Cars, Industrial IoT and DevOps.项目地址https://gitcode.com/taosdata/tdengine点击查看免费下载相关推荐TDengine Prophet 预测算法实战在 FORECAST 函数中使用 Facebook Prophet 进行时序预测TDengine Prophet 预测算法实战在 FORECAST 函数中使用 Facebook Prophet 进行时序预测 本指南聚焦 TDengine数据库时序数据库大数据物联网云原生TDengine 集成 Prophet 时序预测FORECAST 函数参数详解与源码级原理分析TDengine 集成 Prophet 时序预测FORECAST 函数参数详解与源码级原理分析 Prophet 是 FacebookMeta开源的时间序列数据库时序数据库大数据物联网云原生TDengine 内置 ARIMA 时序预测FORECAST 函数用法与源码级原理解析TDengine 内置 ARIMA 时序预测FORECAST 函数用法与源码级原理解析 ARIMA自回归移动平均模型是 TDengine 时序数据预测分析数据库时序数据库大数据物联网云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表