Marte Escobin

7 septembrie 2020 · 6 min citire

Scopul nostru in aceasta postare nu este sa prezicem, cat mai exact posibil, pretul bitcoinului de maine. In schimb, vrem sa vedem cum putem folosi un algoritm de invatare automata numit Random Forest pentru a crea un model care poate prezice preturile bitcoin utilizand date istorice privind cererea si oferta bitcoin.

Nota bene: Algoritmul forestier aleatoriu, desi minunat in multe feluri, nu are constientizare a timpului. Adica predictiile de pret din aceasta postare vor ignora sezonalitatea. Din nou, scopul nostru NU este sa prezicem cu precizie preturile bitcoin, ci sa vedem padure aleatorie in lucru.

Array

Mai exact, suntem interesati sa stim cum urmatorii factori afecteaza pretul mediu al pietei bitcoin in marile burse bitcoin:

  1. Numarul total de bitcoini care au fost deja exploatati
  2. Valoarea totala a recompenselor blocului coinbase platite minerilor
  3. O masura relativa a cat de greu este sa gasesti un nou bloc bitcoin
  4. Valoarea totala a tuturor taxelor de tranzactie platite minerilor
  5. Numarul total de adrese unice utilizate pe blockchain-ul Bitcoin

Cum functioneaza Random Forest

Random Forest va folosi arborii de decizie pentru a intelege modul in care acesti factori au afectat preturile bitcoin in trecut. Pur si simplu, un arbore de decizie este o cartografiere a fluxurilor de intrari si iesiri.

sursa: https://www.displayr.com/what-is-a-decision-tree/

Modelele din acesti arbori de decizie sunt ceea ce ar dicta modelul nostru de predictie a preturilor.

Array

Cu cat putem furniza mai multe date algoritmul Random Forest , cu atat ar avea mai multe oportunitati de a gasi noi tipare si de a verifica tiparele existente. Apoi va face media predictiilor fiecarui copac pentru a crea o predictie mai fiabila. Vom testa modul in care valorile prezise se compara cu valorile reale. Aceasta inseamna ca vom salva cateva puncte de date din setul nostru de date pentru a testa predictiile algoritmului Random Forest .

Inainte de a face asta, sa vedem mai intai ce este in setul nostru de date.

Array

Setul nostru de date are 2.643 de randuri. Acestea reprezinta toate zilele cuprinse intre 23 februarie 2010 si 19 mai 2017. Mai jos este prezentat un rezumat al valorilor minime, maxime si medii pentru fiecare factor, precum si valorile percentilei 25, 50 si 75.

Conform acestor date, preturile bitcoin au crescut continuu intre 2010 si 2017:

sns.

lineplot (data = df2.btc_market_price, label = “Pretul Bitcoin pe parcursul anilor”)

Suntem interesati in mod special de efectele acestor factori asupra preturilor bitcoin:

  • Numarul total de bitcoini care au fost deja exploatati ( btc_total_bitcoins). Exista doar 21 de milioane de bitcoini care pot fi extrase vreodata. Pana la 19 mai 2017, erau deja exploatate ~ 16,3 milioane de bitcoini.

  • Valoarea totala a tuturor taxelor de tranzactie platite minerilor ( btc_transaction_fees). Cand o persoana cheltuieste un bitcoin, tranzactia respectiva va trebui verificata de un set de computere detinute de „mineri” in reteaua Bitcoin. Taxele de tranzactie sunt necesare pentru ca aceste tranzactii sa fie procesate de mineri. Cheltuitorul poate specifica cat de mult se adauga, dar minerii pot confirma doar tranzactii in valoare de 1 MB pentru fiecare lot sau bloc. Daca numarul de tranzactii care asteapta confirmarea depaseste ceea ce se poate incadra intr-un bloc, un miner poate alege sa confirme tranzactiile cu cele mai mari comisioane bitcoin.

  • Valoarea totala a recompenselor blocului coinbase platite minerilor ( btc_rewards). A mina bitcoin inseamna a contribui la verificarea informatiilor de tranzactionare a bitcoinului. Acest proces necesita o multime de puteri de calcul, iar minerii sunt recompensati cu plati bitcoin pentru tranzactii reusite (in afara de comisioanele de tranzactie).

  • O masura relativa a cat de dificil este sa gasesti un bloc nou sau sa verifici cu succes un lot de tranzactii ( btc_difficulty). Dificultatea miniera a Bitcoin este conceputa pentru a regla fiecare numar stabilit de blocuri. Acest lucru inseamna ca, cu cat sunt blocate mai multe blocuri, cu atat devine mai greu pentru mine pe urmatorul.

  • Numarul total de adrese unice utilizate pe blockchain-ul Bitcoin ( btc_n_unique_addresses ). Acesta reprezinta numarul de portofele bitcoin create de-a lungul anilor.

Ratele anuale de crestere

O privire rapida asupra ratei anuale de crestere a fiecarui factor sugereaza relatia lor cu preturile bitcoin.

De exemplu, cand numarul portofelelor bitcoin a crescut cu 150% in 2014 din 2013, preturile au inregistrat o crestere de aproape 270%. In mai 2012, numarul total de bitcoin pe piata a crescut cu 45% fata de anul precedent. Intre timp, preturile au scazut cu 30%. Acest lucru urmeaza economiei elementare de pana acum, o crestere a cererii creste pretul, in timp ce o crestere a ofertei o scade.

Cu toate acestea, o privire mai atenta asupra graficelor lor de regresie sugereaza ca, in ciuda numarului total de bitcoini in crestere pe piata, nu a fost suficient sa scada pretul. Intre timp, toti ceilalti factori – dificultati de minat , recompense miniere de blocuri de monede , comisioane de tranzactie si cresterea numarului de utilizatori bitcoin inlocuiti de n_unique_addresses impartasesc o relatie pozitiva cu btc_market_prices asa cum era de asteptat.

Un grafic de imprastiere nascut in mare arata o imagine mai detaliata a modului in care s-au miscat preturile pietei in raport cu toti cei cinci factori de-a lungul anilor. Putem vedea ca majoritatea miscarilor sunt concentrate pe punctele de date verzi, violet si roz care reprezinta anii 2013, 2016 si 2017.

Pentru a efectua un antrenament Random Forest pe setul nostru de date, mai intai incarcam datele. Il import de pe computer, dar setul de date poate fi descarcat si de pe Kaggle.

Cand citeam dictionarul de date, m-am confuz cu privire la diferenta dintre miners_revenue si transaction_fees. Suna suprapuse:

Daca vreau doar sa primesc recompensele blocului de monede platite minerilor si presupunand ca veniturile minerului includ taxe de tranzactionare, ar trebui sa creez o noua coloana obtinand diferenta dintre cele doua coloane:

Acum atribuim variabilele X si y. X va avea toate coloanele pe care le presupunem ca sunt factori care afecteaza pretul, y.

Apoi impartim setul de date intr-un set de date de instruire si testare sau validare. Avem nevoie de acest lucru, astfel incat sa putem testa cat de bune sunt predictiile noastre fata de preturile reale.

Declaram ca folosim Random Forest pentru a crea un model:

Acum alimentam datele de instruire catre algoritmul Random Forest , astfel incat sa poata mapa tiparele sau arborii de decizie.

Odata ce avem un model, putem apela predict pentru a prezice preturile bitcoin pe datele noastre de testare sau validare. Adica, avand in vedere ca am instruit un model folosind train_X si train_y , acum suntem interesati daca ar putea sa scoata un numar apropiat de val_Y dat de val_X . Amintiti-va ca am impartit setul de date mai devreme la un set de date de antrenament (train_X, train_Y) si un set de date de testare (val_X, val_y).

Pentru a vedea valorile prezise ale modelului pe ultimele 5 date de validare, putem apela

print (rf_model.predict (X.tail ()))

df1 [‘btc_market_price’]. tail ()

Numerele arata aproape! Sa vedem cat de departe sunt valorile prezise de valorile reale folosind MAE ( M ean A bsolute E rror). Acest numar ne va spune cat de scazute sunt predictiile in medie

Nu-i rau! MAE ne spune ca, in medie, predictia noastra de preturi bitcoin este redusa doar cu 11 USD din preturile reale.

fin.