Vijesti o Tehnologiji, Recenzije i Savjeti!

Usporedba ARIMA modela i LSTM RNN modela u predviđanju vremenskih serija

Napomena: Sljedeći članak će vam pomoći: Usporedba ARIMA modela i LSTM RNN modela u predviđanju vremenskih serija

Postoje mnoge poslovne primjene predviđanja vremenskih serija kao što su predviđanje cijena dionica, predviđanje prodaje, vremenska prognoza itd. U ovom zadatku predviđanja vremenskih serija primjenjuju se različiti modeli strojnog učenja. Svaki model ima svoje prednosti i nedostatke. U ovom članku ćemo vidjeti usporedbu između dva modela predviđanja vremenskih serija – ARIMA modela i LSTM RNN modela. Oba ova modela primjenjuju se u predviđanju cijena dionica kako bi se vidjela njihova usporedba.

Model ARIMA

ARIMA model ili auto-regresivni integrirani pokretni prosjek prilagođen je podacima vremenske serije za analizu podataka ili predviđanje budućih podatkovnih točaka na vremenskoj skali. Najveća prednost ovog modela je što se može primijeniti u slučajevima kada podaci pokazuju dokaze nestacionarnosti.

Autoregresivna znači da je evoluirajuća varijabla od interesa regresirana na vlastitu prethodnu vrijednost, a pomični prosjek ukazuje na to da je regresijska pogreška zapravo linearna kombinacija članova pogreške čije su se vrijednosti dogodile istovremeno iu različitim vremenima u prošlosti. Značaj integracije u ARIMA modelu je da su vrijednosti podataka zamijenjene razlikom između njihovih vrijednosti i prethodnih vrijednosti

Za više detalja o analizi vremenskih serija korištenjem ARIMA modela, pogledajte sljedeće članke:-

    Uvodni vodič za predviđanje vremenskih serija Modeliranje vremenskih serija i testiranje otpornosti na stres – korištenje ARIMAX-a

LSTM rekurentna neuronska mreža

LSTM ili dugotrajne neuronske mreže koje se ponavljaju varijante su umjetnih neuronskih mreža. Za razliku od feedforward mreža gdje signali putuju samo u smjeru prema naprijed, u LSTM RNN-u podatkovni signali putuju u smjeru unatrag, a te mreže imaju povratne veze. LSTM RNN se popularno koristi u predviđanju vremenskih serija. Za više pojedinosti o ovom modelu pogledajte sljedeće članke:-

    Kako kodirati svoju prvu LSTM mrežu u Kerasu Praktični vodič za LSTM rekurentnu neuronsku mrežu za predviđanje tržišta dionica.

Sada ćemo vidjeti usporedbu predviđanja po oba gore navedena modela. Za implementaciju smo koristili povijesne cijene dionica za obuku i testiranje naših modela. Povijesne vrijednosti dionica preuzimaju nsepy to je python API.

Implementacija predviđanja vremenskih serija

Prije svega, moramo uvesti sve potrebne biblioteke. nsepy mora biti instaliran pomoću ‘pip instaliraj nsepy‘ prije nego što ga uvezete ovdje. Da biste koristili LSTM model, TensorFlow mora biti instaliran jer se TensorFlow backend primjenjuje za LSTM model. The pmdarima također se mora instalirati pomoću ‘pip instalirati pmdarima‘ za korištenje ARIMA modela.

#Importing the libraries from nsepy import get_history as gh import datetime as dt from matplotlib import pyplot as plt from sklearn import model_selection from sklearn.metrics import confusion_matrix from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split import numpy as np import pandas as p d from sklearn.preprocessing import MinMaxScaler from keras.models import Sequential from keras.layers import Dense from keras.layers import LSTM from keras.layers import Dropout from pmdarima import auto_arima import warnings from statsmodels.tsa.seasonal import seasonal_decompose from statsmodels.tsa.statespace .sarimax uvoz SARIMAX

Nakon što su biblioteke instalirane, moramo dohvatiti podatke prosljeđivanjem početnog i završnog datuma API funkciji. Preuzeti podaci će se nakon toga prethodno obraditi.

#Postavljanje datuma početka i završetka i dohvaćanje povijesnih podataka start = dt.datetime(2013,1,1) kraj = dt.datetime(2019,12,31) stk_data = gh(symbol=”SBIN”,start=start,end=end) #Pretprocesiranje podataka stk_data[‘Date’] = stk_data.index data2 = pd.DataFrame(kolone = [‘Date’, ‘Open’, ‘High’, ‘Low’, ‘Close’]) podaci2[‘Date’] = stk_podaci[‘Date’]
podaci2[‘Open’] = stk_podaci[‘Open’]
podaci2[‘High’] = stk_podaci[‘High’]
podaci2[‘Low’] = stk_podaci[‘Low’]
podaci2[‘Close’] = stk_podaci[‘Close’]

Kada budemo spremni sa skupom podataka, uklopit ćemo ARIMA model koristeći donji isječak koda i nacrtati rezultat.

######################ARIMA############################## ### # Ignoriraj bezopasna upozorenja warnings.filterwarnings(“ignore”) # Prilagodi funkciju auto_arima podacima burze stepwise_fit = auto_arima(data2[‘Close’]start_p = 1početak_q = 1max_p = 3max_q = 3m = 12, početak_P = 0sezonski = Istina, d = Ništa, D = 1trace = True, error_action =’ignore’, suppress_warnings = True, stepwise = True) # Za ispis sažetka stepwise_fit.summary() # Podijeli podatke u niz / testne skupove train = data2.iloc[:len(data2)-150]
test = podaci2.iloc[len(data2)-150:]

# Uklopi SARIMAX model = SARIMAX(podaci2[‘Close’]narudžba = (0, 1, 1), sezonska_narudžba =(2, 1, 112)) rezultat = model.fit() result.summary() početak = len(vlak) kraj = len(vlak) + len(test) – 1

# Predviđanja za jednu godinu u odnosu na testni skup predictions = result.predict(start, end, typ = ‘levels’).rename(“Predictions”) # predviđanja iscrtavanja i stvarne vrijednosti predictions.plot(legend = True) test[‘Close’].plot(legenda = Istina)

Nakon vizualizacije grafikona vremenske serije korištenjem ARIMA modela, vidjet ćemo istu analizu pomoću LSTM modela.

#############LSTM########################## train_set = data2.iloc[0:1333:, 1:2].values ​​sc = MinMaxScaler(feature_range = (0, 1)) training_set_scaled = sc.fit_transform(train_set) X_train = []
y_vlak = []
za i u rasponu (60, 1333): X_train.append(training_set_scaled[i-60:i, 0]) y_train.append(training_set_scaled[i, 0]) X_train, y_train = np.array(X_train), np.array(y_train) X_train = np.reshape(X_train, (X_train.shape)[0]X_vlak.oblik[1], 1)) #Definiranje LSTM rekurentnog modela regressor = Sequential() regressor.add(LSTM(units = 50, return_sequences = True, input_shape = (X_train.shape)[1], 1))) regressor.add(Dropout(0.2)) regressor.add(LSTM(jedinice = 50, return_sequences = True)) regressor.add(Dropout(0.2)) regressor.add(LSTM(jedinice = 50, return_sequences = True)) regressor.add(Dropout(0.2)) regressor.add(LSTM(units = 50)) regressor.add(Dropout(0.2)) regressor.add(Dense(units = 1)) #Sastavljanje i prilagođavanje modela regressor.compile(optimizer=”adam”, loss=”mean_squared_error”) regressor.fit(X_train, y_train, epochs = 15, batch_size = 32) #Dohvaćanje testnih podataka i prethodna obrada testdataframe = gh (simbol=”SBIN”,start=dt.datetime(2018,5,23),end=dt.datetime(2018,12,31)) testdataframe[‘Date’] = testdataframe.index testdata = pd.DataFrame(kolone = [‘Date’, ‘Open’, ‘High’, ‘Low’, ‘Close’]) testni podaci[‘Date’] = testni okvir podataka[‘Date’]
testni podaci[‘Open’] = testni okvir podataka[‘Open’]
testni podaci[‘High’] = testni okvir podataka[‘High’]
testni podaci[‘Low’] = testni okvir podataka[‘Low’]
testni podaci[‘Close’] = testni okvir podataka[‘Close’]
stvarna_cijena_zaliha = testni podaci.iloc[:, 1:2].vrijednosti dataset_total = pd.concat((data2[‘Open’]testni podaci[‘Open’]), os = 0) ulazi = dataset_total[len(dataset_total) – len(testdata) – 60:].vrijednosti inputs = inputs.reshape(-1,1) inputs = sc.transform(inputs) X_test = []
za i u rasponu (60, 235): X_test.append(unosi[i-60:i, 0]) X_test = np.array(X_test) X_test = np.reshape(X_test, (X_test.shape)[0]X_test.oblik[1], 1))) “) plt.plot(predicted_stock_price, color=”b”, label=”Predviđanje”) plt.xlabel(‘Datum’) plt.legend() plt.show()

lstm model

Uspoređujući dva dijagrama predviđanja, možemo vidjeti da je model ARIMA predvidio cijene zatvaranja vrlo niže od stvarnih cijena. Ova velika varijacija u predviđanju može se vidjeti na većini mjesta na parceli. Ali u slučaju LSTM modela, isto predviđanje cijena na zatvaranju može se vidjeti više od stvarne vrijednosti. Ali ova se varijacija može primijetiti na nekoliko mjesta na dijagramu i većinu vremena čini se da je predviđena vrijednost blizu stvarne vrijednosti. Stoga možemo zaključiti da je u zadatku predviđanja dionica LSTM model nadmašio ARIMA model.

Konačno, radi većeg zadovoljstva, pokušat ćemo saznati srednju kvadratnu pogrešku (RMSE) u predviđanju pomoću oba modela.

######RMSE####### iz sklearn.metrics import mean_squared_error iz statsmodels.tools.eval_measures import rmse # RMSE za ARIMA model err_ARIMA = rmse(test[“Close”]predviđanja) ispis(‘RMSE s ARIMA’, err_ARIMA) #RMSE za LSTM model err_LSTM = rmse(test[“Close”]predviđena_cijena_zaliha) print(‘RMSE s LSTM’, err_LSTM)
rmse

Gledajući RMSE, sada je jasno da LSTM model ima najbolju izvedbu u ovom zadatku.