安装方法
pip install statsmodels
使用方法
import pandas as pd
import numpy as np
import pmdarima as pm
from statsmodels.tsa.arima_model import ARIMA
from tqdm import tqdm
def auto_arima_model(train_df, test_df, column_name):
autoModel = pm.auto_arima(train_df.loc[:, column_name], trace=True, error_action='ignore', suppress_warnings=True,seasonal=False)
autoModel.fit(train_df.loc[:, column_name])
order = autoModel.order
predict = list()
all_df = pd.concat([train_df, test_df])
# 这里逐个值预测,用过去的值预测下一天的值,然后再用下一天的真实值预测下下一天的值,动态地调整训练集
for t in tqdm(range(len(test_df.loc[:, column_name]))):
temp_train = all_df[:len(train_df) + t]
temp_train: pd.DataFrame = temp_train.astype('int64') # 必要!根据实际数据修改为自己的数据类型!
model = ARIMA(np.asarray(temp_train.loc[:, column_name]), order=order)
model_fit = model.fit(disp=False)
predictions = model_fit.predict(start=len(temp_train), end=len(temp_train), dynamic=False)
predict = predict + [predictions]
predict = pd.DataFrame(predict)
return predict
if __name__ == '__main__':
time_df = pd.DataFrame(np.random.randint(0, 10, size=(365, 1)), columns=['data'],
index=pd.date_range('2021-01-01', periods=365, freq='D'))
# 把1.1至10.31当做训练集,11.1至12.30当做测试集
train = time_df.truncate(after='2021-10-31').iloc[:, 0]
test = time_df.truncate(before='2021-11-01').iloc[:, 0]
predict = auto_arima_model(pd.DataFrame(train), pd.DataFrame(test), train.name)