Prediksi Pasar Saham Menggunakan Machine Learning [Implementasi Langkah-demi-Langkah]
Diterbitkan: 2021-02-26Daftar isi
pengantar
Prediksi dan analisis pasar saham adalah beberapa tugas yang paling rumit untuk dilakukan. Ada beberapa alasan untuk ini, seperti volatilitas pasar dan begitu banyak faktor independen dan dependen lainnya untuk menentukan nilai saham tertentu di pasar. Faktor-faktor ini membuat sangat sulit bagi analis pasar saham mana pun untuk memprediksi kenaikan dan penurunan dengan tingkat akurasi yang tinggi.
Namun, dengan munculnya Pembelajaran Mesin dan algoritme yang kuat, analisis pasar terbaru dan perkembangan Prediksi Pasar Saham telah mulai menggabungkan teknik tersebut dalam memahami data pasar saham.
Singkatnya, Algoritma Pembelajaran Mesin digunakan secara luas oleh banyak organisasi dalam menganalisis dan memprediksi nilai saham. Artikel ini akan membahas Implementasi sederhana dari menganalisis dan memprediksi nilai saham Toko Ritel Online Populer di Seluruh Dunia menggunakan beberapa Algoritma Pembelajaran Mesin dengan Python.
Pernyataan masalah
Sebelum kita masuk ke implementasi program untuk memprediksi nilai pasar saham, mari kita visualisasikan data yang akan kita kerjakan. Di sini, kami akan menganalisis nilai saham Microsoft Corporation (MSFT) dari National Association of Securities Dealers Automated Quotations (NASDAQ). Data nilai saham akan disajikan dalam bentuk File Terpisah Koma (.csv), yang dapat dibuka dan dilihat menggunakan Excel atau Spreadsheet.
MSFT memiliki sahamnya yang terdaftar di NASDAQ dan nilainya diperbarui setiap hari kerja di pasar saham. Perhatikan bahwa pasar tidak mengizinkan perdagangan terjadi pada hari Sabtu dan Minggu; maka ada jarak antara dua tanggal. Untuk setiap tanggal, Nilai Pembukaan saham, nilai Tertinggi dan Terendah dari saham tersebut pada hari yang sama dicatat, bersama dengan Nilai Penutupan pada akhir hari.
Nilai Penutupan yang Disesuaikan menunjukkan nilai saham setelah dividen diposting (Terlalu teknis!). Selain itu, total volume saham di pasar juga diberikan. Dengan data ini, tugas seorang Machine Learning/Data Scientist adalah mempelajari data dan menerapkan beberapa algoritme yang dapat mengekstrak pola dari riwayat saham Microsoft Corporation. data.
Memori Jangka Pendek Panjang
Untuk mengembangkan model Machine Learning untuk memprediksi harga saham Microsoft Corporation, kami akan menggunakan teknik Long Short-Term Memory (LSTM). Mereka digunakan untuk membuat modifikasi kecil pada informasi dengan perkalian dan penambahan. Menurut definisi, memori jangka panjang (LSTM) adalah arsitektur jaringan saraf berulang buatan (RNN) yang digunakan dalam pembelajaran mendalam.
Tidak seperti jaringan saraf umpan maju standar, LSTM memiliki koneksi umpan balik. Itu dapat memproses titik data tunggal (seperti gambar) dan seluruh urutan data (seperti ucapan atau video). Untuk memahami konsep di balik LSTM, mari kita ambil contoh sederhana dari ulasan pelanggan online tentang Ponsel.
Misalkan kita ingin membeli Ponsel, kita biasanya mengacu pada review bersih oleh pengguna bersertifikat. Bergantung pada pemikiran dan masukan mereka, kami memutuskan apakah ponsel itu baik atau buruk dan kemudian membelinya. Saat kami terus membaca ulasan, kami mencari kata kunci seperti "luar biasa", "kamera bagus", "cadangan baterai terbaik", dan banyak istilah lain yang terkait dengan ponsel.
Kita cenderung mengabaikan kata-kata umum dalam bahasa Inggris seperti “it”, “give”, “this”, dll. Jadi, ketika kita memutuskan untuk membeli ponsel atau tidak, kita hanya mengingat kata kunci yang didefinisikan di atas. Kemungkinan besar, kita lupa kata-kata lainnya.
Ini adalah cara yang sama di mana Algoritma Memori Jangka Pendek Panjang bekerja. Itu hanya mengingat informasi yang relevan dan menggunakannya untuk membuat prediksi dengan mengabaikan data yang tidak relevan. Dengan cara ini, kita harus membangun model LSTM yang pada dasarnya hanya mengenali data penting tentang stok itu dan meninggalkan outlier-nya.
Sumber
Meskipun struktur arsitektur LSTM yang diberikan di atas mungkin tampak menarik pada awalnya, cukup untuk diingat bahwa LSTM adalah versi lanjutan dari Recurrent Neural Networks yang mempertahankan Memori untuk memproses urutan data. Itu dapat menghapus atau menambahkan informasi ke keadaan sel, diatur dengan hati-hati oleh struktur yang disebut gerbang.
Unit LSTM terdiri dari sel, gerbang input, gerbang keluaran, dan gerbang lupa. Sel mengingat nilai selama interval waktu yang berubah-ubah, dan tiga gerbang mengatur aliran informasi masuk dan keluar sel.
Implementasi Program
Kami akan beralih ke bagian di mana kami menggunakan LSTM dalam memprediksi nilai stok menggunakan Machine Learning dengan Python.
Langkah 1 – Mengimpor Perpustakaan
Seperti yang kita semua tahu, langkah pertama adalah mengimpor perpustakaan yang diperlukan untuk memproses data stok Microsoft Corporation dan perpustakaan lain yang diperlukan untuk membangun dan memvisualisasikan output dari model LSTM. Untuk ini, kita akan menggunakan perpustakaan Keras di bawah kerangka kerja TensorFlow. Modul yang diperlukan diimpor dari perpustakaan Keras satu per satu.
#Mengimpor Perpustakaan
impor panda sebagai PD
impor NumPy sebagai np
%matplotlib sebaris
impor matplotlib. pyplot sebagai plt
impor matplotlib
dari sklearn. Pra-pemrosesan impor MinMaxScaler
dari Keras. lapisan impor LSTM, Padat, Dropout
dari sklearn.model_selection impor TimeSeriesSplit
dari sklearn.metrics impor mean_squared_error, r2_score
impor matplotlib. tanggal sebagai mandat
dari sklearn. Pra-pemrosesan impor MinMaxScaler
dari sklearn impor linear_model
dari Keras. Model impor Sequential
dari Keras. Lapisan impor Padat
impor Keras. Backend sebagai K
dari Keras. Panggilan balik mengimpor EarlyStopping
dari Keras. Pengoptimal mengimpor Adam
dari Keras. Model mengimpor load_model
dari Keras. Lapisan mengimpor LSTM
dari Keras. utils.vis_utils mengimpor plot_model
Langkah 2 – Mendapatkan Visualisasi Data
Dengan menggunakan pustaka pembaca Data Pandas, kita akan mengunggah data stok sistem lokal sebagai file Nilai Terpisah Koma (.csv) dan menyimpannya ke DataFrame pandas. Terakhir, kita juga akan melihat datanya.
#Dapatkan Kumpulan Datanya
df = pd.read_csv(“MicrosoftStockData.csv”,na_values=['null'],index_col='Date',parse_dates=Benar,infer_datetime_format=Benar)
df.head()
Dapatkan sertifikasi AI secara online dari Universitas top dunia – Magister, Program Pascasarjana Eksekutif, dan Program Sertifikat Tingkat Lanjut di ML & AI untuk mempercepat karier Anda.
Langkah 3 – Cetak DataFrame Shape dan Periksa Nilai Null.
Dalam langkah penting lainnya ini, pertama-tama kita mencetak bentuk dataset. Untuk memastikan bahwa tidak ada nilai nol dalam bingkai data, kami memeriksanya. Kehadiran nilai nol dalam dataset cenderung menyebabkan masalah selama pelatihan karena mereka bertindak sebagai outlier yang menyebabkan varians yang luas dalam proses pelatihan.
#Cetak bentuk Dataframe dan Periksa Nilai Null
print("Bentuk Dataframe: ", bentuk df.)
print(“Nilai Null Hadir: “, df.IsNull().values.any())
>> Bentuk Dataframe: (7334, 6)
>>Nilai Null Present: False
Tanggal | Membuka | Tinggi | Rendah | Menutup | Aj Tutup | Volume |
1990-01-02 | 0,605903 | 0,616319 | 0,5989090 | 0,616319 | 0,447268 | 53033600 |
1990-01-03 | 0.621528 | 0.626736 | 0.614583 | 0,619792 | 0,449788 | 113772800 |
1990-01-04 | 0,619792 | 0,638889 | 0,616319 | 0.638021 | 0.463017 | 125740800 |
1990-01-05 | 0,635417 | 0,638889 | 0.621528 | 0.622396 | 0,451678 | 69564800 |
1990-01-08 | 0.621528 | 0.631944 | 0.614583 | 0.631944 | 0,458607 | 58982400 |
Langkah 4 – Merencanakan Nilai Penutupan yang Disesuaikan dengan Benar
Nilai keluaran akhir yang akan diprediksi menggunakan model Machine Learning adalah Adjusted Close Value. Nilai ini merupakan nilai penutupan saham pada hari tertentu perdagangan pasar saham.
#Plot Nilai Tutup Adj yang Benar
df['Sesuaikan Tutup'].plot()
Langkah 5 – Mengatur Variabel Target dan Memilih Fitur
Pada langkah selanjutnya, kami menetapkan kolom output ke variabel target. Dalam hal ini, ini adalah nilai relatif yang disesuaikan dari Microsoft Stock. Selain itu, kami juga memilih fitur yang bertindak sebagai variabel independen terhadap variabel target (variabel dependen). Untuk menjelaskan tujuan pelatihan, kami memilih empat karakteristik, yaitu:
- Membuka
- Tinggi
- Rendah
- Volume
#Tetapkan Variabel Target
output_var = PD.DataFrame(df['Adj Tutup'])
#Memilih Fitur
fitur = ['Buka', 'Tinggi', 'Rendah', 'Volume']
Langkah 6 – Penskalaan
Untuk mengurangi biaya komputasi data dalam tabel, kami akan menurunkan nilai stok ke nilai antara 0 dan 1. Dengan cara ini, semua data dalam jumlah besar berkurang, sehingga mengurangi penggunaan memori. Selain itu, kita bisa mendapatkan lebih banyak akurasi dengan memperkecil karena data tidak tersebar dalam nilai yang luar biasa. Ini dilakukan oleh kelas MinMaxScaler dari perpustakaan sci-kit-learn.
#Penskalaan
scaler = MinMaxScaler()
fitur_transform = scaler.fit_transform(df[fitur])
feature_transform= pd.DataFrame(columns=features, data=feature_transform, index=df.index)
fitur_transform.head()
Tanggal | Membuka | Tinggi | Rendah | Volume |
1990-01-02 | 0,000129 | 0,000105 | 0,000129 | 0,064837 |
1990-01-03 | 0,000265 | 0,000195 | 0,000273 | 0.144673 |
1990-01-04 | 0,000249 | 0,000300 | 0,000288 | 0.160404 |
1990-01-05 | 0,000386 | 0,000300 | 0,000334 | 0,086566 |
1990-01-08 | 0,000265 | 0,000240 | 0,000273 | 0,072656 |
Seperti disebutkan di atas, kita melihat bahwa nilai variabel fitur diperkecil ke nilai yang lebih kecil dibandingkan dengan nilai sebenarnya yang diberikan di atas.
Langkah 7 – Memisahkan ke Training Set dan Test Set.
Sebelum memasukkan data ke dalam model pelatihan, kita perlu membagi seluruh dataset menjadi set pelatihan dan pengujian. Model LSTM Machine Learning akan dilatih pada data yang ada di set pelatihan dan diuji pada set pengujian untuk akurasi dan propagasi balik.
Untuk ini, kita akan menggunakan kelas TimeSeriesSplit dari perpustakaan sci-kit-learn. Kami menetapkan jumlah pemisahan sebagai 10, yang menunjukkan bahwa 10% data akan digunakan sebagai set pengujian, dan 90% data akan digunakan untuk melatih model LSTM. Keuntungan menggunakan pemisahan Deret Waktu ini adalah bahwa sampel data deret waktu pemisahan diamati pada interval waktu yang tetap.
#Pemisahan ke set Pelatihan dan set Tes
timesplit= TimeSeriesSplit(n_splits=10)
untuk train_index, test_index di timesplit.split(feature_transform):
X_train, X_test = feature_transform[:len(train_index)], feature_transform[len(train_index): (len(train_index)+len(test_index))]
y_train, y_test = output_var[:len(train_index)].values.ravel(), output_var[len(train_index): (len(train_index)+len(test_index))].values.ravel()
Langkah 8 – Memproses Data Untuk LSTM
Setelah set pelatihan dan pengujian siap, kami dapat memasukkan data ke dalam model LSTM setelah dibuat. Sebelum itu, kita perlu mengubah data training dan test set menjadi tipe data yang akan diterima oleh model LSTM. Kami pertama-tama mengonversi data pelatihan dan data uji ke array NumPy dan kemudian membentuknya kembali ke format (Jumlah Sampel, 1, Jumlah Fitur) karena LSTM mengharuskan data dimasukkan dalam bentuk 3D. Seperti yang kita ketahui jumlah sampel pada training set adalah 90% dari 7334 yaitu 6667, dan jumlah fitur adalah 4, training set tersebut dibentuk kembali menjadi (6667, 1, 4). Demikian pula, set tes juga dibentuk ulang.
#Proses data untuk LSTM
trainX =np.array(X_train)
testX =np.array(X_test)
X_train = trainX.reshape(X_train.shape[0], 1, X_train.shape[1])
X_test = testX.reshape(X_test.shape[0], 1, X_test.shape[1])
Langkah 9 – Membangun Model LSTM
Akhirnya, kita sampai pada tahap di mana kita membangun Model LSTM. Di sini, kami membuat model Sequential Keras dengan satu lapisan LSTM. Lapisan LSTM memiliki 32 unit, dan diikuti oleh satu Lapisan Padat dari 1 neuron.
Kami menggunakan Adam Optimizer dan Mean Squared Error sebagai fungsi kerugian untuk mengkompilasi model. Keduanya adalah kombinasi yang paling disukai untuk model LSTM. Selain itu, model juga diplot dan ditampilkan di bawah.
#Membangun Model LSTM
lstm = Urutan()
lstm.add(LSTM(32, input_shape=(1, trainX.shape[1]), activation='relu', return_sequences=False))
lstm.add(Padat(1))
lstm.compile(loss='mean_squared_error', pengoptimal='adam')
plot_model(lstm, show_shapes=Benar, show_layer_names=Benar)
Langkah 10 – Melatih Model
Terakhir, kami melatih model LSTM yang dirancang di atas pada data pelatihan untuk 100 epoch dengan ukuran batch 8 menggunakan fungsi fit.
#Pelatihan Model
history = lstm.fit(X_train, y_train, epochs=100, batch_size=8, verbose=1, shuffle=False)
Zaman 1/100
834/834 [==============================] – 3s 2ms/langkah – kalah: 67.1211
Zaman 2/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 70,4911
Zaman 3/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 48.8155
Zaman 4/100
834/834 [==============================] – 1s 2ms/langkah – kalah: 21.5447
Zaman 5/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 6.1709
Zaman 6/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 1.8726
Zaman 7/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0,9380
Zaman 8/100
834/834 [==============================] – 2s 2ms/langkah – rugi: 0.6566
Zaman 9/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0,5369
Zaman 10/100
834/834 [==============================] – 2s 2ms/langkah – rugi: 0,4761
.
.
.
.
Zaman 95/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0,4542
Zaman 96/100
834/834 [==============================] – 2s 2ms/langkah – rugi: 0,4553
Zaman 97/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0,4565
Zaman 98/100
834/834 [==============================] – 1s 2ms/langkah – kerugian: 0.4576
Zaman 99/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0.4588
Zaman 100/100
834/834 [==============================] – 1s 2ms/langkah – rugi: 0.4599
Akhirnya, kami melihat bahwa nilai kerugian telah menurun secara eksponensial dari waktu ke waktu selama proses pelatihan 100 epoch dan telah mencapai nilai 0,4599
Langkah 11 – Prediksi LSTM
Dengan model kami siap, sekarang saatnya untuk menggunakan model yang dilatih menggunakan jaringan LSTM pada set pengujian dan memprediksi Nilai Tutup Berdekatan dari saham Microsoft. Hal ini dilakukan dengan menggunakan fungsi prediksi sederhana pada model lstm yang dibangun.
#Prediksi LSTM
y_pred= lstm.predict(X_test)
Langkah 12 – True vs Predicted Adj Close Value – LSTM
Terakhir, karena kami telah memperkirakan nilai set pengujian, kami dapat memplot grafik untuk membandingkan nilai sebenarnya dari Adj Close dan nilai prediksi Adj Close dengan model Machine Learning LSTM.
#True vs Predicted Adj Close Value – LSTM
plt.plot(y_test, label='Nilai Sebenarnya')
plt.plot(y_pred, label='LSTM Nilai')
plt.title("Prediksi oleh LSTM")
plt.xlabel('Skala Waktu')
plt.ylabel('Berskala USD')
plt.legenda()
plt.tampilkan()
Grafik di atas menunjukkan bahwa beberapa pola terdeteksi oleh model jaringan LSTM tunggal yang sangat dasar yang dibangun di atas. Dengan menyempurnakan beberapa parameter dan menambahkan lebih banyak lapisan LSTM ke model, kami dapat mencapai representasi yang lebih akurat dari nilai saham perusahaan mana pun.
Kesimpulan
Jika Anda tertarik untuk mempelajari lebih lanjut tentang contoh kecerdasan buatan, pembelajaran mesin, lihat Program PG Eksekutif IIIT-B & upGrad dalam Pembelajaran Mesin & AI yang dirancang untuk profesional yang bekerja dan menawarkan 450+ jam pelatihan ketat, 30+ studi kasus & penugasan, status Alumni IIIT-B, 5+ proyek batu penjuru praktis & bantuan pekerjaan dengan perusahaan-perusahaan top.
Bisakah Anda memprediksi pasar saham menggunakan pembelajaran mesin?
Hari ini, kami memiliki sejumlah indikator untuk membantu memprediksi tren pasar. Namun, kita harus melihat tidak lebih dari komputer bertenaga tinggi untuk menemukan indikator yang paling akurat untuk pasar saham. Pasar saham adalah sistem terbuka, dan dapat dilihat sebagai jaringan yang kompleks. Jaringan terdiri dari hubungan antara saham, perusahaan, investor dan volume perdagangan. Dengan menggunakan algoritme penambangan data seperti mesin vektor pendukung, Anda dapat menerapkan rumus matematika untuk mengekstrak hubungan di antara variabel-variabel ini. Pasar saham sekarang di luar prediksi manusia.
Algoritma mana yang terbaik untuk prediksi pasar saham?
Untuk hasil terbaik, Anda harus menggunakan Regresi Linier. Regresi Linier adalah pendekatan statistik yang digunakan untuk mengetahui hubungan antara dua variabel yang berbeda. Dalam contoh ini, variabelnya adalah harga dan waktu. Dalam prediksi pasar saham, harga adalah variabel independen, dan waktu adalah variabel dependen. Jika hubungan linier antara dua variabel ini dapat ditentukan, maka dimungkinkan untuk memprediksi secara akurat nilai saham pada titik mana pun di masa depan.
Apakah prediksi pasar saham merupakan masalah klasifikasi atau regresi?
Sebelum menjawab, kita perlu memahami apa yang dimaksud dengan prediksi pasar saham. Apakah ini masalah klasifikasi biner atau masalah regresi? Misalkan kita ingin memprediksi masa depan suatu saham, di mana masa depan berarti hari, minggu, bulan, atau tahun berikutnya. Jika kinerja saham di masa lalu pada beberapa titik waktu adalah input dan masa depan adalah output, maka itu adalah masalah regresi. Jika kinerja saham di masa lalu dan masa depan saham independen, maka itu adalah masalah klasifikasi.