Eşit ağırlıklı portföy optimizasyondan ne zaman iyi?
Örneklem süresi kısıtlı olduğunda eşit ağırlıklı portföy stratejisi optimize edilmiş pozisyon büyüklüğünü geride bırakır. Python simülasyonu tahmin hatalarına karşı direnci gösterir.
Eşit Ağırlıklı Portföyün Avantajı
Beklenen getirilerin kesin olarak belirlenmesi için örneklem süresi yetersiz kaldığında, eşit ağırlıklı portföy stratejisi optimize edilmiş pozisyon büyüklüğünden daha iyi performans gösterir. Kısa örneklemler istisnadan ziyade piyasadaki normal durumu temsil eder. Bir optimizasyon modeli, kimsenin doğru ölçemediği girdilere uygulanan sağlam bir aritmetikten ibarettir. Eşit ağırlıklı, yani 1/N portföy stratejisi ise hiçbir tahminde bulunmaz; tahminlerin hatalı olduğu durumlarda dirençli kalmasının temel nedeni budur.
Eşit ağırlık gerçekten optimizasyondan daha mı iyi?
Belirli bir koşul altında, evet. Terimleri tek tek ele alalım. 1/N olarak yazılan eşit ağırlık yöntemi, sermayeyi N adet pozisyona eşit şekilde böler ve herhangi bir tahmin gerektirmez. Ortalama-varyans optimizasyonu, tahmin edilen varyans birimi başına en iyi beklenen getiriyi sağlayan ağırlıkları hesaplar. Kelly kriteri ise uzun vadeli bileşik büyümeyi maksimize eden ağırlıkları belirler; ilişkisiz varlıklar arasında bu yöntem, her bir varlığın beklenen aşırı getirisinin varyansına oranlanmasıyla elde edilen ağırlığa indirgenir. Kelly kriteri pozisyon büyüklüğü rehberimiz, bu formülü detaylı bir şekilde açıklamaktadır.
Her iki optimizasyon yöntemi de aynı girdiye ihtiyaç duyar: varlık başına beklenen getiri. Bu, örneklem tahminlerinin en zayıf olduğu niceliktir. Volatilite, kısa bir zaman diliminden işlevsel bir hassasiyetle elde edilebilir. Ortalama ise bu şekilde elde edilemez ve ikisi arasındaki fark, herhangi bir fiyat geçmişinde görülebilecek kadar büyüktür. Aşağıdaki panel, yaygın olarak tutulan altı ismi ele almakta, 2015'ten 2024'e kadar her takvim yılını ayrı ayrı ölçmekte ve en yüksek ile en düşük yıllık tahminin birbirinden ne kadar uzak olduğunu raporlamaktadır. Bu işlem her isim için iki kez yapılır: bir kez yıllıklandırılmış ortalama günlük getiri için, bir kez de yıllıklandırılmış volatilite için.
Her verinin arkasındaki tam SQL
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'SPY', 'KO', 'JNJ')
AND date >= '2015-01-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
yearly AS
(
SELECT
ticker,
toYear(date) AS yr,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM rets
WHERE isFinite(ret)
GROUP BY ticker, yr
HAVING count() >= 200
)
SELECT
ticker,
round(max(mean_pct) - min(mean_pct), 1) AS mean_estimate_range_pct,
round(max(vol_pct) - min(vol_pct), 1) AS vol_estimate_range_pct
FROM yearly
GROUP BY ticker
ORDER BY mean_estimate_range_pct DESCNVDA için yıllık ortalama tahmini, bu on yıl boyunca 184.7 yüzde puanlık bir aralıkta seyrederken, aynı isim için aynı yıllarda volatilite tahminindeki aralık 28.6 puandır. Paneldeki en istikrarlı isim olan KO bile, yıllık ortalama tahminini 23.9 puanlık bir aralıkta hareket ettirmiştir. Geçen yılın ortalama getirisini bu yılın beklenen getirisi olarak bir optimizasyon modeline sunan her sistem, modele bu denli yüksek sapma payına sahip bir veri girmektedir.
Beklenen getiri tahmini için ne kadarlık bir örneklem gerekir?
Tahmin edilen ortalama getirinin standart hatası, varlığın volatilitesinin örneklem süresinin yıl cinsinden kareköküne bölünmesiyle bulunur. Gözlem sayısıyla değil, yıl cinsinden; aynı on iki ayı günlük yerine saatlik örneklemek bir kazanç sağlamaz. Yüzde yirmi volatiliteye sahip bir varlığı bu formüle koyduğunuzda, bir yıllık geçmiş verisi yıllık yirmi yüzde puanlık bir standart hata verir. Dört yıl bu hatayı yarıya indirerek ona düşürür. Gerçek ortalamaları iki puan farklı olan iki varlığı sıralamadan önce ihtiyaç duyulan hassasiyet olan bir puana inmek, dört yüzyıllık veri gerektirir.
Volatilite farklı bir durumdur. Volatilitenin hassasiyeti takvim süresinden ziyade gözlem sayısıyla artar; bu nedenle birkaç aylık günlük veri, onu zaten birkaç puanlık bir aralığa yerleştirir. Aşağıdaki panel, bir endeks fonunun yirmi yıllık günlük getirilerini sabit uzunluktaki örtüşmeyen bloklara böler, her blok içindeki her iki tahmini de hesaplar ve tahminlerin bloklar arasında ne kadar dağıldığını raporlar.
Her verinin arkasındaki tam SQL
WITH prices AS
(
SELECT
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2005-01-01'
AND date < '2025-01-01'
GROUP BY date
),
rets AS
(
SELECT
date,
c / lagInFrame(c, 1) OVER (ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
numbered AS
(
SELECT
ret,
row_number() OVER (ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
),
sweep AS
(
SELECT
arrayJoin([21, 63, 126, 252, 504]) AS n,
i,
ret
FROM numbered
),
blocks AS
(
SELECT
n,
intDiv(i - 1, n) AS blk,
avg(ret) * 252 * 100 AS mean_pct,
stddevPop(ret) * sqrt(252) * 100 AS vol_pct
FROM sweep
GROUP BY n, blk
HAVING count() = n
)
SELECT
concat(toString(n), ' sessions') AS sample_length,
round(stddevPop(mean_pct), 1) AS mean_estimate_spread_pct,
round(stddevPop(vol_pct), 1) AS vol_estimate_spread_pct,
count() AS window_count
FROM blocks
GROUP BY n
ORDER BY n ASC21 sessions uzunluğundaki bloklarda ortalama tahmini 53.7 yüzde puanlık bir dağılım gösterirken, aynı bloklar üzerinde ölçülen volatilite tahmini için bu değer 10.9 puandır. Blok uzunluğunu 504 sessions seviyesine çıkardığınızda ortalama dağılım 10.6 puana daralır. Bu daralma karekök boyunca gerçekleşir: hatadaki her yarıya inme, dört kat daha fazla veri maliyeti gerektirir.
Kendinizin çalıştırabileceği bir simülasyon
Bunların hiçbiri, tahmin hatasının 1/N stratejisine galibiyeti getirecek kadar büyük olduğunu kanıtlamaz. Ancak bu yöntem kanıtlar. Tarif için sadece bir Python kurulumu yeterlidir; veri dosyası, indirme veya üçüncü taraf paket gerekmez. Getirileri seçtiğiniz parametrelerden kendisi üretir, böylece gerçek sonuç bilinir ve her iki portföy dağılımı da bu sonuca göre puanlanabilir.
import randomveimport statisticsmodüllerini, ayrıcafrom math import logmodülünü içe aktarın. Bir sonraki satırdarandom.seed(20260816)ile seed değerini belirleyin.- Yıllık beklenen getiri oranları yüzde 5, 6, 7, 8 ve 9 olan, her birinin yıllık volatilitesi yüzde 20 ve birbirleriyle korelasyonsuz beş varlık tanımlayın.
mu_d = mu_a / 252vesd_d = sd_a / (252 ** 0.5)kullanarak günlük bazda hesaplamaya dönüştürün. [60, 125, 250, 500, 1000, 2500, 5000]taramasından bir T örneklem uzunluğu seçin.random.gauss(mu_d, sd_d)ile her varlık için T adet günlük getiri çekin. Bu veri seti, yöneticinin görebileceği tüm geçmişi temsil eder.statistics.meanile her varlığın ortalamasını vestatistics.stdevile volatilitesini tahmin edin. Optimize edici, sadece bu iki tahmini bilir.- Beş varlığın her birine 0,2 ağırlık vererek eşit ağırlıklı portföyü oluşturun. Bu portföy tahminlerin hiçbirini kullanmaz.
- Ham ağırlıkların her birini
mu_hat / (sd_hat ** 2)olarak ayarlayıp, her bir ağırlığı mutlak ham ağırlıkların toplamına bölerek optimize edilmiş portföyü oluşturun; bu işlem her iki portföyü de aynı brüt maruziyete getirir. - Gerçek parametrelerden, varlık başına 2520 günlük getiriden oluşan yeni bir örneklem dışı yol oluşturun. Her iki portföy dağılımı da bu veriyi görmemiştir.
- r değerinin o günkü beş varlık getirisinin ağırlıklı toplamı olduğu
log(1 + r)ortalaması ile her iki portföyü de puanlayın. - 4 ile 9 arasındaki adımları her T değeri için 2000 bağımsız denemede tekrarlayın ve eşit ağırlıklı portföyün optimize edilmiş ağırlıklardan daha iyi performans gösterdiği denemelerin oranını kaydedin.
Taramayı kısa T değerinden uzun T değerine doğru okuyun. Kısa vadede, eşit ağırlıklı portföy denemelerin büyük çoğunluğunu kazanır. T büyüdükçe bu oran istikrarlı bir şekilde düşer ve uzun vadede optimize edilmiş ağırlıklar denemelerin çoğunu kazanır. İkisi orta bir noktada kesişir. Kesişim noktası, seed değeri ve gerçek ortalamalar arasındaki spread ile birlikte hareket eder. Yön değişmez: daha fazla veri optimize ediciyi desteklerken, daha az veri 1/N stratejisini destekler. Çoğaltmak için random.seed(20260816) içindeki tam sayıyı değiştirin ve taramayı tekrar çalıştırın.
Optimizasyon aracının hatalı bir ortalama tahminini neden büyüttüğü
Tahminlerin ağırlığa nasıl dahil edildiğine bakılmalıdır. Tahmin edilen ortalama pay kısmında, tahmin edilen varyans ise payda kısmında yer alır. Ortalama tahminini iki katına çıkardığınızda ağırlık da iki katına çıkar. Varyans tahmininden dörtte bir oranında kesinti yaptığınızda ağırlık üçte bir oranında artar. Şanslı bir örneklemde her iki hata da aynı yöne işaret eder: İyi getirilerin olduğu bir dönem, ölçülen ortalamayı yükseltir ve genellikle aynı pencerede ölçülen varyansı baskılar. Optimizasyon aracı, ilgili varlığı grubun öne çıkanı olarak okur ve büyüklüğünü buna göre ayarlar. Örneklem dışı verilerde ise varlık, grubun sıradan bir üyesine dönüşür. Eşit ağırlıklandırma yöntemi ise bu şanslı örneklemi hiçbir zaman görmez.
Simülasyon, bu sorunun daha hafif bir versiyonudur. Birbiriyle ilişkisiz beş varlık, tersi alınacak bir şey içermeyen köşegen bir kovaryans matrisi bırakır. Gerçek portföyler ise korelasyonludur ve varlık sayısından çok az daha fazla gözlemle oluşturulan bir örneklem kovaryans matrisi, tekil matrise yakın seyreder. Bu matrisin tersinin alınması, küçük girdi hatalarını çok büyük ağırlıklara dönüştürür; optimizasyon aracının bir hissede sermayenin birkaç katı büyüklüğünde pozisyon alıp yakın ikamesinde ters yönde kısa pozisyon açmasının nedeni budur. portföyde yoğunlaşma riski üzerine hazırladığımız not, bu tür bir ağırlıklandırmanın düşüş dönemlerinde ne tür sonuçlar doğurduğunu ele almaktadır.
Girdiler de sabit kalmaz. Aşağıdaki panel, geniş kapsamlı bir endeks fonu ile büyük bir temel tüketim ürünleri şirketi için yıllıklandırılmış ve aylık olarak örneklenmiş, bir yıllık hareketli ortalama günlük getiriyi takip etmektedir.
Her verinin arkasındaki tam SQL
WITH prices AS
(
SELECT
ticker,
date,
toFloat64(max(close)) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'KO')
AND date >= '2015-10-01'
AND date < '2025-01-01'
GROUP BY ticker, date
),
rets AS
(
SELECT
ticker,
date,
c / lagInFrame(c, 1) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) - 1 AS ret
FROM prices
),
trailing AS
(
SELECT
ticker,
date,
avg(ret) OVER (PARTITION BY ticker ORDER BY date ASC ROWS BETWEEN 251 PRECEDING AND CURRENT ROW) * 252 * 100 AS trailing_mean_pct,
row_number() OVER (PARTITION BY ticker ORDER BY date ASC) AS i
FROM rets
WHERE isFinite(ret)
)
SELECT
toString(toStartOfMonth(date)) AS month,
round(avgIf(trailing_mean_pct, ticker = 'SPY'), 1) AS spy_trailing_mean_pct,
round(avgIf(trailing_mean_pct, ticker = 'KO'), 1) AS ko_trailing_mean_pct
FROM trailing
WHERE i >= 252
AND date >= '2017-01-01'
GROUP BY month
ORDER BY month ASCBu iki çizgi üzerindeki her nokta, herhangi bir optimizasyon aracının o tarihte beklenen getiri olarak kabul edebileceği bir sayıdır. SPY için ilk aylık okuma 17.7%, sonuncusu ise 25.8% olup aralarında 96 adet okuma bulunmaktadır. KO, aynı pencereyi -0.4% seviyesinde açar. Bu seriyi aydan aya tüketen bir ağırlıklandırma şeması, serideki her türlü dalgalanmayı miras alır.
Yarım Kelly ve daraltma (shrinkage) bu sorunu çözer mi?
Bu yöntemler sorunu hafifletir. Uygulamada dört farklı yama öne çıkar ve her biri, tahminin hassasiyetini azaltmak karşılığında teorik optimumun bir kısmından feragat eder.
- Yarım Kelly, her ağırlığı yarıya indirir. Kelly büyüme eğrisi zirve noktasının yakınında yatay, altında ise diktir; bu nedenle yarım pozisyon, teorik büyüme oranından küçük bir pay verirken, abartılı bir avantaj tahmininden kaynaklanacak zararı çok daha büyük ölçüde azaltır. Volatilite hedeflemesi, aynı içgüdüyü payda kısmına uygular ve kısa bir örneklem setinin sağlayabildiği tek girdiden yola çıkarak pozisyon büyüklüğünü belirler.
- Daraltma (shrinkage), her tahmin edilen ortalamayı, tahminlerin kesitsel ortalamasına doğru çeker; bu çekim miktarı örneklem küçüldükçe artar. Bu yöntem uç noktaya taşındığında her varlık aynı beklenen getiriyi taşır; eşit volatilite durumunda ise optimizasyon aracı kendiliğinden eşit ağırlıklar üretir. Eşit ağırlık, tamamen daraltılmış portföydür.
- Kısıtlamalar, yani açığa satış yasağı ve pozisyon başına üst sınır, şans eseri elde edilen bir tahminin tek bir ağırlığı ne kadar yukarı çekebileceğini sınırlar. Bunlar tahminin iyileştirilmesinden ziyade hasar kontrolüdür.
- Beklenen getirilerin tamamen devre dışı bırakılması, yalnızca kovaryansı kullanan minimum varyans ve risk paritesi modellerine yol açar. Bu, örneklemin aslında sağlayabildiği tek girdidir.
Bu dört yöntemin hiçbiri, örneklemin içinde bulunmayan bir bilgiyi üretmez. Değiştirdikleri şey, portföyün ne kadarının sahip olmadığınız bir bilgiye dayandığıdır.
Optimizasyon ne zaman değer yaratır
Kesişim her iki yönde de gerçekleşir. T değeri, gerçek ortalamalar arasındaki spread'e kıyasla büyüdüğünde, optimize edilmiş ağırlıklandırma öne geçer ve orada kalır; bu spread ne kadar genişse, söz konusu durum o kadar erken gerçekleşir. Girdi, verinin sağladığı bir değer olduğunda optimizasyon doğru araçtır: Kovaryans ve hedge rasyoları, beklenen getirilerden çok daha iyi tahminler sunar.
Eşit ağırlıklandırmanın kendi maliyeti vardır. Bu yöntem, eldeki gerçek bilgiyi göz ardı eder ve dar bir evrende herhangi bir optimize edici kadar yoğunlaşma yaratır. Eşit ağırlıklandırmayı, herhangi bir ağırlıklandırma adayının, ağırlıkların daha önce görmediği veriler üzerinde geçmesi gereken bir temel referans noktası olarak kabul etmek gerekir. Ağırlıkları aynı örneklem üzerinde belirleyip puanlamak, farklı bir kılığa bürünmüş backtesting'de ileriye dönük önyargı (look-ahead bias) uygulamasıdır ve her seferinde optimize ediciyi olduğundan daha iyi gösterir. Tek bir nokta tahmini yerine ölçülen bir avantaj etrafında dürüst bir aralık elde etmek için bootstrapped güven aralıkları standart araçtır.
Sıkça Sorulan Sorular
Eşit ağırlıklandırma gerçekten ortalama-varyans optimizasyonundan daha mı iyi sonuç verir?
Kısa örneklemlerde genellikle öyledir. Bir optimizasyon modeli, her varlığın beklenen getirisinin tahminine ihtiyaç duyar; bu tahmin, varlığın volatilitesinin örneklem uzunluğunun kareköküne bölünmesiyle elde edilen yaklaşık bir standart hataya sahiptir. Bu hata payı, varlıklar arasındaki gerçek farklardan daha büyük kaldığı sürece, optimize edici sadece gürültüyü sıralamaktadır. Eşit ağırlıklandırmada ise yanlış yapılabilecek bir tahmin bulunmaz.
Beklenen getiriyi tahmin etmek için kaç gözleme ihtiyaç vardır?
Neredeyse kimsede bulunmayan miktarda. Yüzde yirmi volatiliteye sahip bir varlık için, bir yıllık günlük veri, yıllık yaklaşık yüzde yirmi puanlık bir standart hata bırakır ve bu hatayı yarıya indirmek için takvim süresinin dört katına ihtiyaç duyulur. Aynı yıl içindeki gün içi gözlemleri eklemek bir fayda sağlamaz. Buna karşılık volatilite, birkaç aylık veriden elde edilebilir.
Yarım Kelly sadece daha küçük bir bahis midir?
Uygun şartlar altında daha küçük bir bahistir. Kelly büyüme eğrisi zirvesine yakın yerlerde düzleşir; bu nedenle bahis miktarını yarıya indirmek, teorik büyüme oranından küçük bir paydan feragat ederken, izlenen yolun volatilitesini kabaca yarıya indirir ve abartılı bir avantajın maliyetini düşürür.
1/N portföyü nedir?
Sermayenin eşit bir kısmını N adet pozisyonun her birine yatıran ve belirli bir takvime göre yeniden dengeleyen portföydür. Herhangi bir getiri tahmini veya kovaryans tahmini gerektirmez; bu da onu, bu tahminlere ihtiyaç duyan tüm ağırlıklandırma şemaları için standart bir kıyaslama ölçütü yapar.
Paneller nasıl oluşturulur
Her üç panel de günlük kapanışları okur ve basit kapanıştan kapanışa getirileri hesaplar; mükerrer satırlar her ticker için günde bir kapanış olacak şekilde daraltılır. Ortalamalar, günlük ortalama getirinin iki yüz elli iki seans ile çarpılmasıyla yıllıklandırılır; volatiliteler, günlük standart sapmanın iki yüz elli ikinin karekökü ile çarpılmasıyla yıllıklandırılır. Yıllık panel, yalnızca en az iki yüz seansın mevcut olduğu takvim yıllarını tutar. Blok paneli, örtüşmeyen bloklar kullanır ve her uzunluktaki son kısmi bloğu atar; pencere sayısı sütunu, her uzunluğun kaç blok ürettiğini gösterir. Hiçbir yerde temettü dahil edilmemiştir, dolayısıyla bunlar fiyat getirileridir ve herhangi bir ortalamanın seviyesi, temettü ödeyenler için olduğundan düşük görünmektedir. Panellerin amacı tahminlerin seviyesi değil, yayılımıdır.
Buradaki her panel, grafiğin altında yer alan SQL sorgusunu taşır ve simülasyon kendi başlangıç değerini (seed) içerir. Aynı tahmin istikrarı kontrolünü kendi hisse listeniz üzerinde çalıştırmak için Strasmore terminalinde sade bir dille talep oluşturun.