Lors de l'analyse de certaines données de puissance, on m'a demandé de «prédire la demande de puissance à l'aide des modèles AR, MA, ARIMA, SARIMA». Comme il s'agissait de la première méthode de prédiction en Python pour la première fois, j'ai décidé de rechercher des paramètres de manière circulaire.
Les paramètres sont order = (p, d, q) et season_order = (p, d, q), et nous avons décidé d'adopter le paramètre avec le plus petit aic.
J'ai falsifié ce que j'ai trouvé dans stackoverflow et je l'ai incorporé. Quand j'ai récupéré la source, c'était 12 ans. Était-ce des données mensuelles? Cette fois, puisque les données de puissance pour une semaine sont prédites à partir des données d'entraînement pour un mois, s est égal à 24, ce qui est le plus petit aic. Pourquoi···
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('Commencer le 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('valeur minimale aic{} - valeur minimale aicのp,d,q{} - valeur minimale aicのp,d,q,s{}'.format(minaic, minparam,minparams))
except:
continue
duration = time.time() -starttime
print('p,d,Fin de l'estimation de q\n Temps de mesure:{}'.format(duration))
f = open('results_param(SARIMA).txt','w')
f.write('valeur minimale aic{} - valeur minimale aicのp,d,q{} - valeur minimale aicのp,d,q,s{}'.format(minaic, minparam,minparams))
f.close()
――Je ne sais pas si j'ai pu optimiser par la force
Recommended Posts