Introducere în Deep Learning Trading în fonduri speculative
Publicat: 2022-03-11În ultimii ani, rețelele neuronale profunde au devenit extrem de populare. Acest domeniu emergent al informaticii a fost creat în jurul conceptului de rețele neuronale biologice, iar învățarea profundă a devenit un cuvânt la modă astăzi.
Oamenii de știință și inginerii de deep learning încearcă să descrie matematic diferite modele din sistemele nervoase biologice. Sistemele de învățare profundă au fost aplicate la diferite probleme: viziunea computerizată, recunoașterea vorbirii, procesarea limbajului natural, traducerea automată și multe altele. Este interesant și incitant că în unele sarcini, învățarea profundă a depășit experții umani. Astăzi, vom arunca o privire asupra învățării profunde în sectorul financiar.
Una dintre cele mai atractive aplicații ale învățării profunde este fondurile speculative. Fondurile speculative sunt fonduri de investiții, organizații financiare care strâng fonduri de la investitori și le gestionează. De obicei, lucrează cu date din seria temporală și încearcă să facă niște predicții. Există un tip special de arhitectură de învățare profundă care este potrivită pentru analiza seriilor temporale: rețelele neuronale recurente (RNN) sau chiar mai precis, un tip special de rețea neuronală recurentă: rețelele de memorie pe termen scurt (LSTM).
LSTM-urile sunt capabile să capteze cele mai importante caracteristici din datele din seria temporală și să modeleze dependențele acestora. Un model de predicție a prețului acțiunilor este prezentat ca un studiu de caz ilustrativ despre modul în care fondurile speculative pot utiliza astfel de sisteme. Cadrul PyTorch, scris în Python, este folosit pentru a antrena modelul, a proiecta experimente și a trage rezultatele.
Vom începe cu câteva elemente de bază ale învățării profunde înainte de a trece la exemple din lumea reală:
- Introduceți învățarea profundă ca un concept abstract.
- Introduceți RNN-uri sau, mai precis, LSTM-uri și modul în care acestea pot fi utilizate pentru a modela datele din seria temporală.
- Familiarizați cititorii cu datele financiare potrivite pentru învățarea profundă.
- Ilustrați modul în care un fond de acoperire real folosește învățarea profundă pentru a prezice prețurile acțiunilor.
- În cele din urmă, oferiți recomandări acționabile pentru fondurile speculative noi și existente cu privire la modul de utilizare/valorificare a învățării profunde pentru a le crește performanța.
Prezentarea cazului pentru Deep Learning Trading
Una dintre cele mai provocatoare și mai interesante sarcini din industria financiară este de a prezice dacă prețurile acțiunilor vor crește sau scădea în viitor. Astăzi, suntem conștienți de faptul că algoritmii de învățare profundă sunt foarte buni în rezolvarea sarcinilor complexe, așa că merită să încercăm să experimentăm cu sisteme de învățare profundă pentru a vedea dacă pot rezolva cu succes problema de a prezice prețurile viitoare.
Ca concept, rețeaua neuronală artificială există de mult timp, dar hardware-ul nu a fost suficient de bun pentru a permite experimente rapide în învățarea profundă. Nvidia a contribuit la revoluționarea rețelelor de învățare profundă în urmă cu un deceniu, deoarece a început să ofere unități de procesare grafică (GPU) foarte rapide pentru calcularea de uz general în produsele din seria Tesla. În loc să umbrească poligoane în jocuri și aplicații profesionale de design, GPU-urile extrem de paralelizate pot calcula și alte date și, în multe cazuri, sunt cu mult superioare procesoarelor.
Există foarte puține lucrări științifice despre utilizarea învățării profunde în finanțe, dar cererea de experți în învățarea profundă de la companiile fintech este puternică, deoarece acestea îi recunosc în mod evident potențialul. Acest articol va ajuta la explicarea de ce învățarea profundă în finanțe devine din ce în ce mai populară, subliniind modul în care datele financiare sunt utilizate în construirea sistemelor de învățare profundă. Un tip special de rețea neuronală recurentă — rețeaua LSTM — va fi de asemenea prezentat. Vom sublinia modul în care o sarcină legată de finanțe poate fi rezolvată folosind rețele neuronale recurente.
Acest articol prezintă, de asemenea, un studiu de caz ilustrativ despre modul în care fondurile speculative pot utiliza astfel de sisteme, prezentat prin experimente. Vom lua în considerare, de asemenea, modul în care sistemele de învățare profundă pot fi îmbunătățite și cum pot fondurile speculative să angajeze talente pentru a construi acele sisteme, adică ce fel de pregătire trebuie să aibă talentul de învățare profundă.
Ce face fondurile speculative diferite
Înainte de a trece la aspectul tehnic al problemei, trebuie să explicăm ce face fondurile speculative unice. Deci, ce este un fond speculat?
Un fond speculativ este un fond de investiții — o organizație financiară care strânge fonduri de la investitori și îi plasează în investiții pe termen scurt și lung, sau în diferite produse financiare. Este de obicei format ca o societate în comandită sau o societate cu răspundere limitată. Scopul unui fond speculativ este de a maximiza randamentele. Un randament este un câștig sau o pierdere din valoarea netă a fondurilor speculative într-o anumită perioadă de timp. Este în general acceptat că atunci când se asumă mai mult risc, există un potențial mai mare pentru randamente și pierderi mai mari.
Pentru a obține randamente bune, fondurile speculative se bazează pe diverse tipuri de strategii de investiții, încercând să câștige bani exploatând ineficiența pieței. Din cauza diverselor strategii de investiții care nu sunt permise în fondurile obișnuite de investiții, fondurile speculative nu sunt înregistrate ca fonduri, adică nu sunt de obicei supravegheate de stat ca și alte fonduri. Nu trebuie să-și publice strategiile de investiții și rezultatele afacerii, ceea ce îi poate face destul de riscanți. Unele fonduri speculative generează mai mulți bani decât media pieței, dar unele dintre ele pierd bani. Unele dintre ele aduc rezultate permanente, în timp ce unele dintre rezultatele fondurilor speculative sunt variabile.
Investind în fonduri speculative, investitorii măresc valoarea netă a fondului. Totuși, nu oricine poate investi în fonduri speculative. Fondurile speculative sunt destinate unui număr mic de investitori bogați. De obicei, cei care doresc să participe la fonduri speculative trebuie să fie acreditați. Asta înseamnă că trebuie să aibă un statut special în ceea ce privește legile de reglementare financiară. Există o distincție de la țară la țară cu privire la cine poate avea acel statut special. De obicei, valoarea netă a unui investitor trebuie să fie foarte mare – nu numai persoanele fizice, ci și băncile și marile corporații pot opera și în fonduri speculative. Această acreditare este concepută pentru a permite doar persoanelor cu cunoștințe semnificative în materie de investiții să participe, protejând astfel investitorii mici și fără experiență de riscuri.
Acest articol ia în considerare cadrul de reglementare al SUA, întrucât Statele Unite au cea mai dezvoltată piață financiară de pe glob. Deci, în Statele Unite ale Americii, termenul „investitor acreditat” este definit în Regula 501 din Regulamentul D al Comisiei pentru Valori Mobiliare și Schimb (SEC) din SUA.
Potrivit acestui regulament, investitorii acreditați pot fi:
- Băncile
- Companii private de dezvoltare a afacerilor
- Organizații
- Directorii, directorii executivi și partenerii generali ai emitenților valorilor mobiliare oferite sau vândute
- Persoane fizice a căror valoare netă individuală sau avere comună cu soțul persoanei respective depășește 1.000.000 USD
- Persoane fizice care au avut un venit individual de peste 200.000 USD în fiecare dintre cei mai recenti doi ani sau un venit comun cu soțul persoanei respective de peste 300.000 USD în fiecare dintre acei ani și au o așteptare rezonabilă de a atinge același nivel de venit în anul curent
- Trusturi cu active totale de peste 5.000.000 USD
- Entități în care toți deținătorii de capitaluri proprii sunt investitori acreditați
Administratorii fondurilor speculative gestionează fondul speculativ. Un manager de fond speculativ trebuie să găsească o modalitate de a crea un avantaj competitiv pentru a avea succes, adică de a crea un avantaj față de rivali și abilitatea de a genera o valoare mai mare. Poate fi o alegere de carieră foarte atractivă, deoarece poate fi foarte profitabilă dacă o persoană excelează la gestionarea fondului.
Pe de altă parte, dacă multe decizii ale managerilor de fonduri speculative se dovedesc a fi proaste, acestea nu vor fi plătite și vor câștiga o reputație negativă. Cei mai buni administratori de fonduri speculative reprezintă una dintre cele mai bine plătite profesii din toate industriile. Administratorii de fonduri speculative primesc un procent din randamentul pe care îl câștigă pentru investitori, în afară de comisionul de administrare. Această modalitate de compensare îi face pe managerii fondurilor speculative să investească mai agresiv pentru a obține randamente mai mari, dar, pe de altă parte, aceasta duce și la creșterea riscului investitorului.
O scurtă istorie a fondurilor speculative
Primul fond speculativ a apărut în 1949, înființat de fostul scriitor și sociolog Alfred Winslow Jones. Era în timp ce scria un articol despre tendințele actuale de investiții pentru Fortune, în 1948.
A încercat să gestioneze banii și a avut mare succes. El a strâns bani folosind inovația sa de investiții, care este acum cunoscută sub numele de acțiuni long/short. Strategia este încă foarte populară în rândul fondurilor speculative. Acțiunile pot fi cumpărate (cumpărare: lung) sau vândute (vânzare: scurt).
Când prețul unei acțiuni este scăzut și se preconizează că prețul unei acțiuni va crește, este logic să cumpărați o acțiune (long) și să o vindeți (short) de îndată ce atinge vârful său ridicat de preț și că este exact scopul inovației pe care Alfred Winslow Jones a făcut-o - luarea de poziții lungi în acțiuni care se așteaptă să se aprecieze și poziții scurte în acțiuni care se așteaptă să scadă.
Date financiare și seturi de date
Datele financiare aparțin datelor din seria temporală. O serie temporală este o serie de puncte de date indexate în timp. De obicei, o serie de timp este o secvență luată în momente succesive, egal distanțate în timp: o secvență de date în timp discret. Exemple de serii temporale sunt înălțimile mareelor oceanice, numărul petelor solare și valoarea zilnică de închidere a Dow Jones Industrial Average.
Datele istorice în acest context sunt date din serii cronologice din trecut. Este una dintre cele mai importante și mai valoroase părți pentru speculații despre prețurile viitoare. Există câteva seturi de date disponibile public online, dar, de obicei, acele date nu conțin multe caracteristici - de obicei sunt date pe intervale de 1 zi, date pe intervale de 1 oră sau date pe intervale de 1 minut.
Seturile de date cu caracteristici mai bogate și pe intervale de timp mai mici nu sunt de obicei disponibile public și pot fi foarte costisitoare de obținut. Intervale mai mici înseamnă mai multe date de serie temporală într-o perioadă fixă - într-un an sunt 365 (sau 366) de zile, deci sunt disponibile maximum 365 (sau 366) puncte de date. Fiecare zi are 24 de ore, deci într-un an sunt disponibile 8.760 (sau 8.784) puncte de date pe oră și fiecare zi are 86.400 de minute, deci într-un an sunt disponibile 525.600 (sau 527.040) puncte de date minute.
Cu mai multe date, sunt disponibile mai multe informații și, cu mai multe informații, este posibil să tragem concluzii mai bune despre ceea ce se va întâmpla în următoarea perioadă de timp - presupunând, desigur, că datele constau într-o caracteristică suficient de bună pentru a generaliza bine. Datele privind prețul acțiunilor din 2007-2008, la apogeul crizei financiare globale, sunt părtinitoare și probabil nu sunt relevante pentru a face previziuni de preț în zilele noastre. Cu un interval de timp mai mic, este mai ușor să preziceți ce se va întâmpla în continuare datorită multor puncte de date într-un interval fix. Este mai ușor de prezis ce se va întâmpla în următoarea nanosecundă dacă avem toate punctele de date pentru fiecare nanosecundă într-un interval fix de n
ani decât ceea ce se va întâmpla pe bursa anul viitor dacă avem toate cele n
puncte de date pentru fiecare an în un interval fix de n
ani.
Cu toate acestea, asta nu înseamnă că, presupunând că o serie rapidă de predicții pe termen scurt este corectă, și predicția pe termen lung ar trebui să fie corectă. Fiecare predicție introduce eroare și, prin înlănțuirea mai multor predicții, predicția pe termen lung va conține o cantitate semnificativă de eroare în cele din urmă și va fi inutilă. Mai jos este un exemplu de date cu interval de 1 zi pentru acțiunile Google colectate online de la Yahoo Finance.
Există doar câteva coloane în setul de date: Data, Open, High, Low și Close—respectiv, prețul la care un titlu se tranzacționează pentru prima dată la deschiderea unei burse, cel mai mare preț pe care titlul la atins într-o anumită zi de tranzacționare. , cel mai mic preț atins într-o anumită zi de tranzacționare și prețul final la care un titlu este tranzacționat în acea zi.
De obicei, mai există două coloane în astfel de seturi de date — Închidere ajustată și Volum, dar nu sunt relevante aici. Închiderea ajustată este prețul de închidere după ajustările pentru împărțirile aplicabile și distribuțiile de dividende, în timp ce Volumul este numărul de acțiuni tranzacționate pe piață într-o anumită perioadă de timp.
Puteți vedea că unele dintre date lipsesc. Acestea sunt zilele în care bursa nu funcționează, de obicei în weekend și sărbători. În scopul demonstrației noastre a algoritmului de învățare profundă, zilele lipsă sunt suplimentate cu prețul disponibil anterior. De exemplu, prețurile de închidere pentru 2010-01-16, 2010-01-17, 2010-01-18 vor fi toate 288,126007, deoarece asta era în 2010-01-15. Este important pentru algoritmul nostru ca datele să fie fără lacune, astfel încât să nu le confundăm. Algoritmul de învățare profundă ar putea învăța de aici când sunt weekend-urile și vacanțele - de exemplu, va afla că după cinci zile lucrătoare, trebuie să existe două zile cu prețuri fixe din ultima zi lucrătoare.
Acesta este un grafic al mișcărilor prețului acțiunilor Google începând cu 2010-01-04. Rețineți că numai zilele de tranzacționare sunt utilizate pentru a reprezenta grafic.
Ce este Deep Learning?
Învățarea profundă este o parte a învățării automate și se bazează pe reprezentările datelor de învățare. Învățarea automată examinează algoritmi a căror funcționalitate nu este programată, ci învățată din date. Este în esență o abordare a inteligenței artificiale.
Învățarea profundă a fost aplicată în diverse domenii: viziunea computerizată, recunoașterea vorbirii, procesarea limbajului natural, traducerea automată – iar în unele dintre aceste sarcini, a atins performanțe superioare oamenilor.
O rețea neuronală profundă este în centrul învățării profunde. Cel mai simplu și de bază exemplu de rețea neuronală profundă este o rețea neuronală feedforward. Mai jos este o imagine a unei rețele neuronale simple de tip feedforward. Este format din straturile de intrare și de ieșire și din straturile ascunse.
Straturile ascunse sunt toate straturile dintre straturile de intrare și de ieșire. Spunem că o rețea neuronală este adâncă dacă are mai mult de un strat ascuns. Fiecare strat este format din diferite numere de neuroni. Straturile din această rețea neuronală de tip feedforward de bază sunt numite straturi liniare - neuronii din stratul liniar înmulțesc doar valorile 1-D (sau 2-D dacă datele sunt trimise prin rețea în loturi) cu o greutate adecvată, însumează produsele împreună și dați rezultatul final ca rezultat 1-D sau 2-D.
Funcția de activare este de obicei aplicată în rețelele feedforward pentru a introduce neliniarități, astfel încât rețeaua să poată modela probleme mai complexe, neliniare. În rețelele de tip feedforward, datele circulă de la nivelul de intrare în cel de ieșire fără să se efectueze bucla înapoi. Conexiunile dintre neuroni sunt ponderate. Greutățile trebuie ajustate astfel încât rețeaua neuronală să returneze ieșirile corecte pentru intrările date. Rețeaua feedforward mapează datele din spațiul de intrare în spațiul de ieșire. Straturile ascunse extrag caracteristici importante și mai abstracte din caracteristicile stratului anterior.
Canalul general de învățare profundă este același cu canalul de învățare automată și constă din următorii pași:
- Colectare de date. Datele sunt separate în trei părți: date de antrenament, date de validare și date de testare.
- Antrenarea DNN folosind datele de antrenament pe un număr de „epoci” (fiecare constând dintr-un număr de iterații) și validarea după fiecare epocă folosind datele de validare.
- Testarea modelului (o instanță de rețea neuronală cu parametrii fixați) după succesiunea sesiunilor de antrenament și validări.
Antrenarea rețelei neuronale înseamnă de fapt ajustarea greutăților dintre perechile de neuroni prin reducerea la minimum a funcției de pierdere folosind un algoritm de propagare inversă în combinație cu coborârea gradientului stocastic. Cu excepția ponderilor care sunt determinate prin procesul de învățare, algoritmii de învățare profundă necesită de obicei setarea hiperparametrilor - parametri care nu sunt învățați, dar fixați înainte de învățare. Hiperparametrii sunt numărul de straturi, numărul de neuroni din straturi, tipurile de straturi, tipurile de neuroni și inițializarea greutății.
Există restricții hardware în setarea hiperparametrilor; în prezent, nu este posibil din punct de vedere fizic să setați un trilion de neuroni pe un singur GPU. A doua problemă pentru căutarea exhaustivă a hiperparametrilor este explozia combinatorie; nu este posibilă căutarea prin toate combinațiile posibile de hiperparametri deoarece ar dura un timp infinit. Din acest motiv, hiperparametrii sunt stabiliți aleatoriu sau folosind unele euristice și exemple binecunoscute care sunt descrise în lucrări științifice - unul dintre hiperparametrii utilizați pentru analiza datelor financiare prezentate mai târziu în această postare de blog este utilizarea neuronilor recurenți, ca oameni de știință și ingineri. au dovedit că funcționează bine cu datele din seria temporală. De obicei, cel mai bun mod de a vedea dacă hiperparametrii pentru o anumită problemă sunt buni sau nu este prin experimente.
Scopul antrenamentului este de a face rețelele neuronale să se potrivească cu datele de antrenament. Atât validarea modelului, care se face după fiecare pas de antrenament, cât și testarea modelului, care se face după întreaga procedură de antrenament, se fac pentru a vedea dacă modelul se poate generaliza bine. Generalizarea înseamnă că rețeaua neuronală poate face predicții bune asupra datelor noi, nevăzute.
Există doi termeni importanți legați de selecția modelului: supraajustare și underfitting . Dacă o rețea neuronală este prea complexă în ceea ce privește datele pe care este antrenată - dacă are prea mulți parametri (prea multe straturi și/sau prea mulți neuroni în straturi) - rețeaua neuronală poate supraadapta datele. Se poate adapta bine la datele de antrenament, deoarece are o capacitate mai mult decât suficientă pentru a se potrivi cu toate datele, dar apoi performanța la seturile de validare și de testare este slabă.

Dacă rețeaua neuronală este prea simplă în ceea ce privește datele pe care este antrenat, rețeaua neuronală poate subadapta datele. În acest caz, rețeaua neuronală are performanțe slabe la antrenament, validare și seturi de testare, deoarece capacitatea sa nu este suficient de bună pentru a se potrivi cu datele de antrenament și pentru a generaliza. În imaginea de mai jos, acești termeni sunt explicați grafic. Linia albastră reprezintă ceea ce este modelat de rețeaua neuronală. Prima imagine arată situația în care sunt puțini parametri ai rețelei neuronale, insuficienți pentru a se potrivi cu datele de antrenament și pentru a generaliza. A doua imagine arată situația în care există numărul optim de parametri și rețeaua neuronală se poate generaliza bine pe date nevăzute, iar a treia imagine arată situația când numărul de parametri ai unei rețele neuronale este prea mare și rețeaua neuronală poate perfect. se potrivesc cu toate datele din setul de antrenament, dar are performanțe slabe la seturile de validare și de testare.
Rețele neuronale recurente
O versiune mai complicată a unei rețele neuronale este o rețea neuronală recurentă. În rețelele neuronale recurente, datele pot circula în orice direcție, spre deosebire de rețelele neuronale feedforward. Ei pot învăța bine dependențele din seria de timp. Arhitectura unei rețele neuronale recurente generale este prezentată în imaginea de mai jos.
În imaginea de mai jos este prezentat un neuron recurent. Acesta ia X_{t}
, punct în timp t
, ca intrare și returnează h_{t}
, stare ascunsă în timpul t
, ca ieșire. Ieșirea ascunsă este propagată înapoi la neuron. Neuronul recurent poate fi derulat așa cum este afișat în aceeași imagine din partea dreaptă. X_{t_0}
este un punct în perioada de timp t_{0}
, X_{t_1}
în perioada de timp t_{1}
și X_{t}
în perioada de timp t
. Ieșirile obținute folosind intrările X_{t_0}
, X_{t_1}
, …, X_{t_n}
în perioadele de timp t_{0}
, t_{1}
, …, t_{n}
sunt așa-numitele ieșiri ascunse: h_{t_0}
, h_{t_1}
, …, respectiv h_{t_n}
.
Una dintre cele mai bune arhitecturi de rețele neuronale recurente este arhitectura LSTM. LSTM este prezentat mai jos:
LSTM-urile au aceeași structură generală ca și rețelele neuronale recurente generale, dar neuronul recurent este puțin diferit cu o structură mai complexă. Din imaginea de mai sus se poate observa că se fac multe calcule în interiorul unei celule LSTM. Celulele LSTM pot fi observate ca o cutie neagră în contextul acestei postări, dar pentru cititorii mai curioși, această postare grozavă de blog explică calculele din interiorul LSTM-urilor și multe altele.
Să numim intrarea pentru rețeaua neuronală „vector de caracteristică”. Este un vector n
-dimensional ale cărui elemente sunt caracteristici: f_{0}
, f_{1}
, f_{2}
…, f_{n}
.
\vv{X} = [f_{0}, f_{1}, f_{2}, …, f_{n}]
Acum, să explicăm cum pot fi aplicate rețelele neuronale recurente unei sarcini legate de finanțe. Intrarea pentru rețeaua neuronală recurentă este [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}]
. Să presupunem că n = 5
. Luăm cinci prețuri acțiunilor Google Close din cinci zile consecutive (vezi tabelul cu date Deschidere/Ridicată/Scăzută/Închidere de mai sus) între, să spunem, 2010-01-04 și 2010-01-08, adică [[311.35], [309.98], [302.16], [295.13], [299.06]]
. Vectorul caracteristic din acest exemplu este unidimensional. Secvența de timp constă din cinci astfel de vectori caracteristici. Ieșirile rețelei neuronale recurente sunt caracteristici ascunse [h_{t_0}, h_{t_1}, h_{t_2}, …, h_{t_n}]
. Aceste caracteristici sunt la un nivel mai abstract decât caracteristicile de intrare [X_{t_0}, X_{t_1}, X_{t_2}, …, X_{t_n}]
LSTM ar trebui să învețe părțile importante ale caracteristicilor de intrare și să le proiecteze la spatiul caracteristicilor ascunse. Acele caracteristici abstracte ascunse pot fi propagate în următoarea celulă LSTM, care va oferi următorul set de caracteristici ascunse, mai abstracte, care pot fi apoi propagate la următorul LSTM și așa mai departe. După secvența de LSTM-uri înlănțuite, componenta finală a rețelei neuronale este stratul liniar (partea de construcție a rețelei simple feedforward explicată în secțiunea anterioară) care mapează caracteristicile ascunse de la ultimul LSTM până la punctul din spațiul unidimensional și acel punct este rezultatul final al rețelei — prețul de închidere estimat în perioada de timp X_{t+1}
. Adevărul de bază din acest exemplu pentru X_{t+1}
este 298.61
.
Notă: De asemenea, pot exista doar un singur LSTM - setarea numărului de LSTM este un hiperparametru, care se găsește în general empiric, deși putem folosi unele euristice. Dacă datele nu sunt atât de complexe, folosim o arhitectură mai puțin complexă, astfel încât modelul să nu depășească datele. Dacă datele sunt complexe, folosim un model complex, astfel încât modelul să nu se potrivească cu datele.
În faza de antrenament, prețurile estimate de închidere sunt comparate cu prețurile de adevăr de la sol, iar diferența dintre prețurile de închidere prezise și prețurile de adevăr de la sol este minimizată folosind un algoritm de propagare inversă și un algoritm de optimizare a coborârii gradientului (sau una dintre formele sale - în mod concret, în acest mod. blog, se folosește așa-numita versiune „Adam” a unui algoritm de optimizare a coborârii gradientului) prin modificarea greutăților rețelei neuronale.
După antrenament și testare, în viitor, utilizatorul trebuie doar să ofere date de intrare rețelei neuronale și va returna prețul prezis (și sperăm, un preț foarte apropiat de prețul adevărului de bază din viitor).
Încă un lucru de menționat aici este că, de obicei, loturi de date sunt trimise prin rețea, atât în formare în faze de testare, pentru ca rețeaua să calculeze mai multe ieșiri într-o singură trecere.
Mai jos este o imagine a unei arhitecturi utilizate în acest blog pentru experimente. Este format din două LSTM-uri stivuite și un strat liniar.
Experimente cu algoritmi de fonduri speculative
Încercați să utilizați strategii de tranzacționare algoritmice atât de simple, după cum urmează: Dacă algoritmul prezice că prețul va crește în ziua următoare, atunci cumpărați n
( n = 1
în acest exemplu) acțiuni ale unei companii (lung), altfel vindeți toate acțiunile unei companii. companie (scurt). Valoarea inițială a portofoliului (valoarea numerarului și a acțiunilor combinate) este stabilită la 100.000 USD. Fiecare acțiune lungă sau scurtă va cumpăra n
acțiuni ale unei companii (Google, în acest exemplu) sau, respectiv, va vinde toate acțiunile unei companii. La început, sistemul deține 0 acțiuni ale unei companii date.
Amintiți-vă întotdeauna că acesta este un exemplu foarte simplu și simplu, care nu este destinat utilizării în lumea reală, deoarece ar fi nevoie de multă muncă de cercetare și dezvoltare pentru a modifica modelul pentru a funcționa bine în practică. Unele lucruri sunt neglijate aici care ar trebui luate în considerare într-un scenariu din lumea reală; de exemplu, comisioanele de tranzacție nu sunt încorporate în model. Se presupune că sistemul poate tranzacționa exact la aceeași oră în fiecare zi și se presupune că fiecare zi, chiar și într-un weekend sau sărbătoare, este o zi de tranzacționare.
Pentru testare se folosește o metodă de backtesting. Metoda de backtesting folosește date istorice pentru a reconstrui tranzacțiile care ar fi avut loc în trecut folosind regulile definite cu strategia dezvoltată. Setul de date este împărțit în două părți — prima parte este setul de antrenament (trecut) și a doua parte este setul de testare (viitor). Modelul este antrenat pe un set de antrenament și, după antrenament, simulăm viitorul pe a doua parte a setului de date pentru a vedea cum s-ar fi comportat modelul antrenat în viitor fără a fi antrenat pe el.
Valoarea pentru evaluarea strategiei de tranzacționare este raportul Sharpe (versiunea sa anualizată, presupunând că toate zilele dintr-un an sunt zile de tranzacționare, iar anul are 365 de zile: sqrt(365)*mean(returns)/std(returns))
, unde randamentul este definit ca p_{t}/p_{t-1} - 1
, iar p_{t}
este prețul în perioada de timp t
. Raportul Sharpe arată raportul dintre randamente și riscul suplimentar care este asumat, așa că este bine să aveți un raport Sharpe mai mare. De obicei, un raport mai mare de 1 este acceptabil de investitori, 2 este foarte bun și 3 este excelent.
Doar prețul de închidere în fiecare zi, din prețurile istorice Google din setul de date Yahoo Finance, este utilizat ca caracteristică. Mai multe caracteristici vor ajuta, dar nu este în scopul acestui blog să testați care alte caracteristici din setul de date (Deschis, Ridicat, Scăzut) sunt importante. Alte caracteristici care nu sunt incluse în tabel ar putea fi, de asemenea, utile - de exemplu, sentimentul știrilor într-un anumit minut sau întâmplări importante într-o anumită zi. Cu toate acestea, uneori este foarte greu să faci reprezentări de date care să fie utile pentru intrarea rețelei neuronale și să le combinați cu caracteristicile existente. De exemplu, este ușor să extindeți vectorul de caracteristică și să puneți un număr care reprezintă sentimentul de știri sau sentimentul de tweet al lui Trump ( -1
foarte negativ, 0
neutru, +1
foarte pozitiv etc.) pentru fiecare perioadă de timp dată, dar nu este atât de ușor de plasat anumite momente determinate de evenimente (pirați în canalul Suez, bombă într-o rafinărie din Texas) în vectorul de caracteristici, deoarece, pentru fiecare moment specific, va trebui să avem un element suplimentar în vectorul de caracteristici pentru a pune 1
dacă evenimentul s-a întâmplat sau 0
altfel, ceea ce va duce la un număr infinit de elemente pentru toate momentele posibile.
Pentru acele date mai dificile, am putea defini câteva categorii și, pentru fiecare moment, să stabilim cărei categorii îi aparține. De asemenea, am putea adăuga caracteristici de la acțiunile altor companii pentru un sistem pentru a afla corelația dintre prețurile acțiunilor diferitelor companii. De asemenea, există un tip de rețea neuronală specializată pentru viziune computerizată – rețele neuronale convoluționale – care ar fi interesant de combinat cu straturi recurente și de a vedea cum caracteristicile vizuale se corelează cu prețurile unor companii. Poate că am putea folosi feedul camerei dintr-o gară aglomerată ca o caracteristică și să atașăm acel flux la o rețea neuronală și să vedem dacă ceea ce vede rețeaua neuronală este corelat cu prețurile acțiunilor unor companii - ar putea exista unele cunoștințe ascunse chiar și în asta. exemplu banal și absurd.
Mai jos este un grafic care arată modul în care pierderea medie de antrenament scade în timp, ceea ce înseamnă că rețeaua neuronală are suficientă capacitate pentru a se potrivi cu datele de antrenament. Este important să spunem că datele trebuie să fie normalizate, astfel încât algoritmul de învățare profundă să poată converge.
Mai jos este un grafic care arată modul în care pierderea medie a testului scade în timp, ceea ce înseamnă că rețeaua neuronală are capacitatea de a generaliza datele nevăzute.
Algoritmul este lacom; dacă a prezis că prețul va crește în ziua următoare, atunci algoritmul cumpără imediat n=1
acțiune a unei companii (dacă este suficient numerar în portofoliu), iar în caz contrar, vinde toate acțiunile companiei (dacă are ). Perioada de investiție este fixă și durează 300 de zile. După 300 de zile, toate acțiunile sunt vândute. Simularea pe date nevăzute, după ceva antrenament, poate fi văzută mai jos. Se arată cum valoarea portofoliului crește în timp prin acțiuni lungi/scurte (sau nu fac nimic) în fiecare zi.
Raportul Sharpe pentru simularea de mai sus este 1,48. Valoarea finală a portofoliului după 300 de zile este de 100.263,79 USD. Dacă tocmai am cumpărat acțiuni în prima zi și le-am vinde după 300 de zile, portofoliul ar valora 99.988,41 USD.
Mai jos este prezentată o situație în care rețeaua neuronală nu este bine antrenată și pierde bani după o perioadă fixă de 300 de zile.
Raportul Sharpe este -0,94. Valoarea finală a portofoliului după 300 de zile este de 99.868,36 USD.
Iată un exemplu interesant: algoritmul de mai sus este lacom și doar prezice prețul pentru ziua următoare, luând măsuri numai pe baza acelei predicții. Este posibil să înlănțuiți mai multe predicții și să preziceți prețul în următorii câțiva pași în viitor. De exemplu, cu o primă intrare de [X_ground_truth_{t0}, X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}]
și prima ieșire fiind [X_predicted_{t5}]
, putem alimenta rețea neuronală cu acea predicție, astfel încât următoarea intrare să fie [X_ground_truth_{t1}, X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}]
și rezultatul este [X_predicted_{t6}]
. Următoarea intrare de acolo este [X_ground_truth_{t2}, X_ground_truth_{t3}, X_ground_truth_{t4}, X_predicted_{t5}, X_predicted_{t6}]
care are ca rezultat [X_predicted_{t7}]
și așa mai departe. Problema aici este că introducem o eroare de predicție care crește cu fiecare pas nou și, în final, ajunge la un rezultat foarte prost pe termen lung, așa cum se arată în imaginea de mai jos. Predicția de la început urmează tendința de scădere a adevărului de bază și apoi stagnează și devine din ce în ce mai proastă în timp.
O analiză de deep learning foarte simplă a fost făcută pe prețurile acțiunilor Google, dar poate încorpora aproape orice set de date financiare, cu condiția ca cantitatea de date să fie suficient de mare și să fie de bună calitate. Datele trebuie să fie discriminative și trebuie să descrie și să reprezinte bine problema.
Încheierea
Dacă ar funcționa și s-ar generaliza bine pe teste ample, acest sistem le-ar putea permite administratorilor de fonduri speculative să speculeze cu privire la prețurile viitoare ale acțiunilor unei companii folosind învățarea profundă și bazându-se pe strategii de tranzacționare algoritmice.
Administratorii fondurilor speculative ar putea oferi sistemului o sumă de bani pentru a tranzacționa automat în fiecare zi. Cu toate acestea, ar fi foarte rău să lăsăm algoritmii de tranzacționare automatizati să tranzacționeze fără nicio supraveghere. Managerul fondului speculativ ar trebui să aibă unele abilități de învățare profundă sau să angajeze pe cineva cu abilitățile necesare pentru a supraveghea sistemul și a determina când sistemul și-a pierdut capacitatea de a generaliza și de a tranzacționa bine.
If the system lost the ability to generalize, then it would be necessary to retrain it from the beginning and test it again (maybe by introducing more discriminative features or new knowledge—using new data from the past that didn't exist when the model was first trained).
Sometimes, the data is simply not good enough for the deep learning system to be trained and generalize well and, in that case, an experienced deep learning engineer should be able to detect and rectify such a situation. To build a deep learning trading system, you need hedge funds data scientists, machine learning/deep learning experts (both scientists and engineers), R&D engineers familiar with machine learning/deep learning, etc. No matter which part of an application of machine learning they are familiar with, whether it's computer vision or speech recognition, seasoned professionals will be able to put their experience to good use in the financial sector. At its root, deep learning has the same basics regardless of application or industry, and it should be easy for someone experienced to switch from theme to theme.
The system we presented is very basic and, to be applied in the real world, more R&D should be done in order to increase the returns. Possible improvements of the system could be in developing better trading strategies. Collecting more data for training, which is usually very expensive, will help. A smaller time interval between the points is better. Improvements can also surface in using more features (eg, news sentiments or important happenings corresponding to each point in the dataset, despite being hard to code for a neural network) and extensive grid search for hyperparameters and RNN architecture discovery.
Also, more computing power (powerful GPUs are a must) is needed to make a lot of extensive experiments in parallel and to process a large amount of data, provided that a large amount of data is collected.
References:
- https://www.datacamp.com/community/tutorials/finance-python-trading
- http://colah.github.io/posts/2015-08-Understanding-LSTMs/
- https://en.wikipedia.org
- https://www.investopedia.com/
- https://finance.yahoo.com/
- http://pytorch.org/
Author's Note: I would like to thank Ivan Capalija and Matej Paradzik for the constructive conversations and advice about deep learning in finance, which helped me in writing this blog.