【问题标题】:Fitting Regression Model to Time-Series Data将回归模型拟合到时间序列数据
【发布时间】:2020-11-20 18:49:32
【问题描述】:

我正在尝试将回归模型拟合到 Python 中的时间序列数据(基本上是为了预测趋势)。我之前使用statsmodels 应用了季节性分解,它将数据提取到包括数据趋势在内的三个组成部分。 但是,我想知道如何使用基于统计的回归(通过定义任何函数)得出最适合我的数据的方法,并检查平方和以比较各种模型并选择最适合我的数据的模型。我应该提到,我不是在寻找依赖于训练/测试数据的基于学习的回归。 如果有人能帮我解决这个问题,甚至为此问题介绍一个教程,我将不胜感激。

【问题讨论】:

  • scikit learn有什么问题? scikit-learn.org/stable/modules/generated/…
  • @K.海岸感谢您的评论。我检查了链接...但这似乎仅适用于线性回归?我想检查各种回归模型……例如多项式、指数、正弦甚至它们的组合。
  • 我很确定 scikit learn 有所有这些选项。搜索他们的文档
  • 非常感谢!

标签: python time-series regression


【解决方案1】:

既然你提到了:

我想知道如何使用基于统计的回归(通过定义任何函数)得出最适合我的数据的方法,并检查平方和以比较各种模型并选择最适合我的数据的一个。我应该提一下,我不是在寻找依赖于训练/测试数据的基于学习的回归。

也许ARIMA(自动回归集成移动平均线)模型具有给定设置(P、D、Q),它可以学习历史和predict()/forecast()。请注意,将数据拆分为训练和测试是为了使用前向验证方法进行评估:

from pandas import read_csv
from pandas import datetime
from matplotlib import pyplot
from statsmodels.tsa.arima_model import ARIMA
from sklearn.metrics import mean_squared_error
from math import sqrt
# load dataset
def parser(x):
    return datetime.strptime('190'+x, '%Y-%m')
series = read_csv('/content/shampoo.txt', header=0, index_col=0, parse_dates=True, squeeze=True, date_parser=parser)
series.index = series.index.to_period('M')
# split into train and test sets
X = series.values
size = int(len(X) * 0.66)
train, test = X[0:size], X[size:len(X)]
history = [x for x in train]
predictions = list()
# walk-forward validation
for t in range(len(test)):
    model = ARIMA(history, order=(5,1,0))
    model_fit = model.fit()
    output = model_fit.forecast()
    yhat = output[0]
    predictions.append(yhat)
    obs = test[t]
    history.append(obs)
    print('predicted=%f, expected=%f' % (yhat, obs))
# evaluate forecasts
rmse = sqrt(mean_squared_error(test, predictions))
rmse_ = 'Test RMSE: %.3f' % rmse

# plot forecasts against actual outcomes
pyplot.plot(test, label='test')
pyplot.plot(predictions, color='red', label='predict')
pyplot.xlabel('Months')
pyplot.ylabel('Sale')
pyplot.title(f'ARIMA model performance with {rmse_}')
pyplot.legend()
pyplot.show()

我使用了与您提到的相同的库包以及以下输出,包括 均方根误差 (RMSE) 评估:

import statsmodels as sm
sm.__version__ # '0.10.2'

请参阅其他post1post2 了解更多信息。或许你也可以加trend line

【讨论】:

    猜你喜欢
    • 2015-08-09
    • 2020-03-27
    • 2017-11-02
    • 2019-09-15
    • 2014-04-25
    • 2018-12-09
    • 2016-09-03
    • 2021-02-06
    • 1970-01-01
    相关资源
    最近更新 更多