Scarica Problem Solver

Nuova versione!!! 1.0.3 (27-03-2019)

INTRODUZIONE


Problem Solver con Intelligenza Artificiale<<...Era una fredda e tediosa giornata di inverno…>>

navigando su internet senza una meta definita, sono incappato in un forum nel quale veniva discusso il ruolo dell’intelligenza artificiale nel trading dei mercati azionari e il suo valore aggiunto durante l’analisi dei dati in tempo reale e in costante aggiornamento.  Dopo alcuni click …mi sono ritrovato proiettato su un sito di medicina dove il tema principale (guarda caso) era l’intelligenza artificiale in ambito medico. Attraverso l’analisi dei dati, il machine learning consente di conoscere meglio i soggetti e può supportare il medico nella fase diagnostica e decisionale, limitando l’errore umano. E ancora…l’intelligenza artificiale e i metodi predittivi per la gestione delle scorte di magazzino, algoritmi computazionali intelligenti per giocare al “Fantacalcio” e alle lotterie (un esempio pratico è “Lotto IA” per la previsione dei numeri del lotto), i modelli di A.I. utilizzati nelle previsioni meteo e potrei continuare all’infinito. Negli ultimi anni, l’intelligenza artificiale è diventata parte integrante delle nostre vite. Il progresso tecnologico ha favorito il potenziamento di nuovi sistemi hardware dalle caratteristiche notevolmente performanti che hanno contribuito allo sviluppo di software intelligenti sempre più complessi, in grado di apprendere ed evolversi. I colossi iper-tecnologici come Google, Amazon, Microsoft ed IBM, mettono a disposizione degli utenti, sistemi in cloud di intelligenza artificiale condivisa per lo sviluppo di applicazioni personalizzate che incorporano innumerevoli funzionalità e un’enorme potenza di calcolo che il nostro personal computer non ci può fornire. E’ un po’ come dire: <<…noi vi diamo l’auto e voi ci mettete la benzina…>> e il gioco è fatto! Tornando alla mia navigazione in internet senza una meta definita, dopo aver riflettuto (non troppo a lungo…;-)), ho pensato:

<< Perché non creare un’ applicazione personalizzata, flessibile e semplice che sia in grado di elaborare e analizzare dati provenienti da diverse fonti e in svariati modi per la risoluzione di problemi comuni e fornire delle risposte intelligibili per tutti? >>


CARATTERISTICHE PRINCIPALI

“Problem Solver” o “risolutore di problemi”, nasce dall’esigenza di avere uno strumento flessibile, pratico e alla portata di chiunque, in grado di svolgere calcoli computazionali molto complessi, semplicemente sottoponendo i dati da analizzare in formato testo o CSV. Il programma adotta una rete neurale multistrato ad apprendimento supervisionato. Machine learning e deep learning sono a vostra disposizione! Le principali caratteristiche che differenziano questa applicazione da altre dello stesso genere sono:

  1. La possibilità di creare e/o modificare dinamicamente il numero di neuroni negli strati INPUT, HIDDEN e OUTPUT
    Aggiungere o rimuovere più strati nascosti (hidden layer) in funzione della complessità dei dati da analizzare
  2. Il programma è predisposto per elaborare pattern di dati composti da qualunque valore numerico (numeri reali) e non solo serie di zeri e uno (0,1). L’elaborazione dei dati restituisce risultati congruenti, compatibilmente alla tipologia dei valori immessi nella rete. I metodi di normalizzazione e classificazione dei dati sono parte integrante del software e vengono processati automaticamente senza la necessità di azioni esterne da parte dell’utilizzatore
  3. Tutte le funzionalità di tuning dell’intelligenza artificiale sono accessibili dal pannello di controllo principale. E’ possibile regolare il treshold, il numero di epoche, il gradiente dell’errore in fase di training (addestramento), la classificazione minima da raggiungere durante l’apprendimento delle serie di dati a fin che la rete possa restituire dei risultati coerenti. E’ inoltre possibile scegliere le funzioni di attivazione dei neuroni, optando per la sigmoide standard (meno veloce ma più precisa) o se avete fretta la funzione di  arcotangente fa al caso vostro
  4. “Problem Solver” può confrontare e riconoscere pattern numerici (metodo comunemente utilizzato per il riconoscimento OCR della scrittura o il riconoscimento dei volti e degli oggetti) oppure può ipotizzare previsioni e stime di sequenze numeriche future, come per esempio nel trading azionario.

PRONTI? VIA!!

Dopo aver scaricato e installato il programma, finalmente possiamo fare alcune prove pratiche. Il setup di installazione, contiene già dei file CSV di esempio che vengono installati nella directory del programma dentro alla cartella “data”,

solitamente in questo  percorso: “C:\Program Files (x86)\Problem Solver\data”

L’interfaccia utente è stata semplificata per estendere l’utilizzo anche a chi non possiede determinate competenze tecniche (lo so...la grafica non è il massimo ma è funzionale). Nella parte inferiore a destra (indicato con il riquadro in rosso) è situato il pannello di controllo dal quale è possibile impostare tutti i parametri della rete neurale e dell’intelligenza artificiale.  

Schermata principale di Problem Solver     

IL PANNELLO DI CONTROLLO DELL’ A.I.

Impostazioni dell' intelligenza artificialeLearning rate:  E’ il tasso di apprendimento della rete neurale. In genere varia da 0,1 a 0,9. Valori bassi migliorano il bilanciamento delle connessioni neurali e restituiscono un risultato più attendibile, se i dati da elaborare sono molti, durante il caricamento degli esempi di apprendimento la rete impiegherà diverso tempo. Valori alti accelerano  notevolmente il processo di fitness della rete diminuendo la precisione in risposta e in determinate circostanze la rete non riesce ad apprendere e a classificare correttamente. Il rischio di overfitting è sempre in aguato in entrambi i casi. Si consiglia di mantenere un learning rate tra 0,4 e 0,7 con la funzione di attivazione sigmoide standard e valori compresi tra 0,1 e 0,4 con la funzione di attivazione arcotangente (TanH).

Treshold: E’ la soglia di attivazione del classificatore. In fase di training, il classificatore verifica le affinità tra i dati di input e i target incrementando gli “SCORE” (il punteggio). In pratica l’attivazione del classificatore avviene entro la tolleranza percentuale prescelta tra input e target nella fase di training. Più la percentuale è bassa e più la precisione aumenta e viceversa la precisione diminuisce. C’è da considerare che trattandosi di intelligenza artificiale, non dobbiamo cercare la precisione assoluta. Lo scopo dell’ A.I. consiste nel simulare il i neuroni del cervello umano, con un certo grado di entropia per determinare risultati che possono variare nel micro e nel macro in qualunque momento, in funzione dei dati di input e del grado di affinità.

Max epoch: E’ possibile impostare un valore massimo per i cicli di apprendimento indipendentemente da quanto la rete neurale apprende effettivamente.

Min classification: Rappresenta il numero minimo di serie (trainingset) classificate dalla rete neurale come coerenti. Il numero massimo di classificazione corrisponde al numero totale delle serie di esempio. In funzioni non lineari (come ad esempio serie casuali di numeri), è altamente improbabile trovare affinità in tutte le serie di training. La rete neurale interrompe l’apprendimento al raggiungimento della classificazione desiderata. Si consiglia di inserire valori pari a circa il 50-60% degli esempi caricati. Esempio: Se vengono caricate 50 serie di training, il valore da inserire potrebbe essere 25-35 (circa).

Max error: Indica che l’errore massimo della rete neurale durante l’apprendimento, dovrà essere minore o uguale alla soglia percentuale indicata. Raggiunta la percentuale di errore, la rete sarà addestrata e pronta per restituire i risultati.

Input separator e Target separator:  Sono i caratteri delimitatori di input e target contenuti nelle serie (stringhe di testo) di training o addestramento (trainingset).
ES: 0.3#0.4/0.7 significa: 0,3 e 0,4 sono gli elementi INPUT (2 neuroni, 2 elementi) e 0,4 è l’elemento TARGET (1 neurone, un target/output).

St. Sigmoid e TanH:
  Rappresentano le funzioni di attivazione delle connessioni neurali. Si può scegliere la funzione Standard Sigmoide o l’ arcotangente.
Nel primo caso (St.Sigmoid) l’apprendimento della rete nella fase di training sarà più lento e preciso, mentre scegliendo TanH, l’apprendimento sarà notevolmente più veloce e meno preciso.

ESEMPIO 1 – ALTEZZA PESO UOMINI

Per il primo  esempio, proveremo ad addestrare la rete neurale caricando il file altezza_peso_uomini.CSV contenuto nella cartella “data”.

  • Cliccare su “carica trainingset da file”
  • Selezionare il file “altezza_peso_uomini.CSV”

Si aprirà la finestra di popup con il contenuto del file.
NB: Per default i valori nel CSV devono essere separati dal punto e virgola (;).  Il programma identifica tutti gli elementi di ogni riga come INPUT e l’ultimo elemento (separato dal carattere “/”) identifica il TARGET, cioè l’obbiettivo da raggiungere. Ogni riga si riferisce ad un singolo trainingset (esempio di addestramento). Ogni serie di dati deve essere composta da input e target. In questa fase è possibile definire quali sono gli input e quali i target impostando la posizione del carattere “/”.
A questo punto premere su “OK”

Esempio 1 - Altezza peso uomini A.I.

 
Struttura della rete neurale

Sul lato sinistro comparirà la struttura della rete neurale che  sarà composta da un neurone in input e uno in output. Per definizione lo strato nascosto è formato da 4 neuroni che in questo caso sono più che sufficienti. Più avanti nel  manuale spiegherò come impostare il numero di neuroni degli strati nascosti e quanti strati occorrono per risolvere i problemi.

Trattandosi di 15 serie  relativamente semplici, selezionate un valore di Min classification uguale a 8 (circa il 60% del totale delle serie di addestramento) e un Max error del 2% quindi cliccate su “Addestramento”

 

 

 

 

 

La rete inizierà ad imparare fino a raggiungere un errore minimo del 2% oppure una classificazione di 8 serie.
Nel  mio caso la rete ha raggiunto il 2% dell’errore classificando 7 serie. Ogni volta la classificazione potrebbe essere differente, l’importante è non esagerare con la precisione, il rischio è di mandare in overfitting la rete e di avere risultati poco soddisfacenti. Più avanti spiegherò meglio come funziona l’overfitting dando qualche consiglio su come evitarlo.
 

IL TEST:

OGradiente dell'errore e classificazionera possiamo testare l’intelligenza artificiale con i nostri valori. Per prima cosa digitiamo nella casella di “INPUT” 1,72 (mt) e andiamo a cliccare sul bottone “Riconoscimento”. Nella schermata superiore, dove prima compariva la struttura della rete neurale, ora comparirà una serie di dati che sono i nostri OUPUT
Per il mio test, l’intelligenza artificiale ha restituito un output di 68,0251119021318 Kg, quindi congruente con l’esempio (1,72/69). L’indice della serie vincitrice corrisponde al numero  7 (partendo a contare da 0 che corrisponde al primo set di dati) ovvero “1,80/75” non proprio coerente, ma tenendo conto che ha un solo input, la rete non è in grado di effettuare comparazioni con altri elementi in ingresso. Normalmente si utilizzano almeno due neuroni in input. Per semplicità, ho ridotto al minimo per consentire di capire il sistema di funzionamento. Lo SCORE,  indica che in 79 casi su 3326 interazioni le affinità tra input e output rispettano i parametri di errore e di soglia impostati. Il valore di SCORE (punteggio) restituisce l’indice di affinità che la rete ha raggiunto tra l’input e il target per quel  trainingset specifico. Pertanto, valori in input simili ai trainingset aventi SCORE più alti, restituiranno output più vicini al risultato reale.

ESEMPIO 2 – ALTEZZA PESO UOMINI e DONNE

Trainingset altezza peso uomini e donne

Carichiamo il file “altezza_peso_uomini_donne.csv” nella cartella “data”. Questa volta dobbiamo spostare il carattere delimitatore INPUT/TARGET in terza posizione. Nella casella “Output dopo la posizione” indichiamo il numero 2. La serie di apprendimento è composta come segue:

il primo elemento indica l’altezza degli uomini, il secondo elemento l’altezza delle donne, il terzo e il quarto elemento (separati dal carattere “/”) rappresentano i rispettivi target, ovvero, peso uomini, peso donne.

Cliccate su OK e si creerà una rete neurale composta da due neuroni in INPUT (altezza uomini, altezza donne), uno strato hidden (nascosto) di 4 neuroni e lo strato di OUTPUT avente 2 neuroni (peso uomini, peso donne)

Per questo esempio, manteniamo i precedenti parametri e procediamo con l’addestramento della rete.

 

 


L’addestramento è durato 4764 cicli con un errore medio percentuale assoluto di 1,99% e una classificazione di 4 serie su 15 inserendo in INPUT: 1,60#1,47 il risultato in OUTPUT è il seguente; => 58,4790322379098 kg (per gli uomini) => 48,6520465620752 kg (per le donne)
Il risultato reale (target del trainingset in questione) per gli stessi input era 59 e 48 Kg.
L’indice del training set vincitore corrisponde al 2 ovvero: 1,60#1,47/59#48

 

Altezza peso uomini e donne
Inserendo INPUT non presenti nei set di addestramento ho ottenuto questi risultati:
INPUT: 1,76#1,61
=> 71,0761261160432 kg (per gli uomini)
=> 57,4637333886954 kg (per le donne)
Perfettamente coerenti con le aspettative.
Ne consegue che l’addestramento della rete neurale sia avvenuto correttamente.

ESEMPIO 3 – TRADING AZIONARIO, ANDAMENTO AZIONI Digital Arts Media Network, Inc. 2017, PREVISIONE DEL VALORE DI CHIUSURA

Trainingset titolo azionario con previsione


Per questo esempio, i dati da elaborare sono stati scaricati da Yahoo finanza. Ho preso come riferimento il  primo titolo che mi è capitato (Digital Arts Media Network, Inc. 2017). Prenderò in esame solo i primi sei mesi del 2017.
Gli esempi di addestramento, saranno composti dai seguenti elementi: Open;High;Low;Close (valore all’apertura, il valore massimo della giornata, il valore minimo e il valore in chiusura)
Lo scopo sarà quello di fare delle previsioni sul giorno successivo, inserendo i dati del giorno precedente. Pertanto, in INPUT avremo 3 neuroni e in OUTPUT un solo neurone che corrisponde al valore di chiusura.


Carichiamo il file “Digital Arts Media Network, Inc._2017_parte1.csv” che contiene 136 esempi.

 

 

Il TARGET da considerare si trova dopo il terzo elemento (INPUT) di ogni riga (come indicato nello screenshot).

 

 

Parametri itelligenza artificiale e previsione quotazione titolo azionario

 

Manteniamo gli stessi parametri, modificando la classificazione minima in 70 (circa il 52% degli esempi in questione), quindi procediamo con l’addestramento.

Il numero dei neuroni sullo strato hidden potrebbe essere tra i 10 e 15, fate le vostre prove utilizzando altre configurazioni fino a quando non otterrete risultati soddisfacenti e a quel punto la rete sarà addestrata in modo efficiente.

 

 

 

Epoche o cicli di addestramento della rete neurale


Pochi istanti dopo il riepilogo del mio test è il seguente:
666 cicli di addestramento con un errore percentuale medio assoluto del 2,659%. Ora voglio azzardare la previsione per il giorno successivo. Il valore salirà o scenderà?

In entrambi i casi quanto potrebbe valere il titolo alla chiusura?

 

Previsione quotazione titolo alla chiusuraPrendo come riferimento in INPUT l’ultima serie (essendo in ordine cronologico):
0,89#0,9999#0,89/0,9999. Il risultato restituito in OUTPUT (indicato nello screenshot) è il seguente:

=> 1,12164105518385

 

 

Pertanto mi aspetto che il giorno seguente, il titolo salga sensibilmente di valore passando da 0,9999 a 1,12164105518385
Sarà veramente così?

 

Simulazione pronostico quotazione titolo con dati reali

Per saperlo, vado ad aprire il file “Digital Arts Media Network, Inc._2017_parte2.csv” (la seconda parte del file), questa volta con notepad e vado a leggere la prima riga che essendo in ordine cronologico, corrisponde al giorno successivo del quale voglio trovare la quotazione del titolo in chiusura (in pratica è una simulazione). Ed ecco cosa ho trovato. Il giorno seguente il titolo è partito a 0,9999 il valore massimo raggiunto è stato 1,01 quello minimo  0,93 e alla chiusura delle contrattazioni (il risultato che voglio trovare) valeva 1,01 contro 1,12164105518385 previsto dall’intelligenza artificiale.

Il software ha previsto che il titolo sarebbe salito!
       

DEFINIZIONE DEGLI STRATI NASCOSTI (HIDDEN LAYER) , NUMERO DI NEURONI, OVERFITTING, UNDERFITTING


Il numero di neuroni nei livelli nascosti è molto importante per l'architettura della rete neurale. Sebbene questi strati non interagiscano direttamente con l'ambiente esterno, hanno un'enorme influenza sull'output finale. Il numero di strati nascosti e  il numero di neuroni che li compongono, devono essere attentamente considerati.
L'uso di un numero insufficiente di neuroni negli strati nascosti si tradurrà in qualcosa chiamato underfitting. L'underfitting si verifica quando ci sono troppo pochi neuroni nei livelli nascosti per rilevare adeguatamente i segnali in un set di dati complicato.
All’opposto, l'utilizzo di troppi neuroni negli strati nascosti potrebbero causare un sovradattamento. L'overfitting si verifica quando la rete neurale ha così tanta capacità di elaborazione delle informazioni che la quantità limitata di informazioni contenute nel set di allenamento non è sufficiente per addestrare tutti i neuroni negli strati nascosti. Un numero smisuratamente elevato di neuroni negli strati nascosti può aumentare drasticamente il tempo necessario per addestrare la rete. Ovviamente, è necessario raggiungere un compromesso tra troppi e troppo pochi neuroni negli strati nascosti. Aumentare il numero di neuroni in funzione della quantità di serie da analizzare, non significa necessariamente migliorare la capacità di apprendimento della rete neurale, talvolta si ottengono risultati e classificazioni migliori con quantità ridotte di neuroni rispetto il numero di serie di addestramento. Ad oggi non esiste una regola definita che stabilisca con precisione il numero di neuroni da utilizzare negli hidden layers.
Di seguito riporto alcune regole empiriche che vengono utilizzate per determinare gli strati nascosti:

1.    Il numero di neuroni nascosti deve essere compreso tra la dimensione del livello di input e la dimensione del livello di output.
2.    Il numero di neuroni nascosti dovrebbe essere 2/3 della dimensione del livello di input, più la dimensione del livello di output.
3.    Il numero di neuroni nascosti dovrebbe essere inferiore al doppio delle dimensioni del livello di input.

Ulteriori accorgimenti e modifiche all’architettura della rete neurale, si possono ricavare effettuando alcuni test, monitorando costantemente la discesa del gradiente dell’errore in combinazione con la classificazione degli esempi durante l’addestramento.

QUANTI STRATI NASCOSTI (HIDDEN LAYER) SONO NECESSARI?

Il teorema di approssimazione universale (wiki: https://en.wikipedia.org/wiki/Universal_approximation_theorem) afferma che una rete feed-forward, con un singolo strato nascosto, contenente un numero finito di neuroni, può approssimare funzioni continue con cambiamenti minimi sulla funzione di attivazione. La prima versione di questo teorema fu proposta da Cybenko (1989) per le funzioni di attivazione sigmoidee.
Pertanto una rete neurale composta da:

•    Zero strati nascosti è in grado di rappresentare solo funzioni o decisioni separabili linearmente.
•    Uno strato nascosto, può approssimare qualsiasi funzione continua da uno spazio finito a un altro.
•    Due strati nascosti, può rappresentare con accuratezza qualsiasi funzione.

Mi auguro che abbiate trovato di vostro gradimento questa lettura e che possiate applicare le potenzialità di Problem Solver nella risoluzione dei vostri problemi.
PER QUALSIASI CONSIGLIO NON ESITATE A SCRIVERMI DALL'APPOSTIA FORM DI CONTATTO...QUI


Scarica Problem Solver


Se hai apprezzato questo software, aiutami a sviluppare nuovi tools con una piccola donazione.
Grazie.