Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

Kapan Equal Weight Mengungguli Optimization

Equal weight mengungguli position sizing yang dioptimalkan saat sampel pendek. Simulasi Python ber-seed menunjukkan crossover muncul, lalu menutup ketika sampel bertambah.

Equal weight mengungguli penentuan ukuran posisi yang dioptimalkan ketika sampel terlalu pendek untuk mengestimasi expected return secara andal. Sampel pendek merupakan kondisi normal, bukan pengecualian. Optimizer adalah perhitungan aritmetika yang benar, tetapi diterapkan pada input yang tidak dapat diukur dengan baik oleh siapa pun. Portofolio 1/N dengan bobot setara tidak mengestimasi apa pun. Karena itu, portofolio ini tetap bertahan ketika estimasinya buruk.

Apakah equal weight benar-benar mengungguli optimization?

Dalam satu kondisi tertentu, jawabannya ya. Mari kita uraikan istilahnya satu per satu. Equal weight, yang ditulis sebagai 1/N, membagi modal secara merata ke N posisi dan tidak memerlukan forecast apa pun. Mean variance optimization mencari bobot dengan expected return terbaik per unit estimated variance. Kelly criterion mencari bobot yang memaksimalkan pertumbuhan majemuk jangka panjang. Pada aset yang tidak berkorelasi, hasilnya menjadi bobot yang proporsional terhadap expected excess return setiap aset dibagi variansnya. Panduan kami tentang position sizing dengan Kelly criterion menguraikan formula tersebut secara terperinci.

Kedua optimizer membutuhkan input yang sama: expected return untuk setiap aset. Itulah besaran yang paling buruk diestimasi oleh sampel. Volatilitas dapat dihitung dari jendela pendek dengan presisi yang memadai. Mean tidak demikian. Selisih antara keduanya cukup besar untuk terlihat dalam riwayat harga apa pun. Panel di bawah ini mengambil enam nama yang banyak dimiliki, mengukur setiap tahun kalender dari 2015 hingga 2024 secara terpisah, lalu melaporkan jarak antara estimasi tahunan tertinggi dan terendah. Perhitungan dilakukan dua kali untuk setiap nama: sekali untuk average daily return yang dianualisasi, dan sekali untuk volatilitas yang dianualisasi.

QueryEstimasi tahunan selama sepuluh tahun: mean bergerak jauh lebih besar daripada volatilitas
SQL tepat di balik setiap angka
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 DESC
Run this yourself

Untuk NVDA, estimasi mean tahunan mencakup rentang 184.7 percentage points selama sepuluh tahun tersebut. Sebagai perbandingan, rentang estimasi volatilitas untuk nama yang sama dan tahun yang sama adalah 28.6 points. Nama paling stabil dalam panel, KO, tetap menunjukkan perubahan estimasi mean tahunan sebesar **23.9 points. Skema apa pun yang memasukkan average return tahun lalu ke dalam optimizer sebagai expected return tahun ini berarti memberinya angka yang memiliki variasi sebesar itu.

Berapa panjang sampel yang diperlukan untuk mengestimasi expected return?

Standard error dari estimasi mean return adalah volatilitas aset dibagi akar kuadrat dari panjang sampel dalam tahun. Satuannya tahun, bukan jumlah observasi: mengambil sampel selama dua belas bulan yang sama setiap jam, bukan setiap hari, tidak memberikan tambahan informasi. Jika aset dengan volatilitas 20 persen dimasukkan ke dalam formula tersebut, satu tahun data historis menghasilkan standard error sebesar 20 percentage points per tahun. Empat tahun menguranginya menjadi 10. Untuk menurunkannya menjadi satu poin—presisi yang diperlukan sebelum mengurutkan dua aset yang mean sebenarnya berbeda dua poin—dibutuhkan data selama empat abad.

Volatilitas berbeda. Presisinya meningkat berdasarkan jumlah observasi, bukan rentang waktu kalender, sehingga data harian selama beberapa bulan sudah dapat menghasilkan estimasi dengan selisih beberapa poin saja. Panel di bawah membagi return harian satu index fund selama dua puluh tahun ke dalam blok-blok tidak tumpang tindih dengan panjang tetap, menghitung kedua estimasi di setiap blok, lalu menunjukkan seberapa jauh estimasi tersebut tersebar dari satu blok ke blok lainnya.

QuerySebaran estimasi mean dan volatilitas berdasarkan panjang sampel
SQL tepat di balik setiap angka
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 ASC
Run this yourself

Pada blok sepanjang 21 sessions, estimasi mean tersebar dalam rentang 53.7 percentage points, dibandingkan dengan 10.9 points untuk estimasi volatilitas yang diukur pada blok yang sama. Ketika panjang blok diperluas menjadi 504 sessions, sebaran mean menyempit menjadi 10.6 points. Penyempitannya mengikuti akar kuadrat: setiap pengurangan error menjadi setengahnya membutuhkan data empat kali lebih banyak.

Simulasi seeded yang dapat Anda jalankan sendiri

Tidak satu pun dari hal tersebut membuktikan bahwa estimation error cukup besar untuk membuat 1/N unggul. Simulasi ini membuktikannya. Resep ini hanya memerlukan instalasi Python: tidak ada file data, unduhan, atau paket pihak ketiga. Simulasi menghasilkan return sendiri dari parameter yang Anda pilih, sehingga hasil sebenarnya diketahui dan kedua alokasi dapat dinilai berdasarkan hasil tersebut.

  1. Impor dua modul, import random dan import statistics, serta from math import log. Tetapkan seed pada baris berikutnya dengan random.seed(20260816).
  2. Definisikan lima aset dengan expected return tahunan sebenarnya masing-masing sebesar 5, 6, 7, 8, dan 9 persen. Masing-masing memiliki volatilitas tahunan sebenarnya sebesar 20 persen dan tidak saling berkorelasi. Konversikan ke langkah harian dengan mu_d = mu_a / 252 dan sd_d = sd_a / (252 ** 0.5).
  3. Pilih panjang sampel T dari rentang [60, 125, 250, 500, 1000, 2500, 5000].
  4. Hasilkan return harian T untuk setiap aset dengan random.gauss(mu_d, sd_d). Hasil tersebut merupakan seluruh histori yang dapat dilihat manajer.
  5. Estimasikan mean setiap aset dengan statistics.mean dan volatilitasnya dengan statistics.stdev. Kedua estimasi tersebut merupakan satu-satunya informasi yang diketahui optimizer.
  6. Bentuk portofolio equal weight dengan menetapkan bobot 0,2 untuk masing-masing dari lima aset. Portofolio ini tidak menggunakan estimasi apa pun.
  7. Bentuk portofolio optimized dengan menetapkan setiap raw weight ke mu_hat / (sd_hat ** 2), lalu membagi setiap bobot dengan jumlah absolut seluruh raw weight. Dengan demikian, kedua portofolio memiliki gross exposure yang sama.
  8. Hasilkan jalur out-of-sample baru yang terdiri atas 2520 return harian untuk setiap aset berdasarkan parameter sebenarnya. Tidak satu pun alokasi telah melihat jalur ini.
  9. Nilai kedua portofolio berdasarkan jalur tersebut menggunakan rata-rata log(1 + r), dengan r sebagai jumlah tertimbang return lima aset pada hari tersebut.
  10. Ulangi langkah 4 hingga 9 dalam 2000 trial independen pada setiap T. Catat proporsi trial ketika equal weight mengungguli optimized weights.

Baca rentang tersebut dari T pendek ke T panjang. Pada ujung dengan T pendek, equal weight menang dalam mayoritas trial secara jelas. Proporsi tersebut turun secara bertahap ketika T bertambah. Pada ujung dengan T panjang, optimized weights menang dalam sebagian besar trial. Di suatu titik di tengah, keduanya berpotongan. Titik perpotongan berubah sesuai seed dan selisih antara mean sebenarnya. Namun arahnya tidak berubah: data yang lebih banyak menguntungkan optimizer, sedangkan data yang lebih sedikit menguntungkan 1/N. Untuk mereplikasi hasilnya, ubah bilangan bulat di dalam random.seed(20260816) lalu jalankan kembali rentang tersebut.

Mengapa optimizer memperbesar kesalahan estimasi mean

Perhatikan bagaimana estimasi tersebut masuk ke dalam bobot. Estimasi mean berada di pembilang, sedangkan estimasi varians berada di penyebut. Menggandakan estimasi mean akan menggandakan bobot. Mengurangi seperempat estimasi varians akan menaikkan bobot sebesar sepertiga. Dalam sampel yang beruntung, kedua kesalahan bergerak ke arah yang sama: serangkaian hasil yang baik menaikkan mean terukur dan sering kali menekan varians terukur selama periode yang sama. Optimizer membaca aset tersebut sebagai yang paling menonjol dalam kelompoknya dan menentukan ukuran posisi yang sesuai. Di luar sampel, aset itu kembali menjadi anggota biasa dalam kelompoknya. Equal weight tidak pernah melihat sampel yang beruntung tersebut.

Simulasi ini merupakan versi yang lebih sederhana dari masalah tersebut. Lima aset yang tidak berkorelasi menghasilkan matriks kovarians diagonal yang tidak memerlukan inversi. Portofolio riil saling berkorelasi, dan matriks kovarians sampel yang dibangun dari jumlah observasi yang hanya sedikit lebih banyak daripada jumlah aset berada dekat dengan kondisi singular. Membalik matriks tersebut memperbesar kesalahan kecil pada input menjadi bobot yang sangat besar. Inilah cara optimizer dapat menghasilkan posisi pada satu aset yang nilainya beberapa kali lipat dari modal, berhadapan dengan posisi short yang mengimbangi pada aset pengganti yang sangat berkorelasi. Catatan kami tentang risiko konsentrasi dalam portofolio membahas dampak bobot semacam itu terhadap drawdown.

Input juga terus berubah. Panel di bawah ini melacak rata-rata return harian bergulir selama satu tahun, yang dianualisasi dan diambil sampelnya setiap bulan, untuk sebuah index fund yang luas dan satu saham consumer staples berkapitalisasi besar.

QueryMean return rolling satu tahun, angka yang akan dimasukkan ke optimizer
SQL tepat di balik setiap angka
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 ASC
Run this yourself

Setiap titik pada kedua garis tersebut merupakan angka yang mungkin diterima optimizer sebagai expected return pada tanggal tersebut. Pembacaan bulanan pertama untuk SPY adalah 17.7% dan yang terakhir adalah 25.8%, dengan 96 pembacaan di antaranya. KO memulai periode yang sama pada -0.4%. Skema pembobotan yang menggunakan seri ini dari bulan ke bulan akan mewarisi setiap gejolak di dalamnya.

Apakah half Kelly dan shrinkage menyelesaikan masalahnya?

Keduanya mengurangi dampaknya. Dalam praktik, ada empat penyesuaian yang umum digunakan. Masing-masing mengorbankan sebagian optimum teoretis agar hasilnya tidak terlalu sensitif terhadap estimasi.

  • Half Kelly membagi dua setiap bobot. Kurva pertumbuhan Kelly datar di sekitar titik puncaknya dan menurun tajam di bawahnya. Karena itu, mengambil setengah posisi hanya mengorbankan sebagian kecil tingkat pertumbuhan teoretis, tetapi mengurangi dampak estimasi keunggulan yang terlalu tinggi secara jauh lebih besar. Penargetan volatilitas menerapkan prinsip yang sama pada penyebut. Penentuan ukuran posisi didasarkan pada satu input yang masih dapat disediakan oleh sampel pendek.
  • Shrinkage menarik setiap estimasi mean menuju rata-rata cross-sectional dari seluruh estimasi. Besarnya penarikan meningkat ketika ukuran sampel mengecil. Jika diterapkan hingga batas maksimum, setiap aset memiliki expected return yang sama. Dengan volatilitas yang sama, optimizer kemudian secara otomatis menghasilkan bobot yang sama. Equal weight adalah portofolio dengan shrinkage penuh.
  • Constraints, yaitu larangan short selling dan batas maksimum per posisi, membatasi seberapa jauh satu estimasi yang kebetulan menguntungkan dapat mendorong bobot suatu posisi. Ini merupakan pengendalian kerugian, bukan perbaikan estimasi.
  • Menghapus expected return sepenuhnya menyisakan minimum variance dan risk parity, yang hanya menggunakan kovarians. Kovarians adalah input yang benar-benar dapat disediakan oleh sampel.

Tidak satu pun dari keempat pendekatan ini menciptakan informasi yang tidak terdapat dalam sampel. Perubahannya hanya terletak pada seberapa besar portofolio bergantung pada informasi yang mungkin tidak Anda miliki.

Ketika optimasi mulai memberikan manfaat

Perubahan keunggulan itu dapat terjadi ke kedua arah. Setelah T menjadi besar relatif terhadap spread antara mean yang sebenarnya, alokasi yang dioptimalkan mulai unggul dan mempertahankan keunggulannya. Semakin lebar spread tersebut, semakin awal hal itu terjadi. Optimasi juga merupakan alat yang tepat ketika input berasal dari data. Covariance dan hedge ratio dapat diestimasi dengan jauh lebih baik daripada expected return.

Equal weight juga memiliki biayanya sendiri. Pendekatan ini mengabaikan informasi yang benar-benar tersedia dan, dalam universe yang kecil, dapat berkonsentrasi sama besar dengan optimizer mana pun. Perlakukan equal weight sebagai baseline yang harus dikalahkan oleh setiap pembobotan kandidat menggunakan data yang tidak pernah dilihat oleh bobot tersebut. Menyesuaikan bobot dan menilainya pada sampel yang sama merupakan look-ahead bias dalam backtesting dengan bentuk berbeda, dan hal itu selalu membuat kinerja optimizer tampak lebih baik. Untuk memperoleh rentang yang wajar di sekitar keunggulan yang terukur, bukan sekadar estimasi titik, confidence interval bootstrap merupakan alat standar.

FAQ

Apakah equal weight benar-benar mengungguli mean variance optimization?

Dalam sampel pendek, sering kali demikian. Optimizer memerlukan estimasi expected return setiap aset. Estimasi itu memiliki standard error kira-kira sebesar volatilitas aset dibagi akar kuadrat panjang sampel dalam tahun. Selama error tersebut masih lebih besar daripada perbedaan sebenarnya antaraset, optimizer hanya mengurutkan noise. Equal weight tidak memiliki estimasi yang bisa keliru.

Berapa banyak observasi yang diperlukan untuk mengestimasi expected return?

Lebih banyak daripada yang hampir siapa pun miliki. Untuk aset dengan volatilitas 20 persen, data harian selama satu tahun menghasilkan standard error hampir 20 percentage points per tahun. Untuk mengurangi error tersebut hingga setengahnya, rentang kalender yang diperlukan menjadi empat kali lebih panjang. Menambahkan observasi intraday dalam tahun yang sama tidak membantu. Sebaliknya, volatilitas dapat diestimasi dari data beberapa bulan.

Apakah half Kelly hanya berarti taruhan yang lebih kecil?

Itu adalah taruhan yang lebih kecil dengan ketentuan yang menguntungkan. Kurva pertumbuhan Kelly datar di dekat titik puncaknya. Jadi, mengurangi stake hingga setengahnya hanya mengorbankan sebagian kecil dari tingkat pertumbuhan teoretis, sekaligus kira-kira mengurangi setengah volatilitas jalur pertumbuhan dan memperkecil biaya akibat edge yang dinilai terlalu tinggi.

Apa itu portofolio 1/N?

Portofolio 1/N menempatkan porsi modal yang sama ke masing-masing dari N posisi dan melakukan rebalancing sesuai jadwal. Portofolio ini tidak memerlukan forecast return maupun estimasi covariance. Karena itu, 1/N menjadi benchmark standar bagi setiap skema pembobotan yang memerlukan keduanya.

Cara panel dibuat

Ketiga panel menggunakan harga penutupan harian dan menghitung return sederhana dari satu penutupan ke penutupan berikutnya. Baris duplikat digabungkan sehingga hanya tersisa satu harga penutupan untuk setiap ticker pada setiap tanggal. Mean dianualisasi dengan mengalikan average daily return dengan 252 sesi. Volatilitas dianualisasi dengan mengalikan standard deviation harian dengan akar kuadrat 252. Panel tahunan hanya mempertahankan tahun kalender dengan sedikitnya 200 sesi. Panel blok menggunakan blok yang tidak tumpang tindih dan membuang blok parsial terakhir pada setiap panjang blok. Kolom jumlah window menunjukkan jumlah blok yang dihasilkan pada setiap panjang blok. Tidak ada dividen yang dimasukkan, sehingga angka-angka ini merupakan price return dan level mean untuk saham pembayar dividen menjadi lebih rendah dari kondisi sebenarnya. Spread estimasi merupakan inti panel ini, bukan levelnya.


Setiap panel di sini memuat SQL yang persis sama di bawah chart, dan simulasi menyertakan seed-nya. Untuk menjalankan pemeriksaan stabilitas estimasi yang sama menggunakan daftar ticker Anda sendiri, minta dalam bahasa Inggris sederhana melalui terminal Strasmore.

#quant#position sizing#portfolio construction#estimation error#kelly