Machine Learning: la mia esperienza

  • Ecco la 60° Edizione del settimanale "Le opportunità di Borsa" dedicato ai consulenti finanziari ed esperti di borsa.

    Questa settimana abbiamo assistito a nuovi record assoluti in Europa e a Wall Street. Il tutto, dopo una ottava che ha visto il susseguirsi di riunioni di banche centrali. Lunedì la Bank of Japan (BoJ) ha alzato i tassi per la prima volta dal 2007, mettendo fine all’era del costo del denaro negativo e al controllo della curva dei rendimenti. Mercoledì la Federal Reserve (Fed) ha confermato i tassi nel range 5,25%-5,50%, mentre i “dots”, le proiezioni dei funzionari sul costo del denaro, indicano sempre tre tagli nel corso del 2024. Il Fomc ha anche discusso in merito ad un possibile rallentamento del ritmo di riduzione del portafoglio titoli. Ieri la Bank of England (BoE) ha lasciato i tassi di interesse invariati al 5,25%. Per continuare a leggere visita il link

Ho provato a testare l'Hurst exponent su vari asset, principalmente Forex e commodities. Come previsto siamo quasi sempre sullo 0.5 tranne timeframe da H4 a D1 dove a 0.6/0.7 ci arrivi esponendo qualche trend sfruttabile. Questo credo che sia anche uno dei motivi per cui il mio modello non funzionerà mai, lo sto applicando ad una random walk.
Qualche consiglio su come approcciare meglio processi stocastici?
 
(Xeon 16 core, 32 gb RAM, NVIDIA che supporta CUDA, ma niente a che vedere con la workstation di Amartya, del resto quando presi questa workstation, i suoi impieghi erano concepiti per tutt'altro)

x.

Comunque non mi sembra scarsa. Ad occhio mi sembra più un problema di codice.

Come alloca la memoria?
E’ scritto in modo da sfruttare il calcolo parallelo? Puoi sfruttare i core che hai.
 
Comunque non mi sembra scarsa. Ad occhio mi sembra più un problema di codice.

Come alloca la memoria?
E’ scritto in modo da sfruttare il calcolo parallelo? Puoi sfruttare i core che hai.

credo tu abbia ragione, non è scritto in modo da usare il calcolo parallelo, memoria allocata dinamicamente, il suo utilizzo non supera l'6%. CPU non riservate esplicitamente .. tante cosine che alla fine faranno la differenza. Purtroppo in R non so ancora (nè se si può) utilizzare le funzioni C++ malloc() , calloc() , realloc(), aligned.
CPU_r.jpg
 
Ultima modifica:
credo tu abbia ragione, non è scritto in modo da usare il calcolo parallelo, memoria allocata dinamicamente, il suo utilizzo non supera l'6%. CPU non riservate esplicitamente .. tante cosine che alla fine faranno la differenza. Purtroppo in R non so ancora (nè se si può) utilizzare le funzioni C++ malloc() , calloc() , realloc(), aligned.
Vedi l'allegato 2742523

Le tue CPU sono autorizzate ma non le stai usando. Direi che tu hai a disposizione 32 core (16X2).

Se per te non è un problema potresti farmi vedere come esegui uno dei tuoi cicli for, uno di quelli pesanti.

Voglio vedere come lo esegui, magari ti posso dare una mano.
 

grazie.

DoParallel già lo uso, (lo script "incriminato" crea 4 sessioni di R che lavorano in parallelo) ma la % d'utilizzo della CPU appare rimanere sempre la stessa (35%), in effetti o non usa tutta la capacità , seppur questa volta ho impostato priorità "alta" , o la Gestione attività" di Windows non me la racconta giusta.
esecuzioneScriptR.png

Mentre le funzionalità Rcpp me le devo studiare.

grazie.
 
Ultima modifica:
Nel ringraziare amartya78 per le osservazioni in merito al modo di codificare, segnalo un'altro fronte di azione al fine di aumentare le prestazioni:
innanzitutto avevo le classiche impostazioni conservative del risparmio energetico che limitano le prestazioni della CPU al 1/3.
Come massimizzare il rendimento della CPU in Windows - Navigaweb.net
poi, in particolare credo Fullthrottle Override faccia i mio caso (ottimizzare le prestazioni solo per determinate app), sembra faccia tutto da se, previa abilitazione unatantum.

qualcuno lo ha mai usato?
 
Aggiorno sulla strategia di Zorro che sto testando: prima settimana chiusa in attivo di circa 900 euro (4000 euro circa di conto demo), oggi prima botta da circa 60 pips, 600 euro se ne vanno. Vediamo come prosegue, quello che mi perplime è come non si possa modificare la gestione del rischio e delle coppie di valute su cui agire.
 
Aggiorno sulla strategia di Zorro che sto testando: prima settimana chiusa in attivo di circa 900 euro (4000 euro circa di conto demo), oggi prima botta da circa 60 pips, 600 euro se ne vanno. Vediamo come prosegue, quello che mi perplime è come non si possa modificare la gestione del rischio e delle coppie di valute su cui agire.

correggo: consulta il manuale di Zorro, capitolo The Z Systems, ti dice anche come variare il capitale (con i cursori).
 
Ultima modifica:
correggo: consulta il manuale di Zorro, capitolo The Z Systems, ti dice anche come variare il capitale (con i cursori).
Quello lo so, peraltro non avendo la versione S ed essendo limitata la versione free appena suona per il segnale di ingresso "baro" aprendo un'altra posizione parallela (con almeno un lotto).
Più che il capitale mi interessava l'allocazione tra le varie coppie, spesso mi ritrovo 3/4 posizioni diverse e apre sempre uguale. Infatti mi capita di chiuderne una quando parte l'altra perchè se no mi arriva a margine. Il fatto è che la strategia avendo un portafoglio di svariate coppie su cui tradare non ti da modo di escluderne o aggiungerne altre. Vorrei per dire escluderne alcune che nel backtest singolo davano risultati meno brillanti ma non si può.
 
Ragazzi scusate: ho deciso di puntare su modelli statistici non lineari old school, vedi HMM/GMM o vari metodi di cattura dei regimi e dei cicli di mercato.
Prima però vorrei ottimizzare al meglio il mio XGBoost per vedere effettivamente quanto possa funzionare e quanto potenziale abbia.
Chiedo a voi una delucidazione sugli ultimi dubbi che mi attanagliano in merito al machien learning su time series, e riguardano tutti la gestione dello split tra train e test che blocca tutto il progetto. Non dovrei avere look ahead bias, tutti i features prendono dati da presente e passato e mai dal futuro. Quindi:
- come gestisco tutte le serie rolling, medie, std, fractional differentiation (che implica la media delle 100 barre precedenti) o return di varie barre nel passato? Cioè tutti i valori contenenti memoria di barre precedenti. Li calcolo per l'intera serie o quelle colonne le aggiungo al train set e poi replico la stessa cosa nel test? Da quello che ho capito farlo per l'intero set porterebbe ad overfitting andando poi a testare su dati che si portano appresso calcoli del train set. Ho provato a lasciare un gap di qualche giorno tra train e test ma non penso cambi, i dati del test sono comunque inficiati dal passato e non sono del tutto "nuovi". Qualcuno mi ha consigliato di farlo senza problemi con l'intero set a patto che poi nei dati live io usi lo stesso set di dati partendo precisamente dalla prima barra del train test. Esempio: train dal 1 gennaio 2010, feature della media mobile a 100 giorni sull'intero set. Splitto dopo, buon test. Poi nei dati streaming per applicarci il modello prendo i dati dallo stesso broker a partire dal 1 gennaio 2010, così funziona. Già se cambio broker o se parto che ne so dalle ultime due barre si sballa tutto.
- tutte le operazioni che riguardano filtering, riduzione del rumore, PCA ecc. vanno fatte prima dello split sull'intero set o dopo calcolandoli a parte sul train e poi sul test? Esempio: kalman filter o wavelet transform per il noise reduction, dove lo applico? Prima dello split e quindi facendo il test su dati già trattati o calcolandolo su train e poi test? Oppure sul train e lasciando pulito il test?
Ma soprattutto: nei dati live, quindi quelli ricevuti ogni barra chiusa dal broker su cui si applica il modello che produce il segnale e porta all'ordine, cosa applico di tutto ciò?
Ovviamente essendo XGBoost a base di decision trees devo usare gli stessi identici feature del train set, se no le regole non hanno senso. Ma, non so, una wavelet transform va applicata anche li?
Ultima cosa: mi avete fatto capire come usare solo un modello di ML sia inutile. Secondi voi è possibile implementare una wavelet o un hidden markov model come filtraggio dei cicli del prezzo (e non come denoising) e poi perfezionare le previsioni con un XGBoost (o qualsiasi altro modello tranne il deep learning che non ho studiato)? Se si come?
Come vedete sono confuso, vi ringrazio immensamente.
 
Si chiaramente non ci sono built in function. Se leggete bene io ottimizzo direttamente il mio modello che ovviamente non è in letteratura. Le funzioni base sono proprio di basso livello.

Il flat sul primo grafico dipende essenzialmente dal fatto che sulle ascisse ci sono i training set ma ogni training set può contenere x runs. Ora nel primo metodo per ogni training set ci sono y runs e nel secondo z runs, ma y>>z e quindi il training set risulta già convergente. Mentre essendo z molto più piccolo di y accade che il singolo training set non converge subito. È chiaro la il plot deriva da un sort (e scusate gli anglicismi), in quanto il ML funziona se e solo se ad ogni min(max) dell in sample ottengo un min(max) dell out-sample. Altrimenti la funzione linear dell out sample non e monotona crescente e nella migliore delle ipotesi ho il caos (metodo 1) e quindi non serve a nulla e nella peggiore addirittura è non ben definita cioè non so neanche cosa sto facendo. Quest ultimo caso c’è l ho quando gli stimatori sono maggiori dei dati. Cioè gradi di libertà negativi e minimo overfitting assicurato. In altri termini non ben definita significa che ogni elemento del condominio ho più di un elements del dominio.
Ora nel metodo 2 ho cambiato semplicemente la funzione obiettivo, la quale essendo che i gradi di liberta sono aumentati significa che fermo restando il numero degli stimatori i dati sono aumentati e quindi anche il costo computazionale.

La cosa interessante è che nel primo metodo ottengo per lo stesso modello risultati nell in sample che sono quasi 4 volte migliori del metodo 2, cioè approssimo nell in sample con il metodo 1 molto molto meglio del metodo 2 eppure mi sto portando appresso una quantità enorme di rumore e ciò si evince nell andamento flat dell out sample. La prova che nel metodo 1 il ML non funziona è che il linear dell dell out sample è davvero flat o meglio una random walk e pertanto l approssimazione lineare tramite regressione è costante. E questo ci da la prova oltre ogni ragionevole dubbio che il ML, o quel ML, non funziona.

Nel metodo 2 si ottiene ciò che si dovrebbe ottenere dal ML e cioè che l approssimazione tramite regressione in questo caso lineare dell insieme degli outcomes dell out sample e’ una funzione monotona crescente.

Senza perdere di generalità si può tranquillamente affermare (e dimostrare) che il ML funziona se e solo se il FIT (di qualsiasi tipo) degli outcomes dell out sample e’ una funzione monotona la cui slope sia di segno concorde al FIT ( dello stesso tipo dell out sample) degli outcomes dei training set nell in sample ordinati.

Nel metodo 2 si vede che mi sono sbarazzato del rumore e in mano mi è rimasto il segnale portante.

In sintesi sono davvero convinto che adesso il ML mi funzioni, ma non lo implementerò a breve perché me lo voglio gustare. Adesso voglio capirne il potenziale cioè quanto mi migliora rispetto alle capacità umane.

Ci vorrà un po’ di tempo.

Spero di aver dato il mio piccolo contributo a questo campo così affascinante ma anche così difficile.

Mi sono riletto tutto il topic per cogliere altri aspetti interessanti. Scusa se te lo chiedo ma è solo per vedere se ho capito, penso che in senso generico tu lo possa dire: tu in sostanza utilizzi come strategia di base lo statistical arbitrage (non pairs trading mi pare di capire) selezionando assets e classes tramite NN (che quindi serve per lo stock picking, cioè per individuare le coppie inefficienti) e ottimizzando sia le NN che tutto il resto, compreso il backtest, con la simulazione Monte Carlo. Il tutto ovviamente apportando modifiche innovative tue. Ho capito bene?
 
Federico Juvara, se posso permettermi: stai sbagliando completamente approccio.

Lascia perdere le tecniche e i modelli, quelli vengono per ultimi quando hai chiaro cosa vuoi catturare.

La cosa che tu devi aver chiaro prima di iniziare a scrivere la prima riga di codice, prima ancora di scegliere il linguaggio, prima di progettare l'infrastruttura informatica e persino prima di scegliere l'intermediario: quale "eccesso" del comportamento degli attori di mercato vuoi catturare.

Persistenza nelle tendenze? Premio al rischio? Ritorno verso la media di portafogli cointegrati? Sottovalutazione degli eventi di coda per poca memoria storica? Elabora una teoria, chiediti chi compra, chi vende, perché lo fanno (sono obbligati?) e cosa sono costretti a trascurare mentre lo fanno.

Quando hai risposto a queste domande, ci saranno dei punti che ti richiederanno di quantificare delle grandezze con delle stime: solo in quel momento puoi cominciare a spulciare il manuale di scikit-learn per vedere cosa fa al caso tuo.

Altrimenti stai modellando solo rumore.
 
Federico Juvara, se posso permettermi: stai sbagliando completamente approccio.

Lascia perdere le tecniche e i modelli, quelli vengono per ultimi quando hai chiaro cosa vuoi catturare.

La cosa che tu devi aver chiaro prima di iniziare a scrivere la prima riga di codice, prima ancora di scegliere il linguaggio, prima di progettare l'infrastruttura informatica e persino prima di scegliere l'intermediario: quale "eccesso" del comportamento degli attori di mercato vuoi catturare.

Persistenza nelle tendenze? Premio al rischio? Ritorno verso la media di portafogli cointegrati? Sottovalutazione degli eventi di coda per poca memoria storica? Elabora una teoria, chiediti chi compra, chi vende, perché lo fanno (sono obbligati?) e cosa sono costretti a trascurare mentre lo fanno.

Quando hai risposto a queste domande, ci saranno dei punti che ti richiederanno di quantificare delle grandezze con delle stime: solo in quel momento puoi cominciare a spulciare il manuale di scikit-learn per vedere cosa fa al caso tuo.

Altrimenti stai modellando solo rumore.
Ciao Cren, grazie per la riflessione.
Il tuo è l'approccio più sensato ma mi chiedo se non sia più adatto alla statistica classica rispetto al data mining. Nel senso che il paradigma obiettivo/pattern -> modello per cercarlo è più strettamente statistico di quello del ML che funziona tipo data -> obiettivo -> modello a cercare pattern.
Con la statistica definisci un pattern e poi il modello per scovarlo, col ML accumuli dati e applichi un modello per cercare qualsiasi pattern che predica il tuo obiettivo.
Dimmi se sbaglio eh, è solo una mia idea.
In fondo se ci pensi il ML come scelta è molto semplice. Devi scegliere se fare una regressione e se farla lineare o non lineare oppure se usare una classificazione. Gli approcci lineari non funzionano e spiegano poco quindi già è ridotta la scelta. Alcuni modelli sono tecnicamente simili (logistic regression e SVM per dire) quindi pure la si riduce la scelta. Alla fine ne rimangono pochi, e infatti non mi sono mai concentrato tanto sulla scelta del modello ma piuttosto sulla scelta dei dati. Che infatti è IL mio problema.
"Quello che voglio catturare", e non so se fosse questo quello che volevi dire, lo registro nel target label. Il feature da predire nei modelli Supervised per capirci. E su quello la scelta non è infinita, cioè quello che dici te ha poco margine. Return futuri, return futuri normalizzati dalla volatilità, volatilità stessa, prezzi raw. Alla fine quello è. Tieni presente che io sto studiando tutto tranne NN e Deep Learning che sono un mondo a parte e che mi rendono molto limitato nelle scelte.
Cioè è difficile usare la sharpe ratio come feature in una random forest, piuttosto è utilissima in un modello di Deep Learning. Fare una strategia di pair trading con un gradient boosting è surreale. Però col gradient boosting non serve che tu scelga un approccio mean reversion o momentum, se ci sono pattern e regole in merito le scova lui in base ai dati che dai. Piuttosto ritengo sia utile capire tramite test (tipo Hurst) se la serie dell'asset in oggetto sia stocastica o abbia tendenze. Se è stocastica la scarti proprio essendo imprevedibile.
"Quello che voglio catturare" lo si vede anche nella scelta delle variabili, dei dati da allenare inseriti nel modello. Ma pure la in base all'asset o al timeframe fai tutta la feature engineering più adatta e il modello stesso sceglie i feature migliori. Poi certamente la scelta delle serie di dati è il 90% del lavoro, lo so. Ma finchè non ho risposte e non so come trattarli bene (in fondo è questa la mia domanda) senza evitare bias e overfit è inutile iniziare proprio. Finchè non so bene cosa poter fare sull'intero dataset e cosa dividere tra train e test, finchè non so bene come trattare i dati streaming live è inutile pensare a tutto visto che tanto prima o poi ci casco. Per come sono fatto e per la mia impostazione mentale quando approccio alle materie ed ai problemi devo prima avere chiari tutti i passaggi e tutti i problemi eventuali in senso generico. Poi approfondisco ogni step, magari scoprendo bias nuovi, ma avendo comunque sempre presente tutto il processo.
Qua mi manda ai matti il rapporto tra dati e train test split. Mi manda ai matti non capire quali trattamenti siano possibili sul dataset intero e quali vadano divisi. Mi manda ai matti non capire quanto i dati live debbano riprodurre quelli del train, stessa cosa per il test rispetto al train. Notoriamente si sa che i dati del test debbano essere illibati, puri, immacolati. Ma come faccio a non portarmi appresso tutte le serie storiche rolling o i return lontani nel passato? Una media mobile a 100 me la porto nel test. Un return a t-20 pure. Ma poi se applico un wavelet transform o un kalman filter o dei filtri bandpass come faccio a mantenere i dati test immacolati? Capisci come tutto questo, anche usando il tuo approccio, prima o poi lo devo affrontare. Anzi quasi subito visto che parliamo di una delle prime fasi. Posso pure cambiare approccio ma questo lo dovrò affrontare e mi passa la voglia. Spero di essermi spiegato.
Sei molto più esperto di me quindi dimmi se sbaglio, ripeto come sia solo la mia idea e pertanto opinabilissima.
 
ueee @Cren
baciamo le mani

C
Don cammello, i miei saluti :D
@Blacksmith.: :yeah:
@eni_student: Interactive Brokers oppure Binck, ETF non armonizzati ma tanto faccio tutto con opzioni.
@Federico Juvara: il problema che ti poni, cioé quali dati gli do in pasto, è proprio l'unico nodo centrale della questione. Devi rispondere alla domanda: cosa voglio modellare? Finché dai dentro come target label dei rendimenti e poi ti metti a creare feature semplicemente usando delle elaborazioni dei rendimenti/prezzi passati, stai assumendo che il tuo modello riesca a catturare delle persistenze nel passato (qui la distinzione tra statistica e ML è sottile, anche una regressione lineare può essere usata per trovare pattern anziché per validare delle ipotesi, ma questo non significa necessariamente che ci siano pattern da trovare).

Sulla persistenza: puoi misurare tutto quello che vuoi con Hurst, con l'ADF e il SADF, con il CUSUM etc. ma i problemi sono sempre due:
  1. non hai idea di quale campione usare (anche se questa si può risolvere);
  2. nessuno ti assicura che ciò che hai misurato cambi comportamento proprio dall'istante successivo alla tua misurazione, evenienza fastidiosamente frequente sui mercati.
Insisto che ti manca una qualche teoria dietro che spieghi i comportamenti degli operatori, e questo me lo conferma il fatto che ti viene l'idea di fare trading su uno spread mediante GB quando in realtà il problema è proprio individuare uno spread che non sia "ovvio" e visibile da tutti: quando hai in mano una serie davvero stazionaria, basta anche l'occhio umano per entrare e uscire, non serve il ML... il problema è trovare questa serie e, una volta che l'hai trovata, capire se c'è realmente un fondamento dietro la sua stazionarietà legato ad es. a motivi di non arbitraggio o ai ribilanciamenti di portafoglio di fondi o altro.
 
Don cammello, i miei saluti :D

@Blacksmith.: :yeah:

@eni_student: Interactive Brokers oppure Binck, ETF non armonizzati ma tanto faccio tutto con opzioni.

@Federico Juvara: il problema che ti poni, cioé quali dati gli do in pasto, è proprio l'unico nodo centrale della questione. Devi rispondere alla domanda: cosa voglio modellare? Finché dai dentro come target label dei rendimenti e poi ti metti a creare feature semplicemente usando delle elaborazioni dei rendimenti/prezzi passati, stai assumendo che il tuo modello riesca a catturare delle persistenze nel passato (qui la distinzione tra statistica e ML è sottile, anche una regressione lineare può essere usata per trovare pattern anziché per validare delle ipotesi, ma questo non significa necessariamente che ci siano pattern da trovare).

Sulla persistenza: puoi misurare tutto quello che vuoi con Hurst, con l'ADF e il SADF, con il CUSUM etc. ma i problemi sono sempre due:
  1. non hai idea di quale campione usare (anche se questa si può risolvere);
  2. nessuno ti assicura che ciò che hai misurato cambi comportamento proprio dall'istante successivo alla tua misurazione, evenienza fastidiosamente frequente sui mercati.
Insisto che ti manca una qualche teoria dietro che spieghi i comportamenti degli operatori, e questo me lo conferma il fatto che ti viene l'idea di fare trading su uno spread mediante GB quando in realtà il problema è proprio individuare uno spread che non sia "ovvio" e visibile da tutti: quando hai in mano una serie davvero stazionaria, basta anche l'occhio umano per entrare e uscire, non serve il ML... il problema è trovare questa serie e, una volta che l'hai trovata, capire se c'è realmente un fondamento dietro la sua stazionarietà legato ad es. a motivi di non arbitraggio o ai ribilanciamenti di portafoglio di fondi o altro.
Quello che dici lo capisco, figurati. E ci sta. Proprio per questo sto puntando su modelli specifici per i cambi di regime o di stato, tipo Hidden Markov Models o Gaussian Mixture Models. Ma pure tutto il filone della spectral analysis e dei filtri. Proprio per valutare le persistenze nel passato. Sui campioni (nel caso tu intenda quanto andare dietro nel passato, cioè se partire dal 2000 o dal 2010) come dici tu si può risolvere.
Però se ci pensi un XGBoost, o comunque i modelli tree based, più che trovare pattern ed inefficienze vere e proprie dei prezzi stabiliscono regole incrociate tra le feature. Del tipo "se RSI <10 e return t-1 la candela dopo al 70% è long". A mio avviso sono molto più dipendenti dalle feature scelte ed è il motivo per cui nel trading funzionino raramente, nonostante siano i modelli più avanzati e più usati nei tornei. Sbaglio?
Tu mi insegni che nessuna serie sia stazionaria, per renderla tale si usano le trasformazioni. Return al posto dei prezzi o fractional differentiation per dire. Perchè dici che il problema sia trovarne una stazionaria? In realtà tutte diventano più o meno stazionarie trasformandole.
Io come asset uso quasi esclusivamente Forex e crypto, quindi mercati otc. Poi vabbè etf ma per investimenti a medio lungo termine, altra questione. Già questo mi porta ad altri approcci e ad escludermi dalle molte possibilità dell'azionario ad esempio.
La questione operatori sinceramente non l'ho capita, non ne capisco il nesso con sistemi quantitativi. A meno che tu non parli di analisi fondamentale (ma è un approccio swing e volendo discrezionale) o all'opposto di HFT sul book. Cioè tecniche di arbitraggio (che non uso e non ritengo profittevoli da retail) non hanno vie di mezzo. O le fai hft o alla lunga. Dimmi se ho capito male.
"capire se c'è realmente un fondamento dietro la sua stazionarietà" teoricamente è comprensibile, il "come" per me spazia dai riti sciamanici all'utilizzo della fisica quantistica quindi sono confuso.
Ne approfitto per farti alcune domande, visto che sei un esperto:
- quale ritieni sia la strada migliore nella scelta del target label? Escludendo reti neurali/deep learning e dati macro azionari.
- quando dici di cercare una teoria che non sia "ovvia", e senza dubbio concordo, puoi essere più specifico nell'indirizzarmi su materie specifiche o approcci di ricerca specifici? Te lo chiedo con lo stesso spirito del mio primo post qua sopra. Dopo anni di sofferenza (ma anche soddisfazioni) e ricerche a vuoto totalmente autodidatta penso di meritarmi un professionista che circoscriva campo e fonti per concentrarmi su quelle senza perdere altro tempo appresso a strade senza uscita.
Ovviamente non voglio segreti o strategie, però facendo un esempio a caso un "lascia perdere il machine learning classico usa il reinforcement learning e cerca le inefficienze coi fondi di bicchiere e usa questo libro che ti indirizza bene e studiati questo e quest'altro e i dati è meglio trattarli così e colà" sarebbe gradito :D
 
Indietro