Foto oleh Chris Liverani di Majalah Unsplash
Pada 2017, karena pertumbuhan eksponensial dalam nilai pasar cryptocurrency selama beberapa bulan, popularitasnya melonjak. Harga cryptocurrency mencapai puncaknya lebih dari 800 miliar dolar AS pada Januari 2018.
Meskipun pembelajaran mesin telah berhasil menggunakan serangkaian model deret waktu yang berbeda untuk memprediksi harga pasar saham, aplikasinya dalam memprediksi harga mata uang kripto sangat terbatas. Alasan dibalik ini jelas, karena harga cryptocurrency bergantung pada banyak faktor, seperti kemajuan teknologi, persaingan internal, tekanan pengiriman pasar, masalah ekonomi, masalah keamanan, faktor politik, dll. Jika strategi investasi yang bijak diterapkan, volatilitas harga yang tinggi akan mendatangkan keuntungan besar. Sayangnya, karena kurangnya indeks, prakiraan cryptocurrency relatif sulit dibandingkan dengan prakiraan keuangan tradisional seperti pasar saham.
Pada artikel ini, penulis akan menggunakan total empat langkah untuk memprediksi harga cryptocurrency:
-
Dapatkan data cryptocurrency waktu nyata
-
Siapkan data pelatihan dan tes
-
Gunakan jaringan saraf LSTM untuk memprediksi harga mata uang
-
Visualisasikan hasil perkiraan
tantangan
Gunakan semua karakteristik transaksi (seperti harga, volume transaksi, posisi terbuka, nilai tinggi dan rendah) dalam kumpulan data untuk memprediksi harga cryptocurrency.
data
Dataset dapat diunduh dari situs web CryptoCompare.
Kumpulan data berisi total 5 fitur. Detailnya adalah sebagai berikut:
Harga Tutup: mengacu pada harga penutupan pasar dari mata uang pada hari itu
Harga Tinggi: Harga mata uang tertinggi hari itu
Harga Rendah: adalah harga terendah mata uang pada hari itu
Open Price: Harga pasar terbuka dari mata uang pada hari itu
Volume: Jumlah mata uang yang diperdagangkan pada hari itu
Dimana kodenya?
Tanpa basa-basi lagi, mari kita mulai dengan kodenya. Proyek github lengkap dapat ditemukan di sini: https://github.com/abhinavsagar/Cryptocurrency-Price-Prediction
Mulailah dengan memuat semua pustaka dan dependensi yang diperlukan:
import json
permintaan impor
dari keras.models import Sequential
dari keras.layers import Activation, Dense, Dropout, LSTM
impor matplotlib.pyplot sebagai plt
impor numpy sebagai np
impor panda sebagai pd
import seaborn sebagai sns
dari sklearn.metrics, impor mean_absolute_error
% matplotlib sebaris
Saya menggunakan nilai tukar Kanada dan menyimpan data waktu nyata dalam bingkai data panda untuk mengonversi tanggal dan waktu string menjadi objek tanggal dan waktu Python. Hal ini diperlukan karena objek tanggal dan waktu dalam file dibaca sebagai objek string. Sangat mudah untuk melakukan operasi seperti perbedaan waktu pada string daripada objek tanggal dan waktu.
endpoint = 'https: //min-api.cryptocompare.com/data/histoday'
res = requests.get (titik akhir + '? fsym = BTCtsym = CADlimit = 500')
hist = pd.DataFrame (json.loads (res.content))
hist = hist.set_index ('waktu')
hist.index = pd.to_datetime (hist.index, unit = 's')
target_col = 'tutup'
Mari kita lihat seperti apa semua karakteristik perdagangan dari dataset, seperti harga, volume, pembukaan, harga tinggi, dan harga rendah.
kepala sejarah (5)
Selanjutnya, saya membagi data menjadi dua kelompok: set pelatihan dan set pengujian, yang masing-masing menyumbang 80% dan 20% dari volume data. Ini hanya dilakukan untuk proyek ini. Dalam proyek aktual, Anda harus selalu membagi data menjadi kumpulan data pelatihan, verifikasi, dan pengujian (proporsinya masing-masing dapat 60%, 20%, dan 20%).
def train_test_split (df, test_size = 0,2):
split_row = len (df) -int (test_size * len (df))
train_data = df.iloc
test_data = df.iloc
return train_data, test_datatrain, test = train_test_split (hist, test_size = 0,2)
Sekarang, mari gunakan kode berikut untuk merencanakan harga cryptocurrency (dolar Kanada) dari waktu ke waktu:
def line_plot (baris1, baris2, label1 = Tidak ada, label2 = Tidak ada, judul = '', lw = 2):
fig, ax = plt.subplots (1, figsize = (13, 7))
ax.plot (baris1, label = label1, linewidth = lw)
ax.plot (baris2, label = label2, linewidth = lw)
ax.set_ylabel ('price', fontsize = 14)
ax.set_title (judul, fontsize = 16)
ax.legend (loc = 'terbaik', fontsize = 16)
line_plot (melatih, menguji, 'pelatihan', 'uji', judul = '')
Kita dapat mengamati bahwa dari Desember 2018 hingga April 2019, harga cryptocurrency turun secara signifikan; dari April 2019 hingga Agustus 2019, harganya terus naik, berfluktuasi pada bulan Juli dan Agustus; dari September 2019 Sejak Januari, harga-harga terus turun. Dalam fluktuasi harga ini, perlu dicatat bahwa harga cryptocurrency lebih rendah di musim dingin dan meningkat di musim panas. Namun, karena kumpulan data terlalu kecil, hal ini tidak dapat menghasilkan kesimpulan yang dapat diterapkan secara universal. Demikian pula, untuk cryptocurrency, sulit untuk menggeneralisasi kesimpulan berharga apa pun.
Selanjutnya, saya menulis beberapa fungsi untuk menormalkan nilai-nilai ini. Normalisasi adalah teknik persiapan data yang umum digunakan dalam pembelajaran mesin. Tujuan normalisasi adalah untuk mengubah nilai kolom numerik dalam kumpulan data ke skala yang sama tanpa mengganggu perbedaan dalam rentang nilai.
def normalise_zero_base (df):
kembali df / df.iloc-1
def normalise_min_max (df):
kembali (df-df.min) / (data.max-df.min)
Selanjutnya, saya menulis fungsi untuk mengekstrak data jendela ukuran 5, seperti yang ditunjukkan pada kode berikut:
def extract_window_data (df, window_len = 5, zero_base = True):
window_data =
untuk idx dalam jangkauan (len (df) -window_len):
tmp = df.copy
jika zero_base:
tmp = normalise_zero_base (tmp)
window_data.append (tmp.values)
return np.array (window_data)
Saya terus menulis fungsi untuk menyiapkan format data, yang nantinya akan dimasukkan ke jaringan saraf. Saya menggunakan konsep yang sama seperti sebelumnya dan membagi data menjadi dua kelompok: set pelatihan dan set pengujian, yang masing-masing menyumbang 80% dan 20% dari total data.Kodenya adalah sebagai berikut:
def prepared_data (df, target_col, window_len = 10, zero_base = True, test_size = 0,2):
train_data, test_data = train_test_split (df, test_size = test_size)
X_train = extract_window_data (train_data, window_len, zero_base)
X_test = extract_window_data (test_data, window_len, zero_base)
y_train = train_data.values
y_test = test_data.values
jika zero_base:
y_train = y_train / train_data.values-1
y_test = y_test / test_data.values-1
mengembalikan train_data, test_data, X_train, X_test, y_train, y_test
LSTM
Prinsip kerja LSTM adalah menggunakan gerbang khusus untuk memungkinkan setiap lapisan LSTM memperoleh informasi dari lapisan sebelumnya dan saat ini. Data melewati beberapa gerbang (seperti gerbang lupa, gerbang input, dll.) Dan berbagai fungsi aktivasi (seperti fungsi tanh, fungsi relu) dan melewati unit LSTM. Keuntungan utamanya adalah memungkinkan setiap unit LSTM mengingat pola ini selama jangka waktu tertentu. Perlu dicatat bahwa LSTM dapat mengingat informasi penting sambil melupakan informasi yang tidak relevan. Arsitektur LSTM adalah sebagai berikut:
Arsitektur LSTM
Sekarang mari kita buat modelnya. Model sequence digunakan untuk menumpuk semua layer (input, hidden, dan output). Jaringan saraf terdiri dari lapisan LSTM, lapisan pelepasan 20%, dan lapisan padat dengan fungsi aktivasi linier. Saya menggunakan Adam sebagai pengoptimal dan mean square error sebagai fungsi kerugian untuk menyusun model.
def build_lstm_model (input_data, output_size, neuron = 100, activ_func = 'linear', dropout = 0.2, loss = 'mse', optimizer = 'adam'):
model = Sequential
model.add (LSTM (neuron, input_shape = (input_data.shape, input_data.shape)))
model.add (Putus sekolah (putus sekolah))
model.add (Padat (units = output_size))
model.add (Aktivasi (activ_func))
model.compile (kerugian = kerugian, pengoptimal = pengoptimal)
model pengembalian
Selanjutnya, saya menetapkan beberapa parameter untuk digunakan nanti. Parameter ini adalah: seed nomor acak, panjang jendela, ukuran set pengujian, jumlah neuron di lapisan pertama, ukuran batch, kerugian dan pengoptimal, dll.
np.random.seed (42)
window_len = 5
test_size = 0,2
zero_base = Benar
lstm_neurons = 100
zaman = 20
batch_size = 32
loss = 'mse'
putus sekolah = 0,2
pengoptimal = 'adam'
Sekarang mari kita latih modelnya menggunakan input x_train dan label y_train.
melatih, menguji, X_train, X_test, y_train, y_test = mempersiapkan_data (
hist, target_col, window_len = window_len, zero_base = zero_base, test_size = test_size) model = build_lstm_model (
X_train, output_size = 1, neuron = lstm_neurons, dropout = dropout, loss = loss,
pengoptimal = pengoptimal)
history = model.fit (
X_train, y_train, epochs = epochs, batch_size = batch_size, verbose = 1, shuffle = True)
Mari kita lihat snapshot pelatihan model untuk 20 epoch.
Pelatihan jaringan saraf
Saya menggunakan Mean Absolute Error (MAE) sebagai indeks evaluasi. Alasan memilih MAE daripada root mean square error (RMSE) adalah karena MAE lebih mudah diinterpretasikan. RMSE tidak hanya menggambarkan kesalahan rata-rata, sehingga lebih sulit untuk dipahami. Karena kami berharap model tersebut dapat dengan mudah dipahami bahkan bagi pembaca yang sama sekali tidak memahami teknologi, sehingga MAE sepertinya menjadi pilihan yang lebih baik.
Berarti kesalahan mutlak
Kesalahan absolut rata-rata mengukur ukuran rata-rata kesalahan dalam serangkaian prediksi, terlepas dari arahnya. Merupakan nilai rata-rata selisih absolut antara nilai observasi aktual dan nilai prediksi observasi pada sampel uji, dimana semua perbedaan individual memiliki bobot yang sama.
target = tes
preds = model.predict (X_test) .squeeze
mean_absolute_error (preds, y_test)
# 0.027955859325876943
Nilai MAE yang didapat terlihat bagus. Terakhir, mari kita plot harga sebenarnya dan harga prediksi menggunakan kode berikut:
preds = test.values * (preds + 1)
preds = pd.Series (index = target.index, data = preds)
line_plot (target, pred, 'aktual', 'prediksi', lw = 3)
Kesimpulannya
Pada artikel ini, saya mendemonstrasikan cara menggunakan jaringan saraf LSTM untuk memprediksi harga cryptocurrency secara real time. Saya menggunakan empat langkah: memperoleh data mata uang real-time, menyiapkan data untuk pelatihan dan pengujian, menggunakan jaringan saraf LSTM untuk memprediksi harga dan memvisualisasikan hasil prediksi. Jangan ragu untuk menggunakan hyperparameter atau coba struktur jaringan neural lain untuk mendapatkan hasil yang lebih baik.
melalui: https://towardsdatascience.com/cryptocurrency-price-prediction-using-deep-learning-70cfca50dd3a
Lei Feng Net Lei Feng Net Lei Feng Net
- Lagu Fana · Festival Qingming Harap ingat nama mereka, 5 pahlawan Shandong memadamkan api di Muli, Liangshan
- Bagaimana cara melakukan pendidikan tenaga kerja? Distrik Jinan Shizhong dan seminar Kelompok Pendidikan Weier datang untuk mendukung
- Suka! Sekolah Dasar No. 1 Dianliu di Kota Jinan melaksanakan kegiatan "Peringatan Online untuk Pahlawan"
- Laporan Mingguan Global Industri E-niaga Makanan Segar Prospektif No. 21: Jingdong mengontrak pantou Chaganhu dengan 1/3 keluaran dan penjualan diperkirakan melebihi 10 juta
- Laporan Mingguan Global Calon Industri Gen No. 51: Gen kebangkitan ingatan pertama ditemukan, dan gen ini benar-benar memiliki ingatan terbaik sebelum tidur
- Film "Tank News" "Pet Love": Hewan yang tidak dapat disempurnakan setelah pendirian Republik Rakyat Tiongkok ada di sini
- 36Kr Reading | Daftar Buku Investor Triwulan Pertama: Menghadapi Ketidakpastian, Mereka Mencari Ke Dalam
- Laporan Mingguan Venture Capital Vol.59 | Ruixing Exposes Financial Fraud Disebabkan oleh Pembukaan Fuse, 31 Proyek Pembiayaan Besar dan 10 Proyek Awal yang Layak Menjadi Perhatian