Python中的趋势“预测器”?

时间:2018-04-07 21:12:00

标签: python pandas statistics time-series prediction

我目前正在处理有2列的数据框(pandas):第一列是一些数字量化数据,如权重,某天花费的金额,GPA等,以及第二列是日期值,即添加相应列1条目的日期。

我想知道,有没有办法“预测”X之后的下一个值是什么?例如。如果我有超过2-3个月的100个重量条目(并非所有条目具有相同的时差,那么1个条目可以在第3天,第二个第5天和第二个第10天),并且想要“预测”什么我在1个月后的下一个条目,是否有办法做到这一点?

我认为这与时间序列分析有关,但我的统计背景不是很强,所以我不知道这是否是正确的方法。如果是,我怎么能将它应用到我的数据帧(即哪些包)?对于它可能带来的价值是否有任何意义,或者在我与之合作的背景下它是否毫无意义?谢谢。

2 个答案:

答案 0 :(得分:2)

为了预测时间序列数据,我认为最好的选择是LSTM,它是一种递归神经网络,非常适合时间序列回归。

如果您不想深入了解神经网络的后端,我建议使用Keras库,它是Tensorflow框架的包装器。

假设您有一维数组,并且想要预测下一个值。 Keras的代码可能如下:

#start off by building the training data, let arr = the list of values
X = []
y = []
for i in range(len(arr)-100-1):
    X.append(arr[i:i+100]) #get prev 100 values for the X
    y.append(arr[i+100])   # predict next value for Y

由于LSTM采用3-D输入,我们希望将X数据重新整形为3维:

import numpy as np
X = np.array(X)
X = X.reshape(len(X), len(X[0]), 1)

现在X的形式(样本,时间步长,功能)

在这里,我们可以使用keras构建神经网络:

from keras.models import Sequential
from keras.layers import Dense, LSTM

model = Sequential()
model.add(LSTM(input_shape = (len(X[0], 1)) #input 3-D timeseries data
model.add(Dense(1)) #output 1-D vector of predicted values
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(X, y)

中提琴,您可以使用模型预测数据中的下一个值

答案 1 :(得分:2)

Statsmodels是一个python模块,它提供了时间序列预测(Arima)中“最着名”的方法之一。

可以在以下链接中看到一个示例:https://machinelearningmastery.com/arima-for-time-series-forecasting-with-python/

一些图书馆提供了其他时间序列预测方法,如支持向量回归,Holt-Winters和简单指数平滑。

Spark-ts(https://github.com/sryza/spark-timeseries)是一个支持Python的时间序列库,提供Arima,Holt-Winters和指数加权移动平均线等方法。

Libsvm(https://github.com/cjlin1/libsvm)提供支持向量回归方法。