如何对auto_arima循环使用多重处理?

时间:2019-10-29 10:25:39

标签: python multiprocessing arima

我是Python的较新用户。我已经开发了一个模型,该模型使用auto_arima来预测超过11,000个时间序列,这些时间序列具有过去1000天的每日值。我将所有时间序列存储在数据帧df_ts中,并使用以下代码遍历所有时间序列并将预测结果存储在数据帧fcast中。

fcast_period = 60
col_len = len(df_ts.columns)
fcast = pd.DataFrame({'MonthDEV':pd.date_range(start = today, 
                       periods = fcast_period).tolist()})

def arm(column):
    for column in df_ts:
        stepwise_fit = pm.auto_arima(df_ts[column], start_p=1, start_q=1,
                                     max_p=3, max_q=3, m=7,
                                     start_P=0, seasonal=True,
                                     d=1, D=1, trace=True,
                                     error_action='ignore',  
                                     suppress_warnings=True,
                                     stepwise_fitwise=True)
        stepwise_fit.fit(df_ts[column])

        forecast = pd.DataFrame()
        x = 0
        if x < col_len:
            fc = stepwise_fit.predict(n_periods = fcast_period)
            forecast = pd.DataFrame({'MonthDEV':pd.date_range(start = today, 
                                      periods = fcast_period).tolist(), 
                                      df_ts.columns.values[x]: fc})
            global fcast
            fcast = pd.merge(fcast, forecast, on = 'MonthDEV', how = 'outer')

            x = x + 1

arm(column)

当我尝试运行此代码时,其执行需要100多个小时(具有18个核心CPU和256 GB内存的AWS实例)。我理解它是因为python由于GIL而使用单核。我尝试使用多处理,但无法正确设置。

if __name__ == '__main__':
    p = multiprocessing.Pool()
    arima_forecast = p.map(arm, col_len)
    p.close()
    print(arima_forecast)

是否可以通过多处理池执行此代码以强制其在2-3小时内执行?

0 个答案:

没有答案