Я пытаюсь запустить блок кода, который оценивает среднеквадратичную ошибку различных значений для 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''