如何为 3k 个客户中的每一个建立单独的时间序列预测模型?

机器算法验证 机器学习 时间序列 预测 有马 多元分析
2022-04-01 12:12:48

我的基地有 3000 名客户,我想为这 3000 名客户中的每一位预测未来 6 个月的收入。这是否意味着我必须为每个客户制造 3000 个华宇模型 1?

我可以构建一个自动化流程来尝试为客户的季节性和非季节性 arima 使用不同的 p、d、q 值,并选择 MAPE 等最少的一个,但这样做可能不会给出最准确的结果。

有没有更好的方法来解决这个问题?或者如果我不必构建 3000 个 arima 模型而是构建更少的模型,是否有更好的方法来解决这个问题的规模?

注意:获得客户级别的预测是必须的,我不能对客户进行分组和预测。

3个回答

您当然不想构建 3,000 个单独的模型!这不仅在计算和管理上很麻烦,而且还意味着每个模型只有一个客户的数据,因此您忽略了每个模型中其他客户的数据。这实际上意味着您对客户的预测仅基于他们的个人(小)数据集,并且您没有使用来自其他客户的(大)数据集来帮助您进行预测的任何方面。

比这种怪物更好的方法是制定某种通用时间序列模型,该模型对每个客户都有一个影响项。有很多方法可以做到这一点,最终的测试是看看哪个模型能很好地拟合你的数据,并做出好的样本外预测。这是一个简单模型的示例,可让您开始思考可能性。

一个示例模型:如果您让成为客户在时间的对数收入,您可以制定一个简单的高斯 ARIMA 模型,包括客户级别的均值和方差效应:Xi,tit

ϕ(B)Δd(Xi,tμi)=θ(B)σiεtεtIID N(0,1),

其中 AR 和 MA 特征多项式为:

ϕ(B)=1ϕ1B...ϕpBpθ(B)=1+θ1B+...+θqBq.

如您所见,这是一个标准的高斯 ARIMA 模型,但对于每个客户,每个系列的均值和方差参数都不同。一旦您使用数据来估计参数,您就可以根据他们在系列中的估计均值和方差对单个客户进行预测。有些客户给你更多的收入,所以他们会有更高的均值。一些客户的收入差异更大,因此他们会有更高的差异。然而,模型的其他方面是使用来自所有客户的数据进行估计的。

重要的是要注意,您可以对这个模型进行许多变化,例如使用客户级别的随机效应,或者使用另一个时间序列过程为每个客户的潜在平均值使用隐藏状态过程。真的,你可以做出各种各样的变化,你需要看看什么适合你的数据。但是,这种模型的优点是同时使用所有数据来估计参数,因此对单个客户的预测仍然依赖于所有数据。

我在工作中面临非常相似的任务。首先,我使用了分别应用于每个时间序列的自动 ARIMA 函数。对于我的目的,它工作得足够快。

然后我通过使用 ARIMA 和一些更简单的技术(如带有预处理输入的线性模型、随机游走、带有漂移的随机游走)进行大型比较分析来研究时间序列的属性。

我发现更简单的模型运行速度要快几十倍,但它们的运行效果如何完全取决于你的数据。就我而言,大多数时间序列与随机游走无法区分,因此使用最后一个值(或平均值)作为预测看起来很合理。

尝试线性模型,它们可以非常快速和准确。

我有一个类似的项目,其中需要为我的一个客户预测 3000 名分销商。我使用了自动化 ARIMA,并按其类型在分销商集群中循环它。

我最终不得不制定一个并行包来并行处理多个 Distributor 类型,以提高效率,因为模型需要每月训练一次。可以使用 R 和 Rob Hyndsight Forecast 包中的 Parallel 包轻松完成。