def fit_ARIMA(): init_bic = float("inf") init_p = 0 init_q = 0 init_d = 1 maxLag = 8 with open('dev_data.json', 'r') as f: raw_data = json.load(f) data = [] for index in range(len(raw_data)): if index % 10 == 0: data.extend([float(di[1]) for di in raw_data[index]['data']]) # data.extend([float(di[1]) for di in d['data']]) init_properModel = None for p in np.arange(0, maxLag): for q in np.arange(0, maxLag): for d in np.arange(1, 3): print('test p = %d, d = %d, q = %d' % (p, d, q)) model = ARIMA(data, order=(p, d, q)) ## bug cuased by statsmodels lib, if do not set them then error occurs during saving model.dates = None model.freq = None model.missing = None try: results_ARIMA = model.fit(disp=-1, method='css') except: continue bic = results_ARIMA.bic print('current bic = %.4f' % (bic)) if bic < init_bic: print( 'It BEATS the previous best p, d and q, current p = %d, d = %d, q = %d' % (p, d, q)) init_p = p init_q = q init_d = d init_properModel = results_ARIMA init_bic = bic results_ARIMA.save('ARIMA_best') print('Saved the best model') print('p is :' + str(init_p)) print('q is :' + str(init_q)) print('d is :' + str(init_d))
len(lines)) le = LabelEncoder() le.fit(list(alphabet)) print("Fitted alphabet") seq = [] max_np_len = 200000 for i in range(0, len(words), max_np_len): print(i) seq.extend(list(le.transform(words[i:i + max_np_len]))) for i in range(len(seq)): seq[i] = float(seq[i]) model = ARIMA(seq, order=(2, 1, 0)) model_fit = model.fit(disp=0) output = model_fit.forecast() prediction = le.inverse_transform( [int(symbol.flatten()[0]) for symbol in output]) print("Single forecast:", prediction) print("Fit features") model.dates, model.freq, model.missing = None, None, None with open(args.o + "arima.model_fit", "wb") as f: pickle.dump(model_fit, f) with open(args.o + "arima.model", "wb") as f: pickle.dump(model, f) warn("Output written to arima.model and arima.model_fit") print(datetime.datetime.now())