Koefisien Beta Dalam Valuasi dan Perhitungannya Dengan Python
Salah satu aspek penting dalam investasi adalah risiko. Untuk meminimalisir risiko, biasanya investor melakukan diversifikasi terhadap portofolionya. Namun, sejauh apapun seorang investor mendiversifikasi portofolio miliknya, ada beberapa risiko dalam sebuah investasi yang tetap tidak bisa dihilangkan. Risiko inilah yang oleh William Sharpe disebut sebagai systematic risk, yaitu risiko dalam investasi yang tidak mungkin dihilangkan, sedikit di antaranya adalah suku bunga dan resesi ekonomi.
Berangkat dari masalah ini, Sharpe — yang kemudian mendapat Nobel di bidang ekonomi — membangun sebuah model yang menggambarkan hubungan antara risiko dengan imbal hasil yang diharapkan (expected/required return) dari sebuah investasi, yang dikenal sebagai Capital Asset Pricing Model (CAPM). Secara garis besar, formula CAPM dijabarkan sebagai berikut:

Risk free rate adalah imbal hasil investasi yang (bisa dibilang) bebas risiko. Untuk konteks di Indonesia, biasanya yang menjadi acuan untuk risk free rate adalah return surat hutang (bond) yang dikeluarkan oleh pemerintah. Beta of the security adalah koefisien beta yang akan penulis bahas di sini. Ada banyak referensi mengenai definisi dari koefisien beta (di sini & di sini), namun untuk meringkas, penulis lebih suka menggambarkan koefisien beta sebagai:
Ukuran dari volatilitas return suatu aset/portofolio, relatif terhadap return pasar tempat aset/portofolio tersebut diperdagangkan.
Gampangnya begini, sebuah aset (katakanlah, saham) memiliki koefisien beta yang tinggi (> 1) karena aset tersebut lebih volatil/fluktuatif dibandingkan dengan indeks bursa tempat aset tersebut diperdagangkan (sebut saja, IHSG), dan sebaliknya. Jadi, aset yang memiliki koefisien beta sebesar 1,3 akan mengalami kenaikan/penurunan sebesar 30% lebih besar dibandingkan kenaikan/penurunan IHSG. Sementara aset dengan koefisien beta sama dengan 1 akan mengalami kenaikan/penurunan yang sejalan dengan IHSG, dan aset yang memiliki koefisien beta kurang dari 1 dan lebih dari 0 (1>β>0) dikatakan sebagai aset yang kurang volatil. Aset dengan koefisien beta sama dengan 0 dikatakan sebagai aset yang tidak berkorelasi dengan pasar, dan aset dengan koefisien beta kurang dari nol, dikatakan sebagai aset yang berkorelasi negatif dengan pasar (naik ketika pasar turun, dan sebaliknya, sebesar dari koefisien beta-nya).
Expected market return adalah tingkat return yang diharapkan ketika seorang investor berinvestasi di pasar modal. Untuk Indonesia sendiri, sudah dilakukan perhitungannya di sini, yaitu sebesar 15,2%, atau Anda bisa melakukan perhitungan sendiri sesuai dengan kondisi portofolio Anda. Sementara equity market premium adalah selisih antara risk free rate dengan market return, atau penulis lebih suka menggambarkan sebagai “bonus gain” yang diperoleh investor ketika berinvestasi di pasar (yang notabene lebih berisiko dibanding risk free rate).
Penulis sudah uraikan mengenai peran koefisien beta dalam mengukur risiko suatu investasi. Lantas apa hubungannya dengan valuasi? Well, valuasi sangat erat kaitannya dengan investasi. Ketika seorang investor akan menanam modalnya — entah itu dalam bentuk aset maupun bisnis, hal pertama yang harus dia ketahui adalah: berapa harga wajar untuk aset/bisnis tersebut? Nah, di sinilah valuasi berguna. Dalam perspektif investasi dan valuasi, CAPM bisa disebut sebagai expected return (imbal hasil yang diharapkan) dan juga bisa dilihat sebagai cost of equity (biaya modal), yaitu peluang yang hilang (oppportunity cost) ketika seorang investor mengalokasikan dananya di aset tertentu. Oleh karena itu, suatu investasi dapat dikatakan wajar ketika imbal dari investasi tersebut lebih besar dibandingkan dengan biaya modalnya, yang berarti IRR lebih besar dari cost of capital.
Okay, secara sederhana ada dua cara untuk menghitung koefisien beta suatu saham, yaitu dengan metode regresi linear di mana return saham sebagai dependent variable dan return indeks sebagai independent variable. Yang kedua adalah dengan menghitung kovarians antara return saham dengan return indeks, dibagi dengan varians return indeksnya.

Dulu, ketika belum mengenal bahasa pemrograman Python, penulis menghitung koefisien beta dengan cara download data historis saham yang akan dihitung dan data historis IHSG dalam rentang periode yang sama dari Yahoo Finance ke dalam format Microsoft Excel. Setelah kedua data didapatkan, penulis kemudian menghitung return masing-masing data yang ada baru kemudian menghitung koefisien betanya (dengan cara yang pertama menggunakan formula SLOPE(), dengan cara yang kedua menggunakan formula COVAR()/VAR() pada Excel). Namun, karena biasanya penulis mengunduh data historis dalam harian, ukuran data yang diperoleh menjadi sangat besar, apalagi biasanya rentang periode yang dipilih biasanya lebih dari 5 tahun. Kesulitan bertambah jika dalam rentang waktu tersebut jumlah data historis saham dan indeks berbeda, yang berarti ada tanggal ketika data historis saham tersedia namun data historis indeks tidak tersedia, ataupun sebaliknya. Artinya, penulis harus memfilter data-data yang tidak lengkap tersebut.
Sementara dengan Python, karena sudah dilengkapi dengan beberapa libraries yang mendukung, maka menghitung koefisien beta menjadi lebih mudah. Ada beberapa library yang dipakai, yaitu Pandas & pandas_datareader untuk membaca dan mengolah data yang diunduh, serta fix_yahoo_finance untuk mengunduh data historis saham dan index.
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data as pdr
import fix_yahoo_finance as yfBaris kode di atas adalah baris pertama untuk meng-import libraries yang dibutuhkan. Setelah itu kita buat function untuk menghitung koefisien beta. Kita asumsikan kita akan menghitung koefisien beta Bank BRI (BBRI.JK) dari tanggal 1 Agustus 2017 hingga 31 Agustus 2018, maka baris program untuk men-download data historis saham dan IHSG (JKSE) adalah sebagai berikut:
def calculate():
code = 'BBRI.JK'
start = '2017-08-01'
end = '2018-08-31'
yf.pdr_override()
stock_history = pdr.get_data_yahoo(code, start=start, end=end)['Adj Close']
index_history = pdr.get_data_yahoo('^JKSE', start=start, end=end)['Adj Close']Setelah memperoleh data yang dibutuhkan, data dalam format DataFrame tersebut dikonversi menjadi dictionary Python, kemudian diambil tanggal pada kedua data tersebut (historis saham & historis indeks) menjadi dua variabel yang berbentuk list Python untuk kemudian menghasilkan data tanggal yang tidak lengkap.
stock_dict = stock_history.to_dict()
index_dict = index_history.to_dict()stock_dates = [*stock_dict]
index_dates = [*index_dict]#menyaring tanggal yang ada di list tanggal saham, tapi tidak ada di #list tanggal bursa
not_in_index_date = list(filter(lambda x: x not in stock_dates, index_dates))
#menyaring tanggal yang ada di list tanggal bursa, tapi tidak ada #di list tanggal saham
not_in_stock_date = list(filter(lambda x: x not in index_dates, stock_dates))
Setelah tanggal-tanggal yang tidak lengkap dari masing-masing data diperoleh dalam 2 variabel tersebut, maka langkah selanjutnya adalah menggabungkan 2 variabel tersebut menjadi satu. Lalu, data historis saham yang memiliki tanggal yang berada di dalam data tanggal yang tidak lengkap otomatis akan dihapus, begitu juga dengan data historis indeks.
#menggabungkan kedua list tersebut
try:
filtered_dates = not_in_index_date + not_in_stock_date#menyaring nilai-nilai pada dictionary bursa dengan menghapus data #yang tidak terdapat pada dictionary saham
for key in filtered_dates:
if key in index_dict:
del index_dict[key]#menyaring nilai-nilai pada dictionary saham dengan menghapus data #yang tidak terdapat pada dictionary bursa
for key in filtered_dates:
if key in stock_dict:
del stock_dict[key]# berarti not_in_index_date & not_in_stock_date kosong
except TypeError:
pass
Setelah mendapatkan data historis saham dan indeks yang serasi (jumlahnya dan tanggal-tanggal di dalamnya sama), makakita hitung return masing-masing data.
#buat list harga penutupan bursa dari dictionary bursa yang sudah #disaring
index_closing_values = list(index_dict.values())#buat list harga penutupan saham dari dictionary saham yang sudah #disaring
stock_closing_values = list(stock_dict.values())#buat list yang merangkum return bursa harian selama periode yang #dipilih
index_return = []#menghitung return bursa harian dalam satu periode yang telah #dipilih dengan menggunakan loop dan menambahkan setiap hasilnya ke #dalam list index_return
num = 0
for i in range(0, len(index_closing_values) — 1):
daily_index_return = (index_closing_values[num] / index_closing_values[num + 1]) — 1
index_return.append(daily_index_return)
num = num + 1#buat list yang merangkum return saham harian selama periode yang #telah dipilih
stock_return = []#menghitung return saham harian dalam satu periode yang telah #dipilih dengan menggunakan loop dan menambahkan setiap hasilnya ke #dalam list stock_return
num = 0
for i in range(0, len(stock_closing_values) — 1):
daily_stock_return = (stock_closing_values[num] / stock_closing_values[num + 1]) — 1
stock_return.append(daily_stock_return)
num = num + 1
Hitung rata-rata return saham dan indeks untuk mendapatkan varians dan kovariansnya. Maka koefisien beta bisa didapatkan dengan cara membagi kovarians return saham dan indeks dengan varians return indeks.
#menghitung nilai rata-rata return saham dan bursa selama periode #yang dipilih
avg_stock_return = sum(stock_return) / len(stock_return)
avg_index_return = sum(index_return) / len(index_return)#menghitung nilai beta dengan persamaan regresi linier
covariance = 0
for i in range(0, len(stock_return)):
covariance += ((index_return[i] — avg_index_return) * (stock_return[i] — avg_stock_return))variance = 0
for i in range(0, len(stock_return)):
variance += ((index_return[i] — avg_index_return) ** 2)beta_value = covariance / variance
Langkah terakhir adalah menampilkan koefisien beta itu sendiri
print(beta_value)Untuk script lengkapnya, bisa dilihat di bawah ini:
import pandas as pd
pd.core.common.is_list_like = pd.api.types.is_list_like
from pandas_datareader import data as pdr
import fix_yahoo_finance as yfdef calculate():
code = 'BBRI.JK'
start = '2017-08-01'
end = '2018-08-31'
yf.pdr_override()
stock_history = pdr.get_data_yahoo(code, start=start, end=end)[‘Adj Close’]
index_history = pdr.get_data_yahoo(‘^JKSE’, start=start, end=end)[‘Adj Close’] stock_dict = stock_history.to_dict()
index_dict = index_history.to_dict() stock_dates = [*stock_dict]
index_dates = [*index_dict] not_in_index_date = list(filter(lambda x: x not in stock_dates, index_dates))
not_in_stock_date = list(filter(lambda x: x not in index_dates, stock_dates)) try:
filtered_dates = not_in_index_date + not_in_stock_date for key in filtered_dates:
if key in index_dict:
del index_dict[key] for key in filtered_dates:
if key in stock_dict:
del stock_dict[key] except TypeError:
pass index_closing_values = list(index_dict.values())
stock_closing_values = list(stock_dict.values()) index_return = []
num = 0
for i in range(0, len(index_closing_values) — 1):
daily_index_return = (index_closing_values[num] / index_closing_values[num + 1]) — 1
index_return.append(daily_index_return)
num = num + 1 stock_return = []
num = 0
for i in range(0, len(stock_closing_values) — 1):
daily_stock_return = (stock_closing_values[num] / stock_closing_values[num + 1]) — 1
stock_return.append(daily_stock_return)
num = num + 1 avg_stock_return = sum(stock_return) / len(stock_return)
avg_index_return = sum(index_return) / len(index_return) covariance = 0
for i in range(0, len(stock_return)):
covariance += ((index_return[i] — avg_index_return) * (stock_return[i] — avg_stock_return)) variance = 0
for i in range(0, len(stock_return)):
variance += ((index_return[i] — avg_index_return) ** 2) beta_value = covariance / variance print(beta_value)
Setelah function tersebut dieksekusi maka akan muncul koefisien betanya:
-0.1264064457781011Yang berarti, profil risiko saham BRI (BBRI) berbanding terbalik dengan profil risiko IHSG sebesar 12% untuk periode yang telah ditentukan di atas. Untuk saham bank lainnya untuk periode yang sama bisa dilihat di bawah:
Bank Mandiri (BMRI)
-0.22076306968310896Bank BNI (BBNI)
-0.2595721726474413Bank BCA (BBCA)
-0.14211953734263744Sekian dulu dari penulis, jika ada saran dan kritik, sampaikan di kolom komentar. Terima kasih. Cheers!