我是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小时内执行?