Kernel density estimation

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

Jamsheed Shorish

Computational Economist

ทบทวน histogram

  • การกระจายตัวของปัจจัยความเสี่ยง
    • สมมติ (เช่น Normal, T เป็นต้น)
    • ปรับให้พอดี (parametric estimation, Monte Carlo simulation)
    • ไม่พิจารณา (historical simulation)
  • ข้อมูลจริง: histogram
  • จะแทน histogram ด้วยการแจกแจงความน่าจะเป็นได้อย่างไร?
    • ทำให้ข้อมูล เรียบขึ้น ด้วย filtering
    • Non-parametric estimation

histogram ของความสูญเสีย

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น

แกน histogram

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ

ภาพแสดงการสะสมของการสังเกต

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ

ภาพแสดงการสะสมของการสังเกต

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ

ภาพแสดงการสะสมของการสังเกต

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ
  • เลือกความสูญเสียของพอร์ตโฟลิโอที่ต้องการ

ความสูญเสียและความสูญเสียที่เลือกพร้อมลูกศรชี้

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ
  • เลือกความสูญเสียของพอร์ตโฟลิโอที่ต้องการ
    • ตรวจสอบความสูญเสียที่อยู่ใกล้เคียง

หน้าต่าง kernel ที่ซ้อนทับบนการสังเกต

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ
  • เลือกความสูญเสียของพอร์ตโฟลิโอที่ต้องการ
    • ตรวจสอบความสูญเสียที่อยู่ใกล้เคียง
    • คำนวณ "ค่าเฉลี่ยถ่วงน้ำหนัก" ของความสูญเสีย
  • Kernel: การเลือก filter; กำหนด "หน้าต่าง"

ค่าเฉลี่ยถ่วงน้ำหนักจาก kernel แสดงในภาพ

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ
  • เลือกความสูญเสียของพอร์ตโฟลิโอที่ต้องการ
    • ตรวจสอบความสูญเสียที่อยู่ใกล้เคียง
    • คำนวณ "ค่าเฉลี่ยถ่วงน้ำหนัก" ของความสูญเสีย
  • Kernel: การเลือก filter; กำหนด "หน้าต่าง"
    • เลื่อนหน้าต่างไปยังความสูญเสียอื่น

ภาพแสดงตำแหน่ง kernel ที่สอง

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

การทำให้ข้อมูลเรียบ

  • Filter: ทำให้ความขรุขระของ histogram เรียบขึ้น
  • การสังเกตสะสมเพิ่มขึ้นเรื่อยๆ
  • เลือกความสูญเสียของพอร์ตโฟลิโอที่ต้องการ
    • ตรวจสอบความสูญเสียที่อยู่ใกล้เคียง
    • คำนวณ "ค่าเฉลี่ยถ่วงน้ำหนัก" ของความสูญเสีย
  • Kernel: การเลือก filter; กำหนด "หน้าต่าง"
    • เลื่อนหน้าต่างไปยังความสูญเสียอื่น
  • Kernel density estimate: ความหนาแน่นของความน่าจะเป็น

ภาพแสดง kernel density estimate

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

Gaussian kernel

  • Kernel แบบต่อเนื่อง
  • ถ่วงน้ำหนักทุกการสังเกตตามระยะห่างจากจุดกึ่งกลาง
  • โดยทั่วไป: มี kernel หลายรูปแบบให้เลือกใช้
    • ใช้ในการวิเคราะห์อนุกรมเวลา
    • ใช้ในการประมวลผลสัญญาณ

ภาพแสดง Gaussian kernel

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

KDE ใน Python

from scipy.stats import gaussian_kde

kde = guassian_kde(losses)
loss_range = np.linspace(np.min(losses), np.max(losses), 1000)
plt.plot(loss_range, kde.pdf(loss_range))
  • การแสดงภาพ: ฟังก์ชันความหนาแน่นของความน่าจะเป็นจากการ fit ด้วย KDE

กราฟ gaussian kde estimate

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

การหา VaR ด้วย KDE

  • VaR: ใช้เมธอด .resample() ของ gaussian_kde
  • หา quantile จากตัวอย่างที่ได้
  • CVaR: คำนวณค่าคาดหวังเหมือนที่เคยทำ แต่
    • gaussian_kde ไม่มีเมธอด .expect() => คำนวณ integral เอง
    • มีเมธอด .expect() พิเศษที่เขียนไว้สำหรับแบบฝึกหัด
sample = kde.resample(size = 1000)

VaR_99 = np.quantile(sample, 0.99)
print("VaR_99 from KDE: ", VaR_99)
VaR_99 from KDE: 0.08796423698448601
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

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

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

Preparing Video For Download...