Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 261
Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
Ve tahmindeki sonuçlar nelerdir? sormaya cesaret et.
İşte eğitim modelleri için hazırlanmış bir plaka.
Fiyatlar sütun deltalarına dönüştürülür; değişiklik yapılmadan veya NA ile kaldırılan sütunlar.
Her sütun için her satıra 3 gecikme yükledim (geçerli satır eksi önceki; önceki eksi önceki önceki; önceki eksi önceki önceki eksi)
Hedef, bir sonraki satırdaki değerin yükselmesi/düşüşüdür (bir sonraki satır eksi mevcut satır, +-1'e yuvarlanır veya değişiklik yoksa 0; toplamda 3 sınıf). Tüm hedeflerin önüne "target_" eklenir
*Belirli bir hedefi tahmin etmek için başka hedefler kullanamazsınız, aksi takdirde geleceğe bir bakış olacaktır. Ön eki "target_" olan tüm sütunlar, tahmin edici veya girdi olarak kullanılamaz.
Sorun.
Csv dosyasını eğitim verileri ve ön test için 10:1 oranında satırlar halinde iki parçaya böldüm. Modeli target_SiH7.bid için eğitti (yukarıdaki tablodan), eğitimde %62 ve yeni verilerde %74 sınıflandırma doğruluğu aldı. Memnun oldum, ancak iki kez kontrol edildiğinde, 0 sınıfının diğerlerine göre çok dengesiz olduğu ve sadece miktar olarak %60 ve %74 olduğu ortaya çıktı. Yani model 0'ı iyi tespit etmeyi öğrenmiş ve -1 ve 1 sınıflarında puan almıştır.
Başka bir değerlendirmeye ihtiyaç var. Dengesiz iki sınıf için bu ölçüm harika - https://en.wikipedia.org/wiki/Cohen's_kappa , ancak bizim durumumuzda iki değil üç dengesiz sınıf var, 3 için bir Kappa analogu var mı?
Bana sorarsanız, muhtemelen kesin olarak cevap veremem, tahmin edilen birçok şey var ve her şey farklı. Ama ortalama olarak %60-65 civarında bir yerde
İlginç, detaylandırabilir misin?
Sadece şu anda tamamen farklı bir tahmin alanıyla uğraşıyorum ve bu piyasa tarihinde sizinle deneyler yapamadığım için dağınık olmayı göze alamam, ancak okumak ve gözlemlemek benim için çok ilginç lütfen devamını yazın...
0 sınıfının diğerlerine göre çok dengesiz olduğu ve sadece sayı olarak %60 ve %74 olduğu ortaya çıktı. Yani model 0'ı iyi tespit etmeyi öğrenmiş ve -1 ve 1 sınıflarında puan almıştır.
Rastgele ormanı tersine çevirmek için eğittiğimde de aynı sorunu yaşadım, elbette tersine çevirme olmayanlardan çok daha az geri dönüş vardı. Ne kadar çok ağaç yaparsa, MO dönüş sınıflarında o kadar fazla puan aldı ve dönüşsüz sınıfa daha fazla konsantre oldu.
Caret'in sınıfları dengelemek için birkaç yöntemi vardır, ancak bunların hepsi banal türlerdir - ya eşitlenmesi daha az olan sınıfı çoğaltırız, böylece tüm sınıflardaki gözlemlerin toplamı aynı olur ya da tam tersi, gereksiz gözlemleri sınıftan kaldırırız daha fazla gözlemin olduğu
Yöntemlerin hiçbiri, bir şekilde dengelemeden daha karlı olduğunu göstermedi (ancak bu sadece benim durumumda)
İlginç, detaylandırabilir misin?
Sadece şu anda tamamen farklı bir tahmin alanıyla uğraşıyorum ve bu piyasa tarihinde sizinle deneyler yapamadığım için dağınık olmayı göze alamam, ancak okumak ve gözlemlemek benim için çok ilginç lütfen devamını yazın...
Rastgele ormanı tersine çevirmek için eğittiğimde de aynı sorunu yaşadım, elbette tersine çevirme olmayanlardan çok daha az geri dönüş vardı. Ne kadar çok ağaç yaparsa, MO dönüş sınıflarında o kadar fazla puan aldı ve dönüşsüz sınıfa daha fazla konsantre oldu.
Caret'in sınıfları dengelemek için birkaç yöntemi vardır, ancak bunların hepsi banal türlerdir - ya eşitlenmesi daha az olan sınıfı çoğaltırız, böylece tüm sınıflardaki gözlemlerin toplamı aynı olur ya da tam tersi, gereksiz gözlemleri sınıftan kaldırırız daha fazla gözlemin olduğu
Yöntemlerin hiçbiri, bir şekilde dengelemeden daha karlı olduğunu göstermedi (ancak bu sadece benim durumumda)
Her şey tartışılır. Si , RI , BR vb. gibi fort vadeli işlemleri önerdim. genel olarak en likit. Sonuç olarak, bir sinyal (-1,0,1) (kısa, nakit, uzun) öneriyorum, sinyal olasılıktan açık ve MM tarafından bozulmuyor istekler gibi. Probotka sonrası, işaretler ve hedefler ustanın işi veya düzenidir.
Biraz düşündükten sonra, en azından bir bardak daha eklemeniz gerektiği sonucuna vardım{ fiyat : vol ,…||…, fiyat : vol }, olduğu gibi, her tahmin edilen araç için saniyede bir, o zaman delta gerekli değildir ve teklif, soru da, bu IMHO gereklidir, eğer saniyede bir bant ile ayrı hacimler ve bir OI ofseti varsa , az çok bilgilendirici, o zaman bir bardak için bir delta çok yeterli değil, en azından farklı “plakalar”, dağıtım vb. görmeniz gerekir. ve her şey başlangıç için yeterli görünüyor. Bir bardak ekleyin ve birkaç gün boyunca bir eğitim veri seti yayınlayın, oynayacağız. :)
Sonunda Scott'ın Pi metriğine karar verdi https://en.wikipedia.org/wiki/Scott's_Pi
İşte bu tahminle elde ettiğim sonuçlar, modeli satırların ilk %91'i üzerinde eğitti ve ardından kalan son veriler üzerinde bir ön test yaptı (oran backtest : fronttest = 10:1)
tablodaki "class_0_rate" sütunları - bu değerin çok yüksek olduğu durumlarda Excel'de bu sonuçları filtreleyebilmeniz için 0 sınıfının -1 ve 1 sınıflarına oranı.
Son iki sütun, eğitim ve test için Scott'ın Pi metriğidir, değer -1 ile 1 arasında olacaktır; burada 0=sonuç rastgele ve model işe yaramaz ve 1=her şey yolunda. Negatif sonuç - çok iyi değil, ters korelasyon, tahmin sonucunu tersine çevirmeyi deneyebilirsiniz. Ters korelasyon, tahmin edilenin tam tersinde ticaret yaparken bazen iki sınıfla oldukça iyi çalışır. Ancak üç sınıfla, "zıt"ı bulmak bir şekilde zordur, her sınıf iki zıt sınıfa karşılık gelir, bu durumda olumsuz bir değerlendirme de kötüdür.
Krch, backtest ve fronttest üzerinde alış (veya talep) tahminlerinin benzer ve daha yüksek değerlendirme değerlerine sahip olduğu para birimini seçmelidir, örneğin xagusd. 0'dan 1'e kadar bir ölçekte 0.18'lik bir puan düşük olsa da. Ve gerçek ticarette bir tık ileriyi tahmin etmek de kötü. Genel olarak, sonuç, ancak geçerli değil :)
Scott'ın Pi'si için R kodu
if (length(act) != length(pred)){
stop( "different length" )
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for (i in 1 :n_levels){
for (j in 1 :n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for (i in 1 :n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for (i in 1 :n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/ 2 )^ 2
}
p <- marginalSum
return ((diagSum - p)/( 1 -p))
}
Sonunda Scott'ın Pi metriğine karar verdi https://en.wikipedia.org/wiki/Scott's_Pi
İşte bu tahminle elde ettiğim sonuçlar, modeli satırların ilk %91'i üzerinde eğitti ve ardından kalan son veriler üzerinde bir ön test yaptı (oran backtest : fronttest = 10:1)
tablodaki "class_0_rate" sütunları - bu değerin çok yüksek olduğu durumlarda Excel'de bu sonuçları filtreleyebilmeniz için 0 sınıfının -1 ve 1 sınıflarına oranı.
Son iki sütun, eğitim ve test için Scott'ın Pi metriğidir, değer -1 ile 1 arasında olacaktır; 0=sonuç rastgele ve model işe yaramaz ve 1=her şey yolunda. Negatif sonuç - çok iyi değil, ters korelasyon, tahmin sonucunu tersine çevirmeyi deneyebilirsiniz. Ters korelasyon, tahmin edilenin tam tersinde ticaret yaparken bazen iki sınıfla oldukça iyi çalışır. Ancak üç sınıfla, "zıt"ı bulmak bir şekilde zordur, her sınıf iki zıt sınıfa karşılık gelir, bu durumda olumsuz bir değerlendirme de kötüdür.
Krch, backtest ve fronttest üzerinde alış (veya talep) tahminlerinin benzer ve daha yüksek değerlendirme değerlerine sahip olduğu para birimini seçmelidir, örneğin xagusd. 0'dan 1'e kadar bir ölçekte 0.18'lik bir puan düşük olsa da. Ve gerçek ticarette bir tık ileriyi tahmin etmek de kötü. Genel olarak, sonuç geçerlidir, ancak geçerli değildir :)
Scott'ın Pi'si için R kodu
if (length(act) != length(pred)){
stop( "different length" )
}
n_observ <- length(act)
all_levels <- unique(c(act,pred))
n_levels <- length(all_levels)
marginal_matrix <- matrix(NA, ncol=n_levels, nrow=n_levels)
colnames(marginal_matrix) <- all_levels
rownames(marginal_matrix) <- all_levels
for (i in 1 :n_levels){
for (j in 1 :n_levels){
marginal_matrix[i,j] <- sum((act==all_levels[i]) & (pred==all_levels[j]))
}
}
diagSum <- 0
for (i in 1 :n_levels){
diagSum <- diagSum + marginal_matrix[i,i]
}
diagSum <- diagSum / n_observ
marginalSum <- 0
for (i in 1 :n_levels){
marginalSum <- marginalSum + ((sum(marginal_matrix[i,]) + sum(marginal_matrix[,i]))/n_observ/ 2 )^ 2
}
p <- marginalSum
return ((diagSum - p)/( 1 -p))
}