การปรับพอร์ตโฟลิโอแบบทางเลือก

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

Charlotte Werger

Data Scientist

ความเสี่ยงและผลตอบแทนที่คาดหวังจากข้อมูลในอดีต

$$

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

$$ มุกตลกเกี่ยวกับการซ้ำรอยประวัติศาสตร์

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

ข้อมูลในอดีต

ข้อมูล time series ที่เปลี่ยนแปลงตามเวลา

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

ผลตอบแทนแบบถ่วงน้ำหนักเอกซ์โพเนนเชียล

$$

  • จำเป็นต้องใช้มาตรวัดความเสี่ยงและผลตอบแทนที่ดีกว่า
  • ความเสี่ยงและผลตอบแทนแบบถ่วงน้ำหนักเอกซ์โพเนนเชียลให้ความสำคัญกับข้อมูลล่าสุดมากกว่า
  • ค่าเฉลี่ยเคลื่อนที่แบบเอกซ์โพเนนเชียลในกราฟ: ให้น้ำหนักมากสุดกับค่าที่ t-1

น้ำหนักในการคำนวณผลตอบแทนแบบถ่วงน้ำหนักเอกซ์โพเนนเชียล

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

โคแวเรียนซ์แบบถ่วงน้ำหนักเอกซ์โพเนนเชียล

$$

  • เมทริกซ์โคแวเรียนซ์แบบเอกซ์โพเนนเชียล: ให้น้ำหนักกับข้อมูลล่าสุดมากกว่า
  • ในกราฟ: ความผันผวนแบบถ่วงน้ำหนักเอกซ์โพเนนเชียล (เส้นดำ) ติดตามความผันผวนจริงได้ดีกว่าความผันผวนมาตรฐาน (เส้นน้ำเงิน)

$$ เปรียบเทียบโคแวเรียนซ์แบบถ่วงน้ำหนักเอกซ์โพเนนเชียลและโคแวเรียนซ์ปกติกับโคแวเรียนซ์จริง

1 Source: https://systematicinvestor.github.io/Exponentially-Weighted-Volatility-RCPP
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

ผลตอบแทนแบบถ่วงน้ำหนักเอกซ์โพเนนเชียล

from pypfopt import expected_returns
# Exponentially weighted moving average
mu_ema = expected_returns.ema_historical_return(df, 
                         span=252, frequency=252)
print(mu_ema)
symbol
XOM     0.103030
BBY     0.394629
PFE     0.186058
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

โคแวเรียนซ์แบบถ่วงน้ำหนักเอกซ์โพเนนเชียล

from pypfopt import risk_models
# Exponentially weighted covariance
Sigma_ew = risk_models.exp_cov(df, span=180, frequency=252)
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

การใช้ downside risk ในการปรับพอร์ตโฟลิโอ

$ $

  • จำ Sortino ratio ได้ไหม: ใช้ความแปรปรวนของผลตอบแทนติดลบเท่านั้น
  • PyPortfolioOpt รองรับการใช้ semicovariance ในการปรับพอร์ตโฟลิโอ ซึ่งเป็นมาตรวัด downside risk:

$ $ การคำนวณ downside risk

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

Semicovariance ใน PyPortfolioOpt

Sigma_semi = risk_models.semicovariance(df,     
                        benchmark=0, frequency=252)

print(Sigma_semi)
         XOM         BBY          MA         PFE
XOM     0.018939    0.008505    0.006568    0.004058
BBY     0.008505    0.016797    0.009133    0.004404
MA      0.006568    0.009133    0.018711    0.005373
PFE     0.004058    0.004404    0.005373    0.008349
การวิเคราะห์พอร์ตโฟลิโอด้วย Python

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

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

Preparing Video For Download...