Как найти лучший заказ и сезонный порядок для модели саримакс для другого набора данных (питон) - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь предсказать будущие данные на основе данных хронологии для другого набора данных .

warnings.filterwarnings("ignore")
mod = sm.tsa.statespace.SARIMAX(
    dataset,
    order=(1,0, 0),
    seasonal_order=(0, 0, 0, 12),
    enforce_stationarity=False,
    enforce_invertibility=False
)
results = mod.fit()

Но из-за проблемы конфигурации я получаю ошибку. Затем случайным образом сгенерируйте порядок и сезонный порядок и проверьте, нет ли ошибки или нет.

p = d = q = range(0, 2)
pdq = list(itertools.product(p, d, q))
seasonal_pdq = [(x[0], x[1], x[2], 12) for x in list(itertools.product(p, d, q))]
np.random.shuffle(pdq)
np.random.shuffle(seasonal_pdq)
results, finished = False, False
for iii in pdq:
    for jjj in seasonal_pdq:
        try:
            warnings.filterwarnings("ignore")
            mod = sm.tsa.statespace.SARIMAX(
                dataset,
                order=iii,
                seasonal_order=jjj,
                enforce_stationarity=False,
                enforce_invertibility=False
            )
            results = mod.fit()
            dataset_pred_uc = results.get_forecast(steps=int(len(dataset)*0.8))
            # prediction = dataset_pred_uc.predicted_mean
            finished = True
        except Exception as error:
            continue
    if(finished):
        break

Но каждый раз получаю разные результаты. Некоторое время результат очень хороший, а иногда хуже, чем я думаю.

Как решить проблему такого типа, когда значение набора данных является произвольным.

1 Ответ

0 голосов
/ 24 октября 2019

Для получения одного и того же результата каждый раз, случайные числа должны быть получены из одного и того же семени каждый раз. Поэтому установите random.seed в своем коде (например, np.random.seed(1234)).

...