时间序列预测:Kats模型的应用

Kats模型简介

时间序列预测

可以根据输入变量的数量,拥有单变量时间序列或多变量时间序列。对于多变量时间序列预测,使用向量自回归(VAR)的原理。

向量自回归(VAR)

向量自回归是一种用于发现多个变量随时间变化而改变其值之间关系的模型。它是一个双向模型,意味着变量相互影响,即预测变量不仅影响目标变量,目标变量也影响预测变量。

本指南将预测一家百货商店五款产品A、B、C、D和E的每月销售量和访问量。为简单起见,将只使用一款产品A,并预测其未来三个月的销售量和访问量。

作为第一步,将在Jupyter Notebook中初始化必要的库。

import pandas as pd from kats.models.prophet import ProphetModel, ProphetParams from kats.consts import TimeSeriesData from kats.models.var import VARModel, VARParams from sklearn.metrics import r2_score from sklearn.metrics import mean_squared_error import math import numpy as np import matplotlib.pyplot as plt

现在必要的库已经初始化,接下来将加载数据集并进行可视化。

df = pd.read_csv("data.csv", index_col=0) df product = "Product A" multi_df = df[df["Product"] == product].drop(["Product"], axis=1) multi_df.head() multi_df.reset_index(inplace=True) multi_df.rename(columns={"Date": "time"},inplace=True) x=multi_df['time'] y1=multi_df['SalesCount'] y2=multi_df['VisitsCount'] plt.plot(x,y1,y2) plt.rcParams["figure.figsize"] = (4.8,6.4) plt.xticks(rotation = 45) plt.title("Product A Demand over time")

可以看到,销售量和访问量随时间都在增加。

下一步是将数据集分割为训练集和测试集。将使用训练集来训练模型,然后看看它在未见过的数据,即测试集上的表现如何。

multi_df_train=multi_df[:20]

现在将在代码中引入Kats模型,然后将其拟合到训练集上。

multi_ts = TimeSeriesData(multi_df_train) params = VARParams() m = VARModel(multi_ts, params) m.fit()

现在将使用Kats模型进行预测。只需要运行m.predict函数,并提供模型将预测的未来步数。请注意,步数计数从训练数据集最后一个时间戳条目的下一步开始。例如,在案例中,原始数据集有从2020年1月31日到2021年11月30日的月度日期值。对于训练数据集,选择了前19个值,命令为multi_df_train=multi_df[:20],所以steps=6意味着预测将从第20个值开始。频率指的是数据集值的频率。

fcst = m.predict(steps=6,freq='M')

现在让看看模型是如何产生预测的。

fcst fcst['SalesCount'] fcst['VisitsCount'] y_pred_sc=sc1['fcst'][:3] y_true_sc=multi_df['VisitsCount'][20:] MAPE_SC=mape(y_true_sc,y_pred_sc) print("n MAPE_SC:n") print(MAPE_SC*100) MAPE_SC: 87.35623112447463 m.plot() plt.show()
  • 时间序列预测机器学习分析中最重要的分析之一,应用领域广泛。
  • 多变量时间序列预测分析意味着有多个变量(超过一个),基于这些变量需要预测目标变量。
  • 输入变量和目标变量相互影响。
  • Kats模型是支持多变量时间序列预测分析的最简单模型之一。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485