Makine öğrenmesi modelimiz basit bir toplama işlemine yenildi
Borsa modeli yapan herkesin aklına bir noktada aynı fikir geliyor. Elimizde onlarca özellik var, geçmiş getiri verisi var, neden bir makine öğrenmesi modeli eğitmeyelim.
Biz de denedik. Sonucu paylaşmak istiyoruz çünkü bu tür denemelerin başarısız olanları genelde hiç anlatılmıyor.
Kurulum
Elimizde her hisse için aylık olarak hesaplanan bir dizi özellik vardı. Volatilite, hacim oranı, fiyatın yıllık aralıktaki konumu, hacim düğümlerine yakınlık, değer alanı içinde olup olmama, kısa vadeli momentum ve birkaç tane daha.
Hedef değişken, bir sonraki ayın getirisi.
Random forest kurduk. Eğitim ve test dönemlerini ayırdık, geleceğe bakmadığından emin olduk.
Ne oldu
Eğitim döneminde model harikaydı. Beklenen bir sonuç, çünkü random forest eğitim verisini neredeyse ezberleyebiliyor.
Asıl test örnek dışı dönemdi. 2021 sonrası dönemde Sharpe oranı 1,79’dan 1,23’e düştü. Yani model, kendisinden önce kullandığımız basit yaklaşımdan belirgin şekilde daha kötü performans verdi.
Farklı ayarlar denedik. Ağaç sayısını değiştirdik, derinliği kısıtladık, özellik sayısını azalttık. Sonuç hep aynı bölgede kaldı.
Neden başarısız oldu
Sinyal gürültü oranı çok düşük. Hisse senedi getirilerinin aylık kesitinde açıklanabilen varyans oranı çok küçüktür. Bizim en güçlü özelliğimizin bile kesitsel korelasyonu eksi 0,08 seviyesinde. Bu ortamda esnek bir model, sinyal yerine gürültüyü öğreniyor.
Veri miktarı sanıldığı kadar çok değil. 78 bin satır kulağa çok geliyor ama bunlar bağımsız gözlem değil. Aynı ay içindeki tüm hisseler aynı piyasa şokuna maruz kalıyor. Gerçek bağımsız gözlem sayısı, ay sayısı kadar yani birkaç yüz. Random forest için çok az.
Rejim değişiyor. Borsa sabit bir sistem değil. 2015’te işe yarayan ilişki 2023’te aynı olmayabilir. Model geçmişteki ilişkiyi ne kadar iyi öğrenirse, rejim değiştiğinde o kadar sert yanılıyor.
Yerine ne koyduk
Çok daha basit bir şey. Her ay, her özelliği kesitsel olarak standartlaştırıyoruz. Yani o ayki tüm hisseler arasında z skoruna çeviriyoruz. Sonra teorinin söylediği işaretle topluyoruz.
Volatilite eksi işaretle giriyor, çünkü düşük volatilite iyi. Zirveye yakınlık artı işaretle giriyor. Confluence mesafesi eksi. Ve böyle devam.
Kritik nokta şu: ağırlıklar fit edilmedi. Hepsi eşit ağırlıkta ve işaretleri teoriden geliyor, veriden değil. Optimize edilecek hiçbir parametre yok.
Sonuç, random forest’ın da eski modelimizin de üstünde çıktı. Kesitsel tahmin gücü 0,023’ten 0,072’ye yükseldi. Sharpe oranı her test döneminde iyileşti: 2012 sonrası 1,21’den 1,60’a, 2018 sonrası 1,74’ten 2,01’e, 2021 sonrası 2,05’ten 2,43’e.
Buradan çıkan ders
Ağırlıkları fit etmemek bir eksiklik değil, bir savunma. Fit edilmiş her parametre, örnek dışında bozulabilecek bir noktadır. Fit edilmemiş modelin bozulacak parametresi yoktur.
Bu fikir yeni değil. Robert Haugen ve başkaları yıllar önce basit eşit ağırlıklı kompozitlerin optimize edilmiş modellerden daha dayanıklı olduğunu göstermişti. Biz aynı sonuca kendi verimizle yeniden vardık.
Makine öğrenmesi hiç mi işe yaramaz
Yaramaz demiyoruz. Ama şu şartlarda anlamlı olabilir.
Veri miktarı gerçekten büyükse. Günlük yerine saniyelik veri, yüzlerce yerine on binlerce enstrüman.
Sinyal gürültü oranı yüksekse. Mesela emir defteri mikro yapısında ilişkiler çok daha net.
Özellik sayısı insanın elle takip edemeyeceği kadar çoksa ve aralarında doğrusal olmayan gerçek etkileşimler bekliyorsanız.
Aylık kesitsel hisse seçiminde bunların hiçbiri yok. Burada esnek model, esnekliğini gürültüye harcıyor.
Sınırlar
Bu tek bir denemenin sonucu. Farklı bir model ailesi, farklı bir hedef tanımı ya da çok daha zengin bir özellik seti ile başka sonuç çıkabilir. Bizim iddiamız makine öğrenmesinin işe yaramadığı değil, bizim veri ve problem kurulumumuzda basit kompozitin daha iyi olduğu.
Sonuçlar hayatta kalma yanlılığı içeren bir veri setinden, getiriler nominal TL ve işlem maliyeti dahil değil.
Bu yazı bilgilendirme amaçlıdır, yatırım tavsiyesi değildir.
Bu içerik yatırım tavsiyesi değildir; eğitim ve bilgilendirme amaçlıdır.
'Aşırı uyum: modelin geçmişi ezberlemesi'
Geçmiş veride mükemmel çalışan model, gelecekte en kötüsü olabilir. Ezberlemek ile öğrenmek arasındaki farkı, random forest denememizin neden çöktüğünü ve fit etmemenin neden bir savunma olduğunu anlatıyoruz. Bir model kurdunuz. Geçmiş veride mükemmel çalışıyor. Eğri o kadar güzel ki kendinize bile inanamıyorsunuz.
Grafik yalanları: eksen, ölçek ve seçim oyunları
Bir grafik, sayılar doğru olduğu halde yanıltabiliyor. Kesilmiş eksen, ölçek oyunu, dönem seçimi ve çift eksen gibi görsel hileleri tanımayı anlatıyoruz. Bir grafik, teknik olarak doğru olduğu halde yanıltabiliyor. Sayılar gerçek ama sunum, yanlış bir izlenim yaratıyor.
Backtest getirisi yüzde X" iddiasını sorgulamak
Backtest getirisi yüzde X" iddiasının gizli varsayımlarını tek tek sorguluyoruz: geleceğe bakma, hayatta kalma yanlılığı, maliyet, likidite, deneme sayısı ve enflasyon. Bir strateji "on yıllık backtest getirisi yıllık yüzde 40" diyor. Bu tek cümle, birçok gizli varsayım taşıyor.