Analisis Keuangan Umum dengan Python (Bagian 3)

Setelah semua perhitungan disajikan dalam ini dan ini publikasi, kita dapat menggali ke dalam analisis statistik dan mempertimbangkan metode kuadrat terkecil. Perpustakaan statsmodels digunakan untuk tujuan ini, yang memungkinkan pengguna untuk memeriksa data, mengevaluasi model statistik, dan melakukan tes statistik. Artikel ini dan artikel ini diambil sebagai dasar . Deskripsi fungsi yang digunakan dalam bahasa Inggris tersedia di tautan berikut .

Pertama, sedikit teori:

Tentang regresi linier


Regresi linier digunakan sebagai model prediksi ketika hubungan linear diasumsikan antara variabel dependen (variabel yang kami coba prediksi) dan variabel independen (variabel dan / atau variabel yang digunakan untuk prediksi).

Dalam kasus yang paling sederhana, ketika mempertimbangkan, satu variabel digunakan berdasarkan yang kami coba prediksi lainnya. Rumus dalam hal ini adalah sebagai berikut:

Y = C + M * X

  • Y = variabel dependen (hasil / perkiraan / perkiraan)
  • C = Constant (Y-Intercept)
  • M = Kemiringan garis regresi (kemiringan atau kemiringan garis yang diperkirakan; itu adalah jumlah dimana Y meningkat rata-rata jika kita meningkatkan X dengan satu unit)
  • X = variabel independen (prediktor yang digunakan dalam ramalan Y)

Bahkan, mungkin juga ada hubungan antara variabel dependen dan beberapa variabel independen. Untuk jenis model ini (dengan asumsi linearitas), kita dapat menggunakan regresi linier berganda dari bentuk berikut:

Y = C + M1X1 + M2X2 + ...

Rasio Beta


Banyak yang telah ditulis tentang koefisien ini, misalnya, di halaman ini

Secara singkat, jika Anda tidak merinci, Anda dapat mengkarakteristikkannya sebagai berikut:

Saham dengan koefisien beta:

  • nol menunjukkan tidak ada korelasi antara stok dan indeks
  • unit mengindikasikan bahwa stok memiliki volatilitas yang sama dengan indeks
  • lebih dari satu - menunjukkan profitabilitas yang lebih tinggi (dan karena itu risiko) dari saham daripada indeks
  • kurang dari satu - stok kurang stabil dari indeks

Dengan kata lain, jika saham tumbuh sebesar 14%, sementara pasar hanya tumbuh 10%, maka koefisien beta dari saham tersebut akan menjadi 1,4. Biasanya, pasar dengan beta yang lebih tinggi dapat menawarkan kondisi yang lebih baik untuk hadiah (dan karenanya berisiko).

gambar

Praktek


Kode Python berikut termasuk contoh regresi linier, di mana variabel input adalah hasil pada Indeks Bursa Moskow, dan variabel estimasi adalah hasil pada saham Aeroflot.

Untuk menghindari perlunya mengingat cara mengunduh data dan membawa data ke formulir yang diperlukan untuk perhitungan, kode diberikan sejak saat data diunduh dan hingga hasilnya diperoleh. Berikut adalah sintaks lengkap untuk melakukan regresi linier di Python menggunakan statsmodels:

# 
import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

# 
ticker = ['AFLT.ME','IMOEX.ME']
stock = yf.download(ticker)

#    
all_adj_close = stock[['Adj Close']]

#   
all_returns = np.log(all_adj_close / all_adj_close.shift(1))

#      
aflt_returns = all_returns['Adj Close'][['AFLT.ME']].fillna(0)

#      
moex_returns = all_returns['Adj Close'][['IMOEX.ME']].fillna(0)


#   DataFrame

return_data = pd.concat([aflt_returns, moex_returns], axis=1)[1:]
return_data.columns = ['AFLT.ME', 'IMOEX.ME']


#      X  y
X = sm.add_constant(return_data['IMOEX.ME'])
y = return_data['AFLT.ME']


#  
model_moex = sm.OLS(y,X).fit()

#  
print(model_moex.summary())

gambar

Di situs web yahoo dan koefisien beta Mosbirzi sedikit berbeda. Tapi saya harus jujur ​​mengakui bahwa perhitungan untuk beberapa saham lain dari bursa Rusia menunjukkan perbedaan yang lebih signifikan, tetapi dalam interval.

gambar

Analisis yang sama untuk saham FB dan indeks SP500. Di sini, perhitungan, seperti pada aslinya, dilakukan melalui hasil bulanan.

sp_500 = yf.download('^GSPC')
fb = yf.download('FB')

#    
fb = fb.resample('BM').apply(lambda x: x[-1])
sp_500 = sp_500.resample('BM').apply(lambda x: x[-1])

monthly_prices = pd.concat([fb['Close'], sp_500['Close']], axis=1)
monthly_prices.columns = ['FB', '^GSPC']

monthly_returns = monthly_prices.pct_change(1)
clean_monthly_returns = monthly_returns.dropna(axis=0)  

X = clean_monthly_returns['^GSPC']
y = clean_monthly_returns['FB']

X1 = sm.add_constant(X)

model_fb_sp_500 = sm.OLS(y, X1)

results_fb_sp_500 = model_fb_sp_500.fit()
print(results_fb_sp_500.summary())

gambar

gambar

Dalam hal ini, semuanya bertepatan dan mengkonfirmasi kemungkinan menggunakan statsmodels untuk menentukan koefisien beta.

Nah, sebagai bonus - jika Anda ingin hanya mendapatkan beta - Anda ingin mengesampingkan koefisien dan statistik lainnya, maka kode lain diusulkan untuk menghitungnya:

from scipy import stats
slope, intercept, r_value, p_value, std_err = stats.linregress(X, y)

print(slope)

1.0568997978702754

Benar, ini tidak berarti bahwa semua nilai yang diperoleh lainnya harus diabaikan, tetapi pengetahuan statistik diperlukan untuk memahaminya. Saya akan memberikan kutipan kecil dari nilai yang diperoleh:

  • R-squared, yang merupakan koefisien determinasi dan mengambil nilai dari 0 hingga 1. Semakin dekat nilai koefisien ke 1, semakin kuat ketergantungannya;
  • Ajj R-squared - disesuaikan R-squared berdasarkan jumlah pengamatan dan jumlah derajat kebebasan;
  • std err - standar kesalahan estimasi koefisien;
  • P> | t | - p-value Nilai kurang dari 0,05 dianggap signifikan secara statistik;
  • 0,025 dan 0,975 adalah nilai-nilai interval kepercayaan yang lebih rendah dan lebih tinggi.
  • dll.

Itu saja untuk saat ini. Tentu saja, menarik untuk mencari hubungan antara nilai-nilai yang berbeda untuk memprediksi yang lain melalui satu dan mendapatkan keuntungan. Di salah satu sumber asing, indeks diprediksi melalui tingkat bunga dan tingkat pengangguran. Tetapi jika perubahan suku bunga di Rusia dapat diambil dari situs web Bank Sentral, maka saya terus mencari yang lain. Sayangnya, situs web Rosstat tidak dapat menemukan yang relevan. Ini adalah publikasi terakhir dalam artikel-artikel analisis keuangan umum.

All Articles