Risultati Ricerca Intelligenza Artificiale Italia
484 risultati trovati con una ricerca vuota
- Le Reti Neurali nel Trading
Introduzione alle Reti Neurali nel Trading Negli articoli precedenti : Machine Learning per il trading Come creare un modello ARIMA in Python per le previsioni di Trading Modelli AUTOARIMA e ARCH di Machine Learning per il Trading Le reti neurali si basano su un insieme di unità connesse (neuroni), che, proprio come le sinapsi in un cervello, possono trasmettere un segnale ad altri neuroni, in modo tale che, agendo come cellule cerebrali interconnesse, possono imparare e prendere decisioni in un modo più simile a quello umano. Proprio per la loro complessità la teoria alla base di questo metodo previsionale é piuttosto ostica e poco intuitiva, ancora non del tutto comprensibile neanche ai piu’ addetti ai lavori. Cercheremo tuttavia di semplificare la parte introduttiva per tuffarci nel Deep Learning alla ricerche di nuove metodologie di supporto al trading. Questa volta testeremo gli algoritmi sull’andamento del GOLD. Prerequisiti per il tutorial sulle Reti Neurali nel Trading Per la trattazione dell’argomento si farà uso del software di programmazione Python in ambiente Jupiter Notebook. Quando il totale é maggiore della somma dei suoi elementi Sono quasi sicuro che tutti I lettori conoscano la scannerizzazione OCR (“optical character recognition”) di documenti che possano essere importati in files a formato word. Ebbene il riconoscimento di un carattere é una delle tante applicazioni di elaborazioni fatte con reti neurali. Immaginiamo di avere un prblema in cui dobbiamo far riconoscere (prevedere) al computer se quello che vediamo in Figura 1 (un nove scritto a mano libera) e’ effettivamente un “9”. Possiamo immaginare che il numero “9” cosi scritto possa essere tradotto in una sequenza di pixel (un vettore) in cui il livello di intensità di bianco vari da un minimo di 0 (parte nera) con valore 0,5 (grigia ai bordi) fino ad un massimo di 1 (parte centrale del carattere in bianco) in ogni posizione dell’area in osservazione. Quello che avremo è approssimativamente (e in bassa risoluzione) cio’ che vediamo in Figura 2. Con ragionevole certezza possiamo dire che un altro “9” scritto da un altra persona abbia un vettore diverso ma con una simile distribuzione e relazione tra i vari pixel o tra gli element del vettore. Dove troviamo tanti pixel ad intensità di bianco uguale a 1 sappiamo che siamo nel bel mezzo della figura (o del numero nel nostro caso) che vogliamo rappresentare; se ad esempio vediamo che l’intensità dei pixel nella parte alta a destra diminuisce significa che siamo in una zona in cui il carattere ha una forma non rettilinea. Il signolo pixel non ci dice nulla ma la relazione con I pixel nel suo intorno ci aiuta a comprendere l’informazione in quell’intorno. Tanto piu’ piccolo e’ il singolo pixel tanto minore è l’informazione sulla totalità che possiamo ricavare da esso stesso, preso come singolo. Al contrario pero’ guardando l’insieme, una figura composta da piccolo pixel ci risulterà piu’ comprensibile. Le reti neurali funzionano bene con una grande quantità di informazione. Il nostro cervello fa piu’ o meno la stessa cosa anche se non ce ne rendiamo conto. Possiamo immaginare che quando alimentiamo una rete neurale con quell numero “9” le diverse intensità di bianco vengono singolarmente computate e moltiplicate per certi fattori (vettore pesi) che genereranno (per il tramite di una funzione di attivazione 1 ) un nuovo vettore che viene confrontato con un vettore di un “9” standard. Questo “9” standard é quello che, in un processo di “supervised” machine learning, chiamiamo etichetta (variabile dipendente o label). I fattori moltiplicativi verranno iterativamente ottimizzati e univocamente definiti quando il confronto numerico tra il vettore di input è sufficientemente bene replicato dal vettore etichetta. Chiamiamo input il vettore ad intensità di bianco del numero “9” scritto a mano Chiamiamo layer la serie di nodi in cui vengono fatte le operazioni di moltiplicazione delle intensità con un vettore pesi. Parliamo di Deep Leanring quando il numero di layer sono piu’ di uno. Chiamamo output, il vettore che rappresenta l’etichetta, con cui addestriamo la rete neurale affinche il vettore pesi venga ottimizzato in modo tale che le differenze tra input e output siano minime. Tale fase di ottimizzazione iterative (detta anche backpropagation) è quello che avviene nella fase di traiing della rete neurale La rete neurale pertanto trova le migliori relazioni tra I pixel (il pattern) in modo tale che ad un certo inpiut sia associate l’output con buona approssimazione. Dopo aver “educato” la rete neurale ed aver trovato il miglior vettore pesi, possiamo provare ad inserire un nuovo “9” scritto a mano ( da un altra persona) e lanciare la funzione “previsione” per vedere se essa da effettivamente “9” Quando vogliamo adattare la rete neurale al trading, ovviamente gli inputs sono I dati storici. Ogni singolo dato puo’ essere accomunato ad un pixel, ogni signolo dato e’ parte di un pattern, che viene determinate dall’ottimizzazione di un vettore pesi che rende il dato di chiusura giornaliero sempre coerente (con certa apprssimazione) ai valori di apertura, massimo e minimo di giornata, in relazione al giorno precendente e al giorno successivo etc… Algoritmi per Reti Neurali e Trading Ci sono due librerie principali per costruire reti neurali: TensorFlow (sviluppato da Google) e PyTorch (sviluppato da Facebook). Per questo tutorial, userò TensorFlow e una sua libreria di alto livello di supporto front-end (interfaccia utente) chiamata Keras, Un potente tipo di rete neurale progettato per gestire la dipendenza dalla sequenza è chiamato reti neurali ricorrenti. La rete Long Short-Term Memory o rete LSTM2 è un tipo di rete neurale ricorrente usata nell'apprendimento profondo, ovvero architetture di dati molto grandi che proprio per questo possono essere addestrate con successo. Sono usate in quasi tutte le applicazioni di analisi delle serie temporali (come le previsioni del tempo, le macchie solari, ecc.) e permettono di evitare la dipendenza dalle informazioni passate di lungo termine. Come se guardando un video ci si ricordasse solo della scena precedente, in un libro solo cio’ che è stato letto nel capitolo precedente. Allo stesso modo le RNN (Recurrent Neural Network) ricordano le informazioni precedenti e le usano per elaborare l'input corrente. LSTM su GOLD Seguendo il solito principio di costruzione di un codice di machine learning3 , partiamo con l’importazione delle librerie di gestione tabelle e grafica import pandas_datareader.data as web import pandas as pd import matplotlib.pyplot as plt import numpy as np STEP 1 – IMPORTAZIONE E LETTURA DATI Procediamo con l’impostazione delle funzioni che ci permettono di leggere I valori della quotazione dell’oro che vogliamo analizzare : pip install yfinance data = yf.download(tickers='GC=F', period='5y', interval='1d') STEP 2 – ELABORAZIONE, TRASFORMAZIONE E ORGANIZZAZIONE DATI In questa fase trasformiamo I dati in maniera tale che gli stessi possano essere gestiti dall’algoritmo LSTM che utilizzeremo. Per esempio, eliminiamo le colonne che non ci servono, sostituiamo i valori nulli dei weekend e dei giorni di festa con i valori dell’ultimo giorno precedente in cui il mercato era aperto cols_to_keep = ["Close"] data = data.loc[:,cols_to_keep] closingdata = data closing data["week"] = closingdata.index.isocalendar().week idx = pd.date_range(closingdata.index[0], closingdata.index[-1]) completedata =closingdata.reindex(idx, fill_value= float("NaN")) completedata = completedata.fillna(method='ffill') cols_to_keep = ["Close"] alldata = completedata.loc[:,cols_to_keep] alldata L’ultima riga di codice ci darà la possibilità d visualizzare la nuova struttura dati con due sole colonne (F3): STEP 3 – DEFINIZIONE DEL MODELLO Importiamo la libreria che ci permetterà di implementare LSTM ed eseguire le operazioni per esso necessarie con le seguenti istruzioni import keras from keras.models import Sequential from tensorflow.keras.layers import LSTM,Dense,Dropout,Activation, Flatten, Conv2D, MaxPooling2D from sklearn.preprocessing import MinMaxScaler Prima di adattare i dati al nostro modello, doveva essere preelaborato perché il modello LSTM funziona in modo efficiente con valori scalati dei dati (tra 0 e 1). Per fare questo utilizziamo la funzione MinMaxScaler della libreria sklearn. preprocessing dataset = alldata.values scaler = MinMaxScaler(feature_range=(0,1)) scaled_dataset = scaler.fit_transform(dataset) STEP 4 – ADDESTRAMENTO DEL MODELLO Per l’addestramento del modello dobbiamo innanzitutto definire quelli che chiamiamo Data Test Set e Data Train Set, tra loro complementari, rispettivamente variabili dipendenti e variabili indipendenti, ricavati dalla separazione della totalità dei dati ottenuti alla fine dello Step 1. Il set di dati è stato quindi suddiviso in training e set di test con l'80 % dei dati per l'addestramento e il 20 % per i test training_data_len=math.ceil(len(dataset)*.8) data_trainingscaled = scaled_dataset[:training_data_len] data_testingscaled = scaled_dataset[training_data_len:] e costruiamo la serie di dati in modo da essere elaborate dal modello LSTM con 100 giorni di look back x_trainscaled = [] y_trainscaled = [] for i in range(100, data_trainingscaled.shape[0]): x_trainscaled.append(data_trainingscaled[i-100 : i]) y_trainscaled.append(data_trainingscaled[i,0]) x_trainscaled,y_trainscaled = np.array(x_trainscaled), np.array(y_trainscaled) Procediamo adesso con la creazione della rete neurale con 2 strati LSTM e Dropouts uno strato Dense e uno strato di output finale model = Sequential() model.add(LSTM(units=50,activation='relu',return_sequences=True ,input_shape=(x_trainscaled.shape[1],1))) model.add(Dropout(0.2)) model.add(LSTM(units=50,activation='relu',return_sequences=False )) model.add(Dropout(0.2)) model.add(Dense(25)) model.add(Dense(units=1)) Tutti I parametri come il modello di rete neurale (sequential), dimensione e numero di layer sono modificalbili, come pure la funzione di attivazione che in questo caso è una ReLu (rectifier linear unit). Procediamo con il suo addestramento: model.compile(optimizer='adam', loss='mean_squared_error') model.fit(x_trainscaled,y_trainscaled, batch_size=32,epochs=50) Il modello è stato addestrato per 50 iterazioni (parametro epochs, anche questo variabile) STEP 5 – VALUTAZIONE AFFIDABILITA’ DEL MODELLO Ora andiamo a far girare le line di codice che ci permettono di capire la bontà del modello andando a generare una “previsione”, sulla base del subset di dati scelto per il testing. In realtà questa “previsione” è finta, visto che la stiamo facendo su dati passati, che sono il nostro elemento di confronto per la valutazione della bontà del modello. Per fare questo dobbiamo transformare il set di dati in maniera tale da essere elaborato dalla rete neurale (sugli ultimi 100 giorni) con la seguente serie di istruzioni: x_testscaled = [] y_testscaled = [] for i in range(100, data_testingscaled.shape[0]): x_testscaled.append(data_testingscaled[i-100 : i]) y_testscaled.append(data_testingscaled[i,0]) x_testscaled , y_testscaled = np.array(x_testscaled) ,np.array(y_testscaled) y_testscaledreshaped = np.reshape(y_testscaled,(y_testscaled.shape[0],1)) y_test = scaler.inverse_transform(y_testscaledreshaped) A questo punto lanciamo la previsione : testpredictionscaled = model.predict(x_testscaled) ed operiamo l’operazione descaling per riportare I valori ai livelli reali dai valori scalati tra 0 e 1. testprediction=scaler.inverse_transform(testpredictionscaled) Manipolando addesso la serie di dati otteniamo il dataframe di Figura 4 Che elaborato in forma grafica restituisce il confronto fino al 02.02.2022 in Figura 5. STEP 6 - PREVISIONE Avendo costruito il modello ed avendo appurato la sua precisione5 , se accettabile, procediamo con la previsione nei giorni futuri. Per la previsione futura al modello vengono forniti i dati degli ultimi 100 giorni (valore di riferimento del LSTM) che vengono quindi utilizzati per prevedere il trend nei sette giorni successivi. x_input=data_testingscaled[265:].reshape(1,-1) x_input.shape temp_input=list(x_input) temp_input=temp_input[0].tolist() lst_output=[] n_steps=100 i=0 while(i<7): if(len(temp_input)>100): #print(temp_input) x_input=np.array(temp_input[1:]) print("{} day input {}".format(i,x_input)) x_input=x_input.reshape(1,-1) x_input = x_input.reshape((1, n_steps, 1)) #print(x_input) yhat = model.predict(x_input, verbose=0) print("{} day output {}".format(i,yhat)) temp_input.extend(yhat[0].tolist()) temp_input=temp_input[1:] #print(temp_input) lst_output.extend(yhat.tolist()) i=i+1 else: x_input = x_input.reshape((1, n_steps,1)) yhat = model.predict(x_input, verbose=0) print(yhat[0]) temp_input.extend(yhat[0].tolist()) print(len(temp_input)) lst_output.extend(yhat.tolist()) i=i+1 print(lst_output) E con alcune trasformazioni, determiniamo il vettore previsionale (Figura 6). Che con le funzioni di plotting ci disegnail grafico Figura 7 e il suo zooming sulla previsione Figura 8 Conclusioni sulle Reti Neurali nel Trading Questo approccio alla previsione dall’andamento dell’ Orofornisce una stima relativamente buona del prezzo del giorno di negoziazione successivo. Questa stima varia a seconda della volatilità del prezzo delle azioni e del valore di lookback, dato che diversi valori di lookback danno diverse previsioni di prezzo. Il modello può essere combinato con altre caratteristiche, come indicatori tecnici, medie mobili, volumi, modelli di candele, per fare previsioni ancora più consolidate e perchè no, anche con altri modelli di analisi di serie temporali (ARIMA, AUTOARIMA e ARCH) Tuttavia le reti neurali sono estremamente sensibili ai parametri di inputs (dimensione dati iniziali, dati di training e testing, dimensione rete neurale, numero di iterazioni, funzione di attivazione) ma è altrettanto affascinante lavorare su questi e percorrere le fasi di addestramento fino al raggiungimento della sua stabilità. Le dinamiche nelle rete neurali mi fanno pensare all’enorme lavoro di squadra che c’e’ in un alveare di uno sciame di api,(o in un formicaio) dove la casualità e la caoticità del lavoro dei singoli perde significato rispetto all’ordine generato al livello superiore della loro collettività. Ecco allora che ritroviamo l’idea per cui il totale risulta superiore all’insieme dei suoi componenti 6 , principio ispiratore del concetto di intelligenza collettiva. Si intende con questo la capacità di un gruppo di agire in modo che il risultato delle loro azioni sembri essere intelligente o in qualche modo rappresentativo di un piano consapevole. Un risultato che risulti avere un senso, un qualcosa che inglobi una qualsiasi forma di valore aggiunto, che ha un livello di elaborazione ragionevolmente superiore al risultato raggiungibile dal singolo, e che soddisfi tutti gli elementi del gruppo. Lo vediamo nelle sessioni di brainstorming. Tanto maggiore é la capacità di trasmettere informazione tra I vari elementi del gruppo tanto piu’ le decisioni sono consapevoli, la loro collaborazione piu’ profiqua, il loro effetto piu’ potente……….nel bene o nel male. Le reti neurali fanno un qualcosa di simile, per il momento e per fortuna ancora inconsapevolmente. Interessante, no? Per chi volesse ricevere il codice completo e strutturato per un plug and play in ambiente Jupiter Notebook, richiedetelo pure all’autore all’indirizzo email nicola.matarese73@gmail.com Nicola Matarese classe 1973, ha conseguito una laurea magistrale in ingegneria meccanica ed ha ricoperto ruoli manageriali all’interno di realtà industriali in ambito aerospazio e difesa. E’ appassionato di trading e opera sui mercati dal 2001. Da qualche anno lavora a sistemi di trading supportati da teorie sui Big Data e Intelligenza Artificiale. Collegati o manda un messaggio a Nicola Matarese su LINKEDIN
- Differenza tra algoritmi e modelli nel Machine Learning
Alcuni sistemi dotati di I.A. prevedono l'uso di algoritmi e modelli di machine learning . Per i principianti, questi termini sono molto confusi poiché spesso " algoritmo di machine learning " viene utilizzato in modo intercambiabile con " modello di machine learning ". Sono la stessa cosa o no? Come sviluppatore, la tua intuizione con " algoritmi " come algoritmi di ordinamento e algoritmi di ricerca aiuterà a chiarire questa confusione. In questo post scoprirai la differenza tra algoritmi e modelli di machine learning. Dopo aver letto questo post, saprai: Gli algoritmi di machine learning sono procedure implementate nel codice ed eseguite sui dati. I modelli di machine learning sono generati da algoritmi e sono costituiti da dati del modello e un algoritmo di previsione. Gli algoritmi di machine learning forniscono un tipo di programmazione automatica in cui i modelli di apprendimento automatico rappresentano il programma. Differenza tra algoritmi e modelli nel Machine Learning Questo post è diviso in quattro parti : Che cos'è un algoritmo nel Machine Learning Che cos'è un modello nel Machine Learning Algoritmo e struttura del modello Il Machine Learning è una programmazione automatica Che cos'è un algoritmo nel Machine Learning ? Un algoritmo nel Machine Learning è una procedura eseguita sui dati per creare un modello di Machine Learning . E' molto semplice ! Per sicurezza meglio riscriverlo un'altra volta Un algoritmo nel Machine Learning è una procedura eseguita sui dati per creare un modello di Machine Learning . Gli algoritmi di Machine Learning eseguono il " riconoscimento di schemi " e " imparano " dai dati o sono " adattati " a un set di dati. Esistono molti algoritmi di Machine Learning. Ad esempio, abbiamo algoritmi per la classificazione, come k-neiest neighbors. Abbiamo algoritmi per la regressione, come la regressione lineare, e abbiamo algoritmi per il clustering, come k-mean. Esempi di algoritmi di apprendimento automatico: Regressione lineare Regressione logistica Albero decisionale Rete neurale artificiale k-neiest neighbors k-means Puoi pensare a un algoritmo di Machine Learning come qualsiasi altro algoritmo in informatica. Ad esempio, alcuni altri tipi di algoritmi con cui potresti avere familiarità includono l'ordinamento o la ricerca binaria per l'ordinamento dei dati e il migliore per la ricerca. In quanto tali, gli algoritmi di Machine Learning hanno una serie di proprietà: Gli algoritmi di apprendimento automatico possono essere descritti utilizzando la matematica e lo pseudocodice. L'efficienza degli algoritmi di apprendimento automatico può essere analizzata e descritta. Gli algoritmi di apprendimento automatico possono essere implementati con uno qualsiasi di una gamma di moderni linguaggi di programmazione. Ad esempio, potresti vedere algoritmi di apprendimento automatico descritti con pseudocodice o algebra lineare in documenti di ricerca e libri di testo. Potresti vedere l'efficienza computazionale di un algoritmo di apprendimento automatico specifico rispetto a un altro algoritmo specifico. Gli accademici possono ideare algoritmi di apprendimento automatico completamente nuovi e i professionisti dell'apprendimento automatico possono utilizzare algoritmi di apprendimento automatico standard sui loro progetti. Questo è proprio come altre aree dell'informatica in cui gli accademici possono ideare algoritmi di ordinamento completamente nuovi e i programmatori possono utilizzare gli algoritmi di ordinamento standard nelle loro applicazioni. È anche probabile che tu veda più algoritmi di apprendimento automatico implementati insieme e forniti in una libreria con un'API (Application Programming Interface) standard. Un esempio popolare è la libreria scikit-learn che fornisce implementazioni di molti algoritmi di classificazione, regressione e clustering di machine learning in Python. Che cos'è un modello nel Machine Learning ? Un modello nel Machine Learning è l'output di un algoritmo di Machine Learning eseguito sui dati. E' molto semplice ! Per sicurezza meglio riscriverlo un'altra volta Un modello nel Machine Learning è l'output di un algoritmo di Machine Learning eseguito sui dati. Un modello rappresenta ciò che è stato appreso da un algoritmo di apprendimento automatico. Il modello è la " cosa " che viene salvata dopo aver eseguito un algoritmo di apprendimento automatico sui dati di addestramento e rappresenta le regole, i numeri e qualsiasi altra struttura dati specifica dell'algoritmo richiesta per fare previsioni. Alcuni esempi potrebbero renderlo più chiaro: L'algoritmo di regressione lineare risulta in un modello composto da un vettore di coefficienti con valori specifici. L'algoritmo dell'albero decisionale risulta in un modello composto da un albero di istruzioni if-then con valori specifici. Gli algoritmi di rete neurale / backpropagation / gradiente di discesa insieme danno come risultato un modello composto da una struttura a grafo con vettori o matrici di pesi con valori specifici. Un modello di apprendimento automatico è più impegnativo per un principiante perché non c'è una chiara analogia con altri algoritmi in informatica. Ad esempio, l'output dell'elenco ordinato di un algoritmo di ordinamento non è in realtà un modello. L'analogia migliore è pensare al modello di apprendimento automatico come a un " programma ". Il " programma " del modello di apprendimento automatico comprende sia dati che una procedura per utilizzare i dati per fare una previsione. Si consideri ad esempio l'algoritmo di regressione lineare e il modello risultante. Il modello è composto da un vettore di coefficienti (dati) che vengono moltiplicati e sommati con una riga di nuovi dati presi come input per fare una previsione (procedura di previsione). Salviamo i dati per il modello di Machine Learning per un uso successivo. Usiamo spesso la procedura di previsione per il modello di machine learning fornito da una libreria di machine learning. A volte possiamo implementare noi stessi la procedura di previsione come parte della nostra applicazione. Questo è spesso semplice da fare dato che la maggior parte delle procedure di previsione sono abbastanza semplici. Algoritmi e struttura dei modelli di Machine Learning Quindi ora abbiamo familiarità con un " algoritmo " di Machine Learning rispetto a un " modello " di Machine Learning . In particolare, viene eseguito un algoritmo sui dati per creare un modello. Apprendimento automatico => Modello di apprendimento automatico Comprendiamo inoltre che un modello comprende sia dati che una procedura su come utilizzare i dati per fare una previsione su nuovi dati. Puoi pensare alla procedura come a un algoritmo di previsione, se lo desideri. Modello di apprendimento automatico == Dati del modello + algoritmo di previsione Questa divisione è molto utile per comprendere un'ampia gamma di algoritmi. Ad esempio, la maggior parte degli algoritmi ha tutto il proprio lavoro nell'“ algoritmo ” e l'“ algoritmo di previsione ” fa molto poco. In genere, l'algoritmo è una sorta di procedura di ottimizzazione che riduce al minimo l'errore del modello (dati + algoritmo di previsione) sul set di dati di addestramento. L'algoritmo di regressione lineare è un buon esempio. Esegue un processo di ottimizzazione (o viene risolto analiticamente utilizzando l'algebra lineare) per trovare un insieme di pesi che minimizzino l'errore al quadrato della somma sul set di dati di addestramento. Regressione lineare: Algoritmo : trova l'insieme di coefficienti che riducono al minimo l'errore sul set di dati di addestramento Modello : Dati modello : vettore di coefficienti Algoritmo di previsione : coefficienti multipli e somma con riga di input Alcuni algoritmi sono banali o addirittura non fanno nulla e tutto il lavoro è nel modello o nell'algoritmo di previsione. L'algoritmo k-nearest neighbor non ha alcun " algoritmo " a parte il salvataggio dell'intero set di dati di addestramento. I dati del modello, quindi, sono l'intero set di dati di addestramento e tutto il lavoro è nell'algoritmo di previsione, ovvero come una nuova riga di dati interagisce con il set di dati di addestramento salvato per fare una previsione. k-Means Algoritmo : salva i dati di allenamento. Modello : Dati modello : intero set di dati di addestramento. Algoritmo di previsione : trova le k righe più simili e calcola la media della loro variabile target. Puoi utilizzare questa suddivisione come struttura per comprendere qualsiasi algoritmo di apprendimento automatico. Qual è il tuo algoritmo preferito? Puoi descriverlo usando questo framework nei commenti qui sotto? Conosci un algoritmo che non si adatta perfettamente a questa schema? L'apprendimento automatico è una programmazione automatica Vogliamo davvero solo un " modello " di apprendimento automatico e l'" algoritmo " è solo il percorso che seguiamo per ottenere il modello. Le tecniche di apprendimento automatico vengono utilizzate per problemi che non possono essere risolti in modo efficiente o efficace in altri modi. Ad esempio, se dobbiamo classificare le e-mail come spam o non spam, abbiamo bisogno di un programma software per farlo. Potremmo sederci, rivedere manualmente una tonnellata di e-mail e scrivere dichiarazioni if per svolgere questo compito. Le persone ci hanno provato. Si scopre che questo approccio è lento, fragile e poco efficace. Invece, possiamo utilizzare tecniche di apprendimento automatico per risolvere questo problema. In particolare, un algoritmo come Naive Bayes può imparare a classificare i messaggi di posta elettronica come spam e non come spam da un ampio set di dati di esempi storici di posta elettronica. Non vogliamo " Naive Bayes ". Vogliamo che il modello fornito da Naive Bayes sia che possiamo usare per classificare la posta elettronica (i vettori delle probabilità e l'algoritmo di previsione per usarli). Vogliamo il modello, non l'algoritmo utilizzato per creare il modello. In questo senso, il modello di apprendimento automatico è un programma scritto o creato o appreso automaticamente dall'algoritmo di apprendimento automatico per risolvere il nostro problema. Come sviluppatori, siamo meno interessati all'" apprendimento " eseguito dagli algoritmi di apprendimento automatico nel senso di intelligenza artificiale. Non ci interessa simulare i processi di apprendimento. Alcune persone potrebbero esserlo, ed è interessante, ma non è per questo che utilizziamo algoritmi di apprendimento automatico. Invece, siamo più interessati alla capacità di programmazione automatica offerta dagli algoritmi di apprendimento automatico. Vogliamo un modello efficace creato in modo efficiente che possiamo incorporare nel nostro progetto software. Gli algoritmi di machine learning eseguono la programmazione automatica e i modelli di machine learning sono i programmi creati per noi. Conclusioni sulla Differenza tra algoritmi e modelli nel Machine Learning In questo post, hai scoperto la differenza tra " algoritmi " e " modelli " di machine learning. Nello specifico hai imparato: Gli algoritmi di apprendimento automatico sono procedure implementate nel codice ed eseguite sui dati. I modelli di apprendimento automatico sono generati da algoritmi e sono costituiti da dati del modello e un algoritmo di previsione. Gli algoritmi di apprendimento automatico forniscono un tipo di programmazione automatica in cui i modelli di apprendimento automatico rappresentano il programma. Hai delle domande? Poni le tue domande nei commenti qui sotto e faremo del nostro meglio per rispondere.
- Analisi dei componenti principali (PCA) dalla spiegazione al codice python
Lo scopo di questo post è fornire una spiegazione completa e semplificata dell'analisi dei componenti principali (PCA). Tratteremo passo dopo passo come funziona, in modo che tutti possano capirlo e utilizzarlo, anche coloro che non hanno un forte background matematico. Perchè studiare l'analisi dei componenti principali (PCA) ? La PCA è un metodo ampiamente trattato sul Web e ci sono alcuni ottimi articoli a riguardo, ma molti trascorrono troppo tempo su aspetti superficiali e non realmente utili, quando la maggior parte di noi vuole solo sapere come funziona in modo semplice. Come funziona l'analisi dei componenti principali (PCA) ? L'analisi delle componenti principali può essere suddivisa in cinque fasi. Passerò attraverso ogni passaggio, fornendo spiegazioni logiche di ciò che sta facendo PCA e semplificando concetti matematici come standardizzazione, covarianza, autovettori e autovalori senza concentrarmi su come calcolarli. Le 5 fasi per l'analisi dei componenti principali (PCA) : Standardizzare l'intervallo di variabili iniziali continue Calcola la matrice di covarianza per identificare le correlazioni Calcola gli autovettori e gli autovalori della matrice di covarianza Crea un vettore di funzionalità per decidere quali componenti principali mantenere Riformula i dati lungo gli assi dei componenti principali Spaventato ? Non preoccuparti, ora semplificheremo il tutto, ma prima facciamo un piccolo passo inditro e capiamo bene cosa è l'analisi dei componenti principali o PCA. Che cos'è l'analisi dei componenti principali o PCA ? L'analisi dei componenti principali, o PCA, è un metodo di riduzione della dimensionalità che viene spesso utilizzato per ridurre la dimensionalità di grandi insiemi di dati, trasformando un grande insieme di variabili in uno più piccolo che contiene ancora la maggior parte delle informazioni nell'insieme di grandi dimensioni. La riduzione del numero di variabili di un set di dati va naturalmente a scapito dell'accuratezza, ma il trucco nella riduzione della dimensionalità è scambiare un po' di precisione per semplicità. Perché set di dati più piccoli sono più facili da esplorare e visualizzare e rendono l'analisi dei dati molto più semplice e veloce per gli algoritmi di apprendimento automatico senza variabili estranee da elaborare. Quindi, per riassumere, l'idea di PCA è semplice: ridurre il numero di variabili di un set di dati, preservando quante più informazioni possibili. Naturalmente questa è una definizione ridotta all'osso che serve a darti un idea super semplificata dell'analisi dei componenti principali o PCA. Spiegazione dell'analisi dei componenti principali o PCA PASSAGGIO 1: STANDARDIZZAZIONE Lo scopo di questo passaggio è standardizzare l'intervallo delle variabili iniziali continue in modo che ciascuna di esse contribuisca in egual modo all'analisi. Nota : naturalmente se vogliamo stimare i prezzi di un appartamento, i metri quadrati ( es 90 mq^2 ) e il numero di balconi ( es 2 ) avranno pesi diversi e noi dobbiamo renderli omogenei... Più specificamente, il motivo per cui è fondamentale eseguire la standardizzazione prima della PCA, è che quest'ultima è piuttosto sensibile per quanto riguarda le varianze delle variabili iniziali. Cioè, se ci sono grandi differenze tra gli intervalli delle variabili iniziali, quelle variabili con intervalli più grandi domineranno su quelle con intervalli piccoli (ad esempio, una variabile compresa tra 0 e 100 dominerà su una variabile compresa tra 0 e 1 ), che porterà a risultati distorti. Quindi, trasformare i dati in scale comparabili può prevenire questo problema. Matematicamente, questo può essere fatto sottraendo la media e dividendo per la deviazione standard per ogni valore di ciascuna variabile. Una volta completata la standardizzazione, tutte le variabili verranno trasformate nella stessa scala. Voglio farti un esempio di un set di dati STANDARDIZZATO e uno no. TABELLA NON NORMALIZZATA TABELLA NORMALIZZATA PASSAGGIO 2: CALCOLO DELLA MATRICE DI COVARIANZA Lo scopo di questo passaggio è capire come le variabili dell'insieme di dati di input variano dalla media l'una rispetto all'altra, o in altre parole, per vedere se esiste una relazione tra loro. Perché a volte, le variabili sono altamente correlate in modo tale da contenere informazioni ridondanti. Quindi, per identificare queste correlazioni, calcoliamo la matrice di covarianza. La matrice di covarianza è una matrice simmetrica p × p (dove p è il numero di dimensioni) che ha come voci le covarianze associate a tutte le possibili coppie delle variabili iniziali. Ad esempio, per un set di dati tridimensionale con 3 variabili x , y e z , la matrice di covarianza è una matrice 3 × 3 di questo da: Poiché la covarianza di una variabile con se stessa è la sua varianza (Cov(a,a)=Var(a)), nella diagonale principale (in alto da sinistra in basso a destra) abbiamo effettivamente le varianze di ciascuna variabile iniziale. E poiché la covarianza è commutativa (Cov(a,b)=Cov(b,a)), le voci della matrice di covarianza sono simmetriche rispetto alla diagonale principale, il che significa che le porzioni triangolari superiore e inferiore sono uguali. Cosa ci dicono le covarianze che abbiamo come voci della matrice sulle correlazioni tra le variabili? In realtà è il segno della covarianza che conta: se positivo allora : le due variabili aumentano o diminuiscono insieme (correlate) se negativo allora: uno aumenta quando l'altro diminuisce (correlato inversamente) Ora che sappiamo che la matrice di covarianza non è altro che una tabella che riassume le correlazioni tra tutte le possibili coppie di variabili, passiamo al passaggio successivo. PASSAGGIO 3: CALCOLARE GLI AUTOVETTORI E GLI AUTOVALORI DELLA MATRICE DI COVARIANZA PER IDENTIFICARE I COMPONENTI PRINCIPALI Autovettori e autovalori sono i concetti di algebra lineare che dobbiamo calcolare dalla matrice di covarianza per determinare le componenti principali dei dati. Prima di arrivare alla spiegazione di questi concetti, capiamo prima cosa si intende per componenti principali. Le componenti principali sono nuove variabili costruite come combinazioni lineari o miscele delle variabili iniziali. Queste combinazioni sono fatte in modo tale che le nuove variabili (cioè le componenti principali) non siano correlate e la maggior parte delle informazioni all'interno delle variabili iniziali sia compressa o compressa nelle prime componenti. Quindi, l'idea è che i dati a 10 dimensioni forniscano 10 componenti principali, ma PCA cerca di inserire la massima informazione possibile nel primo componente, quindi il massimo delle informazioni rimanenti nel secondo e così via, fino a ottenere qualcosa di simile a quello mostrato nello scree plot sotto. Organizzare le informazioni nei componenti principali in questo modo, ti consentirà di ridurre la dimensionalità senza perdere molte informazioni, e questo scartando i componenti con informazioni basse e considerando i componenti rimanenti come nuove variabili. Una cosa importante da capire qui è che le componenti principali sono meno interpretabili e non hanno alcun significato reale poiché sono costruite come combinazioni lineari delle variabili iniziali. Geometricamente parlando, le componenti principali rappresentano le direzioni dei dati che spiegano una quantità massima di varianza , vale a dire le linee che catturano la maggior parte delle informazioni dei dati. La relazione tra varianza e informazioni qui è che, maggiore è la varianza portata da una linea, maggiore è la dispersione dei punti dati lungo di essa e maggiore è la dispersione lungo una linea, maggiore è l'informazione che ha. Per dirla semplicemente, basti pensare ai componenti principali come a nuovi assi che forniscono l'angolo migliore per vedere e valutare i dati, in modo che le differenze tra le osservazioni siano meglio visibili. Come PCA costruisce i componenti principali Poiché ci sono tante componenti principali quante sono le variabili nei dati, le componenti principali sono costruite in modo tale che la prima componente principale tenga conto della maggiore varianza possibile nel set di dati. Ad esempio, supponiamo che il grafico a dispersione del nostro set di dati sia come mostrato di seguito, possiamo indovinare il primo componente principale? Sì, è approssimativamente la linea che corrisponde ai segni viola perché passa per l'origine ed è la linea in cui la proiezione dei punti (punti rossi) è più estesa. O matematicamente parlando, è la linea che massimizza la varianza (la media delle distanze al quadrato dai punti proiettati (punti rossi) all'origine). La seconda componente principale è calcolata allo stesso modo, a condizione che non sia correlata (cioè perpendicolare alla) prima componente principale e che rappresenti la varianza successiva più alta. Ciò continua fino a quando non è stato calcolato un totale di p componenti principali, pari al numero originario di variabili. Ora che abbiamo capito cosa intendiamo per componenti principali, torniamo agli autovettori e agli autovalori. La prima cosa che devi sapere su di loro è che vengono sempre in coppia, in modo che ogni autovettore abbia un autovalore. E il loro numero è uguale al numero di dimensioni dei dati. Ad esempio, per un set di dati tridimensionale, ci sono 3 variabili, quindi ci sono 3 autovettori con 3 autovalori corrispondenti. Senza ulteriori indugi, sono gli autovettori e gli autovalori alla base di tutta la magia spiegata sopra, perché gli autovettori della matrice di covarianza sono in realtà le direzioni degli assi dove c'è la maggior varianza (maggior parte delle informazioni) e che chiamiamo Componenti principali. E gli autovalori sono semplicemente i coefficienti associati agli autovettori, che danno la quantità di varianza trasportata in ogni componente principale . Classificando i tuoi autovettori in ordine di autovalori, dal più alto al più basso, ottieni le componenti principali in ordine di significatività. Esempio: Supponiamo che il nostro set di dati sia bidimensionale con 2 variabili x,y e che gli autovettori e gli autovalori della matrice di covarianza siano i seguenti: Se classifichiamo gli autovalori in ordine decrescente, otteniamo λ1>λ2, il che significa che l'autovettore che corrisponde alla prima componente principale (PC1) è v1 e quello che corrisponde alla seconda componente (PC2) è v2. Dopo aver ottenuto le componenti principali, per calcolare la percentuale di varianza (informazione) contabilizzata da ciascuna componente, dividiamo l'autovalore di ciascuna componente per la somma degli autovalori. Se applichiamo questo all'esempio sopra, troviamo che PC1 e PC2 portano rispettivamente il 96% e il 4% della varianza dei dati. PASSAGGIO 4: VETTORE DI FUNZIONALITÀ Come abbiamo visto nel passaggio precedente, calcolare gli autovettori e ordinarli per i loro autovalori in ordine decrescente, ci permette di trovare le componenti principali in ordine di significato. In questo passaggio, quello che facciamo è scegliere se mantenere tutte queste componenti o scartare quelle di minor significato (di bassi autovalori), e formare con le restanti una matrice di vettori che chiamiamo Feature vector . Quindi, il vettore delle caratteristiche è semplicemente una matrice che ha come colonne gli autovettori delle componenti che decidiamo di mantenere. Questo lo rende il primo passo verso la riduzione della dimensionalità, perché se scegliamo di mantenere solo p autovettori (componenti) da n , il set di dati finale avrà solo p dimensioni. Esempio : Continuando con l'esempio del passaggio precedente, possiamo formare un vettore di caratteristiche con entrambi gli autovettori v 1 e v 2: Oppure scartare l'autovettore v 2, che è quello di minor significato, e formare un vettore di caratteristiche solo con v 1: L'eliminazione dell'autovettore v2 ridurrà la dimensionalità di 1 e di conseguenza causerà una perdita di informazioni nel set di dati finale. Ma dato che v 2 conteneva solo il 4% delle informazioni, la perdita non sarà quindi importante e avremo ancora il 96% delle informazioni trasportate da v 1. Quindi, come abbiamo visto nell'esempio, sta a te scegliere se conservare tutti i componenti o scartare quelli di minore importanza, a seconda di cosa stai cercando. Perché se vuoi solo descrivere i tuoi dati in termini di nuove variabili (componenti principali) che non sono correlate senza cercare di ridurre la dimensionalità, non è necessario tralasciare componenti meno significativi. ULTIMO PASSAGGIO: RIFORMULARE I DATI LUNGO GLI ASSI DEI COMPONENTI PRINCIPALI Nei passaggi precedenti, a parte la standardizzazione, non si apportano modifiche ai dati, si selezionano solo i componenti principali e si forma il vettore delle caratteristiche, ma il set di dati di input rimane sempre in termini di assi originali (ovvero in termini di le variabili iniziali). In questo passaggio, che è l'ultimo, lo scopo è utilizzare il vettore di caratteristiche formato utilizzando gli autovettori della matrice di covarianza, per riorientare i dati dagli assi originali a quelli rappresentati dalle componenti principali (da cui il nome Analisi delle Componenti Principali ). Questo può essere fatto moltiplicando la trasposizione del set di dati originale per la trasposizione del vettore della caratteristica. Analisi dei componenti principali con Python Ricapitoliamo gli Usi dell'Analisi dei componenti principali : Viene utilizzato per trovare l'interrelazione tra le variabili nei dati. Viene utilizzato per interpretare e visualizzare i dati. Il numero di variabili sta diminuendo e semplifica ulteriormente l'analisi. Viene spesso utilizzato per visualizzare la distanza genetica e la parentela tra le popolazioni. Questi sono fondamentalmente eseguiti su una matrice simmetrica quadrata. Può essere una pura somma di quadrati e matrice di prodotti incrociati o matrice di covarianza o matrice di correlazione. Una matrice di correlazione viene utilizzata se la varianza individuale differisce molto. Ora, capiamo l'analisi dei componenti principali con Python. Per ottenere il set di dati utilizzato nell'implementazione, fare clic qui e cercare nella cartella DATASET CSV il file "Wine.csv". Passaggio 1: importazione delle librerie import numpy as np import matplotlib.pyplot as plt import pandas as pd Passaggio 2: importazione del set di dati Importare il set di dati e distribuirlo nei componenti X e y per l'analisi dei dati. dataset = pd.read_csv('wine.csv') X = dataset.iloc[:, 0:13].values y = dataset.iloc[:, 13].values Passaggio 3: suddivisione del set di dati nel set di allenamento e nel set di test from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 0) Passaggio 4: ridimensionamento delle funzionalità Esecuzione della parte di pre-elaborazione sul set di formazione e test, ad esempio l'adattamento della scala standard. from sklearn.preprocessing import StandardScaler sc = StandardScaler() X_train = sc.fit_transform(X_train) X_test = sc.transform(X_test) Passaggio 5: Applicazione della funzione PCA Applicazione della funzione PCA al set di training e test per l'analisi. from sklearn.decomposition import PCA pca = PCA(n_components = 2) X_train = pca.fit_transform(X_train) X_test = pca.transform(X_test) explained_variance = pca.explained_variance_ratio_ Passaggio 6: adattamento della regressione logistica al set di allenamento from sklearn.linear_model import LogisticRegression classifier = LogisticRegression(random_state = 0) classifier.fit(X_train, y_train) Passaggio 7: prevedere il risultato del set di test y_pred = classifier.predict(X_test) Passaggio 8: creare la matrice di confusione from sklearn.metrics import confusion_matrix cm = confusion_matrix(y_test, y_pred) Passaggio 9: prevedere il risultato del set di allenamento from matplotlib.colors import ListedColormap X_set, y_set = X_train, y_train X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green', 'blue'))(i), label = j) plt.title('Logistic Regression (Training set)') plt.xlabel('PC1') # Xlabel plt.ylabel('PC2') # Ylabel plt.legend() # to show legend plt.show() Passaggio 10: visualizzazione dei risultati del set di test from matplotlib.colors import ListedColormap X_set, y_set = X_test, y_test X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01), np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01)) plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape), alpha = 0.75, cmap = ListedColormap(('yellow', 'white', 'aquamarine'))) plt.xlim(X1.min(), X1.max()) plt.ylim(X2.min(), X2.max()) for i, j in enumerate(np.unique(y_set)): plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1], c = ListedColormap(('red', 'green', 'blue'))(i), label = j) # title for scatter plot plt.title('Logistic Regression (Test set)') plt.xlabel('PC1') # Xlabel plt.ylabel('PC2') # Ylabel plt.legend() # show plt.show() Riepilogo dell'analisi dei componenti principali In questa sezione abbiamo discusso l'uso dell'analisi delle componenti principali per la riduzione della dimensionalità, per la visualizzazione di dati ad alta dimensione, per il filtraggio del rumore e per la selezione delle caratteristiche all'interno di dati ad alta dimensione. A causa della versatilità e dell'interpretabilità del PCA, si è dimostrato efficace in un'ampia varietà di contesti e discipline. Dato qualsiasi set di dati ad alta dimensione, tendo a iniziare con PCA per visualizzare la relazione tra i punti (come abbiamo fatto con le cifre), per capire la varianza principale nei dati (come abbiamo fatto con le autofacce) e per capire la dimensionalità intrinseca (tracciando il rapporto di varianza spiegato). Certamente PCA non è utile per ogni set di dati ad alta dimensione, ma offre un percorso semplice ed efficiente per ottenere informazioni dettagliate sui dati ad alta dimensione.
- AUTOARIMA e ARCH : Modelli di Machine Learning per il Trading
Introduzione a AUTOARIMA e ARCH : Modelli di Machine Learning per il Trading Negli articoli precedenti : Machine Learning per il trading Come creare un modello ARIMA in Python per le previsioni di Trading abbiamo analizzato l’algoritmo ARIMA per elaborare una previsione dell’andamento del CBOE Volatility Index. Come abbiamo visto il VIX ha delle caratteristiche intrinseche di stazionarietà che permettono l’utilizzo delle Serie Temporali direttamente sui valori dell’indice. In questo articolo invece andremo ad analizzare l’indice S&P500 con 2 nuovi algoritmi: AUTOARIMA e ARCH. Il primo è una semplificazione del metodo ARIMA già visto mentre il secondo ci aiuta a studiare, anzichè il trend (e quindi i valori giornalieri dell’indice S&P500), la sua “volatilità” (ovvero la variazione dei valori giorno dopo). Per la trattazione dell’argomento si farà uso del software di programmazione Python in ambiente Jupiter Notebook. PREMESSA su AUTOARIMA e ARCH : Modelli di Machine Learning per il Trading La programmazione di codici di machine learning prevede oltre una profonda conoscenza dei linguaggi di programmazione anche una notevole comprensione di modelli statistici e matematici. Vista la complessità degli argomenti e’ bene che il lettore sia consapevole dell’impossibilità di trovare spiegazioni esaurienti su tutta la teoria alla base della trattazione. Rinunciando a questo tuttavia siamo in grado di presentare le potenzialità dell’argomento in poche pagine di testo. Tanto riteniamo sia comunque sufficiente a stimolare la curiosità di coloro che da questo piccolo spunto possano partire e approcciare i mercati con altre metodologie quantitative. Modello AUTOARIMA per le previsioni di Trading La previsione delle serie temporali è un argomento caldo che ha molte applicazioni possibili, come la previsione del tempo, la pianificazione aziendale, l'allocazione delle risorse e molte altre. Come alternativa al metodo ARIMA visto nel numero precedente, il metodo AUTOARIMA ci permette di determinare automaticamente la migliore combinazione dei valori p, q e d necessari alla costruzione del modello. Seguendo il solito principio di costruzione di un codice di machine learning , partiamo con l’importazione delle librerie di gestione tabelle e grafica import pandas as pd import numpy as np import matplotlib.pyplot as plt STEP 1 – IMPORTAZIONE E LETTURA DATI PER LE PREVISIONI DI TRADING I sei steps di un codice ML: 1. Importazione e lettura dati 2. Elaborazione, trasformazione e organizzazione dati 3. Definizione del modello da utilizzare 4. Addestramento del modello 5. Valutazione dell’affidabilità del modello 6. Previsione Procediamo con l’impostazione delle funzioni che ci permettono di leggere I valori degi ultimi due anni dell’ S&P500, quelli che vogliamo analizzare e utilizzare per l’addestramento del modello e le future previsioni: pip install yfinance data = yf.download(tickers='^GSPC', period='2y', interval='1d') STEP 2 – ELABORAZIONE, TRASFORMAZIONE E ORGANIZZAZIONE DATI In questa fase trasformiamo I dati in maniera tale che gli stessi possano essere gestiti dall’algoritmo AUTORIMA. Per esempio, eliminiamo le colonne che non ci servono, sostituiamo i valori nulli dei weekend e dei giorni di festa con i valori dell’ultimo giorno precedente in cui il mercato era aperto. cols_to_keep = ["Close"] data = data.loc[:,cols_to_keep] closingdata = data closingdata["week"] = closingdata.index.isocalendar().week idx = pd.date_range(closingdata.index[0], closingdata.index[-1]) completedata =closingdata.reindex(idx, fill_value= float("NaN")) completedata = completedata.fillna(method='ffill') completedata L’ultima riga di codice ci darà la possibilità d visualizzare la nuova struttura dati STEP 3 – DEFINIZIONE DEL MODELLO PER LE PREVISIONI DI TRADING Importiamo adesso la libreria che ci permetterà di implementare l’algoritmo AUTOARIMA ed eseguire le operazioni per esso necessarie con le seguenti istruzioni !pip install pmdarima from sklearn.metrics import mean_squared_error import pmdarima as pm from pmdarima.arima import auto_arima STEP 4 – ADDESTRAMENTO DEL MODELLO PER LE PREVISIONI DI TRADING Per l’addestramento del modello dobbiamo innanzitutto definire quelli che chiamiamo Data Test Set (I valori che facciamo finta di non conoscere) e Data Train Set (I valori che utilizziamo per addestrare il modello) , tra loro complementari, rispettivamente variabili dipendenti e variabili indipendenti, ricavati dalla separazione della totalità dei dati ottenuti alla fine dello Step 1: number_of_weeks_testing = 4 testdata = completedata.iloc[-number_of_weeks_testing*7:] traindata = completedata.iloc[:-number_of_weeks_testing*7] dove testdata partono da 29.01.2020 e arrivano fino a 31.12.2021 e traindata partono da 01.01.2022 fino al 28.01.2022. e procediamo adesso con l’addestramento inserendo il comando: arima = auto_arima(traindata["Close"], error_action='ignore', trace=True, suppress_warnings=True, maxiter=30, seasonal=True, m=7 ) A questo punto AUTOARIMA farà tutte le iterazioni indicate (fino ad un massimo di 30) e determinerà la migliore combinazione dei parametri p,q e d , quella per cui il valore AIC (Akaike information criterion) risulti minimo . STEP 5 – VALUTAZIONE AFFIDABILITA’ DEL MODELLO Ora andiamo a far girare le line di codice che ci permettono di ottenere I test data e capire quanto essi si discostino dai valori reali. Calcoliamo pertanto la bontà del modello andando a calcolare lo scarto quadratico medio tra quello che il modello ha previsto (test data) e quali sono effettvamente i dati storici performance_collector=[] for w in range(number_of_weeks_testing): y_pred = pd.Series(arima.predict(7)) actual = testdata.iloc[w:w+7]["Close"] performance_collector.append(mean_squared_error(actual,y_pred, squared=False)) print(performance_collector) print(np.mean(performance_collector)) lo scarto quadratic medio calcolato è 69.01 (circa l’1,5%). Se vogliamo anche avere una rappresentazione grafica di quanto il modello e’ affidabile con il blocco seguente plt.title("S&P500 Predicted data vs Historical data") plt.plot(closingdata['Close'],label='Historical Data') plt.plot(testdata['Close'],label='Prediction on Test Data') plt.xlabel ('Date') plt.ylabel ('Close') plt.legend() plt.show possiamo stampare e confrontare i valori testdata (Predicted Data) con dati storici fino al 28.01.2022 (Historical Data) con la funzione di creazione grafico Questo ci serve per capire se e in quale misura il modello che abbiamo costruito puo’ fare buone previsioni. Se il comportamento della previsione (Predicted Data) ricalca bene il dato storico (Historical Data) il modello puo’ essere affidabile anche per previsioni future. E’ chiaro che se già sappiamo che lo scarto quadratico medio della previsione e’ dell’1,5% il modello non é ancora ottimizzato per cui dovremmo procedere con quella tecnica che si chiama parametric tuning (cambiamo gli orizzonti temporali, il rapporto tra traindata e testdata, il periodo di osservazione o il numero massimo di iterazioni). STEP 6 - PREVISIONE In ogni caso, avendo costruito il modello ed avendo appurato la sua precisione, se accettabile, procediamo con la previsione futura. Per fare questo facciamo girare il modello, non piu’ sui traindata (che arrivano fino al 31.12.2021) ma su tutti i dati (fino al 28.01.2021) indicando come orizzonte di previsione 7 giorni fulldata=pd.concat([traindata,testdata],axis=0) arima = auto_arima(fulldata["Close"], error_action='ignore', trace=True, suppress_warnings=True, maxiter=30, seasonal=True, m=7) e determiniamo il vettore previsionale con il comando futureforecast=arima.predict(7) futureforecast che vediamo qui sotto Operando alcune trasformazioni e utilizzando le funzioni di plotting plt.title("S&P500 PREDICTION FOR THE NEXT 7 DAYS WITH AUTOARIMA MODEL") plt.xlabel ('Date') plt.ylabel ('Close Price USD ($)') plt.plot(pastandforecast['Close'],label='Historical Data') plt.plot(pastandforecast['Forecasted_Close'],label='AUTOARIMA forecast') plt.legend() plt.show Modello ARCH per le previsioni di Trading La logica dietro una previsione fatta sulla base di una serie temporale é quella per cui il valore da prevedere é uguale all’ultimo valore disponibile. In pratica il panettiere che voglia lanciare la produzione di pane per domani puo’ basarsi sulla vendita di oggi. Questa é l’idea di base di un modello di autoregressione di livello 1 (indicata anche con AR 1). A meno di un certo errore la nostra previsione sarà cosi determinata. Banalmente se noi conoscessimo questo errore di prevsione a priori saremo in grado di fare una previsione con piena certezza. Nel momento in cui aggiungiamo un termine che tiene in considerazione anche le vendite di pane del giorno precedente (di ieri), possiamo dire che il valore delle vendite di ieri, piu’ l’errore di previsione di ieri (che darebbe la previsione di oggi) piu’ l’errore di oggi, darebbe la previsione di domani. Con questo modello passiamo da un semplice modello AR ad un modello ARMA (auto regressive moving average). Quello che chiamiamo ARCH (Autoregressive Conditional Heteroskedasticity) e’ invece un modello che lavora sulla volatilità ovvero sulla differenza del valore di oggi e il valore di ieri. Il modello suggerirebbe che la volatilità di oggi e’ un indicatore della volatilità di domani e cioe’ che momenti a bassa volatilità sono seguiti da bassa volatilità e viceversa. Il problema dell’ARCH model è che esso puo’ avere spesso delle oscillazioni di volatilità che danno al modello un comportamento a tratti esplosivo. Per ovviare a questo problema, aggiugiamo il parametro della volatilità sul giorno precedente, proprio come lo facevamo sul modello AR per ottenere ARMA. L’inclusione della volatilità di ieri mi permette di smussare i comportamenti esplosivi del modello che si basano sul solo cambio di volatilità di un solo giorno (volatilità di oggi per domani) 4 . Dopo questa breve introduzione possiamo sviluppare un codice Python che ci permetta di risolvere il nostro problema, seguendo gli ormai noti 6 steps di programmazione. STEP 1-IMPORTAZIONE E LETTURA DATI Assumiamo di aver importato tutte le generice librerie (numpy, pandas, matplot) come già fatto nell’esempio precedente e delle funzioni di lettura dati (incluso yfinance e yf) per I valori di S&P500 negli ultimi due anni . STEP 2-ELABORAZIONE, TRASFORMAZIONE E ORGANIZZAZIONE DATI A questo punto poiché vogliamo studiare e prevedere la volatilità del S&P500 lanciamo un operazione returns = 100 * SP500.Close.pct_change().dropna() plt.figure(figsize=(10,4)) plt.title('S&P500 Returns') plt.ylabel('% Return') plt.xlabel ('Date',alpha=1) plt.plot(returns) che invece di darci i valori assoluti giornalieri ci restituisce le variazioni percentuali in forma numerica e grafica STEP 3 – DEFINIZIONE DEL MODELLO ARCH PER LE PREVISIONI DI TRADING Importiamo la libreria che ci permetterà di implementare il metodo ARCH pip install arch e le funzioni di Partial Autocorrelation e Autocorrelation che ci danno una prima indicazione dei valori di p e q da utilizzare per l’addestramento del modello: from arch import arch_model from statsmodels.graphics.tsaplots import plot_acf, plot_pacf pacf = plot_pacf(returns**2, lags=40,color='g') acf = plot_acf(returns**2, lags=40,color='g') dal grafico qui sotto possiamo cominciare a provare a calcolare la bontà del modello con varie combinazioni di p e q. STEP 4 – ADDESTRAMENTO DEL MODELLO Dopo vari tentativi per addestrare il modello scegliamo di procedere con il valori di p=2 e q=2. model = arch_model(returns, p=2, q=2) model_fit = model.fit() A questo punto creiamo il test e train data set con la seguente serie di linee di codice : rolling_predictions = [] test_size = 30*12 for i in range(test_size): train = returns[:-(test_size-i)] model = arch_model(train, p=2, q=2) model_fit = model.fit(disp='off') pred = model_fit.forecast(horizon=1) rolling_predictions.append(np.sqrt(pred.variance.values[-1,:][0])) STEP 5 – VALUTAZIONE DELL’AFFIDABILITA’ DEL MODELLO ARCH Passiamo alla valutazione grafica che otteniamo con plt.figure(figsize=(10,4)) true = plt.plot(returns[-30*12:]) preds = plt.plot(rolling_predictions) plt.title('S&P500 Volatility Prediction - Rolling Forecast') plt.legend(['True Returns', 'Predicted Volatility') Con questi valori riusciamo ad ottenere un modello che pur non replicando perfettamente i valori reali riesce a bene identificare i suoi picchi STEP 6 – PREVISIONE A questo punto e con questo modello, lanciamo la previsione di 7 giorni pred = model_fit.forecast(horizon=8) future_dates = [returns.index[-1] + timedelta(days=i) for i in range(1,9)] pred = pd.Series(np.sqrt(pred.variance.values[-1,:]), index=future_dates) che con la funzione di plotting plt.figure(figsize=(10,4)) plt.plot(pred) plt.title('S&P500 Volatility Prediction - Next 30 Days', fontsize=20) ci permette di visualizzare il grafico Conclusioni su AUTOARIMA e ARCH : Modelli di Machine Learning per il Trading Per quanto la trattazione possa risultare mediamente complessa lo studio rappresenta semplicemente un punto di partenza per approfondire la ricerca di modelli che possano aiutare il trader o l’investitore nelle sue scelte. In questi 3 modelli rappresentati finora le possibiltà di settare i parametri sono notevoli ed ogni loro combinazione puo’ dare risultati completamente diversi. In un mondo in cui combattiamo tra prospettive di inflazione e stagflazione sarebbe troppo semplificativo affidare i nostri risparmi a poche linee di codice. In tempi normali e su un orizzonte di lungo termine potremmo ancora pensare che il progresso, legato a doppio filo con la capacità di sviluppo di know how, e misurabile con il PIL, continui a sostenere i corsi azionari. Tuttavia se da un lato la capacità di sviluppare innovazione è infinita (almeno cosi mi piace pensare) bisogna considerare attentamente che : a) l’implementazione dell’innovazione a livello produttivo e’ comunque limitata. Si pensa che la capacità innovativa dell’essere umano tradotta in produttività, oscilli con valori medi annuali tra il 2% e il 3% al massimo; b) in futuro avremo minore accesso alle risorse sia per la loro riducenda disponibilità sia per una crescente attenzione a forme di sostenibilità produttive. Dopo il Covid si sono moltiplicate teorie sulla descrescita, ridistribuzione di ricchezza e ricorrono sempre piu’ spesso idee tipo “Great Reset”, “New Order” e cosi via. Oggi siamo parte di un ecosistema dei mercati finanziari dove la lotta tra ipo e iper informazione ha mantenuto lo stesso livello di esposizione a bolle finanziarie , dove la quantità di strumenti derivati fornisce un ampio spettro di possibilità di investimento con posizioni long e altrettante short, dove il debito globale ha raggiunto livelli record, dove abbiamo ripetutamente fallito nella esasperata ricerca di un bene che incorpori il significato di valore (che sia l’oro, il petrolio o il bitcoin e similari), dove l’entropia dei nostri sistemi (geopolitici, demografici, ecologici e finanziari) accelera esponenzialmente. Tutto cio’ per dire che le previsioni saranno sempre oggetto di trattazione a complessità crescente e gli algoritmi dovranno tenere in considerazione sempre piu’ variabili. Nei prossimi numeri illustreremo altri algoritmi previsionali lasciando le serie temporali e utilizzando tecniche di previsione supportate da reti neurali. Per chi fosse interessato ad ottenere i codici python completi e strutturati per un plug and play in ambiente Jupiter Notebook, richiedetelo pure all’autore all’indirizzo email nicola.matarese73@gmail.com Nicola Matarese classe 1973, ha conseguito una laurea magistrale in ingegneria meccanica ed ha ricoperto ruoli manageriali all’interno di realtà industriali in ambito aerospazio e difesa. E’ appassionato di trading e opera sui mercati dal 2001. Da qualche anno lavora a sistemi di trading supportati da teorie sui Big Data e Intelligenza Artificiale. Collegati o manda un messaggio a Nicola Matarese su LINKEDIN
- Diversi modi di leggere un file con Python
I dati sono il pane quotidiano di un Data Scientist, quindi è fondamentale conoscere molti approcci per il caricamento dei dati per poi poterci eseguire un'analisi. Ora vedremo cinque tecniche Python per importare i tuoi dati accompagnate con esempi di codice python. Come principiante, potresti conoscere un solo modo per caricare i dati con python (normalmente in CSV) che consiste nel leggerli usando la funzione pandas.read_csv . È una delle funzioni più mature e forti, ma altri modi sono molto interessanti da conoscere e a volte torneranno sicuramente utili. Le modalità per leggere un file in Python sono: Manuale loadtxt genfromtxt read_csv Pickle Il set di dati che utilizzeremo per caricare i dati può essere trovato qui nella cartella CSV. Si chiama 100-Sales-Records. Importiamo le librerie necessarie per testare 5 differenti modi di leggere un file con Python Utilizzeremo i pacchetti Numpy, Pandas e Pickle, quindi importali. import numpy as np import pandas as pd import pickle Modi di leggere un file con Python 1. Funzione manuale Questo è il più difficile, poiché devi progettare una funzione personalizzata, che può caricare i dati per te. Devi avere a che fare con i normali concetti di archiviazione di Python e usandolo devi leggere un file .csv . Facciamolo sul file 100 Sales Records. def load_csv(percorsofile): data = [] col = [] checkcol = False with open(percorsofile) as f: for val in f.readlines(): val = val.replace("\n","") val = val.split(',') if checkcol is False: col = val checkcol = True else: data.append(val) df = pd.DataFrame(data=data, columns=col) return df Hmmm, cos'è questo????? Non ti sembra un codice un po' complesso!!!! Analizziamolo passo dopo passo in modo da sapere cosa sta succedendo e puoi applicare una logica simile per leggere un tuo file .csv o html o di testo . Qui ho creato una funzione load_csv che prende come argomento il percorso del file che vuoi leggere. Ho un elenco denominato come dati che conterrà i miei dati del file CSV e un altro elenco col che avrà i nomi delle mie colonne. Ora dopo aver ispezionato manualmente il csv, so che i nomi delle mie colonne sono nella prima riga, quindi nella mia prima iterazione, devo archiviare i dati della prima riga in col e il resto dei dati in rows . Per controllare la prima iterazione, ho usato una variabile booleana denominata checkcol che è False, e quando è falsa nella prima iterazione, memorizza i dati della prima riga in col e quindi imposta checkcol su True, quindi lo faremo gestire l'elenco dei dati e memorizzare il resto dei valori nell'elenco dei dati . Logica per leggere un file con Python con Funzione manuale La logica principale qui è che ho ripetuto il file, usando readlines() una funzione in Python. Questa funzione restituisce un elenco che contiene tutte le righe all'interno di un file. Durante la lettura dei titoli, rileva una nuova riga come \n carattere, che è il carattere di terminazione della riga, quindi per rimuoverlo, ho usato la funzione str.replace . Poiché è un file .csv , quindi devo separare le cose in base a virgole , quindi dividerò la stringa su a , usando string.split(',') . Per la prima iterazione, memorizzerò la prima riga, che contiene i nomi delle colonne in un elenco noto come col . E poi aggiungerò tutti i miei dati nel mio elenco noto come dati . Per leggere i dati in modo più bello, l'ho restituito come formato dataframe perché è più facile leggere un dataframe rispetto a un array numpy o all'elenco di Python. Pro e contro di leggere un file con Python con Funzione manuale Il vantaggio importante è che hai tutta la flessibilità e il controllo sulla struttura del file e puoi leggere in qualsiasi formato e modo desideri e archiviarlo. Puoi anche leggere i file che non hanno una struttura standard usando la tua logica. Svantaggi importanti sono che è complesso da scrivere soprattutto per i tipi standard di file perché possono essere letti facilmente. Devi codificare la logica che richiede tentativi ed errori. Dovresti usarlo solo quando il file non è in un formato standard o vuoi flessibilità e leggere il file in un modo che non è disponibile attraverso le librerie. Modi di leggere un file con Python 2. Funzione Numpy.loadtxt Questa è una funzione incorporata in Numpy, una famosa libreria numerica in Python. È una funzione davvero semplice per caricare i dati. È molto utile per leggere dati dello stesso tipo di dati. Quando i dati sono più complessi, è difficile leggerli usando questa funzione, ma quando i file sono facili e semplici, questa funzione è davvero potente. Passiamo al codice. df = np.loadtxt('convertcsv.csv', delimitator = ',') Qui abbiamo semplicemente usato la funzione loadtxt passata in delimitatore come ',' perché questo è un file CSV. Ora se stampiamo df , vedremo i nostri dati in array numpy abbastanza decenti che sono pronti per l'uso. Pro e contro di leggere un file con Python con Numpy.loadtxt Un aspetto importante dell'utilizzo di questa funzione è che è possibile caricare rapidamente i dati da un file in array numpy. Gli svantaggi sono che non puoi avere tipi di dati diversi o righe mancanti nei tuoi dati. Modi di leggere un file con Python 3. Numpy.genfromtxt() Useremo il set di dati, che è '100 Sales Records.csv' che abbiamo usato nel nostro primo esempio per dimostrare che possiamo avere più tipi di dati in esso. Passiamo al codice. data = np.genfromtxt('100 Sales Records.csv', delimitator=',') Nel caso in cui questa riga di codice non legga in modo corretto i tuoi dati, prova a sostituirla con questa data = np.genfromtxt('100 Sales Records.csv', delimitator=',', dtype=None, names=True, encoding='utf-8') Pro e contro di leggere un file con Python con Numpy.genfromtxt() Un aspetto importante dell'utilizzo di questa funzione è che è possibile caricare rapidamente i dati da un file in array numpy. Gli svantaggi sono che non puoi avere tipi di dati diversi o righe mancanti nei tuoi dati. Modi di leggere un file con Python 4. Pandas.read_csv() Pandas è una libreria di manipolazione dei dati molto popolare ed è molto comunemente usata. Una delle sue funzioni molto importanti e mature è read_csv() che può leggere qualsiasi file .csv molto facilmente e aiutarci a manipolarlo. Facciamolo sul nostro set di dati di 100 record di vendita. Questa funzione è molto popolare per la sua facilità d'uso. Puoi confrontarlo con i nostri codici precedenti e puoi verificarlo. >>> pdDf = pd.read_csv('100 Sales Record.csv') >>> pdDf.head() E indovina cosa? Con questo abbiamo già finito è davvero semplice e facile da usare. Puoi esplorare tutti gli altri parametri nei documenti ufficiali qui . Modi di leggere un file con Python 5. Pickle Quando i tuoi dati non sono in un buon formato leggibile, puoi usare pickle per salvarli in un formato binario. Quindi puoi ricaricarlo facilmente usando la libreria pickle. Prenderemo il nostro file CSV di 100 record di vendita e prima lo salveremo in un formato pickle in modo da poterlo leggere. with open('test.pkl','wb') as f: pickle.dump(pdDf, f) Questo creerà un nuovo file test.pkl che ha al suo interno il nostro pdDf dall'intestazione Pandas . Ora per aprirlo usando pickle, dobbiamo solo usare la funzione pickle.load . with open('test.pkl','rb') as f: d4 = pickle.load(f) d4.head() E qui abbiamo caricato con successo i dati da un file pickle in formato pandas.DataFrame . Ora sei a conoscenza di 5 modi diversi per caricare i file di dati in Python, che possono aiutarti in diversi modi a caricare un set di dati quando lavori nei tuoi progetti quotidiani.
- La vera differenza tra statistica e machine learning
No, statistica e machine learning non sono la stessa cosa. Se il Machine Learning è solo una statistica potenziata, l'architettura è solo una costruzione di castelli di sabbia potenziata. Introduzione alla differenza tra statistica e machine learning Non sei stanco di sentire questo dibattito reiterato sui social media e all'interno della tua Università o Ufficio quasi quotidianamente. Speriamo che entro la fine di questo articolo avrete una posizione più informata su questi termini alquanto vaghi. Differenza tra statistica e machine learning, la sfida eterna Contrariamente alla credenza popolare, l'apprendimento automatico è in circolazione da diversi decenni. Inizialmente è stato evitato a causa dei suoi grandi requisiti di calcolo e dei limiti della potenza di calcolo presenti all'epoca. Tuttavia, l'apprendimento automatico ha visto una rinascita negli ultimi anni a causa della preponderanza dei dati derivanti dall'esplosione di informazioni. Quindi, se apprendimento automatico e statistica sono sinonimi l'uno dell'altro, perché non vediamo tutti i dipartimenti di statistica in ogni università chiudere o passare a un dipartimento di "apprendimento automatico"? Perché non sono la stessa cosa! Ci sono diverse vaghe affermazioni che sento spesso su questo argomento, la più comune è qualcosa del genere: “La principale differenza tra apprendimento automatico e statistica è il loro scopo. I modelli di apprendimento automatico sono progettati per effettuare le previsioni più accurate possibili. I modelli statistici sono progettati per l'inferenza sulle relazioni tra variabili. Sebbene ciò sia tecnicamente vero, non fornisce una risposta particolarmente esplicita o soddisfacente. Una delle principali differenze tra apprendimento automatico e statistica è proprio il loro scopo. Tuttavia, dire che l'apprendimento automatico riguarda previsioni accurate mentre i modelli statistici sono progettati per l'inferenza è quasi un'affermazione priva di significato a meno che tu non sia esperto di questi concetti. In primo luogo, dobbiamo capire che statistica e modelli statistici non sono la stessa cosa. La statistica è lo studio matematico dei dati. Non puoi fare statistiche se non hai dati. Un modello statistico è un modello per i dati che viene utilizzato per dedurre qualcosa sulle relazioni all'interno dei dati o per creare un modello in grado di prevedere valori futuri. Spesso questi due vanno di pari passo. Quindi ci sono in realtà due cose di cui dobbiamo discutere: in primo luogo, in che modo le statistiche sono diverse dal machine learning e, in secondo luogo, in che modo i modelli statistici sono diversi dal machine learning. Per rendere questo leggermente più esplicito, ci sono molti modelli statistici che possono fare previsioni, ma l'accuratezza predittiva non è il loro punto di forza. Allo stesso modo, i modelli di machine learning forniscono vari gradi di interpretabilità, dalla regressione con lazo altamente interpretabile alle reti neurali impenetrabili , ma generalmente sacrificano l'interpretabilità per il potere predittivo. Da una prospettiva di alto livello, questa è una buona risposta. Abbastanza buona per la maggior parte delle persone. Tuttavia, ci sono casi in cui questa spiegazione ci lascia con un malinteso sulle differenze tra apprendimento automatico e modellazione statistica. Consideriamo l'esempio della regressione lineare. Modelli statistici vs machine learning Mi sembra che la somiglianza dei metodi utilizzati nella modellazione statistica e nell'apprendimento automatico abbia indotto le persone a presumere che siano la stessa cosa. Questo è comprensibile, ma semplicemente non è vero. L'esempio più ovvio è il caso della regressione lineare, che è probabilmente la causa principale di questo malinteso. La regressione lineare è un metodo statistico, possiamo addestrare un regressore lineare e ottenere lo stesso risultato di un modello di regressione statistica con l'obiettivo di ridurre al minimo l'errore al quadrato tra i punti dati. Vediamo che in un caso facciamo qualcosa chiamato "addestrare" il modello, che implica l'utilizzo di un sottoinsieme dei nostri dati ( e anche di software e linguaggi di programmazione ), e non sappiamo quanto bene funzionerà il modello finché non "testiamo" questi dati su dati aggiuntivi che non erano presenti durante l'allenamento, chiamato test set. Lo scopo del machine learning, in questo caso, è quello di ottenere le migliori prestazioni sul set di test. Per il modello statistico, troviamo una linea che riduce al minimo l'errore quadratico medio su tutti i dati, assumendo che i dati siano un regressore lineare con l'aggiunta di rumore casuale, che è tipicamente di natura gaussiana. Non sono necessari training e test set. Per molti casi, specialmente nella ricerca (come l'esempio del sensore di seguito), lo scopo del nostro modello è caratterizzare la relazione tra i dati e la nostra variabile di risultato, non fare previsioni sui dati futuri. Chiamiamo questa procedura inferenza statistica, in contrapposizione a previsione. Tuttavia, possiamo ancora utilizzare questo modello per fare previsioni e questo potrebbe essere il tuo scopo principale, ma il modo in cui il modello viene valutato non comporterà un set di test e comporterà invece la valutazione della significatività e della robustezza dei parametri del modello. Lo scopo dell'apprendimento automatico (supervisionato) è ottenere un modello in grado di fare previsioni ripetibili. In genere non ci interessa se il modello è interpretabile, anche se personalmente consiglierei di testare sempre per garantire che le previsioni del modello abbiano senso. L'apprendimento automatico è incentrato sui risultati, è probabile che funzioni in un'azienda in cui il tuo valore è caratterizzato esclusivamente dalle tue prestazioni. Considerando che, la modellazione statistica riguarda più la ricerca di relazioni tra le variabili e il significato di tali relazioni, ma anche la previsione. Statistica vs Machine Learning : esempio di regressione lineare Penso che questo malinteso sia abbastanza ben incapsulato in questa sfida di 10 anni apparentemente spiritosa che confronta le statistiche e l'apprendimento automatico. Tuttavia, confondere questi due termini basandosi esclusivamente sul fatto che entrambi sfruttano le stesse nozioni fondamentali di probabilità è ingiustificato. Ad esempio, se affermiamo che l'apprendimento automatico è semplicemente una statistica potenziata basata su questo fatto, potremmo anche fare le seguenti affermazioni. La fisica è solo matematica potenziata. La zoologia è solo una raccolta di francobolli potenziata. L'architettura è solo una costruzione potenziata di castelli di sabbia. Queste affermazioni (soprattutto l'ultima) sono piuttosto ridicole e tutte basate su questa idea di confondere i termini che sono costruiti su idee simili (gioco di parole inteso per l'esempio di architettura). In realtà, la fisica è costruita sulla matematica, è l'applicazione della matematica per comprendere i fenomeni fisici presenti nella realtà. La fisica include anche aspetti della statistica e la forma moderna della statistica è tipicamente costruita da un framework costituito dalla teoria degli insiemi di Zermelo-Frankel combinata con la teoria della misura per produrre spazi di probabilità. Entrambi hanno molto in comune perché provengono da un'origine simile e applicano idee simili per raggiungere una conclusione logica. Allo stesso modo, l'architettura e la costruzione di castelli di sabbia probabilmente hanno molto in comune - anche se non sono un architetto quindi non posso dare una spiegazione informata - ma chiaramente non sono la stessa cosa. Prima di andare avanti, chiarirò rapidamente altri due malintesi comuni relativi all'apprendimento automatico e alle statistiche. Questi sono che l'IA è diversa dall'apprendimento automatico e che la scienza dei dati è diversa dalle statistiche. Questi sono problemi abbastanza incontrastati, quindi sarà veloce. La scienza dei dati è essenzialmente metodi computazionali e statistici applicati ai dati, che possono essere insiemi di dati piccoli o grandi. Ciò può includere anche cose come l'analisi esplorativa dei dati, in cui i dati vengono esaminati e visualizzati per aiutare lo scienziato a comprendere meglio i dati e trarne inferenze. La scienza dei dati include anche cose come la disputa e la preelaborazione dei dati, e quindi coinvolge un certo livello di informatica poiché implica la codifica, l'impostazione di connessioni e pipeline tra database, server Web, ecc. Non è necessario utilizzare un computer per fare statistiche, ma non puoi davvero fare scienza dei dati senza uno. Puoi vedere ancora una volta che, sebbene la scienza dei dati utilizzi le statistiche, chiaramente non sono la stessa cosa. Allo stesso modo, l'apprendimento automatico non è la stessa cosa dell'intelligenza artificiale. In effetti, l'apprendimento automatico è un sottoinsieme dell'IA. Questo è abbastanza ovvio poiché stiamo insegnando ("addestrando") una macchina per fare inferenze generalizzabili su alcuni tipi di dati basati su dati precedenti. L'apprendimento automatico si basa sulle statistiche Prima di discutere le differenze tra statistica e apprendimento automatico, discutiamo innanzitutto le somiglianze. Ne abbiamo già parlato in qualche modo nelle sezioni precedenti. L'apprendimento automatico si basa su un framework statistico. Questo dovrebbe essere palesemente ovvio poiché l'apprendimento automatico coinvolge i dati e i dati devono essere descritti utilizzando un quadro statistico. Tuttavia, anche la meccanica statistica, che viene espansa nella termodinamica per un gran numero di particelle, si basa su un quadro statistico. Il concetto di pressione è in realtà una statistica e anche la temperatura è una statistica. Se pensi che questo suoni ridicolo, abbastanza giusto, ma in realtà è vero. Questo è il motivo per cui non puoi descrivere la temperatura o la pressione di una molecola, non ha senso. La temperatura è la manifestazione dell'energia media prodotta dalle collisioni molecolari. Per una quantità sufficientemente grande di molecole, ha senso poter descrivere la temperatura di qualcosa come una casa o l'esterno. Ammetteresti che termodinamica e statistica sono la stessa cosa? No, la termodinamica usa le statistiche per aiutarci a capire l'interazione tra lavoro e calore sotto forma di fenomeni di trasporto. In effetti, la termodinamica si basa su molti più elementi oltre alla semplice statistica. Allo stesso modo, l'apprendimento automatico attinge a un gran numero di altri campi della matematica e dell'informatica, ad esempio: Teoria del ML da campi come matematica e statistica Algoritmi ML da campi come ottimizzazione, algebra matriciale, calcolo Implementazioni ML da concetti di informatica e ingegneria (ad es. trucchi del kernel, hashing delle funzionalità) Quando si inizia a programmare su Python, si tira fuori la libreria sklearn e si inizia a usare questi algoritmi, molti di questi concetti vengono astratti in modo che sia difficile vedere queste differenze. In questo caso, questa astrazione ha portato a una forma di ignoranza rispetto a ciò che effettivamente implica l'apprendimento automatico. Teoria dell'apprendimento statistico: le basi statistiche del Machine Learning La principale differenza tra statistica e apprendimento automatico è che la statistica si basa esclusivamente su spazi di probabilità. Puoi derivare la totalità delle statistiche dalla teoria degli insiemi, che discute come possiamo raggruppare i numeri in categorie, chiamati insiemi, e quindi imporre una misura a questo insieme per garantire che il valore sommato di tutti questi sia 1. Lo chiamiamo probabilità spazio. La statistica non fa altre ipotesi sull'universo tranne questi concetti di insiemi e misure. Questo è il motivo per cui quando specifichiamo uno spazio di probabilità in termini matematici molto rigorosi, specifichiamo 3 cose. Uno spazio di probabilità, che indichiamo in questo modo, (Ω, F, P) , è costituito da tre parti: Uno spazio campionario , Ω , che è l'insieme di tutti i possibili risultati. Un insieme di eventi , F , in cui ogni evento è un insieme contenente zero o più risultati . L'assegnazione di probabilità agli eventi, P ; cioè, una funzione dagli eventi alle probabilità. L'apprendimento automatico si basa sulla teoria dell'apprendimento statistico, che è ancora basata su questa nozione assiomatica di spazi di probabilità. Questa teoria è stata sviluppata negli anni '60 e amplia le statistiche tradizionali. Esistono diverse categorie di apprendimento automatico e, in quanto tale, mi concentrerò solo sull'apprendimento supervisionato qui poiché è il più facile da spiegare (sebbene sia ancora un po' esoterico poiché è sepolto nella matematica). La teoria dell'apprendimento statistico per l'apprendimento supervisionato ci dice che abbiamo un insieme di dati, che indichiamo come S = {(xᵢ,yᵢ)} . Questo fondamentalmente dice che abbiamo un set di dati di n punti dati, ognuno dei quali è descritto da alcuni altri valori che chiamiamo feature, che sono forniti da x, e queste caratteristiche sono mappate da una certa funzione per darci il valore y. Dice che sappiamo di avere questi dati e il nostro obiettivo è trovare la funzione che mappa i valori x ai valori y . Chiamiamo spazio delle ipotesi l'insieme di tutte le possibili funzioni che possono descrivere questa mappatura. Per trovare questa funzione dobbiamo dare all'algoritmo un modo per 'imparare' qual è il modo migliore per affrontare il problema. Questo è fornito da qualcosa chiamato funzione di perdita. Quindi, per ogni ipotesi (funzione proposta) che abbiamo, dobbiamo valutare come si comporta quella funzione osservando il valore del suo rischio atteso su tutti i dati. Il rischio atteso è essenzialmente una somma della funzione di perdita moltiplicata per la distribuzione di probabilità dei dati. Se conoscessimo la distribuzione di probabilità congiunta della mappatura, sarebbe facile trovare la funzione migliore. Tuttavia, questo in generale non è noto, e quindi la nostra scommessa migliore è indovinare la funzione migliore e quindi decidere empiricamente se la funzione di perdita è migliore o meno. Lo chiamiamo rischio empirico . Possiamo quindi confrontare diverse funzioni e cercare l'ipotesi che ci dà il rischio minimo atteso , cioè l'ipotesi che dà il valore minimo (chiamato minimo) di tutte le ipotesi sui dati. Tuttavia, l'algoritmo ha la tendenza a imbrogliare per ridurre al minimo la sua funzione di perdita sovraadattandosi ai dati. Questo è il motivo per cui dopo aver appreso una funzione basata sui dati del set di allenamento, tale funzione viene convalidata su un set di dati di prova, dati che non sono stati visualizzati nel set di allenamento. La natura di come abbiamo appena definito l'apprendimento automatico ha introdotto il problema dell'overfitting e giustificato la necessità di avere un set di formazione e test durante l'esecuzione dell'apprendimento automatico. Questa non è una caratteristica intrinseca delle statistiche perché non stiamo cercando di ridurre al minimo il nostro rischio empirico. Un algoritmo di apprendimento che sceglie la funzione che riduce al minimo il rischio empirico è chiamato minimizzazione del rischio empirico . Esempi di differenze tra statistica e Machien Learning Prendi il caso semplice della regressione lineare. In senso tradizionale, cerchiamo di ridurre al minimo l'errore tra alcuni dati per trovare una funzione che possa essere utilizzata per descrivere i dati. In questo caso, in genere utilizziamo l'errore quadratico medio. Facciamo il quadrato in modo che gli errori positivi e negativi non si annullino a vicenda. Possiamo quindi risolvere i coefficienti di regressione in una forma chiusa. Succede solo che se prendiamo la nostra funzione di perdita come l'errore quadratico medio ed eseguiamo la minimizzazione empirica del rischio come sposato dalla teoria dell'apprendimento statistico, finiamo con lo stesso risultato dell'analisi di regressione lineare tradizionale. Questo è solo perché questi due casi sono equivalenti, allo stesso modo in cui eseguire la massima verosimiglianza su questi stessi dati ti darà anche lo stesso risultato. La massima verosimiglianza ha un modo diverso di raggiungere questo stesso obiettivo, ma nessuno discuterà e dirà che la massima verosimiglianza è la stessa della regressione lineare. Il caso più semplice chiaramente non aiuta a differenziare questi metodi. Un altro punto importante da sottolineare è che negli approcci statistici tradizionali non esiste il concetto di set di training e test, ma utilizziamo le metriche per aiutarci a esaminare le prestazioni del nostro modello. Quindi la procedura di valutazione è diversa ma entrambi i metodi sono in grado di darci risultati statisticamente robusti. Un ulteriore punto è che l'approccio statistico tradizionale qui ci ha fornito la soluzione ottimale perché la soluzione aveva una forma chiusa. Non ha testato altre ipotesi e convergeva verso una soluzione. Considerando che il metodo di apprendimento automatico ha provato una serie di modelli diversi ed è convergente all'ipotesi finale, che si è allineata con il risultato dell'algoritmo di regressione. Se avessimo usato una funzione di perdita diversa, i risultati non sarebbero convergenti. Ad esempio, se avessimo utilizzato la perdita di cerniera (che non è differenziabile utilizzando la discesa del gradiente standard, quindi sarebbero necessarie altre tecniche come la discesa del gradiente prossimale), i risultati non sarebbero gli stessi. Un ultimo confronto può essere effettuato considerando la distorsione del modello. Si potrebbe chiedere all'algoritmo di apprendimento automatico di testare modelli lineari, nonché modelli polinomiali, modelli esponenziali e così via, per vedere se queste ipotesi si adattano meglio ai dati data la nostra funzione di perdita a priori . Questo è come aumentare lo spazio delle ipotesi rilevanti. Nel senso statistico tradizionale, selezioniamo un modello e possiamo valutarne l'accuratezza, ma non possiamo farlo selezionare automaticamente il modello migliore tra 100 modelli diversi. Ovviamente, c'è sempre qualche distorsione nel modello che deriva dalla scelta iniziale dell'algoritmo. Ciò è necessario poiché trovare una funzione arbitraria ottimale per il set di dati è un problema NP-difficile. E' Meglio la statistica o il Machine Learning? Questa è in realtà una domanda stupida. In termini di statistiche e apprendimento automatico, l'apprendimento automatico non esisterebbe senza le statistiche, ma l'apprendimento automatico è piuttosto utile nell'era moderna a causa dell'abbondanza di dati a cui l'umanità ha accesso dall'esplosione delle informazioni. Confrontare l'apprendimento automatico e i modelli statistici è un po' più difficile. Quello che usi dipende in gran parte dal tuo scopo. Conclusione differenza tra statistica e Machine Learning Se desideri semplicemente creare un algoritmo in grado di prevedere i prezzi delle case con un'elevata precisione o utilizzare i dati per determinare se è probabile che qualcuno contragga determinati tipi di malattie, l'apprendimento automatico è probabilmente l'approccio migliore. Se stai cercando di dimostrare una relazione tra variabili o di fare inferenze dai dati, un modello statistico è probabilmente l'approccio migliore. Se non hai un solido background in statistica, puoi comunque studiare l'apprendimento automatico e farne uso, l'astrazione offerta dalle librerie di apprendimento automatico rende abbastanza facile usarle come non esperto, ma hai comunque bisogno di una certa comprensione di le idee statistiche sottostanti al fine di evitare che i modelli si adattino eccessivamente e forniscano inferenze.
- Modelli di Machine Learning per Principianti con codice python
A volte la parte più difficile dell'apprendimento automatico è capire da dove cominciare. ML ha fatto scalpore negli ultimi anni e le opzioni su quali modelli utilizzare sono in continua crescita. Molte volte non esiste un modello "giusto" per il problema che stai cercando di risolvere, quindi può essere utile avere familiarità con diverse opzioni. Con così tanti fattori come dimensioni, qualità e tipo di dati, è importante avere familiarità con i diversi modelli, in modo da conoscere l'algoritmo che si adatta meglio alle tue esigenze. Cos'è un modello di Machine Learning? Un modello di Machine Learning è l'espressione o "formula"di un algoritmo che analizza montagne di dati per trovare pattern o fare previsioni. Alimentati dai dati, i modelli di machine learning (ML) sono i motori matematici dell'intelligenza artificiale. Ad esempio, un modello ML per la visione artificiale potrebbe essere in grado di identificare automobili e pedoni in un video in tempo reale. Uno per l'elaborazione del linguaggio naturale potrebbe tradurre parole e frasi. Sotto il cofano, un modello di Machine Learning è una rappresentazione matematica degli oggetti e delle loro relazioni reciproche. Gli oggetti possono essere qualsiasi cosa, dai "Mi piace" su un post di social network alle molecole in un esperimento di laboratorio. Modelli Machine Learning per ogni scopo Senza vincoli sugli oggetti che possono diventare funzionalità in un modello ML, non c'è limite agli usi dell'IA. Le combinazioni sono infinite. I data scientist hanno creato intere famiglie di modelli di apprendimento automatico per usi diversi e altri sono in lavorazione. Ecco cinque algoritmi generali che aiutano a fornire una comprensione di base del ML e aiutano a trovare il punto di partenza perfetto. Modelli di Machine Learning per Principianti 1- Modello di regressione logistica In termini di analisi di regressione, i modelli di regressione logistica stimano i parametri di un modello logistico. I modelli più comuni sono strutturati per risultati binari (sì/no). I modelli di regressione logistica vengono utilizzati per considerare la probabilità che un evento avvenga con log odds combinati con 1+ variabili indipendenti. I modelli logistici sono utili per problemi di classificazione in cui si sta cercando di determinare l'adattamento migliore. Esempio di Modello di Machine Learning di Regressione Logistica con Python from sklearn.datasets import load_iris from sklearn.linear_model import LogisticRegression X, y = load_iris(return_X_y=True) clf = LogisticRegression(random_state=0).fit(X, y) clf.predict(X[:2, :]) clf.predict_proba(X[:2, :]) clf.score(X, y) Modelli di Machine Learning per Principianti 2- Modello dell'albero delle decisioni I modelli Decision Tree sono un sottoinsieme dell'apprendimento automatico supervisionato. Un modello di classificazione legge l'input e genera una classificazione che raccoglie i dati in una categoria. Un esempio di classificazione binaria è la creazione di un modello che decide se un'e-mail viene etichettata o meno come spam. I modelli dell'albero decisionale utilizzano una sequenza di query o test che si adattano man mano che i dati vengono analizzati, consentendo al modello di evolversi e di trarre conclusioni piuttosto significative. Gli alberi decisionali sono uno dei modi migliori per utilizzare la modellazione per l'esplorazione e l'apprendimento dei dati e migliorano l'analisi con una facile interpretazione, precisione ed efficienza. Esempio di Modello di Machine Learning dell'albero delle decisioni con Python from sklearn.datasets import load_iris from sklearn import treeiris = load_iris() X, y = iris.data, iris.target clf = tree.DecisionTreeClassifier() clf = clf.fit(X, y) tree.plot_tree(clf) Modelli di Machine Learning per Principianti 3 - Modello Naive Bayes Gli algoritmi di Naive Bayes (abbreviazione di NB) sono modelli bayesiani che utilizzano i nodi per ciascuna colonna o funzionalità nei dati. La ragione dell'ingenuità è che ignora qualsiasi precedente distribuzione parametrica e fa un'ipotesi iniziale di indipendenza di tutte le caratteristiche. Esempio di Modello di Machine Learning di Naive Bayes con Python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB X, y = load_iris(return_X_y=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0) gnb = GaussianNB() y_pred = gnb.fit(X_train, y_train).predict(X_test) print("Number of mislabeled points out of a total %d points : %d"% (X_test.shape[0], (y_test != y_pred).sum())) Modelli di Machine Learning per Principianti 4- Modello KNN Il modello KNN è un modello supervisionato e non parametrico che utilizza la prossimità per classificare e prevedere informazioni dettagliate sul raggruppamento di un singolo punto dati. I modelli KNN si basano sul presupposto iniziale che punti dati simili saranno posizionati in modo simile ed estrapola questo concetto nell'analisi di classificazione. Modelli di Machine Learning per Principianti 5 - Modello SVM Nell'apprendimento automatico, le macchine a vettori di supporto sono modelli di apprendimento supervisionato con algoritmi di apprendimento associati che analizzano i dati per la classificazione e l'analisi di regressione. Nel complesso, i modelli SVM sono spesso significativamente accurati e utilizzano meno potenza di calcolo rispetto ad altri modelli. Trovi il codice ed esempi qui Conclusione sui Modelli di Machine Learning per Principianti Ci sono molti altri modelli che meritano riconoscimento e consapevolezza. Tuttavia, questi sono un ottimo inizio se stai cercando di approfondire la tua comprensione dell'apprendimento automatico. Lascia un commento condividendo il tuo modello preferito e grazie per aver letto l'articolo!
- Tecniche di Visualizzazione Dati avanzate che tutti i data scientist dovrebbero conoscere
Sei sicuro di conoscere tutti i tipi di grafici ed il loro utilizzo ? Secondo noi con questa guida sulle tecniche avanzate di visualizzazione dati espanderai di molto il tuo bagaglio di strumenti per l'analisi dei dati descrittiva o predittiva. Mentre tutti glorificano i modelli di apprendimento automatico e le intricate reti neurali, molti dimenticano l'immenso valore che si può ottenere dalla creazione di una potente visualizzazione dei dati. E non sto parlando di visualizzazioni di base come grafici a linee e grafici a barre, ma di tecniche di Visualizzazione Dati! Che cos'è la visualizzazione dei dati? La visualizzazione dei dati è la rappresentazione grafica dei dati per aiutare le persone a comprendere il contesto e il significato. La visualizzazione interattiva dei dati consente alle aziende di approfondire per esplorare i dettagli, identificare modelli e valori anomali e modificare i dati elaborati e/o esclusi. Fortunatamente o sfortunatamente esistono tantissimi tipi di tecniche per visualizzare i dati, ti cito quelle che conosco io : Tipi di visualizzazioni di dati generali: Grafici Tabelle Mappe Infografica Dashboard Report Tipi di visualizzazione dei dati specifici: Grafico ad area Grafico a bolle Grafico a candele Grafico a colonne Grafico di combinazione Grafico a ciambella Grafico a imbuto Diagramma di Gantt Grafico del calibro Carta geografica Istogramma Grafico Kagi Grafico a linee Grafico logaritmico Grafico Marimekko Diagramma di Pareto Grafico a torta Grafico a piramide Grafico radar Grafico a dispersione Grafico a spline Grafico in pila Grafico ad albero Grafico a cascata e molti altri In questo articolo, condividerò con te cinque potenti tecniche di visualizzazioni di dati che sono estremamente potenti e ben accolte dai dirigenti. Detto questo, iniziamo! Tecniche di Visualizzazione Dati avanzate : 1. Grafico di coorte Che cos'è un grafico di coorte? Un grafico di coorte è uno strumento che consente di misurare le prestazioni dei diversi gruppi di utenti nel tempo. Mi riferirò in particolare ai grafici di coorte basati sul tempo, che raggruppano gli utenti per intervalli di tempo. Di seguito è riportato un esempio di grafico di coorte: Terminologia ( Da Wikipedia ) : Uno studio di coorte (talvolta erroneamente chiamato studio di pannello mal traducendo l'inglese panel study) è una forma di studio longitudinale (un tipo di studio osservazionale) usato nella medicina, nelle scienze sociali, scienze attuariali , ecologia e molte altri campi.. Una coorte è un gruppo di persone che condividono una caratteristica o un'esperienza in comune all'interno di un periodo definito (per esempio dalla nascita, o durante l'esposizione ad un farmaco o ad un inquinante, o in seguito alla somministrazione di un vaccino, o mentre vengono sottoposti a determinate procedure mediche). Perciò un gruppo di persone nate in un giorno o periodo particolare, per esempio nel 1948, formano una coorte di nascita. Il gruppo di paragone può essere la popolazione generale dalla quale la coorte è tratta, oppure può essere un'altra coorte di persone ritenute avere minima o nulla esposizione alla sostanza sotto investigazione, ma per il resto simile. Alternativamente, dei sottogruppi nella coorte possono essere paragonati fra di loro. Leggere un grafico di coorte è semplice: Ogni riga rappresenta una coorte . In questo caso, la coorte di utenti si basa sul mese di registrazione degli utenti. Ad esempio, la prima riga rappresenta gli utenti che si sono registrati a dicembre 2009 e la seconda riga rappresenta gli utenti che si sono registrati a gennaio 2010. Ogni colonna rappresenta un periodo. In questo caso, ogni periodo rappresenta un numero di mese. Ad esempio, la prima colonna rappresenta il primo mese di ogni coorte (mese 0) e la seconda colonna rappresenta il secondo mese di ogni coorte (mese 1). Ogni cella rappresenta il valore di interesse . In questo particolare grafico di coorte, stiamo confrontando la percentuale di entrate in ciascun periodo per ciascuna coorte di entrate del mese 0. Ad esempio, le entrate del secondo mese della prima coorte erano il 58% di quelle del primo mese e le entrate del terzo mese della prima coorte erano il 44% di quelle del primo mese. Perché i grafici di coorte sono così utili I grafici di coorte sono estremamente utili quando si valutano metriche che richiedono tempo per maturare . Ad esempio, se volessi guardare la percentuale di utenti che hanno sfornato nel 2021 rispetto al 2022, non sarebbe un confronto equo perché gli utenti nel 2021 hanno avuto più tempo per sfornare rispetto agli utenti nel 2022. Tuttavia, utilizzando un grafico di coorte, puoi confrontare lo stesso periodo per diverse coorti. Riportando il mio esempio, se dovessimo confrontare la prima coorte (2009–12) e la penultima coorte (2010–11), possiamo vedere che la percentuale di entrate è diminuita significativamente dai periodi da 0 a 1. Per la prima coorte la percentuale era del 58%, ma in quest'ultima coorte la percentuale è scesa all'8%. Ciò che questo ci dice è che i nuovi clienti spendono molto meno dopo il mese iniziale di acquisto. Possibili ragioni di ciò sono perché ci sono meno clienti abituali nelle coorti più recenti o la qualità del prodotto è diminuita nel tempo. Un altro motivo per cui i grafici di coorte sono così potenti è che sono di natura olistica . Orizzontalmente, puoi comprendere l'intero ciclo di vita dei tuoi utenti e in quale punto del ciclo di vita il comportamento degli utenti cambia drasticamente. In verticale, puoi confrontare e valutare le prestazioni delle coorti di utenti più recenti con quelle di utenti più anziani. Applicazioni dei grafici di coorte Le applicazioni più comuni dei grafici di coorte sono: Valutare l'abbandono nel tempo . Valutare le entrate o la redditività. Valutare le conversioni della canalizzazione. Tecniche di Visualizzazione Dati avanzate : 2. Matrice di correlazione Ma prima, cos'è la correlazione? La correlazione è una misura statistica da -1 a 1 che ci dice quanto sia forte la relazione lineare tra due variabili. Se la correlazione è -1, allora c'è una perfetta correlazione negativa tra le due variabili, il che significa che un aumento di una variabile predice in modo affidabile una diminuzione dell'altra. Se la correlazione è 1, allora c'è una perfetta correlazione positiva tra le due variabili, il che significa che un aumento di una variabile predice in modo affidabile un aumento dell'altra. Se la correlazione è 0, allora non c'è correlazione tra le due variabili. Di seguito sono riportati alcuni esempi di diversi tipi di modelli di correlazione: Che cos'è una matrice di correlazione Una matrice di correlazione è una tabella n per n che mostra i coefficienti di correlazione tra ciascuna variabile di riga e variabile di colonna. Usando il grafico sottostante come esempio, possiamo vedere che se guardiamo la prima riga (acidità fissa) e la seconda colonna (acidità volatile), il coefficiente di correlazione è -0,26. Quando è utile una matrice di correlazione? Una matrice di correlazione è utile quando si desidera ottenere una rapida comprensione delle relazioni lineari tra tutte le variabili. Ciò è particolarmente utile quando si creano modelli in diversi casi: Quando si creano modelli di regressione, è possibile utilizzare una matrice di correlazione per identificare la collinearità tra le variabili. Quando si creano modelli di machine learning, è possibile utilizzare una matrice di correlazione per identificare potenziali funzionalità avanzate che è possibile utilizzare per il modello. Quando si esegue l'importanza delle funzionalità, è possibile utilizzare una matrice di correlazione per rimuovere le variabili correlate. Tecniche di Visualizzazione Dati avanzate : 3. Displot Che cos'è un distplot e perché sono utili? Un distplot, abbreviazione di plot di distribuzione, è una combinazione di più rappresentazioni statistiche di dati numerici per rappresentare la variazione nella distribuzione dei dati. Un distplot può essere una combinazione di diversi grafici come istogrammi, stimatori di densità del kernel (KDE) e grafici del tappeto. L'obiettivo principale di un distplot è comprendere e confrontare le distribuzioni dei dati per comprendere meglio le misure delle tendenze centrali, l'asimmetria dei dati e la diffusione dei dati. Tecniche di Visualizzazione Dati avanzate : 4. Grafici a cascata Che cos'è un grafico a cascata e perché sono utili? Un grafico a cascata è un tipo unico di grafico a barre che mostra la variazione netta di un valore attraverso una serie di valori positivi e negativi. Invece di mostrare solo il valore iniziale e finale di una metrica, un grafico a cascata mostra come una metrica è passata da un valore iniziale a un valore finale. L'obiettivo principale di un grafico a cascata è raccontare una storia di come una particolare metrica è cresciuta o diminuita attraverso una serie di sottocomponenti. È particolarmente utile quando si scompongono le metriche di redditività: ad esempio, è possibile esaminare tutte le fonti di reddito per una determinata azienda, abbattere tutti i costi e concludere con il profitto dell'azienda (comunemente noto come conto economico) . Di seguito è riportato un esempio di grafico a cascata semplificato: Tecniche di Visualizzazione Dati avanzate : 5. Grafici a imbuto [ FUNNEL ] Che cos'è un diagramma a imbuto e perché sono utili? I grafici a imbuto sono un tipo di visualizzazione utilizzato per mostrare i valori nelle fasi di un processo. Ad esempio, puoi utilizzare un grafico a imbuto come quello di seguito per mostrare quanti clienti arrivano a ciascuna fase, dalla visita del proprio sito Web alla ricezione di una fattura. I grafici a imbuto sono utili per capire in che modo le unità efficienti scorrono da una fase all'altra. Con l'obiettivo di avere il maggior numero di unità dall'inizio alla fine, è importante capire dove ci sono cali significativi in modo da poter identificare le aree per migliorare la canalizzazione. Nell'esempio sopra, solo la metà degli utenti dei potenziali clienti ha richiesto un prezzo. Comprendendo questo, puoi quindi indagare sul motivo per cui il drop off è negativo. È perché non è chiaro dove richiedere il prezzo? È perché questi potenziali clienti sono ancora privi di informazioni e vogliono parlare con qualcuno prima di richiedere il prezzo? Questi sono alcuni esempi di come un grafico a imbuto o funnel può essere utilizzato in un ambiente aziendale. Vuoi mettere in pratica quello che hai letto ? Scarica Progetti già pronti Lavora con il nostro editor online senza dover installare librerie Usa i nostri set di Dati Oppure segui i tutorial correlati : Tutorial di Regressione Logistica per l'apprendimento automatico Riconoscimento facciale con Python, in meno di 25 righe di codice Tutorial di Regressione Logistica per l'apprendimento automatico Scikit Learn e Python Tutorial Per Creare Modelli di Intelligenza Artificiale Tutorial Pratico Tensorflow , TensorBoard e Python Feature Engineering e Feature Selection per Principianti e non Spiegazione della più semplice rete neurale per principianti PyScript, come usare Python nel browser! Il tuo Primo Programma di Machine Learning con Python e Google Colab Il tuo primo Programma di Deep Learning in Python con Keras Step-By-Step Come costruire modelli predittivi sanitari utilizzando PyHealth? Esempio pratico Rilevamento Di Veicoli In Tempo Reale Come implementare l'algoritmo Perceptron da zero in Python Implementare le reti neurali ricorrenti (RNN) con Python e Keras Deep learnign e python : Object Recognition e Object Predict esempio Come salvare e caricare il tuo modello di deep learning
- Come creare un modello ARIMA in Python per le previsioni di Trading
Fra le tecniche di previsione una di quelle piu’ conosciute è quella dell’analisi delle serie temporali. All’interno di esse prenderemo il modello ARIMA. ARIMA presuppone che i dati da processare abbiano la caratteristica di Stazionarietà. E’ un modello previsionale che si basa sul concetto di regressione, un metodo di approssimazione relativamente intuitive e di facile interpretazione. ARIMA permette inoltre di avere una misura dell’errore previsionale, elemento essenziale per una trattazione di tipo quantitativo. Per la trattazione dell’argomento si farà uso del software di programmazione Python in ambiente Jupiter Notebook. Prima di iniziare a leggere questo articolo su come creare un modello ARIMA in Python per le previsioni di Trading ti consigliamo di leggere questo articolo di introduzione : Machine Learning per il trading Trading basato su Serie Temporali (Time Series) Alla base delle Serie Temporali c'è il concetto per cui, sotto certe condizioni (Stazionarietà) il futuro comportamento di un certo fenomeno é funzione del comportamento che ne ha caratterizzato il passato. L'analisi delle serie temporali è usata per determinare un buon modello che può essere usato per prevedere le metriche del business come le vendite, il fatturato, e ...... come vedremo del mercato azionario. La stazionarietà è piuttosto intuitiva ed è una proprietà invariante che significa che le caratteristiche statistiche della serie temporale non cambiano nel tempo. In parole povere, una serie temporale è stazionaria se il suo comportamento non cambia nel tempo. Una tendenza o un ciclo non sono stazionari. Così il compito di previsione diventa, in sostanza, un'attenta analisi del passato più un presupposto che gli stessi modelli e relazioni si manterranno nel futuro. La stazionarietà di una serie e determinate dall'osservazione grafica e nei casi in cui essa risulti non immediate possiamo utilizzare delle tecniche per testarne questa caratteristica (Dickey-Fuller test). Quando le nostre Serie Temporali non sono stazionarie possiamo comunque operare delle trasformazioni sulla stessa serie di dati in modo da renderli stazionari (guardare la trasformata di Fourier per gli intenditori). La programmazione di un sistema previsionale in Python per le previsioni di Trading Ricordiamo I passi per la programmazione di un codice Machine Learning: Importazione dati Elaborazione e organizzazione dati Definizione del modello da utilizzare Addestramento del modello Valutazione dell'affidabilità del modello Previsione Utilizzando Python, durante il processo avremmo bisogno di importare le librerie necessarie per le operazioni matematiche, la manipolazione struttura dei dati, la visualizzazione grafica e a seconda del modello che vogliamo implementare le librerie per gli algoritmi di regressione, di reti neurali, NLP etc… Le librerie piu'diffuse e adatte al nostro scopo possono essere importate digitando le seguenti istruzioni : #importiamo le librerie import numpy as np import pandas as pd import matplotlib.pyplot as plt from plotly.graph_objs import graph_objs %matplotlib inline from matplotlib.pylab import rcParams rcParams['figure.figsize'] = 10,6 Ora passiamo all'importazione dei dati su cui vogliamo fare le nostre previsioni. Per questo ho scelto di analizzare I valori di chiusura giornalieri del Volatility Index. Il Volatility Index è più comunemente conosciuto con il suo simbolo di ticker ed è spesso indicato semplicemente come "il VIX". È stato creato dal Chicago Board Options Exchange (CBOE) ed è mantenuto da Cboe Global Markets. Il Cboe Volatility Index (VIX) è un indice in tempo reale che rappresenta le aspettative del mercato per la forza relativa delle variazioni di prezzo a breve termine dell'indice S&P 500 (SPX). La scelta di prevedere l'andamento del VIX è dettata dal fatto che il VIX rispetto alle azioni o agli indici azionari non ha una tendenza specifica ma ha, nella sua natura intrinseca di non stabilità, un comportamento più stazionario. L'importazione dei dati può essere fatta scaricando un'altra libreria che permette l'estrapolazione dei dati dal sito web yahoo finance e richiamare l'istruzione per poterli importare nel nostro ambiente di programmazione. Assegneremo la serie di dati ad una variabile che chiameremo “data” pip install yfinance data = yf.download(tickers='^VIX', period='1y', interval='1d') A questo punto potremmo avere la visualizzazione dei dati in forma tabellare o in forma grafica (F1 e F2) Dopo alcune semplici operazioni sul set di dati a disposizioni in modo da avere solamente solo la Colonna “Date” e “Close” con cui l'algoritmo ARIMA può lavorare. Come creare un modello ARIMA in Python per le previsioni di Trading ARIMA, abbreviazione di 'Auto Regressive Integrated Moving Average' è in realtà una classe di modelli che elabora previsioni di una data serie temporale sulla base dei suoi valori passati. Qualsiasi serie temporale a carattere "Stazionario" può essere processata con modelli ARIMA. Un modello ARIMA è caratterizzato da 3 termini: p, d, q dove: p è l'ordine del termine AR q è l'ordine del termine MA d è il numero di differenziazioni necessarie per rendere stazionaria la serie temporale. Salteremo ulteriori approfondimenti sull' ARIMA per evitare di riportare una lunga trattazione ma invitiamo gli interessati ad approfondire l'argomento per una migliore consapevolezza. Per Implementare ARIMA ancora abbiamo bisogno di librerie specifiche per le sue operazione che andiamo a richiamare con le seguenti linee di codice: #Importiamo le librerie necessarie from statsmodels.tsa.stattools import acf, pacf from statsmodels.tsa.arima_model import ARIMA # Media Mobile a 12 Giorni rolling_mean = timeseries.rolling(window=12).mean() # Derovazione standard rolling_std = timeseries.rolling(window=12).std() # Creiamo il nostro grafico con la Timeserie, la Media e la Derivazione orig = plt.plot(timeseries, color='blue', label='Original') mean = plt.plot(rolling_mean, color='red', label='Rolling Mean') std = plt.plot(rolling_std, color='black', label='Rolling Std') #aggiunfiamo delle info al grafico plt.legend(loc='best') plt.title('Rolling Mean & Standard Deviation') #Mostriamo il grafico plt.show() A questo punto implementiamo poche righe di codice che ci permetteranno di visualizzare l'andamento della media mobile a 12 giorni del VIX e l'andamento della sua deviazione standard (F3). Con il seguente blocco otteniamo I grafici ACF (Autocorrelation Function) e PCF (Partial Autocorrelation Function) (F4). def plot_acf_dcf(): # ACF and PACF plots lag_acf = acf(dataset_log_first_order_diff, nlags=20) lag_pacf = pacf(dataset_log_first_order_diff, nlags=20, method=’ols’) # Plot ACF plt.subplot(121) plt.plot(lag_acf) plt.axhline(y=0, linestyle=’–‘, color=’gray’) plt.axhline(y=-1.96/np.sqrt(len(dataset_log_first_ order_diff)), linestyle=’–‘, color=’gray’) plt.axhline(y=1.96/np.sqrt(len(dataset_log_first_ order_diff)), linestyle=’–‘, color=’gray’) plt.title(‘ACF’) # Plot PACF plt.subplot(122) plt.plot(lag_pacf) plt.axhline(y=0, linestyle=’–‘, color=’gray’) plt.axhline(y=-1.96/np.sqrt(len(dataset_log_first_ order_diff)),linestyle=’–‘, color=’gray’) plt.axhline(y=1.96/np.sqrt(len(dataset_log_first_ order_diff)), linestyle=’–‘, color=’gray’) plt.title(‘PACF’) plt.tight_layout() plt.show() Questa informazione ci da un indicazione della correlazione di ogni riga di dato (Colonna “Date” e Colonna “Close”) con le righe precedenti. I valori ACF e PCF che incrociano il livello 0 del grafico determinano rispettivamente I parametri p e q, necessari al modello ARIMA. A questo punto lanciamo l'algoritmo ARIMA facendo eseguire il codice con p=1, q=1 e d=1 def model_ARIMA(indexed_data_log_scale, dataset_log_first_order_diff): #ARIMA Model with p,d,q=1 model = ARIMA(indexed_data_log_scale, order=(1, 1, 1)) results_ARIMA = model.fit(disp=-1) plt.plot(dataset_log_first_order_diff) plt.plot(results_ARIMA.fittedvalues, color='red') plt.title('RSS: %.4f'% sum((results_ARIMA.fittedvaluesdataset_log_first_order_diff['Close'])**2)) plt.show() return results_ARIMA All'interno di queste righe di codice è possibile notare la citazione del parametro , RSS (Residual Sum of Squares)che misura l'errore della previsione. Come abbiamo già affermato, parte integrante di una previsione quantitative eè la misurazione del suo errore. Con l'utilizzo del Dickey-Fuller test verifichiamo il carattere stazionario della serie temporale del VIX. Il Dickey-Fuller test è disponibile nella libreria che importiamo così: from statsmodels.tsa.stattools import adfuller Lanciamo adesso la computazione con il blocco : print ('Result of Dickey=Fuller Test') dftest = adfuller(timeseries['Close'], autolag='AIC') dfoutput = pd.Series(dftest[0:4], index=['Test Statistic', 'p-value', '#Lags Used', '#Observations Used']) for key, value in dftest[4].items(): dfoutput['Critical Value (%s)'%key] = value print (dfoutput) che darà l'output in F5. Avendo constatato il P Value essere <0,05 non abbiamo la necessità di trasformare la serie di dati per migliorarne la stazionarietà e siamo pronti a lanciare il codice che ci permette di avere la previsione dei prossimi 30 giorni (da notare il parametron 395 = 365 + 30) che vogliamo. results_ARIMA = model_ARIMA(indexed_data_log_scale,dataset_log_first_order_diff) results_ARIMA.plot_predict(1,395) plt.show() in F6 abbiamo l'output grafico della previsione mentre il valore numerico del VIX per ogni giorno di previsione ci viene restituito dalle seguenti istruzioni : futureforecast2 = results_ARIMA.forecast(steps=30) new= np.exp(futureforecast2[0]) print (new) che vediamo in F7. Conslusioni su come creare un modello ARIMA in Python per le previsioni di Trading Con quanto illustrato non si pretende di dare al lettore uno strumento a support delle sue decisioni di investimento. L'utilizzo di questi strumenti per trading reale richiede una molto più profonda conoscenza dell'argomento. Ci limitiamo in questo breve articolo ad illustrare un punto di partenza per approcciare l'intelligenza artificiale e l'applicazione di tecniche di machine learning. Per chi fosse interessato ad ottenere il codice completo e strutturato per un plug and play in ambiente Jupiter Notebook, richiedetelo pure all'autore all'indirizzo email nicola.matarese73@gmail.com Nei prossimi articoli illustreremo altri algoritmi previsionali che confronteremo di volta in volta con I precedenti. Nicola Matarese classe 1973, ha conseguito una laurea magistrale in ingegneria meccanica ed ha ricoperto ruoli manageriali all’interno di realtà industriali in ambito aerospazio e difesa. E’ appassionato di trading e opera sui mercati dal 2001. Da qualche anno lavora a sistemi di trading supportati da teorie sui Big Data e Intelligenza Artificiale. Collegati o manda un messaggio a Nicola Matarese su LINKEDIN
- Sentiment Analysis con Python la guida completa
Contribuiamo a semplificare l'analisi del sentiment usando Python in questo tutorial. Imparerai come costruire il tuo classificatore di analisi del sentimento usando Python e comprenderai le basi della NLP (elaborazione del linguaggio naturale). Indice articolo sulla Sentiment Analysis con Python: Cos'è la Sentiment Analysis Formulare la dichiarazione del problema della Sentiment Analysis Classificazione Naive Bayes per la Sentiment Analysis Un semplice classificatore di sentimenti in Python Perché la Sentiment Analysis è così importante? Introduzione alla Sentiment Analysis con Python La promessa dell'apprendimento automatico ha mostrato molti risultati sorprendenti in un'ampia varietà di campi. L'elaborazione del linguaggio naturale non fa eccezione, ed è uno di quei campi in cui l'apprendimento automatico è stato in grado di mostrare l'intelligenza artificiale generale (non del tutto ma almeno in parte) ottenendo risultati brillanti per compiti davvero complicati. Ora, la NLP (elaborazione del linguaggio naturale) non è un campo nuovo e nemmeno l'apprendimento automatico. Ma la fusione di entrambi i campi è abbastanza contemporanea e promette solo di fare progressi. Questa è una di quelle applicazioni ibride che tutti (con uno smartphone economico) incontrano quotidianamente. Ad esempio, prendi "suggerimento di parole da tastiera" nell'account o completamenti automatici intelligenti; questi sono tutti i sottoprodotti della fusione di NLP e Machine Learning e, in modo del tutto naturale, sono diventati le parti inseparabili della nostra vita. La Sentiment Analysis è un argomento vitale nel campo della NLP. È diventato facilmente uno degli argomenti più caldi del settore a causa della sua rilevanza e del numero di problemi aziendali che sta risolvendo ed è stato in grado di rispondere. In questo tutorial tratterai questo argomento non così semplice in modo semplice . Analizzerai tutta la piccola matematica che c'è dietro e la studierai. Alla fine di questo tutorial creerai anche un semplice classificatore di sentimenti. Nello specifico ti occuperai di: Comprendere la Sentiment Analysis dal punto di vista di un professionista Formulare la dichiarazione del problema della Sentiment Analysis Classificazione Naive Bayes per la Sentiment Analysis Un caso di studio in Python della Sentiment Analysis In che modo la Sentiment Analysis sta influenzando diversi ambiti aziendali Ulteriori letture sull'argomento Iniziamo. Cos'è la Sentiment Analysis : In sostanza, la Sentiment Analysis o la classificazione del sentimento rientrano nell'ampia categoria delle attività di classificazione del testo in cui ti viene fornita una frase o un elenco di frasi e il tuo classificatore dovrebbe dire se il sentimento dietro è positivo, negativo o neutro. A volte, il terzo attributo non viene utilizzato per mantenerlo un problema di classificazione binaria. Nelle attività recenti vengono presi in considerazione anche sentimenti come "un po' positivi" e "un po' negativi". Capiamo ora con un esempio. Considera le seguenti frasi: "Titanic è un grande film" "Titanic non è un gran film" "Titanic è un film" Le frasi corrispondono a recensioni di cortometraggi e ognuna di esse trasmette sentimenti diversi. Ad esempio, la prima frase denota un sentimento positivo sul film Titanic mentre la seconda tratta il film come non eccezionale (sentimento negativo). Dai un'occhiata al terzo. Non c'è una parola del genere in quella frase che possa dirti qualcosa riguardo al sentimento trasmesso da essa. Quindi, questo è un esempio di sentimento neutro. Ora, da un punto di vista rigoroso di apprendimento automatico, questo compito non è altro che un compito di apprendimento supervisionato . Fornirai un gruppo di frasi (con le etichette dei rispettivi sentimenti) al modello di apprendimento automatico e testerai il modello su frasi senza etichetta. Per poter costruire un modello di classificazione del sentimento, hai bisogno di qualcosa in più. Procediamo. Formulare un problema di Sentiment Analysis Prima di comprendere la definizione del problema di un'attività di classificazione dei sentimenti, è necessario avere un'idea chiara del problema generale di classificazione del testo. Definiamo formalmente il problema di un compito generale di classificazione del testo. Input : - Un documento d - Un insieme fisso di classi C = {c 1 ,c 2 ,..,c n } Output : una classe prevista c appartenente all'insieme C Il termine del documento qui è soggettivo. Per documento si intende tweet, frasi, parti di articoli di notizie, interi articoli di notizie, un articolo completo, un manuale di prodotto, una storia, ecc. La ragione alla base di questa terminologia è la parola che è un'entità atomica e piccola in questo contesto. Quindi, per denotare grandi sequenze di parole, questo termine documento è usato in generale. I tweet indicano un documento più breve mentre un articolo significa un documento più grande. Quindi, un insieme di formazione di n documenti etichettati è simile a: (d 1 ,c 1 ), (d 2 ,c 2 ),...,(d n ,c n ) e l'output finale è un classificatore appreso. Stai andando bene! Ma una domanda che devi farti a questo punto è dove sono le caratteristiche (variabili) dei documenti? Domanda genuina! Ci arriverai un po' più tardi. Ora, andiamo avanti con la formulazione del problema e costruiamo lentamente l'intuizione dietro la classificazione dei sentimenti. Un punto cruciale che devi tenere a mente mentre lavori nell'analisi del sentimento è che non tutte le parole in una frase trasmettono il sentimento della frase. Parole come "Io", "Sono", "Ho", ecc. non contribuiscono a trasmettere alcun tipo di sentimento e quindi non sono relative in un contesto di classificazione dei sentimenti. Considera il problema della selezione delle funzioni qui. Nella selezione delle caratteristiche, provi a capire le caratteristiche più rilevanti che si riferiscono maggiormente all'etichetta della classe . La stessa idea vale anche qui. Pertanto, solo una manciata di parole in una frase prendono parte a questo e identificarle ed estrarle dalle frasi si rivelano compiti impegnativi. Ma non preoccuparti, ci arriverai. Considera la seguente recensione del film per capirlo meglio: " Adoro questo film! È dolce, ma con umorismo satirico. I dialoghi sono fantastici e le scene di avventura sono divertenti. Riesce a essere romantico e stravagante mentre ride delle convenzioni del genere delle fiabe. Lo consiglierei a quasi chiunque. L'ho visto diverse volte e sono sempre felice di rivederlo....... " Sì, questa è senza dubbio una recensione che porta sentimenti positivi riguardo a un particolare film. Ma quali sono quelle parole specifiche che definiscono questa positività? Rivedi la recensione. " Adoro questo film! È dolce , ma con umorismo satirico . I dialoghi sono fantastici e le scene di avventura sono divertenti . Riesce a essere romantico e stravagante mentre ride delle convenzioni del genere delle fiabe. Lo consiglierei a quasi chiunque. L'ho visto diverse volte e sono sempre felice di rivederlo ....... " . Devi avere un'immagine chiara ora. Le parole in grassetto nel testo sopra sono le parole più importanti che costruiscono la natura positiva del sentimento trasmesso dal testo. Cosa fare con queste parole? Il passo successivo che sembra naturale è creare una rappresentazione simile alla seguente: Hai indovinato. Ogni riga contiene una parola e la sua frequenza di occorrenza nel documento. Durante la formulazione della dichiarazione del problema di un compito di classificazione del sentimento, hai capito la rappresentazione " Borsa di parole " e la rappresentazione di cui sopra non è altro che una rappresentazione Bag-of-words. Questo è probabilmente il concetto più fondamentale nella NPL ed è il primo passo per risolvere qualsiasi problema di classificazione del testo. Quindi, assicurati di capirlo bene. Una rappresentazione bag-of-words di un documento non contiene solo parole specifiche, ma tutte le parole uniche in un documento e la loro frequenza di occorrenza. Una borsa è una matematica, quindi per definizione di un insieme, la borsa non contiene parole duplicate. Ma per questa applicazione, sei interessato solo alle parole in grassetto come menzionato in precedenza, quindi il sacco di parole per questo documento conterrà solo queste parole. I documenti non sono scritti in modo confuso. Sono loro? La sequenza di parole in un documento è fondamentale. Ma nel contesto della classificazione dei sentimenti, questa sequenza non è molto importante. Ciò che è più importante o la parte più importante qui è la presenza di queste parole. Le parole che hai scoperto nel sacco di parole ora costruiranno il set di funzionalità del tuo documento. Quindi, considera una raccolta di molte recensioni di film (documenti) e hai creato rappresentazioni di un sacco di parole per ciascuno di essi e conservato le loro etichette . Il tuo set di allenamento dovrebbe essere simile a: Questa rappresentazione è anche conosciuta come Corpus. Questo set di addestramento dovrebbe essere facile da interpretare - Tutte le righe sono vettori di funzionalità indipendenti contenenti informazioni su un documento specifico (recensioni di film), le parole particolari e il suo sentimento. Si noti che il sentimento dell'etichetta è spesso indicato come (+, -) . Inoltre, le caratteristiche w1, w2, w3, 34, ..., wn sono generate da un insieme di parole e non è necessario che tutti i documenti contengano ciascuna di queste caratteristiche/parole. Passerai questi vettori di funzionalità al classificatore. Quindi, studiamolo dopo: il modello di classificazione Naive Bayes per la classificazione del sentimento. Classificazione Naive Bayes per la Sentiment Analysis La classificazione ingenua di Bayes non è altro che l'applicazione delle regole di Bayes per formare le probabilità di classificazione. In questa sezione studierai il classificatore Naive Bayes dal contesto della classificazione dei sentimenti. Si consiglia vivamente di avere un'introduzione sulla classificazione di Naive Bayes e sulla regola di Bayes. Ma perché Naive Bayes nel mondo k-NN, Decision Trees e tanti altri? Ci arriverai più tardi. Costruiamo prima la nozione di termini generali nel classificatore di Naive Bayes nel contesto della classificazione dei sentimenti. Inizierai dando un'occhiata alla regola di Bayes: Per un documento d e una classe c : In questo caso, la classe comprende due sentimenti. Positivo e negativo. Studiamo ogni termine dell'immagine sopra in dettaglio in questo contesto. Il termine P(c|d) viene letto come la probabilità della classe c dato un documento d . P(d|c) è analogo. Ora, cosa sono questi P e la Probabilità? Inoltre, il termine P(d) (probabilità di un documento); suona assurdo? Tante domande! Troviamo subito le risposte! Il termine che viene mostrato come Prior è la tua convinzione originale, ovvero l'etichetta originale del documento è positiva o negativa (in termini di sentimenti). Il termine Probabilità è la probabilità di un documento d data una classe c. Ora pensa al termine Posterior come alla tua regola aggiornata o credenza aggiornata ottenuta moltiplicando Prior e Probabilità. Ma cos'è la costante di normalizzazione P(d)? Questo termine è diviso con il risultato prodotto dalla moltiplicazione per garantire che il risultato possa essere presentato in una distribuzione di probabilità. Ma attieniti ad esso. Scoprirai maggiori informazioni. Ma ricorda, stai ancora costruendo la tua intuizione per mettere in relazione la regola di Bayes nel contesto della classificazione dei sentimenti. Entriamo più nel dettaglio per scoprire cosa sta cercando di fare esattamente la regola di Bayes qui. L'immagine seguente presenta passaggi più dettagliati della regola di Bayes: Molti termini sconosciuti qui. Andiamo piano. Iniziamo con il termine c MAP . Denota qui l'obiettivo principale della regola di Bayes, ovvero scoprire la massima probabilità/stima a posteriori di un certo documento appartenente a una particolare classe. MAP è un'abbreviazione di Max A Posterioricui è una terminologia greca. Che cos'è argmax? Avresti potuto usare solo max! Bene, argmax denota l'indice. Supponiamo che P(+|d) > P(-|d) dove + e - denotino rispettivamente sentimenti positivi e negativi. Questi termini P(+|d), P(-|d) restituiscono probabilità che sono una quantità numerica. Ma non sei interessato alla probabilità, sei interessato a scoprire la classe per cui P(+|d) è maggiore e la argmax restituisce. Per P(+|d) > P(-|d), argmax restituirà + . E sì, puoi eliminare il termine denominatore P(d). Dipende interamente dall'implementazione. Ma come faccio a sapere P(d|c) e P(c) Questo è esattamente dove bag of words tornerà utile. Ma come? Continuare a leggere! Sai già come convertire un determinato documento in unbag of word. Ancora più importante, puoi rappresentare un documento come un insieme di funzionalità con questo. Quindi ora, essenzialmente il termine c MAP può essere scritto come (ignorando il termine denominatore P(d)): Ma come si calcolano davvero le probabilità? Iniziamo con P(c) prima. P(c) si occupa fondamentalmente di questa domanda: "Quanto spesso si verifica questa classe?" Supponiamo che il set di dati del tuo documento contenga il 60% di sentimenti positivi e il 40% di sentimenti negativi. Quindi, P(+) = 0,6 e P(-) = 0,4 . Ora, come interpreti questo termine: P(x1, x2,...,xn | c)? Pensa in questo modo: qual è la probabilità che si verifichino queste parole (caratteristiche) data la classe c. Ad esempio, supponiamo di avere 1000 documenti e di avere solo due parole nel corpus: "buono" e "fantastico". Ora, su questi 1000 documenti, 500 documenti sono etichettati come positivi e i restanti 500 sono etichettati come negativi. Inoltre, hai scoperto che su 500 documenti con etichetta positiva, 200 contengono entrambi "buono" e "fantastico" (nota P(x1,x2) significa P(x1 e x2)). Quindi, la probabilità P(buono,impressionante | +) = 200 / 1000 = 1/5. Un punto importante che vorresti sottolineare qui è che se la tua dimensione del vocabolario è X allora puoi formulare X^n probabilità (come P(buono,impressionante | +)) probabilità a condizione che il tuo documento contenga n parole. Ricorda che devi calcolare le probabilità di verosimiglianza per entrambe le classi qui. Quindi, il numero totale di combinazioni di uno scenario in cui hai 2000 parole totali e ogni documento contiene 20 parole in media sarà (2000)^20 . Questo numero è follemente grande! E se la dimensione del corpus fosse in milioni (cosa che accade davvero nei casi pratici)? Questo è chiamato il classificatore di Bayes . Ma semplicemente non funziona perché i calcoli sono troppi. Ora studierai alcune ipotesi per rendere il classificatore Bayes un classificatore Naive Bayes . I presupposti che studierai sono chiamati Naive Bayes Independence Assumptions . Sono i seguenti: P(x1, x2,...,xn | c) - Assunzione di parole : supponiamo che la posizione non abbia importanza. Supponiamo che una parola particolare si trovi alla decima e alla ventesima posizione, ma con questo presupposto, significa che ti interessa solo la frequenza perché quella parola si è verificata che è 2. 10 e 12 questi due numeri sono irrilevanti qui. - Assunzione di indipendenza condizionale : questa è un'ipotesi critica che rende il classificatore di Bayes Naive Bayes. Afferma che "assume le probabilità delle caratteristiche P(x i |c j )". Dai un'occhiata più da vicino alla dichiarazione. Significa che P(x 1 |c j ), P(x 2 |c j ) e così via sono indipendenti l'uno dall'altro. (Non significa in alcun modo che P(x 1), P(x 2 ) e così via sono indipendenti tra loro) Ora, il termine P(x1, x2,...,xn | c) può essere espresso come segue: Quindi, naturalmente, X^n combinazioni vengono ridotte a X*n che è esponenzialmente inferiore (se la dimensione del tuo vocabolario è X e il tuo documento contiene n parole). Definito matematicamente, il classificatore Bayes quando ridotto al classificatore Naive Bayes assomiglia a: Naive Bayes ha due vantaggi: Numero ridotto di parametri. Complessità temporale lineare in contrapposizione alla complessità temporale esponenziale. Meccanismo di classificazione Naive Bayes quando applicato a un problema di classificazione del testo, viene indicato come classificazione " Multinomiale Naive Bayes ". Ora, sei abbastanza abile nel comprendere i meccanismi di un classificatore Naive Bayes in particolare, per un problema di classificazione del sentimento. Ora è giunto il momento di implementare un classificatore di sentimenti. Lo farai Python! Iniziamo con il caso di studio. Un semplice classificatore di Sentiment Analysis con Python: Per questo case study, utilizzerai un corpus di recensioni di film offline come descritto nel libro NLTK e può essere scaricato da qui . nltkfornisce una versione del set di dati. Il set di dati classifica ogni recensione come positiva o negativa. Devi prima scaricarlo come segue: python -m nltk.downloader all Non è consigliabile eseguirlo da Jupyter Notebook. Prova a eseguirlo dal prompt dei comandi (se utilizzi Windows). Ci vorrà del tempo. Quindi, sii paziente. Per ulteriori informazioni sui set di dati NLTK, assicurati di visitare questo link . Implementerai Naive Bayes o diciamo il classificatore Naive Bayes multinomiale utilizzando NLTKl'acronimo di Natural Language Toolkit. È una libreria dedicata alle attività relative alla NLP e alla NLU e la documentazione è molto buona. Copre molte tecniche in modo fantastico e fornisce anche set di dati gratuiti per esperimenti. Questo è il sito ufficiale di NLTK. Assicurati di controllarlo perché ha alcuni tutorial ben scritti sulla NPL che coprono diversi concetti di NPL. Dopo aver scaricato tutti i dati, inizierai importando il set di dati delle recensioni dei film da from nltk.corpus import movie_reviews. Quindi, costruirai un elenco di documenti, etichettati con le categorie appropriate. import nltk from nltk.corpus import movie_reviews import random documents = [(list(movie_reviews.words(fileid)), category) for category in movie_reviews.categories() for fileid in movie_reviews.fileids(category)] random.shuffle(documents) Successivamente, definirai un estrattore di funzionalità per i documenti, in modo che il classificatore sappia anche a quali aspetti dei dati dovrebbe prestare attenzione. "In questo caso, puoi definire una caratteristica per ogni parola, indicando se il documento contiene quella parola. Per limitare il numero di caratteristiche che il classificatore deve elaborare, inizi costruendo un elenco delle 2000 parole più frequenti nella corpus" Fonte . È quindi possibile definire un estrattore di funzionalità che controlla semplicemente se ciascuna di queste parole è presente in un determinato documento. all_words = nltk.FreqDist(w.lower() for w in movie_reviews.words()) word_features = list(all_words)[:2000] def document_features(document): document_words = set(document) features = {} for word in word_features: features['contains({})'.format(word)] = (word in document_words) return features "Il motivo per cui hai calcolato l'insieme di tutte le parole in un documento document_words = set(document), invece di controllare solo se la parola nel documento, è che controllare se una parola si trova in un insieme è molto più veloce che controllare se si trova in un elenco" - Hai definito l'estrattore di funzionalità. Ora puoi usarlo per addestrare un classificatore Naive Bayes a prevedere i sentimenti delle nuove recensioni di film. Per verificare le prestazioni del tuo classificatore, ne calcolerai l'accuratezza sul set di test. NLTK consente show_most_informative_features()di vedere quali caratteristiche il classificatore ha ritenuto più istruttive. # Train featuresets = [(document_features(d), c) for (d,c) in documents] train_set, test_set = featuresets[100:], featuresets[:100] classifier = nltk.NaiveBayesClassifier.train(train_set) # Test print(nltk.classify.accuracy(classifier, test_set)) 0.71 Oh! Il classificatore è stato in grado di ottenere una precisione del 71% senza nemmeno modificare alcun parametro o regolazione fine. Questo è fantastico per il primo tentativo! # Show the most important features as interpreted by Naive Bayes classifier.show_most_informative_features(5) Most Informative Features contains(winslet) = True pos : neg = 8.4:1.0 contains(illogical) = True neg : pos = 7.6:1.0 contains(captures) = True pos : neg = 7.0:1.0 contains(turkey) = True neg : pos = 6.5:1.0 contains(doubts) = True pos : neg = 5.8:1.0 "Nel set di dati, una recensione che menziona "Illogico" ha quasi 8 volte più probabilità di essere negativa che positiva, mentre una recensione che menziona "Captures" ha circa 7 volte più probabilità di essere positiva" - Fonte . Ora la domanda: perché Naive Bayes? Hai scelto di studiare Naive Bayes per il modo in cui è progettato e sviluppato. I dati di testo hanno alcune caratteristiche pratiche e sofisticate che sono meglio mappate su Naive Bayes a condizione che tu non stia considerando le reti neurali. Inoltre, è facile da interpretare e non crea la nozione di modello blackbox. Anche Naive Bayes soffre di un certo svantaggio Il limite principale di Naive Bayes è l'assunzione di predittori indipendenti. Nella vita reale, è quasi impossibile ottenere una serie di predittori completamente indipendenti. Perché la Sentiment Analysis importante? La Sentiment Analysis è importante perchè risolve una serie di problemi aziendali reali, tra cui: Aiuta a prevedere il comportamento dei clienti per un particolare prodotto. Può aiutare a testare l'adattabilità di un prodotto. Automatizza l'attività di report sulle preferenze del cliente. Può facilmente automatizzare il processo di determinazione della performance di un film analizzando i sentimenti dietro le recensioni del film da diverse piattaforme. E tanti altri! Prossimi passi per la Sentiment Analysis con python Congratulazioni! Ce l'hai fatta fino alla fine. La NPL è un argomento molto vasto e interessante e risolve alcuni problemi impegnativi. In particolare, l'intersezione tra NPL e Deep Learning ha dato vita ad alcuni fantastici prodotti. Ha completamente rivoluzionato il modo in cui interagiscono i chatbot. L'elenco è infinito. Si spera che questo tutorial ti abbia dato un vantaggio in uno dei principali sottocampi della NLP, ovvero l'analisi del sentimento. Hai trattato uno degli argomenti più fondamentali della NPL - Bag of Words e poi hai studiato Naive Bayes Classifier in modo dettagliato. Hai esaminato anche i suoi difetti. Hai usato nltk, una delle librerie Python più popolari per le attività NLP e NLU. Hai implementato un semplice classificatore Naive Bayes con il corpus del film che fornisce nltk. Concediti un applauso. Te lo meriti!
- Cos’è Google BERT dalla spiegazione al codice Python
Dall'invio di lettere in cassette postali fisiche ai messaggi diretti tramite la tua applicazione di social media preferita, l'esplosione di testo è stata astronomica. L'innovazione e lo sviluppo di dispositivi mobili e computer hanno contribuito a spingere questo aumento e questa crescita geometrica ha richiesto modi innovativi per comprendere ed elaborare il testo. Con l'apprendimento automatico che ha compiuto alcuni progressi significativi all'inizio degli anni 2010, la creazione e la previsione del modello sono state perfezionate per rispecchiare la comprensione umana delle espressioni linguistiche. C'è stato un salto significativo nell'elaborazione del linguaggio naturale (NLP) negli ultimi anni. Da BERT ELMO (Embedding from Language Models) a GPT (Generative Pre-trained Transformer), i ricercatori hanno cercato e sono riusciti, in una certa misura, a far comprendere ai modelli il significato contestuale delle parole. La creazione di BERT ha aiutato in modo significativo gli scienziati della NLP a fare notevoli progressi nell'ottenere una soluzione. Ora è semplice cercare nuove parole e tradurre da una lingua all'altra in una più adatta. Le rappresentazioni di encoder bidirezionali di Transformers (BERT) sono uno dei modelli più utilizzati nell'elaborazione del linguaggio naturale nell'ultimo decennio. Tutto grazie a BERT NLP Model, il modello linguistico all'avanguardia. Sommario Che cos'è il modello BERT NLP? Modello di linguaggio mascherato Trasformatori Spiegazione dettagliata dell'architettura del modello BERT Esempio dell'architettura originale del trasformatore Come si usa BERT? Tutto quello che devi sapere su come funziona BERT Applicazioni BERT Vantaggi dell'utilizzo del modello BERT rispetto ad altri modelli Svantaggi del BERT Errori comuni da evitare quando si lavora con il modello BERT Uso di BERT per l'analisi del sentimento PyTorch Impostare l'ambiente Installazione delle dipendenze richieste BERT - Conclusioni Che cos'è Google BERT ? Il modello Google BERT , acronimo di “Bidirectional Encoder Representations from Transformers”, è l’ultimo algoritmo di Google basato su una tecnologia che consente di comprendere meglio il linguaggio naturale (NLP) degli utenti. Analizziamo questa definizione di BERT: I modelli sono l'output di un algoritmo eseguito sui dati, comprese le procedure utilizzate per fare previsioni sui dati. Un modello linguistico è un modello numerico della probabilità di parole, frasi o testi. Un esempio di modello linguistico che può restituire è il seguente: Probabilità della frase "Il blog di I.A. Italia è informativo" come output è maggiore di (>) Probabilità di restituire "Informativo è I.A. Italia" come output basato su un gruppo di testo da cui ha appreso. Probabilità significa semplicemente ciò che è più probabile che accada. Ad esempio, in questo caso, le frasi che hanno una migliore possibilità di essere emesse dalla macchina escono dopo aver appreso da un gruppo di testo. Più il modello linguistico apprende dal set di formazione per fornire previsioni più accurate, migliore sarà il modello. Perché è stato creato il modello Google BERT ? Una delle maggiori sfide della NLP è la mancanza di dati di addestramento sufficienti. Nel complesso è disponibile un'enorme quantità di dati di testo, ma se vogliamo creare set di dati specifici per attività, dobbiamo dividere quella pila in moltissimi campi diversi. E quando lo facciamo, finiamo con solo poche migliaia o poche centinaia di migliaia di esempi di addestramento etichettati dall'uomo. Sfortunatamente, per funzionare bene, i modelli NLP basati sull'apprendimento profondo richiedono quantità di dati molto maggiori: vedono importanti miglioramenti quando vengono addestrati su milioni, o miliardi, di esempi di formazione annotati. Per aiutare a colmare questa lacuna nei dati, i ricercatori hanno sviluppato varie tecniche per addestrare modelli di rappresentazione linguistica di uso generale utilizzando le enormi pile di testo non annotato sul web (questo è noto come pre-formazione). Questi modelli pre-addestrati per scopi generici possono quindi essere perfezionati su set di dati specifici per attività più piccoli, ad esempio quando si lavora con problemi come la risposta alle domande e l'analisi del sentiment. Questo approccio si traduce in grandi miglioramenti della precisione rispetto all'addestramento da zero sui set di dati specifici per attività più piccoli. BERT è una recente aggiunta a queste tecniche per la pre-formazione della NLP; ha suscitato scalpore nella comunità del deep learning perché ha presentato risultati all'avanguardia in un'ampia varietà di attività della NLP, come la risposta alle domande. La parte migliore di BERT è che può essere scaricato e utilizzato gratuitamente: possiamo utilizzare i modelli BERT per estrarre caratteristiche linguistiche di alta qualità dai nostri dati di testo, oppure possiamo mettere a punto questi modelli su un'attività specifica, come l'analisi del sentimento e risposte alle domande, con i nostri dati per produrre previsioni all'avanguardia. Come funziona Google BERT ? BERT si basa su un Transformer (il meccanismo di attenzione che apprende le relazioni contestuali tra le parole in un testo). Un trasformatore di base è costituito da un codificatore per leggere l'input di testo e un decodificatore per produrre una previsione per l'attività. Poiché l'obiettivo di BERT è generare un modello di rappresentazione del linguaggio, necessita solo della parte del codificatore. L'input dell'encoder per BERT è una sequenza di token, che vengono prima convertiti in vettori e quindi elaborati nella rete neurale. Ma prima che l'elaborazione possa iniziare, BERT ha bisogno che l'input venga massaggiato e decorato con alcuni metadati extra: Incorporamenti di token : un token [CLS] viene aggiunto ai token delle parole di input all'inizio della prima frase e un token [SEP] viene inserito alla fine di ogni frase. Incorporamenti di segmenti : a ciascun gettone viene aggiunto un segnalino che indica la Frase A o la Frase B. Ciò consente al codificatore di distinguere tra le frasi. Incorporamenti posizionali : viene aggiunto un incorporamento posizionale a ciascun token per indicarne la posizione nella frase. In sostanza, Transformer impila uno strato che associa sequenze a sequenze, quindi l'output è anche una sequenza di vettori con una corrispondenza 1:1 tra token di input e output allo stesso indice. Modello di linguaggio mascherato di BERT Uno dei contributi significativi del documento di contributo BERT è il mascheramento. Il mascheramento implica la rimozione di parti di frasi e il fatto che il modello colmi le lacune. I modelli del linguaggio mascherato stanno diventando molto utili perché sono uno dei modi in cui viene eseguito l'incorporamento contestuale. Uno degli svantaggi dell'incorporamento di parole tradizionale utilizzato nei modelli linguistici precedenti è la mancanza di significato contestuale. Prendiamo ad esempio le seguenti parole: Il motoscafo era fermo vicino a un banco di legno Eddy è andato in un banco dei pegni per impegnare dei gioielli. *Un banco dei pegni è un'attività che offre prestiti assicurati ai clienti in cambio di beni personali noti come pegni. La parola banco significa cose molto diverse nelle frasi precedenti. Per le due frasi, la rappresentazione numerica (detta anche embedding) nel modello linguistico tradizionale di banco sarebbe la stessa. Il modello del linguaggio mascherato aiuta a risolvere questo problema (tra le altre cose). Più avanti in questo tutorial BERT , una sezione evidenzierà come si ottiene questo risultato. BERT e l'utilizzo dei Trasformatori BERT è stato creato sull'architettura Transformer, una famiglia di architetture di reti neurali . L'idea generale dell'architettura Transformer si basa sull'auto-attenzione e il documento in cui è stato proposto è Attention is All You Need . L'auto-attenzione sta imparando a soppesare la relazione tra ogni elemento o parola in una sequenza di input con altre parole nella sequenza di input. Considera la frase: L'animale ha impiegato troppo tempo ad attraversare la strada perché era troppo lento. Se questa frase viene passata attraverso un algoritmo, questo avrebbe difficoltà a collare "era troppo lento" all'animale piuttosto che alla strada. Sebbene ciò possa essere facile da capire per una persona, è difficile per l'algoritmo decifrarlo a colpo d'occhio. L'auto-attenzione assicura che mentre il modello esamina ciascuna delle parole in sequenza, esamina il testo di input per suggerimenti che possono aiutare a codificare meglio la parola. Spiegazione dettagliata dell'architettura del modello BERT L'architettura originale di Transformer utilizza il modello da sequenza a sequenza con un codificatore e un decodificatore. Il codificatore trasforma l'input in incorporamento e il decodificatore trasforma l'incorporamento in output di stringa. Esempio dell'architettura originale del trasformatore Di seguito è riportata un'architettura di un'architettura del trasformatore per l'interpretazione del linguaggio. L' architettura BERT ha una struttura diversa. A seconda del caso d'uso, impila gli encoder l'uno sull'altro (12 encoder di base o 24 di grandi dimensioni). Come si usa il modello BERT? Utilizzato per modificare l'input in rappresentazione numerica (modificando il testo in incorporamenti di parole). BERT può essere utilizzato come modello pre-addestrato per tutti gli usi, messo a punto per compiti specifici. Tutto quello che devi sapere su come funziona BERT Il modello BERT NLP , al centro, è stato addestrato su 2500 milioni di parole in Wikipedia e 800 milioni sui libri . BERT è stato formato su due metodi di modellazione: MODELLO IN LINGUA MASCHERA (MLM) PREVISIONE DELLA PROSSIMA FRASE (NSP) Questi modelli vengono utilizzati in pratica anche per mettere a punto il testo quando si esegue l'elaborazione del linguaggio naturale con BERT . Modello di linguaggio mascherato (MLM) C'era una piccola introduzione al modello del linguaggio mascherato nella sezione precedente. In MLM, una certa percentuale del corpus è nascosta o mascherata e addestrata. A BERT viene assegnato un gruppo di parole o frasi e i pesi contestuali vengono massimizzati per produrre la frase sull'altro lato. Una frase incompleta viene inserita in BERT e un output viene ricevuto nei termini più semplici. Consideriamo la seguente frase di esempio: In un anno, ci sono [MASK] mesi in cui [MASK] è il primo. Le parole chiave [MASKS] nella frase sopra rappresentano le maschere. È una forma di Colmare le lacune (usata nelle scuole per impostare le domande utilizzate nei test/questionari). Puoi indovinare cosa c'è negli spazi vuoti delle maschere nella frase sopra per renderlo completo. La prima parte della frase In un anno ci aiuta a sbloccare la frase, e da lì diventa molto semplice capire. La parola mese funge da soggetto per l'ultima parte della frase e in cui viene utilizzata per combinare le diverse parti della frase. Questo è stato facile da scomporre perché comprendiamo il peso contestuale di queste parole e, soprattutto, conosciamo le espressioni linguistiche della lingua inglese. Affinché BERT completi la frase, deve leggere molto e imparare molto bene i modelli linguistici della lingua. BERT potrebbe non sapere quale mese, anno siano --- ma è inevitabile che, dato il vasto corpus di parole per apprendere gli schemi e il contesto delle parole, le risposte siano probabilmente dodici e gennaio. In pratica, il 15% delle parole di una frase o di un corpus di testo viene mascherato per ottimizzare il risultato di output. Se ci sono 20 parole in una frase, 2/3 possono essere mascherate. Una funzione di mascheramento alla fine dell'input (dall'immagine sopra) può aiutare a creare la frase mascherata. Ricordiamo che la base di questo modello è aiutare a migliorare la comprensione contestuale tra le parole di una frase. Previsione Prossima Frase (Next Sentence Predict NSP) Mentre il MLM sta allenando la relazione tra le parole, la previsione della frase successiva (NSP) cerca di creare una relazione a lungo termine tra le frasi. Il documento BERT originale di Google menzionava che il modello funzionava male in ogni metrica misurata quando non veniva utilizzato NSP . Cos'è l'NSP e cosa centra BERT? NSP prevede di dare a BERT due frasi, la frase 1 e la frase 2. Quindi, a BERT viene posta la domanda: "Ehi BERT, LA FRASE 1 VIENE DOPO LA FRASE 2?" --- e BERT risponde con isNextSentence o NotNextSentence. Considera le seguenti tre frasi di seguito: Marco è tornato a casa dopo aver giocato a calcio davanti alla casa del suo amico per tre ore. Nella Via Lattea ci sono otto pianeti e la Terra non è né la più piccola né la più grande. Una volta a casa, Marco mangiò il cibo rimanente che aveva lasciato nel frigorifero e si addormentò sul pavimento. Quale delle frasi diresti seguisse l'altra logicamente? 2 dopo 1? Probabilmente no. Queste sono le domande a cui BERT dovrebbe rispondere. La frase 3 viene dopo 1 a causa del follow-up contestuale in entrambe le frasi. In secondo luogo, un facile takeaway è che entrambe le frasi contengono "Marco". Formazione BERT con NSP dopo MLM rende comprensibile in misura ragionevole le connotazioni linguistiche e le proprietà della lingua in buona misura. Applicazioni del modello BERT Abbinamento e recupero di documenti in base a un testo o a un gruppo di parole fornite. Riepilogo del testo: riepilogo di corpus/documenti di grandi dimensioni in porzioni più piccole da consumare. Evidenzia i paragrafi con punti di ingresso cruciali quando viene posta una domanda. Ricerca Google: in precedenza, la corrispondenza delle parole veniva utilizzata durante la ricerca di parole su Internet. Se una persona cercava "Voli da Lagos al Kenya", c'era un'alta probabilità di mostrare siti che includevano voli "Kenya a Lagos" tra i primi risultati. BERT utilizza invece la corrispondenza contestualizzata invece della sola corrispondenza delle parole. Analisi del sentimento Risposte alle domande Traduzione in lingua Vantaggi dell'utilizzo del modello BERT rispetto ad altri modelli BERT funziona bene per modelli specifici per attività. Il modello BERT è stato addestrato su un corpus di grandi dimensioni, il che lo rende più facile per compiti più piccoli e definiti. Le metriche possono essere ottimizzate e utilizzate immediatamente. L'accuratezza del modello è eccezionale perché viene aggiornato frequentemente. Puoi raggiungere questo obiettivo con una messa a punto di successo. Il modello BERT è disponibile e pre-addestrato in più di 100 lingue. Questo può essere utile per progetti che non sono basati sull'inglese. Svantaggi del modello BERT La maggior parte degli svantaggi di BERT può essere collegata alle sue dimensioni. Sebbene l'addestramento dei dati su un corpus di grandi dimensioni aiuti in modo significativo il modo in cui il computer prevede e apprende, c'è anche un altro aspetto. Loro includono: Il modello è grande a causa della struttura e del corpus di formazione. È lento da allenare perché è grande e ci sono molti pesi da aggiornare. È costoso. Richiede più calcoli a causa delle sue dimensioni, il che ha un costo. È progettato per essere inserito in altri sistemi (non un programma autonomo) e, per questo motivo, deve essere messo a punto per le attività a valle, che possono essere complicate. Errori comuni da evitare quando si lavora con il modello BERT Questi sono alcuni errori comuni che gli ingegneri NLP o i data scientist commettono quando utilizzano BERT - Tipo di token utilizzato: il tokenizer WordPiece deve essere utilizzato quando si utilizza BERT. Devi usare lo stesso tipo di tokenizer originariamente utilizzato per addestrare BERT ad addestrare il tuo modello. Modello BERT di formazione da zero. Usa modelli pre-addestrati invece di addestrare nuovi modelli quando usi BERT. Questo è molto costoso e non è consigliabile farlo. Problemi specifici del compito. Per alcune attività, durante la messa a punto, i risultati delle esecuzioni non convergeranno (noto anche come degenerazione). Questo di solito dipende dalle attività e si consiglia di essere aggressivi con l'arresto anticipato durante la messa a punto da soli. Tutorial con python e un modello BERT Uso di BERT per l'analisi del sentimento PyTorch L'analisi del sentimento è una tecnica di elaborazione del linguaggio naturale utilizzata per determinare il sentimento di un corpus di parole. Viene utilizzato per determinare il grado di positività o negatività di un gruppo di parole. L'analisi del sentimento trova enormi applicazioni nell'analisi di recensioni, valutazioni o feedback. Le aziende e le organizzazioni utilizzano l'analisi del sentiment per analizzare i propri prodotti o servizi in movimento. Questo feedback aiuta l'organizzazione a conoscere le aree in cui migliorare e illumina il pubblico futuro e gli utenti dei prodotti su cosa aspettarsi. Questa è anche una buona indicazione se una persona interessata acquista il prodotto o servizio. L'innovazione e il miglioramento dei modelli linguistici degli ultimi anni hanno fatto sì che il management delle aziende richieda solitamente questo tipo di analisi. Quasi tutte le attività redditizie hanno una piattaforma di feedback per i propri clienti. Esploreremo un breve esempio di BERT per l'analisi del sentimento per capire come BERT viene utilizzato nella pratica. Impostare l'ambiente di lavoro per usare BERT Una buona pratica consiste nell'impostare un nuovo ambiente virtuale per i progetti, soprattutto quando si installano nuove dipendenze sul computer. Questo per garantire che le librerie principali non siano interessate se un problema di installazione richiede un ripristino. Il notebook Jupyter verrà utilizzato per questo progetto. Per anaconda, puoi creare un ambiente virtuale con il seguente comando: conda create --name nlp_bert Qui, per un facile richiamo, nlp_bert viene utilizzato come nome. Puoi sostituirlo con qualsiasi nome con cui ti senti più a tuo agio. Installazione delle dipendenze richieste per lavorare con BERT PyTorch Sul sito Web di PyTorch , ci sono alcune selezioni tra cui scegliere a seconda del sistema operativo e del metodo di installazione che verranno utilizzati: L'opzione CUDA è per computer con una scheda grafica (ad esempio, la scheda grafica NVidia), quindi la CPU rimane l'opzione più sicura. La maggior parte dei data scientist utilizza anaconda, quindi verrà selezionata l'opzione conda. Modello BERT pre-addestrato Per questo esempio di progetto NLP , utilizzeremo il modello BERT pre-addestrato di Huggingface . Il codice per l'installazione della dipendenza è: conda install -c huggingface transformers Ricordiamo che uno dei punti precedenti (nella sezione degli errori standard) sta creando un modello BERT da zero. Huggingface ha sviluppato un modello BERT open source che possiamo usare per questo esempio. Importare le librerie richieste per usare il modello BERT import torch from transformers import AutoTokenizer, AutoModelForSequenceClassification Istanziazione del modello BERT Creerai il token in questa sezione di codice e il modello caricato da Huggingface. La prima volta che il modello viene caricato, verrà scaricato sul tuo computer e potrebbe richiedere del tempo. I collegamenti tra parentesi rappresentano la sezione finale all'URL del sito Web, fungendo di fatto da API (Application Programming Interface). Analisi del sentimento con il Modello BERT Calcoleremo il Sentimento per tre diverse frasi per spiegare come funziona. Va da 1 a 5 dove 1 è negativo e 5 è positivo. Diamo un'occhiata ai sentimenti delle frasi nell'immagine che viene mostrata sopra: Il film è fantastico. Lo consiglierei a chiunque. Il film è proprio lì. Avrebbe potuto essere migliore. Ho perso tempo a guardare quel film. Era così assolutamente terribile Per la prima frase, il token viene creato tokenizzando il testo di input. I sensori di ritorno sono impostati su "pt" che significa PyTorch. I nostri token sono in un elenco di elenchi, quindi l'indicizzazione restituisce l'elenco con i token delle frasi. La funzione tokenizer.decode() sopra non è necessaria per l'analisi del sentiment ed è per evidenziare i token speciali che sono stati spiegati in precedenza nella prima sezione. [CLS] e [SEP] sono caratteri speciali che rappresentano rispettivamente la classificazione e il separatore di frase. I logit con il valore più alto sono da dove verrà il valore analitico del sentiment. Logits è lo strato finale in una rete neurale che restituisce i valori grezzi per la previsione. Logit è il tensore utilizzato dalla funzione argmax per restituire la classe prevista. A prima vista, il punteggio semantico può essere facilmente calcolato perché il modello utilizzato è stato pre-addestrato utilizzando i metodi spiegati nelle sezioni precedenti. A seconda del progetto e del caso d'uso, è possibile ottimizzare i parametri per soddisfare i requisiti. Per calcolare i sentimenti per le tre recensioni campione. Creerai una funzione come mostrato di seguito : Per ciascuna delle frasi, il punteggio semantico corrisponde logicamente alle nostre frasi. “Il film è fantastico. Lo consiglierei” è una recensione molto positiva e come tale ha il punteggio positivo più alto, che è 5. Puoi fare il passo successivo raccogliendo sul web numerose recensioni o feedback da una piattaforma di prodotti e generando un punteggio sematico del feedback complessivo del prodotto o servizio. Modello BERT Conlusioni La comprensione contestuale delle frasi ha creato limiti significativi nell'elaborazione del linguaggio naturale. La continua innovazione su questo argomento diventerà ancora più precisa in futuro. Tutti questi miglioramenti possono essere ricondotti all'attenzione – l' auto-attenzione . Questo articolo semplifica il moello google BERT per una facile comprensione. Abbiamo iniziato con la frase : BERT è un modello linguistico preciso, enorme, mascherato . La scomposizione dei termini tecnici utilizzati nella frase ha aiutato a fornire una breve panoramica di cosa tratta il modello e di cosa cerca di ottenere. Il modo in cui viene creato offre una panoramica di ciò che accade dietro le quinte e l'analisi del sentimento è un esempio di come viene utilizzato nella pratica questo moello. Vuoi mettere in pratica quello che hai letto ? Scarica Progetti già pronti Lavora con il nostro editor online senza dover installare librerie Usa i nostri set di Dati Oppure segui i tutorial correlati : Tutorial di Regressione Logistica per l'apprendimento automatico Riconoscimento facciale con Python, in meno di 25 righe di codice Tutorial di Regressione Logistica per l'apprendimento automatico Scikit Learn e Python Tutorial Per Creare Modelli di Intelligenza Artificiale Tutorial Pratico Tensorflow , TensorBoard e Python Feature Engineering e Feature Selection per Principianti e non Spiegazione della più semplice rete neurale per principianti PyScript, come usare Python nel browser! Il tuo Primo Programma di Machine Learning con Python e Google Colab Il tuo primo Programma di Deep Learning in Python con Keras Step-By-Step Come costruire modelli predittivi sanitari utilizzando PyHealth? Esempio pratico Rilevamento Di Veicoli In Tempo Reale Come implementare l'algoritmo Perceptron da zero in Python Implementare le reti neurali ricorrenti (RNN) con Python e Keras Deep learnign e python : Object Recognition e Object Predict esempio Come salvare e caricare il tuo modello di deep learning
- Machine Learning per il trading
Introduzione al Machine Learning per il Trading Negli ultimi anni analisi tecnica e analisi fondamentale hanno visto crescere a loro fianco una terza metodologia di trading basata su algoritmi d'intelligenza artificiale. La capacità di elaborare previsioni sulla base di metodologie quantitative applicate ai Big Data, risorsa abbondante nei mercati finanziari, e’ stata anche favorita dall’aumento della potenza di calcolo dei nostri computer e la diffusione di linguaggi di programmazione come Python e R. Machine Learning per il Trading e le resistenze del forno di trattamento Cio’ che mi avvicino’ qualche anno fà all’intelligenza artificiale fu’ la mia irrefrenabile curiosità al modo delle previsioni, quella tentazione innata di provare a conoscere il futuro. L’oracolo Delphi, l’interpretazione dei sogni che ha guidato molteplici generali e antichi eserciti, storie di presage raccontate da scrittori di ogni epoca, gli studi di Doc del film Ritorno al Futuro, sono solo lontani tra loro esempi di come importante e accattivante era, é stato, é e sarà il problema. Agli inizi della mia carriera all’interno di realtà industriali avevo il progetto d'implementare un sistema di manutenzione preventiva su un forno lungo 30 metri all’interno del quale scorrevano su un rullo a maglie metalliche, componenti meccanici che dovevano subire un trattamento termico. All’interno del forno a lungo tutta la sua lunghezza erano posizionate 54 resistenze elettriche della lunghezza di 2 metri che lo attraversavano trasversalmente. Il prezzo di ognuna di queste resistenze elettriche era di circa 1000€ e la frequenza dei guasti su queste resistenze creava continue interruzioni della linea di produzione, nonché notevoli costi di sostituzione. Il mio compito era studiare la frequenza dei guasti ed implementare un sistema di previsione delle operazioni di sostituzione di quelle resistenze per cui si prevedeva un imminente guasto. Allo stesso tempo bisognava garantire un minimo stock per garantire la funzionalità continua della Lina di produzione. Era il 2003 e i nostri metodi di previsione erano basati sull’osservazione e sulla semplice registrazione dei dati di guasto, interpretazioni soggettive e decisioni prese in riunione fatte a pie’ di macchina. Ecco, quello era un esempio di un nostro tentativo di predire il futuro senza il supporto di una metodologia scientifica che ci avrebbe permesso d'individuare oggettivamente le resistenze prossime ai guasti con un basso errore di previsione. Chi avrebbe mai immaginato che solo qualche anno sarebbero esplosi in rete le varie apps di traduttori simultanei, riconoscimenti vocali e facciali. Chi avrebbe mai immaginato una cosi grande salto avanti nei sistemi a guida autonoma o nei sistemi a supporto dei processi decisionali. Ebbene questi ultimi sopra citati sono tutti sistemi basati su algoritmi previsionali. Non aspettatevi nulla di magico, qui si parla di statistica, di logica e di programmazione. Machine Learning per il Trading : La Regressione Facciamo un passo indietro, e cerchiamo di capire cosa significa analiticamente fare una previsione. Ogni equazione fa una previsione. Ogni formula di fisica classica fà una previsione. Usando la prima legge della dinamica F=MxA sappiamo che se applichiamo una forza F a una massa M prevediamo che questa subirà una certa accelerazione. La previsione in questo caso avrà un errore nullo per cui la previsione e’ anche certezza. In molto altri campi, dove formule fisiche non sono ancora state trovate dovremmo accontentarci sempre di una previsione e di un errore a esso associato. Prendiamo un grafico a due variabili che riporti la relazione tre esse in diversi casi (F1). Avremo uno scatter plot che mostrerà un certa tendenza, data per esempio dall’unione dei punti o dall’approssimazione della tendenza dei punti con semplici rappresentazioni geometriche. Tale approssimazione può essere perfetta, nel caso la relazione delle due variabili segue una legge ben definita (una retta (F2) o un polinomio (F3)), l’approssimazione ha un errore nullo e la previsione della relazione tra altre due variabili del campione per quel fenomeno specifico e’ esatta. Ove l’approssimazione non e’ perfetta, dobbiamo accontentarci di una previsione con errore (F4). Trovai in rete un indovinello per cui bisognava risolvere un problema logico del tipo : 9 = 90 8 = 72 7 = 56 6 = 42 3 = ? Senza fare grandi calcoli avevo ipotizzato per il 3 due risposte : a)12 b)18 Intuitivamente le due risposte avevano una loro assunzione di base, inconfutabile, per cui entrambe le risposte erano corrette con un errore del 50%. Provai allora a trovare la soluzione matematicamente che era semplicemente una previsione assumendo che la migliore legge di rappresentazione di quei numeri fosse una retta di regressione. Avevo in quel periodo cominciato a studiare la programmazione in Python e mi ritrovai a risolvere il gioco facendo girare quelle relazioni su un sistema di reti neurali. Ovviamente era come sparare alla mosca col cannone, ma mi aiuto’ a interiorizzare il concetto di previsione con Intelligenza Artificiale che era tanto in voga in quel periodo. Per chi fosse curioso riporto il codice che avevo lanciato: Come dicevo concetti fondamentali di previsione sono la Regressione e Classificazione. Entrambe sono operazioni che servono a determinare (a prevedere) specifici output (valori numerici in regressione e valori discreti o binary in classificazione) vincolati ad una certa serie di inputs. Guardiamo un esempio di Classificazione. Quando parliamo di previsioni sulla base di un set di dati abbiamo uno schema del tipo: I dati che vanno sotto gli Attributi sono variabili indipendenti. I dati che vanno sotto l’Etichetta sono chiamati variabili dipendenti. A partire da una serie di casi n con attributi n di n ed etichetta nota, la previsione consiste nel trovare l’etichetta di un nuovo caso x con una certa serie di attributi di x, sulla base dei principi della serie di dati (1, 2, 3, n) in cui l’etichetta era nota. Prendiamo per esempio un sistema che voglia classificare o prevedere l’appartenenza ad una classe di frutti a partire da determinate caratteristiche: In questa limitata quantità di dati possiamo facilmente prevedere che sulla base dei dati esistenti il frutto che dobbiamo classificare e’ sicuramente un Limone. Ora facciamo la previsione per un altro caso, cambiando una delle variabili indipendenti: In questa limitata quantità di dati possiamo facilmente prevedere che sulla base dei dati esistenti il frutto che dobbiamo classificare e’ sicuramente un Ribes o una Ciliegia o Uva . Il Sistema farà una previsione con un errore del 33.33%. Scalando il problema a migliaia di casi e migliaia di attributi e’ chiaro che la computazione umana qui mostrerebbe I suoi limiti. La macchina funziona in questo caso molto meglio. Per la Regressione, come nell’esempio dell’indovinello in rete o della prima legge della dinamica, l’etichetta (o se vogliamo la previsione) e’ un numero. Python e Machine Learning per il Trading Python e’ un linguaggio di programmazione molto diffuso che ha delle vaste librerie e una grande community di supporto. Per un approccio ludico,si puo’ pensare di cominciare a programmare in Python trovando gli innumerevoli esempi disponibili in rete, adattarli alle proprie necessità e accumulare esperienza. Non e’ necessario avere grandi conoscenze informatiche per cominciare ma ovviamente lo sviluppo a livello professionale in questo campo richiede uno studio importante. Anche per chi comunque non è uno sviluppatore di codici, la ricerca di linee di codice e l’adattamento al nostro problema e’ in ogni caso interessante e puo’ regalare buone soddisfazioni. Python e’ open source, scaricabile gratuitamente e lo troverete spesso in combinazione con l’ambiente di programmazione Jupiter Notebook. Machine Learning applicato al Trading Con Python e’ possibile ad esempio recuperare direttamente dal web le quotazioni di strumenti finanziari e ricavare con semplici istruzioni grafici andamento prezzi, medie mobili, incroci ed individuare molto semplicemente informazioni per un trading basato sull’analisi tecnica. Non siamo ancora in ambito machine learning perche’ in questo caso il codice viene usato per una semplice elaborazione dati, senza previsioni, solo rappresentazioni. Quando parliamo di Machine Learning, parliamo invece di una forma di intelligenza artificiale, che si basa su algoritmi che prevedono una fase di apprendimento del fenomeno descritto da dati esistenti (I casi e gli attributi nel problema di classificazione dei frutti) e elaborare una previsione per nuovi casi con specifici attributi. Considero parte integrante del Machine Learning alcune altre discipline che hanno a loro volta una loro ben precisa trattazione : il Natural Language Processing e il Deep Learning (F5). La programmazione di un sistema previsionale La generica struttura concettuale di un sistema di Machine learning si compone dei seguenti passi fondamentali : Importazione dati Elaborazione e organizzazione dati Definizione del modello da utilizzare Addestramento del modello Valutazione dell’affidabilità del modello Previsioni Nei prossimi giorni e settimane usciranno nuovi articoli dove vedremo come costruire con Python un Sistema Previsionale basato sul Machine Learning per il trading. NON PERDERTI I PROSSIMI ARTICOLI Nicola Matarese classe 1973, ha conseguito una laurea magistrale in ingegneria meccanica ed ha ricoperto ruoli manageriali all’interno di realtà industriali in ambito aerospazio e difesa. E’ appassionato di trading e opera sui mercati dal 2001. Da qualche anno lavora a sistemi di trading supportati da teorie sui Big Data e Intelligenza Artificiale. Collegati o manda un messaggio a Nicola Matarese su LINKEDIN
- Mito la libreria python per data scientist e data analyst
Prima di iniziare a spiegarti cosa è Mito e come utilizzarlo sui tuoi dati per risparmiare l'80% sulla pulizia e analisi dati vogliamo mostrarti direttamente un video esempio di cosa si può fare con questa libreria. Giusto per farti vedere in pochi minuti quanto è potente. Subito dopo troverai spiegazioni e tutorial. Mito combina i tuoi strumenti di data science preferiti in un pacchetto Python ! Mito è un'interfaccia per fogli di calcolo per Python. Puoi importare Mito nel tuo Jupyter Notebook e apparirà un foglio di calcolo. Ogni modifica apportata al foglio di calcolo genererà il Python equivalente nella cella del codice sottostante. Ad esempio, se crei una tabella pivot in Mito, il codice pivot Pandas apparirà automaticamente, con la documentazione, nella cella del codice seguente. Il codice generato automaticamente è ottimo per ripetere l'analisi su un'altra macchina e per i neofiti di Data Science per iniziare a lavorare con i panda nel modo di lavorare con i dati. Mito è più comunemente usato in due modi: Il primo è che gli utenti Python scrivano codice rapidamente. Poiché Mito genera automaticamente il codice e lo documenta automaticamente, non devi più andare su Google o Stack Overflow per trovare la sintassi giusta per molte operazioni. Il secondo caso d'uso è la transizione dai flussi di lavoro dei fogli di calcolo a Python, che tratteremo in questo articolo. Per prima cosa installiamo Mito la libreria di Python Presumo che tu abbia una versione recente di Jupyter Lab installata sulla tua macchina. In caso contrario, consulta la documentazione ufficiale di Jupyter Lab per iniziare. Per installare Mito, esegui questi comandi: python -m pip install mitoinstaller python -m mitoinstaller install Quindi apri Jupyter Lab e importa il Mitosheet: import mitosheet mitosheet.sheet() Puoi vedere le istruzioni di installazione complete nella pagina "documenti" del sito Web Mito. Importare dataset con python e Mito In Mito puoi importare file Excel o CSV. Tutto quello che devi fare è fare clic sul pulsante di importazione e puoi sfogliare i tuoi file locali. La gestione di un set di dati di grandi dimensioni in un foglio di calcolo può essere incredibilmente lenta: l'aggiornamento di formule, la creazione di tabelle pivot o la generazione di grafici possono richiedere minuti o addirittura ore per il caricamento. E se hai un set di dati più grande di 1 milione di righe, Excel non lo accetterà nemmeno. Molti utenti Mito prendono i loro fogli di calcolo e li importano in Mito per elaborare i dati rapidamente. Mito può gestire qualsiasi dimensione di dati che rientri in un DataFrame Pandas (ovvero milioni e milioni di righe) e quando importi il tuo set di dati, Mito lo trasforma automaticamente in un DataFrame. Analisi dei dati con Mito Con Mito puoi facilmente eseguire tutte le classiche operazioni solite dei data scientist o data analyst, ad esempio : Pivoting Graphing Filtering Sorting Merging Deduplicate Potrai eseguire tutte le classiche operazioni di Excel Creare formule come Excel Creare Statistiche avanzate Generare codice python in modo automatico e tanto altro! Nelle visualizzazioni seguenti, puoi vedere com'è filtrare un set di dati, creare una tabella pivot e creare un grafico e avere il codice equivalente generato nella cella del codice sottostante. Creiamo una Tabella pivot con Mito Vediamo le Statistiche di riepilogo Aggiungiamo delle Formule simili a Excel Esportare l'analisi con Mito e Python Dopo aver completato l'analisi in Mito, ci sono alcuni modi per condividere il risultato. Alcuni utenti vogliono prendere il codice generato e copiarlo in un altro script o applicare qualcosa di più avanzato come un modello ML più avanti nel notebook. Molti utenti desiderano riportare l'output su un foglio di calcolo. All'interno di Mito, puoi fare clic su "Pulsante Esporta" e recuperare lo stato corrente di Mito come file Excel o CSV. Ecco il sito Web di Mito , dove puoi saperne di più sullo strumento e ottenere le istruzioni per l'installazione. Conclusione su Mito la libreria che automatizza la Data Science e la Data Analysis Mito è un potente strumento per coloro che desiderano passare da ambienti di fogli di calcolo come Excel o Google Spreadsheets a Python. Usiamo Mito per l'analisi esplorativa dei dati iniziale, per avere un'idea dei dati. Digitare lo stesso insieme di comandi più e più volte diventa noioso dopo anni e anni. Aggiungerai Mito ai strumenti di Data Science? Facci sapere nei commenti qui sotto. Vuoi mettere in pratica quello che hai letto ? Scarica Progetti già pronti Lavora con il nostro editor online senza dover installare librerie Usa i nostri set di Dati Oppure segui i tutorial correlati : Tutorial di Regressione Logistica per l'apprendimento automatico Riconoscimento facciale con Python, in meno di 25 righe di codice Tutorial di Regressione Logistica per l'apprendimento automatico Scikit Learn e Python Tutorial Per Creare Modelli di Intelligenza Artificiale Tutorial Pratico Tensorflow , TensorBoard e Python Feature Engineering e Feature Selection per Principianti e non Spiegazione della più semplice rete neurale per principianti PyScript, come usare Python nel browser! Il tuo Primo Programma di Machine Learning con Python e Google Colab Il tuo primo Programma di Deep Learning in Python con Keras Step-By-Step Come costruire modelli predittivi sanitari utilizzando PyHealth? Esempio pratico Rilevamento Di Veicoli In Tempo Reale Come implementare l'algoritmo Perceptron da zero in Python Implementare le reti neurali ricorrenti (RNN) con Python e Keras Deep learnign e python : Object Recognition e Object Predict esempio Come salvare e caricare il tuo modello di deep learning
- Web Scraping con Python la Guida Completa
Introduzione allo Web Scraping con Python In passato raccogliere dati era un lavoro noioso ea volte molto costoso. I progetti di machine learning non possono vivere senza dati. Fortunatamente, oggigiorno abbiamo a nostra disposizione molti dati sul web. Possiamo copiare i dati dal web per creare il nostro set di dati. Possiamo scaricare manualmente i file e salvarli sul disco. Ma possiamo farlo in modo più efficiente automatizzando la raccolta dei dati. Ci sono diversi strumenti in Python che possono aiutare l'automazione. Dopo aver terminato questo tutorial, saprai: Come utilizzare la libreria delle richieste per leggere i dati online tramite HTTP Come leggere le tabelle sulle pagine web usando pandas Come utilizzare Selenium per emulare le operazioni del browser Alcuni siti Web possono contenere una quantità molto grande di dati inestimabili. I prezzi delle azioni, i dettagli dei prodotti, le statistiche sportive, i contatti dell'azienda e molto altro Se si desidera accedere a queste informazioni, è necessario utilizzare qualsiasi formato utilizzato dal sito Web o copiare e incollare le informazioni manualmente in un nuovo documento. Ecco dove può aiutare il web scraping con Python. Che cos'è il web scraping? Il web scraping si riferisce all'estrazione di dati da un sito web . Queste informazioni vengono raccolte e quindi esportate in un formato più utile per l'utente. Che si tratti di un foglio di calcolo o di un'API. Sebbene lo scraping web possa essere eseguito manualmente , nella maggior parte dei casi, quando si esegue lo scraping dei dati web si preferiscono strumenti automatizzati in quanto possono essere meno costosi e funzionare a una velocità maggiore. Python è il preferito del settore Web Scraping. Ma nella maggior parte dei casi, il web scraping non è un compito semplice. I siti Web sono disponibili in molte forme e forme , di conseguenza, i web scraper variano in funzionalità e caratteristiche. Tieni presente che potresti incontrare captcha quando tenti di eseguire lo scraping di alcuni siti Web. Se vuoisapere come usare python per fare Web Scraping continua a leggere l'articolo alla fine ci sono diversi tutorial. Il web scraping con python è legale? In breve, l'azione del web scraping non è illegale. Tuttavia, alcune regole devono essere seguite. Il web scraping diventa illegale quando vengono estratti dati non pubblicamente disponibili. Ciò non sorprende data la crescita del web scraping e molti recenti casi legali relativi allo scraping web. Come funzionano i web scraper? Quindi, come funzionano i web scraper? I web scraper automatizzati funzionano in modo piuttosto semplice ma anche complesso. Dopotutto, i siti Web sono creati per essere compresi dagli esseri umani, non dalle macchine. Innanzitutto, al web scraper verranno forniti uno o più URL da caricare prima dello scraping. Lo scraper quindi carica l'intero codice HTML per la pagina in questione. Gli scraper più avanzati eseguiranno il rendering dell'intero sito Web. Quindi lo scraper estrarrà tutti i dati sulla pagina o dati specifici selezionati dall'utente prima dell'esecuzione del progetto. Idealmente, l'utente seguirà il processo di selezione dei dati specifici desiderati dalla pagina. Ad esempio, potresti voler raschiare una pagina di prodotti Amazon per prezzi e modelli, ma non sei necessariamente interessato alle recensioni dei prodotti. Infine, il web scraper emetterà tutti i dati che sono stati raccolti in un formato più utile per l'utente. La maggior parte degli scraper Web genererà i dati in un foglio di calcolo CSV o Excel , mentre gli scraper più avanzati supporteranno altri formati come JSON che possono essere utilizzati per un'API. Che tipo di web scraper esistono? I web scraper possono differire drasticamente l'uno dall'altro caso per caso. Per semplicità, analizzeremo alcuni di questi aspetti in 4 categorie . Naturalmente, ci sono più complessità in gioco quando si confrontano i web scraper. autocostruito o prefabbricato estensione del browser vs software Interfaccia utente Cloud vs locale Web Scraper Autocostruito o Precostruito Proprio come chiunque può creare un sito Web, chiunque può creare il proprio web scraper, anche tu creerai il tuo web scraoer in python tra poco . Tuttavia, gli strumenti disponibili per creare il tuo web scraper richiedono ancora alcune conoscenze di programmazione. La portata di questa conoscenza aumenta anche con il numero di funzioni che vorresti che il tuo raschietto avesse. D'altra parte, ci sono numerosi web scraper predefiniti che puoi scaricare ed eseguire subito. Alcuni di questi includeranno anche opzioni avanzate come la pianificazione dello scrape, le esportazioni JSON e Fogli Google e altro ancora. Web Scraper Estensione del browser vs software In termini generali, i web scraper sono disponibili in due forme: estensioni del browser o software per computer. Le estensioni del browser sono programmi simili a app che possono essere aggiunti ai tuoi browser come Google Chrome o Firefox. Alcune estensioni del browser popolari includono temi, blocchi degli annunci, estensioni di messaggistica e altro ancora. Le estensioni di web scraping hanno il vantaggio di essere più semplici da eseguire e di essere integrate direttamente nel tuo browser. Tuttavia, queste estensioni sono generalmente limitate dal vivere nel tuo browser. Ciò significa che qualsiasi funzionalità avanzata che dovrebbe verificarsi al di fuori del browser sarebbe impossibile da implementare. Ad esempio, le rotazioni IP non sarebbero possibili in questo tipo di estensione. D'altra parte, avrai un vero software di scraping web che può essere scaricato e installato sul tuo computer. Sebbene siano un po' meno convenienti delle estensioni del browser, lo compensano con funzionalità avanzate che non sono limitate da ciò che il tuo browser può e non può fare. Web Scraper a Interfaccia utente L'interfaccia utente tra i web scraper può variare molto. Ad esempio, alcuni strumenti di scraping web verranno eseguiti con un'interfaccia utente minima e una riga di comando. Alcuni utenti potrebbero trovarlo poco intuitivo o confuso. D'altra parte, alcuni web scraper avranno un'interfaccia utente completa in cui il sito Web è completamente visualizzato per consentire all'utente di fare semplicemente clic sui dati che desidera raschiare. Questi web scraper sono generalmente più facili da utilizzare per la maggior parte delle persone con conoscenze tecniche limitate. Alcuni scraper arriveranno fino all'integrazione di suggerimenti e suggerimenti di aiuto tramite la loro interfaccia utente per assicurarsi che l'utente comprenda ogni funzionalità offerta dal software. Web Scraper in Cloud vs locale Da dove fa effettivamente il suo lavoro il tuo web scraper? Gli scraper web locali verranno eseguiti sul tuo computer utilizzando le sue risorse e la connessione a Internet. Ciò significa che se il tuo web scraper ha un utilizzo elevato di CPU o RAM, il tuo computer potrebbe diventare piuttosto lento durante l'esecuzione dello scrape. Con lunghe attività di scraping, questo potrebbe mettere fuori uso il tuo computer per ore. Inoltre, se il tuo scraper è impostato per funzionare su un numero elevato di URL (come le pagine dei prodotti), può avere un impatto sui limiti di dati del tuo IP. Gli scraper Web basati su cloud vengono eseguiti su un server esterno che di solito viene fornito dall'azienda che ha sviluppato lo scraper stesso. Ciò significa che le risorse del tuo computer vengono liberate mentre il tuo raschietto è in esecuzione e raccoglie i dati. Puoi quindi lavorare su altre attività ed essere avvisato in seguito quando il tuo scrape è pronto per essere esportato. Ciò consente anche un'integrazione molto semplice di funzionalità avanzate come la rotazione IP, che può impedire che il tuo scraper venga bloccato dai principali siti Web a causa della loro attività di scraping. A cosa servono i web scraper? A questo punto, probabilmente puoi pensare a diversi modi in cui è possibile utilizzare i web scraper . Di seguito abbiamo inserito alcuni dei più comuni (più alcuni unici). web scraper di annunci immobiliari Molti agenti immobiliari utilizzano il web scraping per popolare il loro database di proprietà disponibili in vendita o in affitto. Ad esempio, un'agenzia immobiliare rassegnerà le inserzioni MLS per creare un'API che popola direttamente queste informazioni sul proprio sito Web. In questo modo, possono agire come agenti per la proprietà quando qualcuno trova questo annuncio sul proprio sito. La maggior parte degli annunci che troverai su un sito web immobiliare sono generati automaticamente da un'API. web scraper per Statistiche e approfondimenti del settore Molte aziende utilizzano il web scraping per creare enormi database e trarre da questi approfondimenti specifici del settore. Queste aziende possono quindi vendere l'accesso a queste informazioni alle aziende di detti settori. Ad esempio, una società potrebbe raccogliere e analizzare tonnellate di dati su prezzi del petrolio, esportazioni e importazioni per vendere le proprie conoscenze alle compagnie petrolifere di tutto il mondo. web scraper per Siti di shopping competitor Alcuni diversi siti Web e applicazioni possono aiutarti a confrontare facilmente i prezzi tra diversi rivenditori per lo stesso prodotto. Un modo in cui funzionano questi siti Web consiste nell'utilizzare i web scraper per raccogliere quotidianamente i dati dei prodotti e i prezzi da ciascun rivenditore. In questo modo, possono fornire ai propri utenti i dati di confronto di cui hanno bisogno. Panoramica del Tutorial su Web Scraping con Python Questo tutorial è diviso in 4 parti: Utilizzare requests e python per fare WebScraping Utilizzare beautifulsoup4 e python per fare WebScraping Leggere le tabelle dal web usando pandas Leggere contenuti dinamici con Selenium Utilizzare requests e python per fare Web Scraping Quando si parla di scrivere un programma Python per fare Web Scraping, è inevitabile che non si possa evitare la libreria requests . Devi installare anche BeautifulSoup e lxml che tratteremo in seguito. Usa questi comandi in base a dove usi python : pip install requests beautifulsoup4 lxml #per python <3 pip3 install requests beautifulsoup4 lxml #per python >=3 !pip install requests beautifulsoup4 lxml #per Google Colab Request ti fornisce un'interfaccia che ti consente di interagire facilmente con il web. Il caso d'uso molto semplice sarebbe leggere una pagina Web da un URL: import requests # Lat-Lon di Milano URL = "https://weather.com/weather/today/l/45.46,-9.18" resp = requests.get(URL) print(resp.status_code) print(resp.text) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati 200 ... Se hai familiarità con il protocollo HTTP, probabilmente ricorderai che un codice di stato di 200 significa che la richiesta è stata soddisfatta con successo. Quindi possiamo leggere la risposta. In quanto sopra, leggiamo la risposta testuale e otteniamo l'HTML della pagina web. Se si tratta di un CSV o di altri dati testuali, possiamo leggerli usando .text sull'oggetto risposta. Ad esempio, ecco come possiamo leggere un CSV dai dati economici della Federal Reserve: import io import pandas as pd import requests URL = "https://fred.stlouisfed.org/graph/fredgraph.csv?id=T10YIE&cosd=2017-04-14&coed=2022-04-14" resp = requests.get(URL) if resp.status_code == 200: csvtext = resp.text csvbuffer = io.StringIO(csvtext) df = pd.read_csv(csvbuffer) print(df) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati DATE T10YIE 0 2017-04-17 1.88 1 2017-04-18 1.85 2 2017-04-19 1.85 3 2017-04-20 1.85 4 2017-04-21 1.84 ... ... ... 1299 2022-04-08 2.87 1300 2022-04-11 2.91 1301 2022-04-12 2.86 1302 2022-04-13 2.8 1303 2022-04-14 2.89 [1304 rows x 2 columns] Se i dati sono sotto forma di JSON, possiamo leggerli come testo o persino decodificarli. Ad esempio, il seguente esempio è estrarre alcuni dati da GitHub in formato JSON e convertirli in un dizionario Python: import requests URL = "https://api.github.com/users/tester" resp = requests.get(URL) if resp.status_code == 200: data = resp.json() print(data) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati {'login': '', 'id': 12891, 'node_id': 'MDQ6VXNlcjEyODkx', 'avatar_url': 'https://avatars.githubusercontent.com/u/12891?v=4', 'gravatar_id': '', 'url': 'https://api.github.com/users/tester', 'html_url': 'https://github.com/tester', ... 'company': 'tester', 'blog': 'http://tester.com', 'location': None, 'email': None, 'hireable': None, 'bio': 'tester tester tester tester.', 'twitter_username': None, 'public_repos': 5, 'public_gists': 0, 'followers': 1752, 'following': 0, 'created_at': '2008-06-07T02:20:58Z', 'updated_at': '2022-02-22T19:56:27Z' } Ma se l'URL ti fornisce alcuni dati binari, come un file ZIP o un'immagine JPEG, devi contentinvece ottenerli nell'attributo, poiché questi sarebbero i dati binari. Ad esempio, ecco come possiamo scaricare un'immagine (il logo di Wikipedia): import requests URL = "https://en.wikipedia.org/static/images/project-logos/enwiki.png" wikilogo = requests.get(URL) if wikilogo.status_code == 200: with open("enwiki.png", "wb") as fp: fp.write(wikilogo.content) Dato che abbiamo già ottenuto la pagina web, come dovremmo estrarre i dati? Questo è al di là di ciò che la requests può fornirci, ma possiamo usare una biblioteca diversa per aiutare. Ci sono due modi in cui possiamo farlo, a seconda di come vogliamo specificare i dati. Il primo modo è considerare l'HTML come una sorta di documento XML e utilizzare il linguaggio XPath per estrarre l'elemento. In questo caso, possiamo utilizzare la lxml libreria per creare prima un modello a oggetti del documento (DOM) e quindi cercare tramite XPath: from lxml import etree # DOM HTML dom = etree.HTML(resp.text) # Cerchiamo la temperatura elements = dom.xpath("//span[@data-testid='TemperatureValue' and contains(@class,'CurrentConditions')]") print(elements[0].text) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati 61° XPath è una stringa che specifica come trovare un elemento. L'oggetto lxml fornisce una funzione xpath()per cercare nel DOM elementi che corrispondono alla stringa XPath, che possono essere più corrispondenze. L'XPath sopra significa trovare un elemento HTML ovunque con il tag e con l'attributo data-test id corrispondente a " TemperatureValue" e che class inizia con " CurrentConditions." Possiamo imparare questo dagli strumenti di sviluppo del browser (ad esempio, lo screenshot di Chrome qui sotto) ispezionando la fonte HTML. Questo esempio serve per trovare la temperatura di New York City, fornita da questo particolare elemento che otteniamo da questa pagina web. Sappiamo che il primo elemento abbinato all'XPath è ciò di cui abbiamo bisogno e possiamo leggere il testo all'interno del tag . Utilizzare BeautifulSoup e python per fare Web Scraping L'altro modo è utilizzare i selettori CSS sul documento HTML, che possiamo utilizzare dalla libreria BeautifulSoup: from bs4 import BeautifulSoup soup = BeautifulSoup(resp.text, "lxml") elements = soup.select('span[data-testid="TemperatureValue"][class^="CurrentConditions"]') print(elements[0].text) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati 61° In quanto sopra, passiamo prima il nostro testo HTML a BeautifulSoup. BeautifulSoup supporta vari parser HTML, ognuno con capacità diverse. In quanto sopra, utilizziamo la lxmllibreria come parser come raccomandato da BeautifulSoup (e spesso è anche il più veloce). Il selettore CSS è un mini-linguaggio diverso, con pro e contro rispetto a XPath. Il selettore sopra è identico all'XPath che abbiamo usato nell'esempio precedente. Pertanto, possiamo ottenere la stessa temperatura dal primo elemento abbinato. Quello che segue è un codice completo per stampare la temperatura attuale di New York secondo le informazioni in tempo reale sul web: import requests from lxml import etree # Reading temperature of New York URL = "https://weather.com/weather/today/l/40.75,-73.98" resp = requests.get(URL) if resp.status_code == 200: # Using lxml dom = etree.HTML(resp.text) elements = dom.xpath("//span[@data-testid='TemperatureValue' and contains(@class,'CurrentConditions')]") print(elements[0].text) # Using BeautifulSoup soup = BeautifulSoup(resp.text, "lxml") elements = soup.select('span[data-testid="TemperatureValue"][class^="CurrentConditions"]') print(elements[0].text) Come puoi immaginare, puoi raccogliere una serie temporale della temperatura eseguendo questo script a intervalli regolari. Allo stesso modo, possiamo raccogliere dati automaticamente da vari siti web. È così che possiamo ottenere dati per i nostri progetti di machine learning. Leggere le tabelle sul Web usando pandas Web Scraping di tabelle Molto spesso, le pagine web utilizzeranno le tabelle per trasportare i dati. Se la pagina è abbastanza semplice, potremmo anche saltare l'ispezione per scoprire il selettore XPath o CSS e utilizzare i panda per ottenere tutte le tabelle sulla pagina in un colpo solo. È abbastanza semplice da essere fatto in una riga: import pandas as pd tables = pd.read_html("https://www.federalreserve.gov/releases/h15/") print(tables) facendo girare il programma questo sarà l'output del tuo primo web scraping di dati [ Instruments 2022Apr7 2022Apr8 2022Apr11 2022Apr12 2022Apr13 0 Federal funds (effective) 1 2 3 0.33 0.33 0.33 0.33 0.33 1 Commercial Paper 3 4 5 6 NaN NaN NaN NaN NaN 2 Nonfinancial NaN NaN NaN NaN NaN 3 1-month 0.30 0.34 0.36 0.39 0.39 4 2-month n.a. 0.48 n.a. n.a. n.a. 5 3-month n.a. n.a. n.a. 0.78 0.78 6 Financial NaN NaN NaN NaN NaN 7 1-month 0.49 0.45 0.46 0.39 0.46 8 2-month n.a. n.a. 0.60 0.71 n.a. 9 3-month 0.85 0.81 0.75 n.a. 0.86 10 Bank prime loan 2 3 7 3.50 3.50 3.50 3.50 3.50 11 Discount window primary credit 2 8 0.50 0.50 0.50 0.50 0.50 12 U.S. government securities NaN NaN NaN NaN NaN 13 Treasury bills (secondary market) 3 4 NaN NaN NaN NaN NaN 14 4-week 0.21 0.20 0.21 0.19 0.23 15 3-month 0.68 0.69 0.78 0.74 0.75 16 6-month 1.12 1.16 1.22 1.18 1.17 17 1-year 1.69 1.72 1.75 1.67 1.67 18 Treasury constant maturities NaN NaN NaN NaN NaN 19 Nominal 9 NaN NaN NaN NaN NaN 20 1-month 0.21 0.20 0.22 0.21 0.26 21 3-month 0.68 0.70 0.77 0.74 0.75 22 6-month 1.15 1.19 1.23 1.20 1.20 23 1-year 1.78 1.81 1.85 1.77 1.78 24 2-year 2.47 2.53 2.50 2.39 2.37 25 3-year 2.66 2.73 2.73 2.58 2.57 26 5-year 2.70 2.76 2.79 2.66 2.66 27 7-year 2.73 2.79 2.84 2.73 2.71 28 10-year 2.66 2.72 2.79 2.72 2.70 29 20-year 2.87 2.94 3.02 2.99 2.97 30 30-year 2.69 2.76 2.84 2.82 2.81 31 Inflation indexed 10 NaN NaN NaN NaN NaN 32 5-year -0.56 -0.57 -0.58 -0.65 -0.59 33 7-year -0.34 -0.33 -0.32 -0.36 -0.31 34 10-year -0.16 -0.15 -0.12 -0.14 -0.10 35 20-year 0.09 0.11 0.15 0.15 0.18 36 30-year 0.21 0.23 0.27 0.28 0.30 37 Inflation-indexed long-term average 11 0.23 0.26 0.30 0.30 0.33, 0 1 0 n.a. Not available.] La funzione read_html() in pandas legge un URL e trova tutte le tabelle nella pagina. Ogni tabella viene convertita in un DataFrame panda e quindi le restituisce tutte in un elenco. In questo esempio, stiamo leggendo i vari tassi di interesse della Federal Reserve, che ha solo una tabella in questa pagina. Le colonne della tabella sono identificate automaticamente da pandas. È probabile che non tutte le tabelle siano ciò che ci interessa. A volte, la pagina Web utilizzerà una tabella semplicemente come un modo per formattare la pagina, ma pandas potrebbe non essere abbastanza intelligente da capirlo. Quindi abbiamo bisogno di testare e selezionare il risultato restituito dalla funzione read_html() . Lettura di contenuti dinamici con il selenium Una parte significativa delle pagine Web moderne è piena di JavaScript. Questo ci offre un'esperienza più elaborata, ma diventa un ostacolo da utilizzare come programma per estrarre i dati. Un esempio è la home page di Yahoo, che, se carichiamo la pagina e troviamo tutti i titoli delle notizie, ce ne sono molti meno di quelli che possiamo vedere sul browser: import requests # Leggiamo la Home page di Yahoo URL = "https://www.yahoo.com/" resp = requests.get(URL) dom = etree.HTML(resp.text) # Stampiamo le Headline o titoli elements = dom.xpath("//h3/a[u[@class='StretchedBox']]") for elem in elements: print(etree.tostring(elem, method="text", encoding="unicode")) Questo perché pagine web come questa si basano su JavaScript per popolare il contenuto. Famosi framework web come AngularJS o React sono alla base di questa categoria. La libreria Python, come requests, non comprende JavaScript. Pertanto, vedrai il risultato in modo diverso. Se i dati che desideri recuperare dal Web sono questi, puoi studiare come viene invocato JavaScript e imitare il comportamento del browser nel tuo programma. Ma questo è probabilmente troppo noioso per farlo funzionare. L'altro modo è chiedere a un vero browser di leggere la pagina web invece di usare requests. Questo è ciò che può fare il selenio. Prima di poterlo utilizzare, dobbiamo installare la libreria: pip install selenium Ma Selenium è solo un framework per controllare i browser. Devi avere il browser installato sul tuo computer e il driver per connettere Selenium al browser. Se intendi utilizzare Chrome, devi scaricare e installare anche ChromeDriver . È necessario inserire il driver nel percorso eseguibile in modo che Selenium possa invocarlo come un normale comando. Ad esempio, in Linux, devi solo ottenere l' chromedriver eseguibile dal file ZIP scaricato e inserirlo in /usr/local/bin. Allo stesso modo, se stai usando Firefox, hai bisogno del GeckoDriver . Per maggiori dettagli sulla configurazione di Selenium, dovresti fare riferimento alla sua documentazione . Successivamente, puoi utilizzare uno script Python per controllare il comportamento del browser. Per esempio: import time from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By # Lanciamo Chrome browser options = webdriver.ChromeOptions() options.add_argument("headless") browser = webdriver.Chrome(options=options) # Apriamo una web page browser.get("https://www.yahoo.com") # Verifichiamo il corretto caricamento di tutta la pagina def is_ready(browser): return browser.execute_script(r""" return document.readyState === 'complete' """) WebDriverWait(browser, 30).until(is_ready) # Scrolliamo verso il basso la pagina browser.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(1) WebDriverWait(browser, 30).until(is_ready) # Cerchiamo i titoli delle news w stampiamole elements = browser.find_elements(By.XPATH, "//h3/a[u[@class='StretchedBox']]") for elem in elements: print(elem.text) # IMPORTANTE, chiudi il bot, altrimenti la tua ram ti abbandonerà browser.close() Il codice sopra funziona come segue. Per prima cosa avviamo il browser in modalità headless, il che significa che chiediamo a Chrome di avviarsi ma non di visualizzarlo sullo schermo. Questo è importante se vogliamo eseguire il nostro script in remoto poiché potrebbe non esserci alcun supporto per la GUI. Tieni presente che ogni browser è sviluppato in modo diverso e quindi la sintassi delle opzioni che abbiamo utilizzato è specifica per Chrome. Se usiamo Firefox, il codice sarebbe invece questo: options = webdriver.FirefoxOptions() options.set_headless() browser = webdriver.Firefox(firefox_options=options) Dopo aver avviato il browser, gli diamo un URL da caricare. Ma poiché la rete richiede tempo per consegnare la pagina e il browser impiegherà tempo per renderla, dovremmo attendere che il browser sia pronto prima di procedere con l'operazione successiva. Rileviamo se il browser ha terminato il rendering utilizzando JavaScript. Facciamo eseguire a Selenium un codice JavaScript per noi e ci comunichiamo il risultato usando la funzione execute_script() . L'utilizzo di Selenium è diverso dall'utilizzo della slibreria request in diversi aspetti. Innanzitutto, non hai mai il contenuto web direttamente nel tuo codice Python. Invece, fai riferimento al contenuto del browser ogni volta che ne hai bisogno. Quindi gli elementi web restituiti dalla funzione find_elements() si riferiscono a oggetti all'interno del browser esterno, quindi non dobbiamo chiudere il browser prima di averli consumati. In secondo luogo, tutte le operazioni dovrebbero essere basate sull'interazione del browser piuttosto che sulle richieste di rete. Quindi è necessario controllare il browser emulando i movimenti della tastiera e del mouse. Ma in cambio, hai il browser completo con supporto JavaScript. Ad esempio, puoi utilizzare JavaScript per controllare la dimensione e la posizione di un elemento nella pagina, che conoscerai solo dopo il rendering degli elementi HTML. Ci sono molte più funzioni fornite dal framework Selenium che possiamo coprire qui. È potente, ma poiché è connesso al browser, utilizzarlo è più impegnativo della libreria requests e molto più lento. Di solito, questa è l'ultima risorsa per la raccolta di informazioni dal web. Riepilogo sullo Scraping Web con Python In questo tutorial, hai visto gli strumenti che possiamo utilizzare per recuperare contenuti dal Web. Nello specifico hai imparato: Come utilizzare la libreria delle richieste per inviare la richiesta HTTP ed estrarre i dati dalla sua risposta Come costruire un modello a oggetti del documento da HTML in modo da poter trovare alcune informazioni specifiche su una pagina web Come leggere le tabelle su una pagina web in modo facile e veloce usando i panda Come utilizzare Selenium per controllare un browser per affrontare i contenuti dinamici su una pagina web Vuoi mettere in pratica quello che hai letto ? Scarica Progetti già pronti Lavora con il nostro editor online senza dover installare librerie Usa i nostri set di Dati Oppure segui i tutorial correlati : Tutorial di Regressione Logistica per l'apprendimento automatico Riconoscimento facciale con Python, in meno di 25 righe di codice Tutorial di Regressione Logistica per l'apprendimento automatico Scikit Learn e Python Tutorial Per Creare Modelli di Intelligenza Artificiale Tutorial Pratico Tensorflow , TensorBoard e Python Feature Engineering e Feature Selection per Principianti e non Spiegazione della più semplice rete neurale per principianti PyScript, come usare Python nel browser! Il tuo Primo Programma di Machine Learning con Python e Google Colab Il tuo primo Programma di Deep Learning in Python con Keras Step-By-Step Come costruire modelli predittivi sanitari utilizzando PyHealth? Esempio pratico Rilevamento Di Veicoli In Tempo Reale Come implementare l'algoritmo Perceptron da zero in Python Implementare le reti neurali ricorrenti (RNN) con Python e Keras Deep learnign e python : Object Recognition e Object Predict esempio Come salvare e caricare il tuo modello di deep learning
- Intelligenza Artificiale nel marketing digitale
Il mondo ha fatto molta strada nella tecnologia e nel marketing. Dai chatbot alle auto a guida autonoma, l'IA è entrata comodamente nelle nostre vite. Le applicazioni di Ai sono cresciute costantemente e convenientemente. Gli algoritmi stanno migliorando e velocizzando, rendendo i prodotti di IA più maturi ed efficienti. È indispensabile che l'IA sia una parte essenziale dei futuri prodotti digitali. Tuttavia, l'IA non ha solo trasformato il mondo tecnologico. Ha avuto anche un impatto significativo sul mondo del marketing. Allora, qual è il rapporto tra intelligenza artificiale e marketing digitale? In che modo l'IA sta trasformando il volto del marketing digitale? Troveremo le risposte a tutte queste domande mentre leggiamo più avanti. Scopriremo anche come implementare queste strategie di Intelligenza artificiale e marketing digitale nella tua attività e trarne vantaggio. Il rapporto tra Intelligenza artificiale e marketing digitale Anni prima, i professionisti del marketing esitavano a implementare strategie di intelligenza artificiale nelle loro iniziative di marketing. Quel pensiero è cambiato rapidamente poiché molti grandi marchi lo hanno adottato con successo. Marchi come Nike, Amazon e Alibaba hanno implementato con successo l'IA nelle loro strategie di marketing ottenendo ottimi risultati. Alibaba ha incorporato un negozio Fashion AI che aiuta a semplificare l'esperienza di vendita al dettaglio di moda per i clienti. Ciò ha consentito loro di aumentare il coinvolgimento e le vendite dei clienti. Amazon è stata una delle prime aziende a implementare il sistema di raccomandazione personalizzata. Ciò ha contribuito a offrire ai propri clienti un'esperienza personalizzata in base al comportamento di navigazione, agli acquisti passati, ecc. Usano anche l'intelligenza artificiale per supportare i prezzi dinamici (riduzione dei prezzi per generare più vendite quando necessario e aumento dei prezzi quando la domanda è elevata). Queste strategie li hanno aiutati a ottenere un vantaggio competitivo e ad aumentare le vendite dei prodotti. Questi casi di studio dimostrano che l'utilizzo dell'IA nel marketing digitale può essere vantaggioso e conveniente. Tuttavia, ci sono ancora alcuni esperti di marketing che sono rischiosi nell'utilizzare il marketing basato sull'intelligenza artificiale. Se sei uno di quelli, non dovresti perdere la prossima parte di questo blog. Vantaggi dell'Intelligenza Artificiale nel marketing digitale L'IA ha cambiato il volto del panorama digitale. L'analisi pratica dei dati e la capacità di adattarsi all'input dinamico consentono all'IA di identificare meglio le tendenze di marketing (rispetto agli esseri umani). Gli esperti di marketing e i marchi hanno risparmiato tempo e risorse grazie ai servizi di marketing digitale automatizzati. Ecco i principali vantaggi dell'IA nel marketing digitale, che ti daranno un vantaggio competitivo: Comprendere meglio il tuo pubblico: l' IA ti aiuta ad analizzare grandi quantità di dati e prevedere il comportamento/le decisioni di acquisto di ogni cliente. Ciò ti consente di implementare in modo efficace campagne di marketing dedicate a un pubblico di destinazione. Aiuta anche ad aumentare la soddisfazione e il coinvolgimento dei clienti. Inoltre, utilizzando strategie basate sull'intelligenza artificiale, gli esperti di marketing possono convertire facilmente il lead in una vendita nei momenti migliori per aumentare le conversioni. Maggiore produttività: utilizzando l'IA, puoi automatizzare facilmente diverse attività ripetitive. Ciò farà risparmiare molto tempo e risorse e aumenterà la produttività. Marketing efficace: l'intelligenza artificiale pone fine alle ipotesi durante il marketing. Puoi elaborare una strategia di marketing digitale più efficace utilizzando l'analisi dei dati e i servizi basati sull'intelligenza artificiale. Aumento del ROI: l'IA migliora il tuo processo decisionale e ti aiuta a creare contenuti con prestazioni migliori. Grazie ai suoi vantaggi nel comprendere meglio il pubblico, puoi guidare campagne di marketing digitale mirate, con conseguente ROI migliore. Esperienza utente migliorata: con l'IA nel marketing, fornisci al pubblico giusto i contenuti giusti. Ciò migliora la soddisfazione dei clienti quando trovano ciò di cui hanno bisogno. I rapporti hanno dimostrato che è più probabile che i consumatori siano spinti verso i marchi che implementano l'IA nelle loro strategie di marketing. Come implementare l'intelligenza artificiale e marketing digitale nella tua azienda? Sappiamo già come l'IA ha trasformato il volto del marketing e quanto è diventato vantaggioso. Ha cambiato il modo in cui interagiamo con il pubblico. L'intelligenza artificiale ha contribuito a indirizzare il traffico rilevante verso i contenuti giusti, generare più vendite e acquisire nuovi clienti. Ha inoltre consentito a marchi e marketer di gestire e fidelizzare nuovi clienti. Quindi, dobbiamo capire alcuni dei modi in cui lo facciamo. Ecco alcuni modi in cui puoi utilizzare l'IA per aumentare la tua attività: Chatbot: i chatbot sono uno dei principali esempi di tecnologia AI nel marketing. Aiutano a coinvolgere i clienti e a migliorare l'esperienza del cliente sul sito Web del tuo marchio. Ti aiutano a interagire con i tuoi clienti o potenziali lead ogni volta che si trovano sul tuo sito web. Risponde alla maggior parte delle domande comuni e le coinvolge in una conversazione simile a quella umana. Questo aiuta a generare lead e fornisce anche una buona esperienza utente. I chatbot vengono utilizzati anche per raccogliere feedback. Raccomandazioni sui prodotti personalizzati: questa è una delle tecnologie AI ampiamente utilizzate dai marchi di eCommerce/vendita al dettaglio. I consigli personalizzati sui prodotti aiutano tali marchi a servire meglio i propri clienti. Capiscono a cosa sono interessati i clienti in base alla loro cronologia di navigazione, cronologia degli acquisti, ecc. Questo aiuta nel marketing mirato e quindi aumenta le vendite. Aiuta anche a risparmiare un sacco di tempo e denaro. Costruttori di siti Web basati sull'intelligenza artificiale: l'IA è anche intervenuta per alleggerire il carico di costruzione del sito Web dalle spalle. Utilizzando l'IA, puoi creare facilmente siti Web in base ai dati degli utenti e al modo in cui interagiscono con i tuoi contenuti. Qui, l'unica cosa su cui devi lavorare è il contenuto. Il resto, dai blocchi di contenuto ai colori, viene fatto dal costruttore di siti Web basato sull'intelligenza artificiale. Alcuni degli esempi di tali costruttori di siti Web sono The Grid, FireDrop, Wix ADI, ecc. La maggior parte di questi costruttori di siti Web sono ancora nelle fasi iniziali e si prevede che diventeranno più sofisticati nel corso degli anni. Sono considerati il futuro dell'IA nel marketing digitale. Esperienza di acquisto migliorata: l'intelligenza artificiale ha davvero cambiato il modo in cui acquistiamo. Molti brand hanno iniziato a sperimentare la realtà aumentata per migliorare la propria esperienza di acquisto. Questo aiuta il cliente ad avere una migliore esperienza visiva dei prodotti che sta offrendo. Ad esempio, i clienti possono controllare come sta loro un vestito semplicemente stando davanti alla fotocamera del telefono. Questo li aiuta a decidere quale prodotto è meglio per loro e li aiuta a fare un acquisto senza problemi. Futuro del marketing digitale con l'IA Marketing più personalizzato: con lo sviluppo dell'IA, gli algoritmi sono in grado di comprendere la psicologia delle persone e le loro esigenze dalla loro attività sui social media. E aprirà una nuova porta per fare marketing in modo più personalizzato. Le aziende investiranno solo in coloro che hanno bisogno dei loro prodotti. Assistenza clienti coinvolgente: l'assistenza clienti sarà più coinvolgente e personalizzata. I software per il servizio clienti come i chatbot possono gestire ogni sorta di cose, tra cui rispondere alle domande dei clienti, fornire informazioni su prodotti e servizi e anche aumentare le vendite. Semplici strumenti di ricerca e raccomandazione dei prodotti: la ricerca dei prodotti e la raccomandazione dei prodotti saranno più accurati. Con lo sviluppo dell'IA, l'uso della ricerca vocale è in aumento. Molte aziende hanno iniziato a sperimentare la realtà aumentata per migliorare l'esperienza di acquisto dei propri clienti. Ciò consente ai clienti di ottenere una migliore impressione visiva delle cose che stanno vendendo. Elaborazione e analisi avanzate dei dati: gli algoritmi di apprendimento automatico emergono qui perché gli esseri umani non sono in grado di elaborare grandi quantità di dati in modo efficiente. La tecnologia AI sta rapidamente raggiungendo il volume di dati creati, consentendoci di utilizzare meglio le informazioni che raccogliamo. Gli esperti di marketing hanno scoperto che l'IA è uno strumento utile. Ha trasformato il modo in cui viene fatto il marketing e ha davvero aiutato nel processo generale. Tuttavia, in termini di efficienza e praticità, ha ancora molta strada da fare. Conclusione sull' Intelligenza artificiale e Marketing digitale L'intelligenza artificiale è diventata uno strumento prezioso per i professionisti del marketing. Ha cambiato il modo in cui viene fatto il marketing e ha davvero aiutato a migliorare l'intero processo. Tuttavia, ha ancora molta strada da fare per diventare più efficiente e conveniente. Se ti capita di avere più approfondimenti in merito, per favore lasciali nella sezione commenti. Ci auguriamo che il blog ti sia piaciuto e ci piacerebbe avere tue notizie.














