Dua cara menghitung return, dua tujuan agregasi berbeda. Memilih salah bukan soal selera — ia menentukan apakah angka yang kamu laporkan masuk akal secara ekonomi.
Konsep inti
Return sederhana (aritmetika) dari harga $P_{t-1}$ ke $P_t$ adalah
sedangkan log-return adalah
Aturan pemakaiannya tegas:
- Agregasi lintas aset (cross-sectional) — return portofolio adalah rata-rata berbobot return aritmetika:
- Agregasi lintas waktu — return kumulatif memakai chaining geometrik:
Konsekuensinya: return aritmetika rata-rata selalu ≥ return geometrik rata-rata, dan selisihnya kira-kira setengah varians — inilah volatility drag:
Lihat langsung di data
Grafik di bawah menunjukkan akumulasi nilai $1 pada SPY (volatilitas tinggi) dan portofolio 60/40 (volatilitas lebih rendah). Jalur yang lebih berguncang membayar drag lebih besar.
Widget interaktif di bawah menghitung rata-rata aritmetika, geometrik, dan drag dari data yang sama. Geser bobot dan lihat selisih itu berubah:
Replikasi di Python
Semua angka di atas bisa kamu reproduksi. Salin kode ini (tombol copy di kanan atas blok) dan jalankan:
import numpy as npimport pandas as pdclass=class="tok-s">"tok-c"># r = return bulanan sederhana (aritmetika)r = pd.Series([0.012, -0.008, 0.021, 0.004])class=class="tok-s">"tok-c"># 1) Return geometrik kumulatif (chaining lintas waktu)R_geo = (1 + r).prod() - 1class=class="tok-s">"tok-c"># 2) Ekivalen via penjumlahan log-returnR_log = np.exp(np.log1p(r).sum()) - 1assert abs(R_geo - R_log) < 1e-12class=class="tok-s">"tok-c"># 3) Volatility drag: rata-rata aritmetika >= geometrikam = r.mean() class=class="tok-s">"tok-c"># aritmetika / bulangm = (1 + r).prod()**(1/len(r)) - 1drag = am - gm class=class="tok-s">"tok-c"># ~ 0.5 * var(r)print(fclass="tok-s">"aritmetika={am:.4%} geometrik={gm:.4%} drag={drag:.4%}")print(fclass="tok-s">"0.5*var ={0.5*r.var(ddof=1):.4%} (aproksimasi drag)")
Validasi yang terlihat
Perhitungan chaining dianggap benar hanya bila produk geometrik cocok dengan penjumlahan log-return hingga toleransi mesin. Validator sengaja menyertakan satu input yang dibuat gagal agar kamu melihat bentuk kegagalannya:
Uji pemahaman
1. Kamu punya return bulanan 12 aset dan ingin return portofolio bulan ini. Operasi yang benar?
2. Return kumulatif setahun dari return bulanan dihitung dengan...
3. Selisih antara rata-rata return aritmetika dan geometrik kira-kira sama dengan...
Latihan
Dengan data return bulanan SPY yang sama, hitung return geometrik rata-rata per bulan (bukan aritmetika). Masukkan jawabanmu dalam desimal.
Starter code (salin ke editor Python-mu):
Lihat solusi
r = returns_spy_bulanan # dari data T = len(r) gm = (1 + r).prod()**(1/T) - 1 # return geometrik per bulan print(gm) # ~ 0.00697
💡 Gunakan (1+r).prod()**(1/T) - 1, bukan r.mean(). Bandingkan dengan angka 'Portofolio' di widget.
Status
wajib Unit ini prasyarat untuk P2.02 (geometric chaining) dan P2.10 (validasi rekonsiliasi). Selesaikan validasi di atas sebelum lanjut.