Press "Enter" to skip to content

敲击时间预测:时间序列概率预测的另一种方式

多久才能达到特定值?

Photo by Mick Haupt on Unsplash

准确预测的能力对于每个时间序列的预测应用程序都是基本的。为了实现这个目的,数据科学家习惯于选择最佳模型以从点预测的角度最小化误差。这是正确的,但并不总是最有效的方法。

数据科学家还应考虑开发概率预测模型的可能性。这些模型除了点估计值外,还会产生上限和下限的可靠性区间,未来观测值很可能落在这些区间内。尽管概率预测似乎是统计或深度学习解决方案的专利,任何模型都可以用来产生概率预测。这个概念在我的一个以前的帖子中有解释,我在其中介绍了符合预测作为一种用任何 scikit-learn 模型估计预测间隔的方法。

当然,点预测对于非技术股东来说更容易沟通。与此同时,生成关于我们预测的可靠性的KPI的可能性是一个附加值。概率输出可能携带更多信息来支持决策。报告在接下来的几个小时中有60%的降雨概率可能比报告将有多少毫米的降雨更具有信息量。

在这篇文章中,我们提出了一种预测技术,称为预测击中时间,用于估计特定事件或条件发生的时间。它被证明是准确的,因为它基于符合预测,可解释的,因为它具有概率解释性,并且可重复的,适用于任何预测技术。

介绍击中时间预测

预测击中时间是各个领域中常用的概念。它指的是预测或估计某个事件或条件发生的时间,通常涉及到达特定阈值或水平的情况。

Simulated seasonality and trend [image by the author]
Simulated time series (seasonality + trend) with an example of hitting time level [image by the author]

击中时间最知名的应用包括可靠性分析和生存分析等领域。它涉及估计系统或过程经历特定事件(例如故障或达到特定状态)所需的时间。在金融领域中,击中时间通常用于确定信号/指数遵循所需方向的概率。

总的来说,预测击中时间涉及做出关于特定事件所需时间的预测,该事件遵循时间动态。

从点预测到概率预测

要正确估计击中时间,我们必须从点预测开始。作为第一步,我们选择所需的预测算法。对于本文,我们采用了一个简单的递归估计器,可以从tspiral的scikit-learn样式轻松获得。

Predicted vs real data points on test set [image by the author]
model = ForecastingCascade(    Ridge(),    lags=range(1,24*7+1),    use_exog=False,)

我们的目标是为每个预测点生成预测分布,从中提取概率洞见。这是通过以下三个步骤实现的,并利用符合性预测背后的理论:

  • 通过交叉验证收集训练集上的预测,然后将它们平均起来。
CV = TemporalSplit(n_splits=10, test_size=y_test.shape[0])pred_val_matrix = np.full(    shape=(X_train.shape[0], CV.get_n_splits(X_train)),    fill_value=np.nan,    dtype=float,)for i, (id_train, id_val) in enumerate(CV.split(X_train)):        pred_val = model.fit(        X_train[id_train],         y_train[id_train]    ).predict(X_train[id_val])        pred_val_matrix[id_val, i] = np.array(        pred_val, dtype=float    )pred_val = np.nanmean(pred_val_matrix, axis=1)
  • 在训练数据上,通过交叉验证预测和实际值的绝对残差计算符合性分数。
conformity_scores  = np.abs(    np.subtract(        y_train[~np.isnan(pred_val)],         pred_val[~np.isnan(pred_val)]    ))
  • 通过将符合性分数添加到测试预测中,获得未来预测分布。
pred_test = model.fit(    X_train,     y_train).predict(X_test)estimated_test_distributions = np.add(    pred_test[:, None], conformity_scores)
Predicted distribution on test data [image by the author]

按照上述过程,我们得到了许多未来可能遵循的合理轨迹。我们拥有了所有必要的东西,可以提供我们的预测的概率表示。

从概率性到击中时间预测

对于每个未来时间点,记录下估计测试分布中超过预定义阈值(我们的命中目标水平)的值的次数。通过将计数归一化每个估计测试分布中的值的数量,将其转换为概率。

最后,将概率数组应用于一系列单调递增的概率。

THRESHOLD = 40prob_test = np.mean(estimated_test_distributions > THRESHOLD, axis=1)prob_test = pd.Series(prob_test).expanding(1).max()
Predicted vs real data points on test set plus hitting time probabilities [image by the author]

无论我们试图预测什么事件,我们都可以从点预测开始生成概率曲线。其解释仍然很简单,即对于每个预测时间点,我们可以推导出目标系列达到预定义水平的概率。

总结

在本文中,我们介绍了一种为我们的预测模型提供概率结果的方法。它不需要应用奇怪而繁琐的附加估计技术。从点预测问题开始,可以通过应用击中时间方法添加任务的概率概述。

检查我的GitHub存储库

保持联系:领英

Leave a Reply

Your email address will not be published. Required fields are marked *