首页 > 解决方案 > 如何修复“无法将输入转换为时间戳”ARIMA.predict

问题描述

我需要通过检查 ARIMA 模型的 r2 分数来检查它。所以我需要做 ARIMA.predict,但这里有一个错误:

TypeError: 无法转换输入 [DatetimeIndex(['2014-08-10 06:00:00', '2014-05-05 16:00:00', '2014-04-28 20:00:00', '2014 -03-27 21:00:00'、'2012-08-26 09:00:00'、'2012-09-29 08:00:00'、'2013-02-15 03:00:00'、 '2013-02-28 09:00:00', '2014-06-27 06:00:00', '2014-01-18 11:00:00', ... '2013-11-10 22: 00:00'、'2013-03-18 21:00:00'、'2013-09-09 00:00:00'、'2013-06-08 21:00:00'、'2013-11-11 12:00:00'、'2014-07-07 05:00:00'、'2014-07-27 12:00:00'、'2014-06-03 23:00:00'、'2012-09 -20 12:00:00','2012-12-18 22:00:00'],dtype='datetime64[ns]', name='Datetime', length=3658, >freq=None)] 类型为 >Timestamp

这是我的代码:

dateparse = lambda dates: pd.datetime.strptime(dates, "%d-%m-%Y %H:%M")
train=pd.read_csv("D:/Coding/Datasets/train_traffic.csv", parse_dates= 
['Datetime'], index_col='Datetime',date_parser=dateparse)

X_train, X_test, y_train, y_test = ms.train_test_split(train.index, 
train.Count, test_size=0.20, random_state=5)

model = ARIMA(ts_log, order=(2, 1, 0), freq='H')  
AR = model.fit(disp=-1)
AR.predict(X_test)

数据示例和类型:在 Excel 中:25-08-2012 00:00。

pd.read_csv 没有参数:

Out:dtype('O') 
Out:'25-08-2012 00:00'

带参数:

dateparse = lambda dates: pd.datetime.strptime(dates, "%d-%m-%Y %H:%M")
pd.read_csv("D:/Coding/Datasets/train_traffic.csv", parse_dates=['Datetime'], index_col='Datetime',date_parser=dateparse)

Out:dtype('<M8[ns]')
df.index[0]
Out:Timestamp('2012-08-25 00:00:00')

我也试过

pd.read_csv("D:/Coding/Datasets/train_traffic.csv", index_col='Datetime').index[0]

Out:'25-08-2012 00:00'
Out:dtype('O')

谢谢!

标签: pythonforecastingarima

解决方案


很难理解这个问题以及问题到底出在哪里,但我会尽力为您提供可重现的代码。

对于此示例,我使用了加利福尼亚州的每日女性出生总数数据集

import pandas as pd
from statsmodels.tsa.arima_model import ARIMA
from sklearn.model_selection import TimeSeriesSplit

df = pd.read_csv("daily-total-female-births-in-cal.csv", nrows = 365)
df.set_index("Date", inplace = True)

train = df.iloc[0:300, :]
test = df.iloc[300:, :]

arima = ARIMA(train, order = (1,1,0), freq = 'D').fit(disp = 0)
prediction = arima.predict(test.index[0], test.index[-1], dynamic = True)

您不应该使用来自 sklearn 的 train_test_split() 来处理时间序列问题。您也应该使用 sklearn 中的 TimeSeriesSplit。


推荐阅读