Categoria: Intelligenza Artificiale

In questa sezione puoi trovare guide riguardanti la programmazione di Intelligenza Artificiale, Machine Learning, Deep Learning…insomma roba figa!

Previsione delle azioni di Facebook utilizzando Machine Learning

Ciao, mi chiamo Drilon e sono un programmatore con la passione per la finanza personale, in questo articolo proverò a fare una previsione delle azioni di Facebook utilizzando Machine Learning.

Il programma leggerà i dati di borsa su Facebook (FB) e farà una previsione del prezzo in base al giorno.

È estremamente difficile provare a prevedere la direzione del mercato azionario o del prezzo delle azioni, ma in questo articolo ci proverò. Anche le persone con una buona conoscenza delle statistiche e delle probabilità hanno difficoltà a farlo.

Una Support Vector Regression (SVR) è un tipo di Support Vector Machine ed è un tipo di algoritmo di apprendimento supervisionato che analizza i dati per l’analisi di regressione . 

Inizia la programmazione

La prima cosa che mi piace fare prima di scrivere una singola riga di codice è inserire una descrizione nei commenti di ciò che fa il codice. In questo modo posso rivedere il mio codice e sapere esattamente cosa fa.

#Descrizione: questo programma prevede il prezzo delle azioni FB per un giorno specifico 
# utilizzando l'algoritmo di Machine Learning chiamato
# Modello di regressione vettoriale di supporto (SVR)

Ora importa i pacchetti per semplificare la scrittura del programma.

#importa i pacchetti 
from  sklearn.svm  import SVR 
import  numpy  as  np 
import  pandas  as  pd 
import  matplotlib.pyplot  as  plt
plt.style.use('fivethirtyeight')

Successivamente caricherò i dati sulle azioni di Facebook (FB) che ho ricevuto da finance.yahoo.com in una variabile chiamata “df”, abbreviazione di data frame. 

NOTA: Questi sono i dati di Yahoo per gli ultimi 30 giorni, dal 5–1–2019 al 5–31–2019.
Ricorda che il mercato è aperto solo nei giorni feriali.

#Carica i dati 
df = pd.read_csv('FB_Stock.csv') 
df

Ottieni il numero di righe e colonne nel set di dati per vedere il conteggio di ciascuna. Ci sono 22 righe e 7 colonne di dati.

#Ottiene il numero di righe e colonne nel set di dati 
df.shape
22 righe e 7 colonne nel set di dati

Stampa l’ultima riga di dati (questi saranno i dati su cui testeremo). Si noti che la data è 05–31–2019, quindi il giorno è 31. Questo sarà l’input del modello per prevedere il prezzo di chiusura rettificato che è $ 177,470001.

#Stampa l'ultima riga di dati 
prezzo_effettivo = df.tail(1) 
prezzo_effettivo

Creare le variabili che verranno utilizzate come insiemi di dati indipendenti e dipendenti impostandole come elenchi vuoti.

Ricrea il frame di dati recuperando tutti i dati tranne l’ultima riga che userò per testare i modelli in seguito e memorizza i nuovi dati con l’ultima riga mancante in “df”. Quindi stampare il nuovo conteggio di righe e colonne per il nuovo set di dati.

#Ottieni tutti i dati tranne l'ultima riga
df = df.head(len(df)-1) 
print(df) 
print(df.shape)
Il nuovo set di dati
I nuovi dati con una riga in meno. 21 righe e 7 colonne
#Crea le liste / Set di dati X e y
days = list() 
adj_close_prices = list()

Ottieni tutte le righe dalla colonna Data, memorizzale in una variabile chiamata “df_days” e ottieni tutte le righe dalla colonna Adj Close Price e memorizza i dati in una variabile chiamata “df_adj_close_price”.

df_days = df.loc[:,'Date'] 
df_adj_close = df.loc[:,'Adj Close Price']

Crea il set di dati indipendente ‘X’ e memorizza i dati nella variabile ‘days’.
Crea il set di dati dipendente “y” e archivia i dati nella variabile “adj_close_prices”.
Entrambi possono essere eseguiti aggiungendo i dati a ciascuna delle liste.

NOTA: per il set di dati indipendente vogliamo solo il giorno dalla data, quindi utilizzo la funzione split per ottenere solo il giorno e trasmetterlo a un numero intero mentre aggiungo i dati all’elenco.

#Crea il set di dati indipendente 'X' come giorni 
for giorno in df_days: 
  days.append( [int(day.split('/')[1]) ] )

#Crea il set di dati dipendente 'y' come prezzi 
for adj_close_price in df_adj_close: 
   adj_close_prices.append(float(adj_close_price))

Guarda e guarda quali giorni sono stati registrati nel set di dati.

stampa (days)
I giorni che sono stati registrati nel set di dati

Successivamente, creerò e addestrerò i 3 diversi modelli di Support Vector Regression (SVR) con tre diversi kernel per vedere quale funziona meglio.

#Crea e addestra un modello SVR usando un kernel lineare 
lin_svr = SVR(kernel='linear', C=1000.0) 
lin_svr.fit(days,adj_close_prices)

#Crea e addestra un modello SVR utilizzando un kernel polinomiale 
poly_svr = SVR(kernel='poly', C=1000.0, degree=2) 
poly_svr.fit(days, adj_close_prices)

#Crea e addestra un modello SVR utilizzando un kernel RBF 
rbf_svr = SVR(kernel='rbf', C=1000.0, gamma=0.15) 
rbf_svr.fit(days, adj_close_prices)

Ultimo ma non meno importante, traccerò i modelli su un grafico per vedere quale ha il miglior adattamento e restituirà la previsione del giorno.

#Traccia i modelli su un grafico per vedere quale ha il miglior fit 
plt.figure(figsize=(16,8))
plt.scatter(days, adj_close_prices, color = 'black', label='Data')
plt.plot( days, rbf_svr.predict(days), color = 'green', label='RBF Model')
plt.plot(days, poly_svr.predict(days), color = 'orange', label='Polynomial Model')
plt. plot(days, lin_svr.predict(days), color = 'blue', label='Linear Model')
plt.xlabel('Days')
plt.ylabel('Adj Close Price')
plt.title('Support Vector Regression ')
plt.legend()
plt.show()

Il miglior modello dal grafico sottostante sembra essere l’ RBF che è un modello di regressione del vettore di supporto che utilizza un kernel chiamato funzione di base radiale. Tuttavia questo grafico può essere fuorviante.

Ora posso iniziare a fare la mia previsione dei prezzi su FB. Ricordando l’ultima riga di dati che è stata lasciata fuori dal set di dati originale, la data era 05–31–2019, quindi il giorno è 31. Questo sarà l’input per i modelli per prevedere il prezzo di chiusura rettificato che è $ 177,470001 .

Quindi ora prevedo il prezzo assegnando ai modelli un valore di 31.

day = [[31]] 
print('Il prezzo previsto da SVR RBF:',rbf_svr.predict(day))
print('Il prezzo previsto da SVR lineare',lin_svr.predict(day))
print('Il prezzo previsto da SVR polinomiale ',poly_svr.predict(giorno))

Il modello SVR polinomiale ha previsto che il prezzo per il giorno 31 fosse di $ 180,39533267 , che è abbastanza vicino al prezzo effettivo di $ 177,470001 . In questo caso il modello migliore sembra essere il polinomio SVR. Ecco fatto, hai finito di creare il tuo programma SVR per prevedere le azioni FB!

Se sei interessato a leggere di più sull’apprendimento automatico per iniziare immediatamente con problemi ed esempi, ti consiglio vivamente di dare un’occhiata all’Apprendimento automatico pratico con Scikit-Learn e TensorFlow: concetti, strumenti e tecniche per costruire sistemi intelligenti . 

È un ottimo libro per iniziare a imparare come scrivere programmi di apprendimento automatico e comprendere i concetti di apprendimento automatico.

Apprendimento automatico pratico con Scikit-Learn e TensorFlow: concetti, strumenti e tecniche per costruire sistemi intelligenti

Se hai dubbi o domande fammele pure su Telegram: https://t.me/+0xQYD3WKIAA5Mjg8

Instagram: https://www.instagram.com/investoinvestigando.it/

Dai un’occhiata anche al resto: https://www.investoinvestigando.it

Cosa cazzo è Keras? – Guida Keras #1

Cosa cazzo è Keras? Keras è il framework di deep learning più utilizzato poiché Keras semplifica l’esecuzione di nuovi esperimenti, ti consente di provare più idee rispetto ad altri e in modo più veloce.

Basato su TensorFlow2 è un framework di livello industriale in grado di fare tantissime cose, poi TensorFlow è di Google, quindi 😉

Possiamo fare del Reinforcement learning (ovvero che impara da solo e si migliora da solo), classificazione delle immagini, previsioni (anche sul prezzo di azioni ecc… ).

Nel deep learning è importante realizzare di model validi costituiti da diversi layer

Cosa cazzo è Keras?

Come vediamo dall’immagine una rete neurale è composta da alcuni dati in input (input layer) che vengono gestiti e manipolati da altri layer (hidden layer) per poi tirare fuori il dato che a noi ci interessa.

Facciamo un esempio

Nel caso degli investimenti i dati in input saranno composti da tutto lo storico dei prezzi (Prezzo di apertura, Prezzo di chiusura, Prezzo più alto, Prezzo più basso) giornalieri.

I layer nascosti faranno cose che poteranno a un output che sarà ciò che noi vorremmo. Ad esempio il prezzo che avrà lo stock domani!

stock prediction price

Come vediamo dal grafico, abbiamo la parte in blu che è lo storico effettivo del NASDAQ, in giallo abbiamo la predizione fatta dal nostro programmino fantastico di intelligenza artificiale, mentre in rosso abbiamo il prezzo effettivo che il nasdaq ha avuto in quel periodo. Molto vicino vero? Si molto figo tutto questo…

Vedremo che però non è così semplice… si capisce che è di fondamentale importanza che i dati sul quale il model viene “allenato” siano il più corretti possibile.

Hai capito un minimo Cosa cazzo è Keras?

Per qualsiasi dubbio o domanda non esitare a scrivermi su instagram:

https://www.instagram.com/investoinvestigando.it/

Oppure lascia un commento sul post, sarò lieto di aiutarti 🙂

Prossimo articolo (Ancora non disponibile)