Langkah-langkah pertama belajar memprediksi waktu keuangan menggunakan pembelajaran mesin

12

Saya mencoba memahami cara menggunakan pembelajaran mesin untuk memprediksi waktu keuangan 1 atau lebih langkah ke depan.

Saya memiliki jadwal waktu keuangan dengan beberapa data deskriptif dan saya ingin membentuk model dan kemudian menggunakan model untuk memprediksi langkah-n ke depan.

Apa yang telah saya lakukan sejauh ini adalah:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Kemudian saya telah memasang model randomForest untuk data ini.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Yang tampaknya cocok dengan sangat baik:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

Dan mencoba menggunakannya untuk memprediksi:

predict(fit, GOOG, n.ahead=2)

Tetapi prediksi ofc ini tidak berhasil.

Saya mencoba memprediksi Close, haruskah saya mengabaikan variabel lain sebanyak langkah yang saya inginkan prediksi, sebelum menyesuaikan model?

Mungkin banyak hal lain yang harus saya perhitungkan juga tetapi ini benar-benar langkah pertama saya mencoba pembelajaran mesin.

nikke
sumber

Jawaban:

16

Pengamatan pertama saya adalah bahwa Anda tidak ketinggalan input relatif terhadap harga penutupan dan itulah sebabnya Anda mengamati kecocokan yang baik. SMA (simple moving average) menggunakan harga penutupan dalam perhitungannya dan kisaran rendah tinggi mencakup harga penutupan, jadi menggunakannya untuk memprediksi harga penutupan memberikan bias pandangan ke depan. Pendapat saya adalah bahwa jika Anda mencoba memprediksi harga penutupan dua hari ke depan Anda harus membangun model Anda dengan input yang tertinggal dari harga penutupan setidaknya dua hari. Beberapa input mungkin tertinggal lebih dari dua hari, tetapi saya akan mulai dengan sederhana dan mencoba dan menggunakan beberapa input saja.

Sejauh tujuan Anda untuk memprediksi harga penutupan, saya pikir harga penutupan terlalu berisik untuk digunakan sebagai variabel target dan menggunakannya akan menyebabkan overfitting atau optimalisasi tujuan yang salah. Sebaliknya saya akan mulai dengan menghaluskan harga penutupan dengan rata-rata bergerak dan kemudian memprediksi arah perubahan harga selama dua hari ke depan. Misalnya saya bisa mengganti tutup dengan SMA 5 hari dari penutupan dan kemudian kode perubahan harga SMA sebagai 1 jika positif selama dua hari berikutnya dan 0 sebaliknya. Karena variabel output sekarang dikodekan sebagai 1 atau 0, ini adalah masalah yang baik untuk dicoba dan selesaikan dengan fungsi hutan acak yang Anda gunakan. Anda juga dapat mencoba beberapa algoritme klasifikasi lain seperti regresi logistik, jaringan saraf, dan SVM dan mungkin menggabungkan beberapa ke dalam ansambel untuk meningkatkan kinerja Anda. Ini masih merupakan masalah yang sulit dipecahkan tanpa overfitting, tetapi merupakan langkah ke arah yang benar. Peringatan lain adalah bahwa model akhir Anda dapat memiliki akurasi yang luar biasa dalam mengklasifikasikan dua hari berikutnya sebagai positif atau negatif, tetapi masih kehilangan uang karena itu mengklasifikasikan beberapa langkah besar secara tidak benar.

Saya juga merekomendasikan membangun model Anda pada lebih dari satu keamanan sehingga algoritma pembelajaran mesin tidak mengasah keanehan dari satu saham. Saya akan mulai dengan setidaknya 5 saham yang tidak sangat berkorelasi satu sama lain.

Trading on the Edge oleh Guido Deboeck adalah tempat yang baik untuk memulai untuk mengeksplorasi aplikasi pembelajaran mesin untuk prediksi deret waktu keuangan. Ini buku yang lebih tua sehingga jauh di belakang teknologi yang kami miliki saat ini tetapi ini adalah awal yang baik. Saya juga akan merekomendasikan Sistem dan Metode Perdagangan Baru oleh Kaufman dan Sistem Perdagangan Pakar oleh John Wolberg.

CrossValidatedTrading
sumber
ok terima kasih atas jawaban yang bagus ini. Contohnya lebih bagi saya untuk memahami cara mengatur data sehingga randomForest dapat menggunakannya. Tapi sekarang saya tahu saya harus meninggalkan input untuk membuatnya bekerja. Apakah masuk akal untuk memiliki harga SMA dalam contoh Anda sebagai variabel output, atau apakah harus sebagai 0 atau 1? Terima kasih juga atas rekomendasi buku yang akan membiasakan diri dengan mereka.
nikke
Anda pasti bisa menggunakan harga SMA sebagai variabel output; masalahnya menjadi lebih kompleks. Alih-alih memprediksi arah, Anda sekarang mencoba memprediksi nilai harga yang tepat. Dalam pengalaman saya ini adalah hal yang sangat sulit bagi algoritma mesin untuk melakukan out-of-sample dengan baik. Tetapi jika Anda hanya membiasakan diri dengan proses menyiapkan data deret waktu untuk prediksi, ini mungkin tempat yang baik untuk memulai, terutama jika lebih intuitif untuk Anda daripada prediksi terarah. Anda juga bisa mencoba dan memprediksi harga di mana dua moving average akan menyeberang.
CrossValidatedTrading
Hai, membuat beberapa fitur dan membuat model: pastie.org/7958695 Saya pikir saya sudah menemukan mekaniknya. Namun model ini terlalu melengkung. Sudahkah Anda melakukan hal yang serupa dan pernah menggunakannya? Akan lebih keren untuk berbicara lebih banyak.
nikke
Saya selalu terbuka untuk percakapan yang lebih detail. Info kontak saya ada di profil saya. Kirimi saya email jika Anda mau.
CrossValidatedTrading
Melakukan beberapa regresi sederhana untuk memprediksi pengembalian yang seharusnya berfungsi dengan baik, dibandingkan dengan memprediksi nilai harga. Selain memprediksi pengembalian harus memprediksi pengembalian yang cukup besar untuk mengalahkan spread & komis dll. Akan lebih keren untuk berbicara lebih banyak, tidak dapat menemukan email Anda di profil Anda. Milik saya adalah pastie yang saya posting di komentar sebelumnya.
nikke