使用 Python 从曲线外推数据

Extrapolating data from a curve using Python

我正在尝试从一个数据集中推断未来的数据点,该数据集每天包含一个连续值,持续近 600 天。我目前正在使用 numpy.polyfitnumpy.poly1d 对数据拟合一阶函数。在下图中,您可以看到曲线(蓝色)和一阶函数(绿色)。 x 轴是自开始以来的天数。我正在寻找一种在 Python 中对这条曲线建模的有效方法,以便尽可能准确地推断未来的数据点。线性回归不够准确,我不知道在这种情况下可以使用任何非线性回归方法。

这个解决方案不够准确,就像我喂食一样

x = dfnew["days_since"]
y = dfnew["nonbrand"]

z = numpy.polyfit(x,y,1)
f = numpy.poly1d(z)

x_new = future_days
y_new = f(x_new)

plt.plot(x,y, '.', x_new, y_new, '-')

编辑:

我现在已经尝试 curve_fit 使用对数函数,因为曲线和数据行为似乎符合:

def func(x, a, b):
  return a*numpy.log(x)+b

x = dfnew["days_since"]
y = dfnew["nonbrand"]

popt, pcov = curve_fit(func, x, y)

plt.plot( future_days, func(future_days, *popt), '-')

然而,当我绘制它时,我的 Y 值偏离了:

一般的经验法则是,如果您的拟合函数不能很好地拟合您的实际数据,那么:

  • 您使用的功能有误,例如您正在使用一阶多项式 - 因此,如果您确信它是多项式,请尝试更高阶多项式。
  • 你用错了函数,值得一看:

    1. 你的数据曲线&
    2. 您对生成数据的过程了解多少

    想出一些speculation/theorem/guesses关于哪种模型可能更合适。

您的过程可能是对数过程、饱和过程等。试试吧!

最后,如果您没有获得一致的长期趋势,那么您可以证明使用三次样条曲线是合理的。