เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

เปรียบเทียบ CVaR และ VaR

Conditional Value at Risk (CVaR) หรือที่รู้จักในชื่อ Expected Shortfall (ES) คือค่าความสูญเสียเฉลี่ย โดยมีเงื่อนไขว่า ความสูญเสียต้องเกินกว่าเกณฑ์ที่กำหนดที่ระดับความเชื่อมั่นหนึ่ง ๆ แนวคิดนี้ใช้ VaR เป็นจุดตั้งต้น แต่ให้ข้อมูลมากกว่า เพราะนำ หาง ของการกระจายความสูญเสียมาพิจารณาด้วย

ในแบบฝึกหัดนี้ จะคำนวณ VaR ที่ระดับความเชื่อมั่น 95% สำหรับการกระจายแบบ Normal ของความสูญเสียจากพอร์ตโฟลิโอ โดยใช้ค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานเดียวกับ portfolio_losses ของธนาคารเพื่อการลงทุนในช่วงปี 2005-2010 จากนั้นจะใช้ VaR เพื่อคำนวณ CVaR ที่ 95% และพล็อตทั้งสองค่าเทียบกับการกระจายแบบ Normal

portfolio_losses พร้อมใช้งานใน workspace แล้ว รวมถึง norm จาก scipy.stats ด้วย

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

ดูคอร์ส

คำแนะนำการฝึกหัด

  • คำนวณค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐานของ portfolio_losses แล้วกำหนดให้กับตัวแปร pm และ ps ตามลำดับ
  • หาค่า VaR ที่ระดับความเชื่อมั่น 95% โดยใช้เมธอด .ppf() ของ norm ซึ่งรับอาร์กิวเมนต์ loc สำหรับค่าเฉลี่ย และ scale สำหรับส่วนเบี่ยงเบนมาตรฐาน
  • ใช้ค่า VaR ที่ 95% ร่วมกับเมธอด .expect() ของ norm เพื่อหา tail_loss แล้วนำมาคำนวณ CVaR ที่ระดับความเชื่อมั่นเดียวกัน
  • เพิ่มเส้นแนวตั้งแสดงค่า VaR (สีแดง) และ CVaR (สีเขียว) ลงในกราฟฮิสโทแกรมของการกระจายแบบ Normal

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

# Compute the mean and standard deviation of the portfolio returns
pm = portfolio_losses.____
ps = portfolio_losses.____

# Compute the 95% VaR using the .ppf()
VaR_95 = norm.ppf(0.95, loc = ____, scale = ____)
# Compute the expected tail loss and the CVaR in the worst 5% of cases
tail_loss = norm.____(lambda x: x, loc = ____, scale = ____, lb = VaR_95)
CVaR_95 = (1 / (1 - 0.95)) * ____

# Plot the normal distribution histogram and add lines for the VaR and CVaR
plt.hist(norm.rvs(size = 100000, loc = pm, scale = ____), bins = 100)
plt.axvline(x = VaR_95, c='r', label = "VaR, 95% confidence level")
plt.axvline(x = ____, c='g', label = "CVaR, worst 5% of outcomes")
plt.legend(); plt.show()
แก้ไขและรันโค้ด