Auto ARIMA forecast time by time

installation method

pip install statsmodels

Instructions

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)

Guess you like

Origin blog.csdn.net/weixin_35757704/article/details/113885637