In principio era il random. Chiunque si sia mai dilettato di programmazione, anche solo a livello hobbistico, si ricorderà sicuramente che, in ogni guida “For dummies”, tra i primi tipici listati dopo l’onnipresente “Hello world”, appariva sempre una qualche routine che coinvolgeva l’istruzione Random. Tipicamente, questa routine consisteva nell’invocare una chiamata a una funzione – chiamata spesso Rand() o Random()- passando come parametro una cosiddetta variabile seme. La funzione del seme è di permettere alla routine Random di generare numeri casuali diversi, evitando di restituire sempre lo stesso numero.
L’imprevedibilità di un lancio di dadi
La funzione Random() fu da subito impiegata nei più svariati contesti in cui si rendesse necessario introdurre l’elemento della casualità in una sequenza numerica o alfanumerica, fino a che non ci si accorse che, dopo un certo numero di generazioni, era difficile garantire che i risultati restituiti non iniziassero a ripetersi seguendo dei pattern identificabili più o meno facilmente.
Nacque perciò una vera e propria rincorsa a elaborare algoritmi di generazione di numeri casuali che tendessero a una sempre maggiore irripetibilità delle sequenze interessate. Vennero sviluppati diversi algoritmi che, con un accettabile compromesso di prestazioni, fossero in grado di garantire una consistente casualità dei risultati.
Dal Random all’RNG
La ricerca continua di perfezionamenti sulla generazione casuale diede vita alla famiglia dei software RNG, ossia Random Number Generator. Gli RNG sono software specializzati che creano risultati imprevedibili, sia in formato alfanumerico ma anche in formati di dati più strutturati. Alcuni dei primi utilizzi degli RNG furono nei videogiochi, dove vennero impiegati per introdurre l’elemento dell’imprevedibilità nelle routine comportamentali delle prime rudimentali intelligenze artificiali dei personaggi. Gli RNG trovarono poi applicazione massiva nei software di gestione password, per garantire il più possibile l’irripetibilità delle sequenze alfanumeriche impiegate come chiavi di autenticazione.
Applicazione degli RNG nella cybersecurity
Infatti, è proprio nell’ambito della crittografia che gli RNG trovarono un impiego considerevole. La crittografia viene impiegata in diversi contesti della sicurezza informatica: in particolare, ogni volta che è necessario utilizzare canali di comunicazione sicuri protetti dall’accesso da parte di soggetti non autorizzati, vengono utilizzate delle combinazioni crittografate. Queste combinazioni crittografate si affidano pesantemente all’utilizzo di algoritmi RNG che evitino ogni tipo di collisione nei valori delle stringhe alfanumeriche generate.
RNG e Smart Contract
Con l’avvento della blockchain, si rese necessario impiegare sistemi RNG anche per garantire la sicurezza degli Smart Contract. Le blockchain, però, non si rivelarono un ambiente adatto per l’utilizzo di questo tipo di algoritmi: le blockchain sono per definizione deterministiche, cioè sono entità logiche che per uno stesso input garantiscono sempre la produzione di un identico output. Questa caratteristica rese non impiegabili gli algoritmi RNG direttamente sulle macchine EVM (Ethereum Virtual Machine, il template per così dire di molte implementazioni blockchain) perché troppo a rischio di exploit da parte di hacker o script maliziosi. Per ottenere una generazione di numeri casuali davvero affidabile, si rese necessario ricorrere agli oracoli, impiegando il sistema degli RNG pseudocasuali. Uno dei metodi più utilizzati in questo senso è il VRF (“Verifiable Random Function”) sviluppato da Chain Link, che utilizza una combinazione di funzionalità on-chain ed off-chain per garantire la non riproducibilità della generazione casuale.
Ripercussioni in ambito Fintech
Con la crescente integrazione tra Fintech e blockchain, anche grazie al successo ottenuto dalla tokenizzazione degli asset in ambiti RWA (Real World Asset, ossia l’impiego di soluzioni blockchain per fare trading di asset reali), il nodo cruciale della collisione dei risultati prodotti dagli RNG è sempre più un tema scottante, sia per le ripercussioni in ambito di security, sia per l’operatività di Bot o script di management automatizzato delle posizioni. Sono stati sviluppati interessanti modelli di Machine Learning, impiegati per il forecast della volatilità di asset come azioni o materie prime, che utilizzano elementi di generazione random per costruire scenari di forecasting probabili, come ad esempio l’algoritmo Random Forest.
L’algortimo Random Forest
L’algoritmo della foresta casuale è un’estensione del metodo di bagging poiché utilizza la casualità per creare una foresta non correlata di alberi decisionali. La casualità delle funzionalità, nota anche come metodo del sottospazio casuale, garantisce una bassa correlazione tra gli alberi decisionali, che considerano tutte le possibili suddivisioni delle funzionalità, mentre le foreste casuali selezionano solo un sottoinsieme di tali funzionalità. In questo modo viene ridotto in modo significativo il rischio di over fitting, ossia che un modello restituisca risultati apparentemente validi solo perché in realtà lo scenario di simulazione è stato tagliato su misura per quel modello.
L’importanza del rumore in un dataset
Per questo motivo i data scientist tendono sempre maggiormente ad apprezzare i pattern di apprendimento che introducono “noise”, rumore per l’appunto, dentro ai modelli di Machine Learning. Il rumore, ossia una sorta di imprevedibile volatilità che impedisce il cristallizzarsi di pattern artificiosamente ricorrenti, garantisce la resilienza dei modelli di apprendimento, permettendo loro di adattarsi con successo alla variabilità delle situazioni del mondo reale.