Statsmodels - TypeError: ufun c 'isnan' не поддерживается для типов ввода - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь запустить блок кода, который оценивает среднеквадратичную ошибку различных значений для P, D и Q в модели SARIMAX. Этот точный блок кода отлично работал у меня раньше, и я нигде его не менял, поэтому могу только предположить, что проблема заключается в данных, но я обработал это таким же образом, поэтому я не могу понять, почему это не будет работать?


def evaluate_sarima_model(data, arima_order, s_order): 
    split=int(len(data) * 0.8) 
    train, test = data[0:split], data[split:len(data)]
    past=[x for x in train]
    # make predictions
    predictions = list()
    for i in range(len(test)):
        model = sm.tsa.statespace.SARIMAX(past, order=arima_order, seasonal_order = s_order, enforce_stationarity=False, enforce_invertibility=False)
        model_fit = model.fit(disp=0)
        future = model_fit.forecast()[0]
        predictions.append(future)
        past.append(test[i])
    # calculate out of sample error
    error = mean_squared_error(test, predictions)
    return error
      
def evaluate_models(dataset, p_values, d_values, q_values, P_values, D_values, Q_values):
    best_score, best_cfg = float("inf"), None
    for p in p_values:
        for d in d_values:
            for q in q_values:
                for P in P_values:
                    for D in D_values:
                        for Q in Q_values:
                            order = (p,d,q)
                            s_order = (P, D, Q, 12)
                            try:
                                mse = evaluate_sarima_model(dataset, order, s_order)
                                if mse < best_score:
                                    best_score, best_cfg, seas = mse, order, s_order
                                print('SARIMA%s %s MSE=%.3f' % (order,seas, mse))
                            except:
                                continue
    return print('Best SARIMA%s %s MSE=%.3f' % (best_cfg, seas, best_score))
p_values = [1]
d_values = [1] 
q_values = [1] 
P_values = [x for x in range(0, 3)]
D_values = [x for x in range(0, 3)]
Q_values = [x for x in range(0, 3)] 

Я использую следующий набор данных:

DatetimeIndex: 175 entries, 2005-12-01 to 2020-06-01
Freq: MS
Data columns (total 1 columns):
 #   Column    Non-Null Count  Dtype
---  ------    --------------  -----
 0   turnover  175 non-null    int32
dtypes: int32(1)
memory usage: 7.1 KB 

И когда я запускаю его, я получаю следующую ошибку:


evaluate_models(turnover_month, p_values, d_values, q_values, P_values, D_values, Q_values)

UnboundLocalError: local variable 'seas' referenced before assignment 

Ничего не стоит, если я попытаюсь запустить одну модельную строку, используя случайные значения для P, D и Q, я получаю следующее, поэтому я предполагаю, что проблемы находятся в первом блоке и как он обрабатывает этот набор данных :

TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

1 Ответ

0 голосов
/ 14 июля 2020

После просмотра каждой отдельной строки стало ясно, что проблема заключалась в данных, а модель SARIMA не может обрабатывать DataFrames и вместо этого требует Series. Все, что мне нужно, - это простой .Squeeze () в df

...