Applicazioni pratiche di machine learning/Previsioni su azioni, criptovalute, derivati
AZIONI
modificaInstallazione librerie
modificaIn un notebook Jupyter scaricare se necessario le seguenti librerie tramite:
pip install pandas
pip install matplotlib
pip install yfinance
pip install prophet
Caricamento librerie
modificaimport pandas as pd
import matplotlib.pyplot as plt
import yfinance as yf
from prophet import Prophet
Parte 1: Dati
modificaCollegarsi con Yahoo Finance da qui : https://it.finance.yahoo.com e cercare nell'apposita casella di ricerca l'azione TESLA. In corrispondenza del titolo dell'azione si legge : Tesla, Inc. (TSLA) quindi il simbolo dell'azione è TSLA . Scaricare i dati degli ultimi 5 anni di quote azionarie come pandas dataframe tramite la libreria yfinance passando il simbolo dell'azione. Si possono scaricare i dati per un periodo di tempo diverso, sostituendo il parametro period con uno dei seguenti valori:
1d: ultimo giorno 5d: ultimi 5 giorni 1mo: ultimo mese 3mo: ultimi 3 mesi 6mo: ultimi 6 mesi 1y: ultimo anno 2y: ultimi 2 anni 5y: ultimi 5 anni 10y: ultimi 10 anni ytd: da inizio anno a oggi max: tutti i dati disponibili
data = yf.download("TSLA", period='5Y')
data.tail()
Date Open High Low Close 2022-12-30 119.949997 124.480003 119.750000 123.180000 2023-01-03 118.470001 118.800003 104.639999 108.099998 2023-01-04 109.110001 114.589996 107.519997 113.639999 2023-01-05 110.510002 111.750000 107.160004 110.339996 2023-01-06 103.000000 114.389999 101.809998 113.059998
Le variabili che interessano per la previsione sono Date e Close, quindi si crea un dataframe con tali variabili da fornire alla libreria Prophet:
# initialize data of lists.
quote = {'ds': list(data.index),
'y': list(data["Close"])}
# Create DataFrame
df = pd.DataFrame(quote)
# Print the output.
df.head()
Parte 2: Previsioni
modificaSi prevedono le quote azionarie di TESLA per i successivi 365 giorni a partire dall'ultima data disponibile nei dati scaricati e si traccia il grafico. La linea blu rappresenta la previsione, l'area ombreggiata celeste rappresenta l'intervallo di confidenza previsionale all'80%, mentre la linea nera rappresenta i dati reali:
m = Prophet(daily_seasonality = True) # the Prophet class (model)
m.fit(df) # fit the model using all data
future = m.make_future_dataframe(periods=365) #we need to specify the number of days in future
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the Tesla Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()
Si prevedono le quote azionarie nei successivi 20 giorni e si visualizza la tabella delle previsioni con yhat previsione alla data ds e [yhat_lower, yhat_upper] intervallo di confidenza all'80%:
future = m.make_future_dataframe(periods=20) #we need to specify the number of days in future
prediction = m.predict(future)
prediction[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(20)
ds yhat yhat_lower yhat_upper 4629 2023-01-07 135.237772 124.066947 147.274124 4630 2023-01-08 135.413466 123.708696 146.199598 4631 2023-01-09 135.864748 123.974760 146.670062 4632 2023-01-10 135.948641 125.184931 147.171731 4633 2023-01-11 136.173244 125.154799 148.297313 4634 2023-01-12 136.323332 125.202074 146.979928 4635 2023-01-13 136.418874 124.533623 148.434514 4636 2023-01-14 136.377036 126.042858 148.228069 4637 2023-01-15 136.514687 125.306550 147.593090 4638 2023-01-16 136.922638 125.965366 148.345261 4639 2023-01-17 136.958999 125.154397 148.167304 4640 2023-01-18 137.132998 125.917358 148.123067 4641 2023-01-19 137.230561 126.417526 148.524123 4642 2023-01-20 137.272794 125.928654 148.286496 4643 2023-01-21 137.177964 125.885137 148.997752 4644 2023-01-22 137.263975 125.649551 149.110246 4645 2023-01-23 137.622579 125.627036 148.529891 4646 2023-01-24 137.612720 126.122051 148.167514 4647 2023-01-25 137.744325 126.552612 148.780082 4648 2023-01-26 137.803880 127.165398 149.364249
CRIPTOVALUTE
modificaInstallazione librerie
modificaIn un notebook Jupyter scaricare le seguenti librerie tramite:
pip install pandas
pip install matplotlib
pip install ccxt
pip install prophet
Caricamento librerie
modificaimport pandas as pd
import ccxt
import matplotlib.pyplot as plt
from prophet import Prophet
Parte 1: Dati
modificaLa libreria ccxt può gestire vari mercati di scambio di criptovalute elencati di seguito ma in questa analisi si utilizzerà Binance:
print(ccxt.exchanges)
['alpaca', 'ascendex', 'bequant', 'bigone', 'binance', 'binancecoinm', 'binanceus', 'binanceusdm', 'bit2c', 'bitbank', 'bitbay', 'bitbns', 'bitcoincom', 'bitfinex', 'bitfinex2', 'bitflyer', 'bitforex', 'bitget', 'bithumb', 'bitmart', 'bitmex', 'bitopro', 'bitpanda', 'bitrue', 'bitso', 'bitstamp', 'bitstamp1', 'bittrex', 'bitvavo', 'bkex', 'bl3p', 'blockchaincom', 'btcalpha', 'btcbox', 'btcex', 'btcmarkets', 'btctradeua', 'btcturk', 'buda', 'bybit', 'cex', 'coinbase', 'coinbaseprime', 'coinbasepro', 'coincheck', 'coinex', 'coinfalcon', 'coinmate', 'coinone', 'coinspot', 'cryptocom', 'currencycom', 'delta', 'deribit', 'digifinex', 'exmo', 'flowbtc', 'fmfwio', 'gate', 'gateio', 'gemini', 'hitbtc', 'hitbtc3', 'hollaex', 'huobi', 'huobijp', 'huobipro', 'idex', 'independentreserve', 'indodax', 'itbit', 'kraken', 'kucoin', 'kucoinfutures', 'kuna', 'latoken', 'lbank', 'lbank2', 'luno', 'lykke', 'mercado', 'mexc', 'mexc3', 'ndax', 'novadax', 'oceanex', 'okcoin', 'okex', 'okex5', 'okx', 'paymium', 'phemex', 'poloniex', 'poloniexfutures', 'probit', 'ripio', 'stex', 'therock', 'tidex', 'timex', 'tokocrypto', 'upbit', 'wavesexchange', 'wazirx', 'whitebit', 'woo', 'yobit', 'zaif', 'zb', 'zipmex', 'zonda']
# creare un'istanza di Binance
exchange = ccxt.binance()
# impostare il simbolo del bitcoin/euro su Binance
symbol ='BTC/EUR'
# impostare il periodo di tempo desiderato cioè giornaliero
timeframe = '1d'
# scaricare i dati del prezzo del bitcoin
ohlcv = exchange.fetch_ohlcv(symbol, timeframe)
# convertire i dati in un DataFrame di pandas
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
# convertire la colonna timestamp in una colonna datetime
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
# visualizzare i dati
df.tail()
timestamp open high low close 495 2023-01-04 15803.30 16031.64 15771.00 15889.31 496 2023-01-05 15886.01 16034.95 15797.24 15993.84 497 2023-01-06 15993.84 16015.00 15809.07 15924.82 498 2023-01-07 15924.83 15954.45 15889.11 15917.02 499 2023-01-08 15916.00 15935.00 15888.88 15904.99
Le variabili che interessano per la previsione sono timestamp e close, quindi si crea un dataframe con tali variabili da fornire alla libreria Prophet:
data = df[["timestamp","close"]] # select Date and Price
# Rename the features: These names are NEEDED for the model fitting
data = data.rename(columns = {"timestamp":"ds","close":"y"}) #renaming the columns of the dataset
data.head()
Parte 2: Previsioni
modificaSi procede come nel caso delle azioni, prevedendo per i successivi 365 giorni a partire dall'ultima data disponibile nei dati scaricati il prezzo dei bitcoins e si traccia il grafico. La linea blu rappresenta la previsione, l'area ombreggiata celeste rappresenta l'intervallo di confidenza previsionale all'80%, mentre la linea nera rappresenta i dati reali:
m = Prophet(daily_seasonality = True) # the Prophet class (model)
m.fit(data) # fit the model using all data
future = m.make_future_dataframe(periods=365) #we need to specify the number of days in future
prediction = m.predict(future)
m.plot(prediction)
plt.title("Prediction of the Tesla Stock Price using the Prophet")
plt.xlabel("Date")
plt.ylabel("Close Stock Price")
plt.show()
Si prevede il prezzo dei bitcoin nei successivi 20 giorni e si visualizza la tabella delle previsioni con yhat previsione alla data ds e [yhat_lower, yhat_upper] intervallo di confidenza all'80%:
future = m.make_future_dataframe(periods=20) #we need to specify the number of days in future
prediction = m.predict(future)
prediction[['ds', 'yhat', 'yhat_lower', 'yhat_upper']].tail(20)
Conclusioni
modificaUno dei vantaggi del machine learning è che può essere utilizzato per prevedere gli andamenti dei mercati in modo più preciso e tempestivo rispetto agli approcci basati sulla sola analisi umana. Inoltre, il machine learning può essere utilizzato per identificare pattern e trend nascosti che potrebbero non essere evidenti a un analista umano. Nonostante i vantaggi del machine learning, è importante notare che esso non è immune da errori e che le previsioni effettuate tramite questa tecnologia devono essere sempre prese con le dovute precauzioni.