使用来自许多相关的非单调趋势的月度数据进行明年预测

数据挖掘 时间序列 预测建模 预报
2022-02-05 21:16:38

我有来自当地许多卫生部门的趋势数据(例如心脏病学、骨科等)。这些趋势代表卫生服务(就诊、诊断、入院)生产、服务价值(服务类型的代理),以及我们地区患者消费的此类服务与除我们以外的其他卫生服务提供者消费的服务的比率,每个部门(例如。与其他医院相比,我们的患者在我们的医院接受了多少髋关节手术)。

我想为每个部门或部门组(所有诊断或所有外科部门)预测明年的这些值。我有过去十年的月度数据。

由于有许多无法测量的可变性来源,我不能指望做出长期预测,仅仅一年就足够了。此外,这些趋势有很多变化点(组织、人员、技术的变化),所以我主要希望在新趋势开始后预测明年的价值,预测它会增长多长时间,达到临界点或走向向下。

我想每个部门的模型可以从他自己过去的趋势数据和其他具有类似动态的部门的趋势中学习以前的增长和下降动态,并根据月份相关的活动水平以及提供服务的信息进行调整。

对于这样的问题,我应该使用哪种模型?我考虑过时间序列的多级模型,但我想还有更多的残液解决方案。

1个回答

一种方法是简单地使用标准时间序列模型,例如每个部门的 ETS/TBATS/ARIMA。这些方法会在适当的情况下考虑到您可能会看到的特定趋势(以及季节性),尽管预测趋势何时会下降/将持续多长时间是一项非常困难的任务。这不会是一种无效的方法,但这里的问题是每个时间序列都将孤立地拟合,并且您似乎拥有大量相似的时间序列以及有价值的外生数据,其中大部分不依赖于时间。上述方法意味着拟合可能大量的时间序列模型,这在很大程度上是不切实际和乏味的(在我看来),并且在 ARIMA 的情况下,您将无法包含不随时间变化的变量。

这是我建议您将时间(以某种方式)作为协变量的回归算法(统计或 ML)。您的数据集基本上会被扩展,以便一行是任何特定部门在任何特定月份 + 年份观察到的响应变量。您的时间协变量可以是两列;一个带有年份,另一个带有月份,或者只是一个连续变量,例如 2019 + 1/12、2019 + 2/12 等。

然后,您将使用“部门”作为分类变量,以及响应的滞后值(可能包含当前趋势信息)或变量,例如“部门在过去 k 个月内的平均卫生服务生产”或“中位数”过去一年所有部门的卫生服务生产=所有数据”等。选择需要多少个月,以及您汇总到的级别(超过一个部门?超过所有部门?仅超过特定部门? ) 将根据您认为合理的情况确定。

如果您有与时间相关的事件,您可以使用指标变量对其进行建模,也可以使用“自与时间相关的事件开始/结束以来的月份”等变量来捕捉滞后效应。季节性(如果存在)可以通过指标变量/傅里叶级数变换轻松捕获。要获得更多趋势特征,您还可以使用过去几个月的数据(从特定观察/数据行的时间段)运行另一个回归算法,以获取当前的总体趋势(在那个时间点)。非时间相关的连续变量(例如“我们的患者在我们的医院与其他医院有多少髋关节手术”)是按部门扩展数据集的简单连接。

在许多这些特征工程的想法中,你最终会在系列开始时得到 NA 值,这意味着在开始时放弃可能几个月的数据(我认为如果你有这应该没什么大不了的) 120 个单位长的时间序列)。无论如何,我建议使用时间序列交叉验证,使用最新数据作为测试指标,然后继续前进,直到数据用完。在您的情况下,每个测试集将包含 12 个月的数据,并且您将一次将一个月的数据添加到训练集中(将测试集时间段提前一个月)。

我希望这有帮助。