Bei der Analyse bestimmter Leistungsdaten wurde ich gebeten, "den Strombedarf mithilfe von AR-, MA-, ARIMA- und SARIMA-Modellen vorherzusagen". Da es zum ersten Mal die erste Vorhersagemethode in Python war, habe ich mich entschlossen, nach Parametern durch Runden zu suchen.
Die Parameter sind order = (p, d, q) und saisonale_order = (p, d, q), und wir haben uns entschieden, den Parameter mit dem kleinsten aic zu übernehmen.
Ich habe das, was ich im Stackoverflow gefunden habe, manipuliert und eingebaut. Als ich die Quelle aufnahm, war s 12. Waren es monatliche Daten? Dieses Mal ist s 24, was der kleinste aic ist, da die Leistungsdaten für eine Woche aus den Trainingsdaten für einen Monat vorhergesagt werden. Warum···
import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels
import time
p = d = q = range(0,3)
import itertools
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))]
y=TargetData
minaic = 999999
minparam = 0
starttime = time.time()
for param in pdq:
for param_seasonal in seasonal_pdq:
try:
print('Beginnen Sie mit der Montage')
mod = sm.tsa.statespace.SARIMAX(y,
order=param,
seasonal_order=param_seasonal,
enforce_stationarity=False,
enforce_invertibility=False)
results = mod.fit()
print('ARIMA{}x{}12 - AIC:{}'.format(param, param_seasonal, results.aic))
if minaic > results.aic:
minaic = results.aic
minparam = param
minparams = param_seasonal
print('aic Mindestwert{} - aic Mindestwertのp,d,q{} - aic Mindestwertのp,d,q,s{}'.format(minaic, minparam,minparams))
except:
continue
duration = time.time() -starttime
print('p,d,Ende der Schätzung von q\n Messzeit:{}'.format(duration))
f = open('results_param(SARIMA).txt','w')
f.write('aic Mindestwert{} - aic Mindestwertのp,d,q{} - aic Mindestwertのp,d,q,s{}'.format(minaic, minparam,minparams))
f.close()
――Ich weiß nicht, ob ich mit Gewalt optimieren konnte
Recommended Posts