首页 / 资讯中心 / 文章详情

Kats 多变量时序预测:VAR 向量自回归模型(VARModel / VARParams)完整实战指南

Kats 多变量时序预测:VAR 向量自回归模型(VARModel / VARParams)完整实战指南 ★ FEATURED ARTICLE
数据分析机器学习数据科学【免费下载链接】KatsKats, a kit to analyze time series data, a lightweight, easy-to-use, generalizable, and extendable framework to perform time series analysis, from understanding the key statistics and characteristics, detecting change points and anomalies, to forecasting future trends.项目地址https://gitcode.com/gh_mirrors/ka/Kats点击查看免费下载导读向量自回归Vector AutoregressionVAR是多元时间序列分析的经典线性模型它把单变量 AR 模型推广到多变量场景用一组联立方程刻画多个变量之间及其自身滞后值之间的线性依赖关系。本文以 Kats 仓库中 sphinx/source/kats.models.var.rst 所挂载的kats.models.var模块为主线完整讲解VARParams参数类的每个配置项、VARModel的拟合—预测—可视化调用链、预测结果的数据结构并结合源码与测试用例说明边界条件与注意事项。读完本文你将能够直接用 Kats 对多变量时间序列完成 VAR 建模、多步预测与置信区间可视化并理解底层实现原理。一、模块定位Kats 对 statsmodels VAR 的二次封装从 kats/models/var.py 的模块文档可以看出设计意图VAR model is a multivariate extension of the univariate autoregressive (AR) model. It captures the linear interdependencies between multiple variables using a system of equations. Each variable depends not only on its own lagged values but also on the lagged values of other variables.即每个变量不仅依赖自身的滞后值还依赖其他变量的滞后值这正是 VAR 区别于多个独立 AR 模型的核心。Kats 并没有从零实现数值算法而是明确说明“使用 statsmodels 中的实现并重写 API 以适配 Kats 的开发风格”见模块 docstring 与源码导入from statsmodels.tsa.api import VAR、from statsmodels.tsa.vector_ar.var_model import VARResults。模块提供了两个核心类类名作用定义位置VARParamsVAR 模型的参数类继承自kats.consts.Paramskats/models/var.pyVARModel模型类提供 fit / predict / plot继承自kats.models.model.Modelkats/models/var.py模块 docstring 给出了最简使用流程params VARParams() m VARModel(dataTSData_multi, paramsparams) m.fit() res m.predict(steps30) m.plot()其中TSData_multi必须是kats.consts.TimeSeriesData类型的多变量数据见下文“输入数据要求”。二、输入数据要求只支持多变量时间序列VARModel的构造函数在 kats/models/var.py 中做了严格的数据类型校验if not isinstance(self.data.value, pd.DataFrame): msg Only support multivariate time series, but get {type}..format( typetype(self.data.value) ) logging.error(msg) raise ValueError(msg)也就是说如果传入的TimeSeriesData底层不是pandas.DataFrame例如单变量序列常见的Series形态会直接抛出ValueError并提示“仅支持多变量时间序列”。这是使用 VAR 模型前必须满足的前提数据需要包含一个时间列和至少两个待预测的变量列。测试用例 kats/tests/models/test_var_model.py 使用了仓库内置的两份多变量数据集作为实证样本multivariate_anomaly_simulated_data.csv异常检测模拟多变量数据multi_ts.csv两列变量 V1、V2 的日频数据见 kats/data/multi_ts.csv时间从 2017-03-12 开始加载方式统一走 kats/data/utils.py 的load_data()from kats.consts import TimeSeriesData from kats.data.utils import load_data ts TimeSeriesData(load_data(multi_ts.csv))三、VARParams五个核心配置参数详解VARParams的参数在 kats/models/var.py 中定义构造时全部通过关键字参数传入并提供了默认值参数类型默认值含义与说明maxlagsintNone阶数选择时检查的最大滞后数。默认None时在fit()中会按公式int(12 * (len(self.data.time) / 100.0) ** (1.0 / 4))自动推导见 fit 源码即观测数越多允许考察的滞后阶数越高methodstrols估计方法默认普通最小二乘OLS。statsmodels 的 VAR 还支持mle最大似然等估计方式icstrNone阶数选择使用的信息准则。默认None时表示不自动选阶直接使用maxlags可传入如aic、bic、hqic等由 statsmodels 支持的信息准则verboseboolFalse是否打印拟合过程中的详细输出trendstrc趋势项类型可取值与含义源码 docstring 明确列出c加常数默认ct常数加线性趋势ctt常数、线性与二次趋势n/nc无常数、无趋势典型用法params VARParams( maxlags3, # 手动指定最大滞后阶数 methodols, # 最小二乘估计 icaic, # 用 AIC 在 1..maxlags 之间自动选阶 verboseFalse, # 关闭详细日志 trendc, # 仅含常数项 )注意VARParams.validate_params()在 kats/models/var.py 中目前只是记录日志并直接passMethod validate_params() is not implemented.尚未做真正的参数校验参数合法性的兜底由 statsmodels 的VAR.fit()完成。四、VARModel 调用链fit → predict → plot4.1 fit()构建并拟合模型fit()的实现位于 kats/models/var.py关键步骤若maxlags为None按样本量自动推导最大滞后阶数用VAR(self.data.value)创建 statsmodels VAR 对象调用var.fit(maxlags..., method..., ic..., verbose..., trend...)完成拟合并将结果保存在self.model把拟合产物的关键量k_ar阶数、sigma_u残差协方差矩阵、resid残差存入模型属性供后续使用。m VARModel(ts, params) m.fit() # 拟合完成后才能预测4.2 predict()多步预测与置信区间predict()位于 kats/models/var.py签名与参数如下参数类型默认值说明stepsint必填向前预测的步数include_historyboolFalse是否在返回结果中拼接样本内in-sample拟合值freqstr自动推断预测时间索引的频率默认调用pd.infer_freq(self.data.time)alphafloat0.05置信区间显著性水平即 95% 置信区间核心实现是调用 statsmodels 的model.forecast_interval(ymodel.endog, stepssteps, alphaalpha)见 kats/models/var.py同时拿到点预测、下界、上界三组序列然后以self.data.time.max()为起点用pd.date_range生成未来steps个时间点见 kats/models/var.py按变量名self.data.value.columns逐列组装结果。返回结构Dict[str, TimeSeriesData]——字典的键是每个变量名每个值是一个TimeSeriesData其内部 DataFrame 包含四列time、fcst、fcst_lower、fcst_upper见 docstring 与 组装代码。pred m.predict(steps30) # pred 形如 {V1: TimeSeriesData, V2: TimeSeriesData} # 每个 TimeSeriesData 内部列time / fcst / fcst_lower / fcst_upper若include_historyTrue还会尝试把model.fittedvalues样本内拟合值与预测结果纵向拼接若该步骤失败会抛出以Failed to generate in-sample forecasts for historical data开头的异常见 kats/models/var.py。两个必须注意的边界未先 fit 就 predictself.model为None时抛出ValueError(Call fit() before predict().)。测试 test_predict_unfit 专门验证了这一点。返回值与单变量模型不同VAR 的predict()返回的是“变量名 → TimeSeriesData”的字典而单变量模型通常返回单一 TimeSeriesData消费结果时要注意适配。4.3 plot()双列子图可视化plot()位于 kats/models/var.py会创建 1 行 2 列的子图plt.subplots(ncols2, ...)默认figsize(10, 6)、dpi120每个变量一个子图绘制历史数据黑色实线history_colork预测点forecast_color#4267B2蓝色实线置信区间带同色、alpha0.2的fill_between可选网格线gridTrue默认开启灰色细线。常用自定义参数dpi、forecast_color、history_color、grid、xlabel。限制该实现不接受ax参数传入非None的ax会抛出ValueError(VARModel does not support the ax parameter.)见 kats/models/var.py测试 test_plot_ax_not_supported 验证且必须先 predict 再 plot否则抛出ValueError(Call predict() before plot().)测试 test_plot_unpredict。调用示例m.predict(steps90) m.plot() # 返回 matplotlib 的 axes 数组4.4str与 get_parameter_search_space()__str__返回模型名字符串VARkats/models/var.py测试 test_str 断言了该行为。VARModel.get_parameter_search_space()目前尚未实现它把实现委托给 kats/utils/parameter_tuning_utils.py 中的get_default_var_parameter_search_space()该函数目前直接raise NotImplementedError(get_parameter_search_space() method has not been implemented for VAR model.)。因此做超参搜索时暂时无法为 VAR 拿到默认搜索空间需要自行定义参数网格测试 test_search_space 也断言了这一点。五、端到端示例基于仓库内置多变量数据结合仓库数据与测试验证思路一个完整可运行的最小示例对应模块 docstring 与 test_fit_forecast 的流程from kats.consts import TimeSeriesData from kats.data.utils import load_data from kats.models.var import VARParams, VARModel # 1. 加载多变量数据 ts TimeSeriesData(load_data(multi_ts.csv)) # 2. 划分训练集与真值 steps 5 train, truth ts[:-steps], ts[-steps:] # 3. 参数化并拟合 params VARParams(maxlags2, methodols, icNone, trendc) m VARModel(train, params) m.fit() # 4. 预测 pred m.predict(stepssteps) # 5. 可视化 m.plot()测试中还验证了两个关键性质预测结果的各变量时间索引完全一致all(x.equals(index[0]) for x in index)以及预测值与真值的最大偏差小于 5truth.subtract(pred_forecast).values.max() 5——这为“开箱即用”的正确性提供了仓库内的实证依据。六、源码级要点速查关注点结论依据算法来源statsmodelsVAR/VARResultskats/models/var.py数据约束仅接受 DataFrame 形态的多变量 TimeSeriesData否则 ValueErrorkats/models/var.py默认最大滞后阶数12 * (nobs/100)^(1/4)样本量自适应kats/models/var.py预测返回格式{变量名: TimeSeriesData}含time/fcst/fcst_lower/fcst_upperkats/models/var.py置信区间alpha默认 0.05由forecast_interval计算kats/models/var.py绘图限制不支持ax参数必须先 predict 再 plotkats/models/var.py超参搜索空间尚未实现调用抛 NotImplementedErrorkats/utils/parameter_tuning_utils.py参数校验validate_params()目前为空实现kats/models/var.py七、适用场景与局限适用场景需要同时预测多个相互影响的经济指标、传感器指标或业务 KPI且变量间存在滞后相关性的场景。VAR 的联立方程结构天然刻画“A 的过去影响 B 的现在”这类交叉依赖。局限与边界基于仓库源码可以确认的事实仅限多变量单变量数据无法使用本模型构造函数直接拦截线性假设VAR 只捕捉线性滞后依赖非线性关系需考虑其他模型阶数与样本量权衡maxlags自动推导公式随样本量增长变量多、阶数高时待估参数数量会快速膨胀工具链限制超参搜索空间未提供、validate_params未实现参数合法性依赖 statsmodels 底层校验绘图 API 不兼容 ax 注入与 Kats 中部分支持ax的模型不同嵌入子图布局时需要自行调整。以上结论均可通过直接阅读 kats/models/var.py、kats/tests/models/test_var_model.py 与 kats/utils/parameter_tuning_utils.py 复核验证。赞分享数据分析机器学习数据科学【免费下载链接】KatsKats, a kit to analyze time series data, a lightweight, easy-to-use, generalizable, and extendable framework to perform time series analysis, from understanding the key statistics and characteristics, detecting change points and anomalies, to forecasting future trends.项目地址https://gitcode.com/gh_mirrors/ka/Kats点击查看免费下载相关推荐多变量时间序列分析终极指南VAR与BayesianVAR模型实战详解多变量时间序列分析终极指南VAR与BayesianVAR模型实战详解 Kats是一个轻量级、易于使用且可扩展的时间序列分析框架能够帮助用户从理解关键统计特征数据分析机器学习数据科学ML-For-Beginners 时间序列预测实战使用支持向量回归SVR构建电力负荷预测模型ML For Beginners 时间序列预测实战使用支持向量回归SVR构建电力负荷预测模型 本篇技术指南基于 ML For Beginners 课程第教程机器学习人工智能使用全新数据构建 SVR 时间序列预测模型ML-For-Beginners 支撑向量回归扩展任务完整实战指南使用全新数据构建 SVR 时间序列预测模型ML For Beginners 支撑向量回归扩展任务完整实战指南 本指南围绕 ML For Beginners 课教程机器学习人工智能上一篇drawio-desktop三步导入 Visio VSDX 文件免费的跨平台替代方案下一篇ha_xiaomi_home 实体图标自定义一行 YAML 改掉仪表板上的设备图标创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站