python - 从上一个日期 :value data 开始预测

标签 python algorithm statistics prediction

我有一些相似时期的数据集。是当时人的呈现,时间大概一年。数据不是定期收集的,而是相当随机的:每年 15-30 个条目,来自 5 个不同的年份。

根据每年的数据绘制的图表大致如下: graph 用 matplotlib 制作的图表。 我有 datetime.datetime, int 格式的数据。

是否有可能以任何明智的方式预测 future 的结果?我最初的想法是计算所有以前出现的平均值并预测它会是这个。不过,这并没有考虑当年的任何数据(如果它一直高于平均水平,猜测可能会略高)。

数据集和我的统计知识有限,所以每一个见解都是有帮助的。

我的目标是首先创建一个原型(prototype)解决方案,尝试我的数据是否足以满足我正在尝试做的事情,在(可能的)验证之后,我会尝试一种更完善的方法。

编辑:不幸的是,我从来没有机会尝试收到的答案!我仍然很好奇这种数据是否足够并且如果有机会我会记住这一点。谢谢大家的回答。

最佳答案

在您的案例中,数据变化很快,您可以立即观察到新数据。可以使用 Holt-winter 实现快速预测。指数平滑。

更新方程:

enter image description here

m_t 是您拥有的数据,例如每次 t 的人数。 v_t 是一阶导数,即 m 的趋势。 alphabeta 是两个衰减参数。顶部带有 波浪号 的变量表示预测值。在维基百科页面查看算法的详细信息。

由于您使用 python,我可以向您展示一些示例代码来帮助您处理数据。顺便说一句,我使用了一些合成数据如下:

data_t = range(15)
data_y = [5,6,15,20,21,22,26,42,45,60,55,58,55,50,49]

data_t之上是一系列从时间0开始的连续数据点; data_y 是每次演示中观察到的人数序列。

数据如下所示(我试图使其接近您的数据)。

enter image description here

该算法的代码很简单。

def holt_alg(h, y_last, y_pred, T_pred, alpha, beta):
    pred_y_new = alpha * y_last + (1-alpha) * (y_pred + T_pred * h)
    pred_T_new = beta * (pred_y_new - y_pred)/h + (1-beta)*T_pred
    return (pred_y_new, pred_T_new)

def smoothing(t, y, alpha, beta):
    # initialization using the first two observations
    pred_y = y[1]
    pred_T = (y[1] - y[0])/(t[1]-t[0])
    y_hat = [y[0], y[1]]
    # next unit time point
    t.append(t[-1]+1)
    for i in range(2, len(t)):
        h = t[i] - t[i-1]
        pred_y, pred_T = holt_alg(h, y[i-1], pred_y, pred_T, alpha, beta)
        y_hat.append(pred_y)
    return y_hat 

好的,现在让我们调用我们的预测器并根据观察结果绘制预测结果:

import matplotlib.pyplot as plt
plt.plot(data_t, data_y, 'x-')
plt.hold(True)

pred_y = smoothing(data_t, data_y, alpha=.8, beta=.5)
plt.plot(data_t[:len(pred_y)], pred_y, 'rx-')
plt.show()

红色表示每个时间点的预测结果。我将 alpha 设置为 0.8,这样最近的观察确实会对下一次预测产生很大影响。如果您想赋予历史数据更多权重,只需使用参数 alphabeta。另请注意,t=15 处红线上最右边的数据点是最后的预测,我们还没有观察到。

顺便说一句,this远非完美的预测。这只是您可以快速开始的事情。这种方法的缺点之一是您必须能够获得观察结果,否则预测会越来越偏离(可能所有实时预测都是如此)。希望能帮助到你。

enter image description here

关于python - 从上一个日期 :value data 开始预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845055/

相关文章:

python - 如何提取pandas DataFrame中的属性名称和最大共现计数?

python - 有没有办法在另一个 .py 文件中使用 PyInstaller?

python - 根据文件名比较目录

python - Pycharm 控制台中不再打印 Flask URL

algorithm - 白平衡(色彩抑制)公式?

java - Android——我们如何确定每个应用程序的电池使用统计信息?

python - Pandas 数据框根据条件卡住

java - 中位数中位数的奇怪错误作为找到第 K 个最大元素的枢轴

algorithm - 初始化二维矩阵的时间复杂度是多少?

r - 合并两个 `data.table`对象