การวัดความเสี่ยงของพอร์ตโฟลิโอ

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

Charlotte Werger

Data Scientist

ความเสี่ยงของพอร์ตโฟลิโอ

  • การลงทุนมีความเสี่ยง: สินทรัพย์แต่ละรายการอาจขึ้นหรือลงได้
  • ผลตอบแทนที่คาดหวังคือ ตัวแปรสุ่ม
  • การกระจายตัวของผลตอบแทนรอบค่าเฉลี่ยวัดด้วย ความแปรปรวน $\sigma^2$ ซึ่งเป็นมาตรวัดความผันผวนที่ใช้กันทั่วไป
  • $\sigma^2 = \frac{\sum\limits_{i=1}^N (X -\mu)^2}{N}$

ความเสี่ยงในฐานะการสร้างสมดุล

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ความแปรปรวน

$$

  • ความแปรปรวนของสินทรัพย์แต่ละรายการแตกต่างกัน: บางรายการกระจายตัวรอบค่าเฉลี่ยมากหรือน้อยกว่า
  • ความแปรปรวนของพอร์ตโฟลิโอไม่ใช่ผลรวมเชิงน้ำหนักของความแปรปรวนของสินทรัพย์แต่ละตัวเพียงอย่างเดียว
  • เนื่องจากผลตอบแทนของสินทรัพย์มีความสัมพันธ์กัน การคำนวณจึงซับซ้อนขึ้น

การกระจายตัวที่มีความแปรปรวนสูงและต่ำ

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ความแปรปรวนและความสัมพันธ์เกี่ยวข้องกับความเสี่ยงของพอร์ตโฟลิโออย่างไร?

$$

  • ความสัมพันธ์ ระหว่างสินทรัพย์ที่ 1 และ 2 แทนด้วย $\rho_{1,2}$ บอกว่าสินทรัพย์ทั้งสองเคลื่อนไหวไปในทิศทางเดียวกันมากน้อยเพียงใด
  • ความแปรปรวนของพอร์ตโฟลิโอ คำนึงถึงความแปรปรวนของสินทรัพย์แต่ละตัว ($\sigma_1^2, \sigma_2^2, etc$) น้ำหนักของสินทรัพย์ในพอร์ตโฟลิโอ ($w_1, w_2$) และความสัมพันธ์ระหว่างสินทรัพย์
  • ส่วนเบี่ยงเบนมาตรฐาน ($\sigma$) คือรากที่สองของความแปรปรวน ($\sigma^2$) ทั้งสองเป็นมาตรวัดความผันผวน
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

การคำนวณความแปรปรวนของพอร์ตโฟลิโอ

$$ สูตรความแปรปรวนของพอร์ตโฟลิโอ

  • $\rho_{1,2} \sigma_1 \sigma_2$ เรียกว่าโคแวเรียนซ์ระหว่างสินทรัพย์ที่ 1 และ 2
  • โคแวเรียนซ์สามารถเขียนแทนได้ด้วย $ \sigma_{1,2} $
  • ซึ่งทำให้เขียนสูตรใหม่ได้ว่า:

สูตรความแปรปรวนของพอร์ตโฟลิโอในรูปแบบใหม่

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

การเขียนสูตรความแปรปรวนของพอร์ตโฟลิโอในรูปแบบสั้น

สูตรความแปรปรวนของพอร์ตโฟลิโอ

  • สูตรนี้สามารถเขียนในรูปสัญกรณ์เมทริกซ์ได้ ซึ่งนำไปใช้ในโค้ดได้ง่ายกว่า:

ความแปรปรวนของพอร์ตโฟลิโอในสัญกรณ์เมทริกซ์

  • กล่าวโดยสรุป สิ่งที่ต้องคำนวณใน Python คือ:

    ความแปรปรวนของพอร์ตโฟลิโอ = ทรานสโพสของน้ำหนัก x (เมทริกซ์โคแวเรียนซ์ x น้ำหนัก)

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ความแปรปรวนของพอร์ตโฟลิโอใน Python

price_data.head(2)

ticker        AAPL       FB        GE       GM       WMT
date                    
2018-03-21    171.270    169.39    13.88    37.58    88.18
2018-03-22    168.845    164.89    13.35    36.35    87.14
# Calculate daily returns from prices
daily_returns = df.pct_change()
# Construct a covariance matrix for the daily returns data
cov_matrix_d = daily_returns.cov()
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ความแปรปรวนของพอร์ตโฟลิโอใน Python

# Construct a covariance matrix from the daily_returns
cov_matrix_d = (daily_returns.cov())*250
print (cov_matrix_d)

        AAPL          FB          GE          GM          WMT                    
AAPL    0.053569    0.026822    0.013466    0.018119    0.010798
FB      0.026822    0.062351    0.015298    0.017250    0.008765
GE      0.013466    0.015298    0.045987    0.021315    0.009513
GM      0.018119    0.017250    0.021315    0.058651    0.011894
WMT     0.010798    0.008765    0.009513    0.011894    0.041520
weights = np.array([0.2, 0.2, 0.2, 0.2, 0.2])
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ความแปรปรวนของพอร์ตโฟลิโอใน Python

# Calculate the variance with the formula
port_variance = np.dot(weights.T, np.dot(cov_matrix_a, weights))
print (port_variance)

0.022742232726360567
# Just converting the variance float into a percentage
print(str(np.round(port_variance, 3) * 100) + '%')

2.3%
port_stddev = np.sqrt(np.dot(weights.T, np.dot(cov_matrix_a, weights)))
print(str(np.round(port_stddev, 3) * 100) + '%')
15.1%
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

มาฝึกกันเถอะ!

การวิเคราะห์พอร์ตโฟลิโอด้วย Python

Preparing Video For Download...