Оптимизируйте функцию (для модели SARIMA), ускорьте Python

#python #runtime

Вопрос:

Я использую модель SARIMA на Python. Когда модель находит оптимальное решение, она «проверяет» все возможные комбинации и выбирает ту, которая имеет наименьший AIC. Когда я использую следующие параметры: это даст очень большое количество возможных решений. Когда я запускаю эту модель, на поиск наилучшего сочетания параметров уйдет очень много времени (2/3 часа или более). Может ли кто-нибудь помочь мне ускорить этот процесс?

Ниже функции, которую я использую (m-компонент сезонности, например, 4-квартальные данные):

    def optimize_SARIMA(parameters_list, d, D, s, exog):
    """
        Return dataframe with parameters, corresponding AIC and SSE
        
        parameters_list - list with (p, q, P, Q) tuples
        d - integration order
        D - seasonal integration order
        s - length of season
        exog - the exogenous variable
    """
    
    results = []
    
    for param in tqdm_notebook(parameters_list):
        try: 
            model = SARIMAX(exog, order=(param[0], d, param[1]), seasonal_order=(param[2], D, param[3], s)).fit(disp=-1)
        except:
            continue
            
        aic = model.aic
        results.append([param, aic])
        
    result_df = pd.DataFrame(results)
    result_df.columns = ['(p,q)x(P,Q)', 'AIC']
    #Sort in ascending order, lower AIC is better
    result_df = result_df.sort_values(by='AIC', ascending=True).reset_index(drop=True)
    
    return result_df

p = range(0, m , 1)
d = 1
q = range(0, m, 1)
P = range(0, m, 1)
D = 1
Q = range(0, m, 1)
s = m

parameters = product(p, q, P, Q)
parameters_list = list(parameters)
print(len(parameters_list))

result_df = optimize_SARIMA(parameters_list, 1, 1, m, data['Volume'])
result_df