7 · Backtesting: ขั้นตอน การทดสอบ และสัญญาณไฟจราจร
Backtest ทดสอบคุณสมบัติสองข้อของแบบจำลอง VaR: ความถี่ของ breach ถูกต้องไหม และ breach เกิดอย่างอิสระไหม บทนี้ไล่ตั้งแต่การนับไปจนถึงการทดสอบทางสถิติและเขตสัญญาณไฟจราจร
อ้างอิงต้นฉบับ: หน้า 18–19 · เปิด PDF หน้า 18
7.1 ตรรกะของ backtest
ลองนึกภาพ: ทุกเช้าคุณคำนวณ VaR 99%/10 วันโดยใช้ เฉพาะข้อมูลที่มี ณ ตอนนั้น แล้ว “ปิดผนึก” ไว้ สิบวันทำการต่อมาเทียบกับผลตอบแทนที่เกิดจริงในช่วงนั้น และตรวจว่าคำทำนายผลขาดทุนแย่สุดถูกเกิน (breach) หรือไม่ ถ้าแบบจำลองถูก breach จะเกิดราว 1% ของเวลาและ เป็นอิสระต่อกัน Backtest ทดสอบสองคุณสมบัตินี้พอดี: ความถี่ (unconditional coverage) และ ความเป็นอิสระ (independence)
7.2 ทีละขั้น (ตัวอย่าง Excel / Python ของคอร์ส)
- ผลตอบแทน: ราคาวันแรกใช้คำนวณ log-return ตัวแรกเท่านั้น
- σ แบบหน้าต่างเลื่อน: ต้องใช้ผลตอบแทน 21 ค่าสำหรับส่วนเบี่ยงเบนมาตรฐาน (รายวัน) ตัวแรก หน้าต่างเลื่อนไปทีละหนึ่งค่า (ผลตอบแทน 1–21, 2–22, …)
- VaR: ตั้งแต่วันของผลตอบแทนที่ 21 คำนวณ VaRt\operatorname{VaR}_t ทุกวัน
- ผลตอบแทนไปข้างหน้า: r10D,tr_{10D,t} ใช้ราคา 10 วันหลัง tt; 10 วันสุดท้ายจึงไม่มีค่า
- การเปรียบเทียบที่ใช้ได้: T=Nprices−21−10T=N_{\text{prices}}-21-10 ข้อมูลของคอร์ส: ราคา 1,250 ค่า → 1,219 การเปรียบเทียบ
- สถิติ: (a) จำนวนและสัดส่วนของ breach; (b) ความน่าจะเป็นแบบมีเงื่อนไข Pr(breacht∣breacht−1)\Pr(\text{breach}_t\mid\text{breach}_{t-1}); (c) เทียบกับ binomial
- กราฟ: VaRt\operatorname{VaR}_t และ r10D,tr_{10D,t} พร้อมกัน และทำเครื่องหมาย breach สังเกตการกระจุกตัว
ข้อควรระวัง · ผลตอบแทน 10 วันที่ซ้อนกัน
ผลตอบแทนไปข้างหน้า 10 วันที่ติดกันใช้ข้อมูลร่วมกัน 9 วัน breach จึงกระจุกตัวโดยกลไก: การตกแรงครั้งเดียวทำให้เกิด breach ในการเปรียบเทียบหลายครั้งติดกัน ข้อสมมติ “breach อิสระ” ของ binomial ล้มเหลว และการทดสอบความเป็นอิสระจะปฏิเสธโดยโครงสร้าง backtest ตามกฎเกณฑ์จึงเปรียบเทียบ VaR 1 วัน กับ P&L 1 วัน (MAR32) ถ้าจะ backtest VaR 10 วัน ให้ใช้ช่วงที่ไม่ซ้อนกัน (เหลือหนึ่งในสิบของตัวอย่าง) หรือการทดสอบที่ปรับสำหรับการซ้อน
7.3 การแจกแจง Binomial และสัญญาณไฟจราจรของ Basel

กฎของ Basel (1996): เมื่อมี breach kk ครั้ง แบบจำลองอยู่เขต เขียว ถ้า Pr(X≤k)<95%\Pr(X\le k)<95\% เขต เหลือง ถ้า 95%≤Pr(X≤k)<99.99%95\%\le\Pr(X\le k)<99.99\% และเขต แดง ถ้า ≥99.99%\ge 99.99\% สำหรับ T=250T=250: เขียว 0–4, เหลือง 5–9, แดง ≥10
เขตจะกำหนดตัวคูณเงินกองทุนที่ใช้กับเงินกองทุนตาม VaR (Basel 2.5: 3 + plus factor; FRTB MAR32 ระดับทั้งธนาคาร: 1.5 เพิ่มถึง 2.0) ในเขตแดง ผู้กำกับดูแลอาจถอนการอนุมัติแบบจำลองด้วย
| จำนวน breach | เขต | Basel 2.5 | FRTB |
|---|---|---|---|
| 0–4 | เขียว | 3.00 | 1.50 |
| 5 | เหลือง | 3.40 | 1.70 |
| 6 | เหลือง | 3.50 | 1.76 |
| 7 | เหลือง | 3.65 | 1.83 |
| 8 | เหลือง | 3.75 | 1.88 |
| 9 | เหลือง | 3.85 | 1.92 |
| ≥10 | แดง | 4.00 | 2.00 |
ข้อควรระวัง · ขอบเขตของเขตคลาดไปหนึ่ง (off-by-one)
ใช้ scipy.stats.binom.ppf(0.95, 250, 0.01) = 5 แล้วเขียนว่า “เขียว ≤5” คลาดไปหนึ่ง: ppf คืนค่า kk ที่เล็กที่สุดที่ความน่าจะเป็นสะสม ถึง 95% และ kk นั้นอยู่ในเขตเหลืองแล้ว ที่ถูกต้องคือ เขียวถ้า k<k< ppf(0.95), แดงถ้า k≥k\ge ppf(0.9999) นอกจากนี้สไลด์หนึ่งของคอร์สให้เกณฑ์เหลืองเป็น 0.9599 ที่ถูกคือ 0.9999 ตารางความน่าจะเป็นของ breach ในสไลด์นั้นแท้จริงเป็น probability mass สำหรับ T=252, p=5% (BINOMDIST(…, FALSE)) ไม่ใช่ความน่าจะเป็นสะสมของ VaR 99%
7.4 Kupiec proportion-of-failures test
สมมติฐานหลัก: ความน่าจะเป็นของ breach ที่แท้จริงเท่ากับ pp อัตราส่วน likelihood เปรียบเทียบว่า breach ที่สังเกตได้มีความเป็นไปได้แค่ไหนภายใต้ pp ทางทฤษฎี เทียบกับความถี่ที่สังเกตได้ p^\hat p การทดสอบเป็นแบบ สองทาง: breach มากเกินไป (แบบจำลองก้าวร้าว) และน้อยเกินไป (ระมัดระวังเกิน สิ้นเปลืองทุน) ถูกปฏิเสธทั้งคู่
ตัวอย่าง: T=249T=249, x=11x=11, p^=4.42%\hat p=4.42\%, LR=15.96\mathrm{LR}=15.96, p-value 6.5×10−56.5\times10^{-5}: ปฏิเสธอย่างแรง
7.5 Christoffersen independence และ conditional coverage
nijn_{ij} นับวันที่สถานะเมื่อวานเป็น ii และวันนี้เป็น jj (1 = breach) “ความน่าจะเป็นของ breach เมื่อช่วงก่อนหน้ามี breach” ของคอร์สคือ π1\pi_1 สำหรับแบบจำลองที่ดี π1≈π0≈p\pi_1\approx\pi_0\approx p; ถ้า π1≫p\pi_1\gg p แสดงว่า breach กระจุกตัวและแบบจำลองตอบสนองต่อการเปลี่ยนความผันผวนช้าเกินไป การทดสอบ conditional coverage LRcc\mathrm{LR}_{\mathrm{cc}} (ค่าวิกฤตที่ 5% คือ 5.991) ทดสอบความถี่และความเป็นอิสระพร้อมกัน
ในทางปฏิบัติ · กำลังของการทดสอบและขนาดตัวอย่าง
ด้วยข้อมูล 250 ค่าต่อปีและ breach ที่คาดไว้ 2.5 ครั้ง ทุกการทดสอบมีกำลังต่ำ: แบบจำลองที่อัตรา breach แท้จริงเป็น 2% มีโอกาสสูงที่จะยังอยู่ในเขตเขียว เมื่อมี breach น้อย สถิติของ Christoffersen ก็ไม่เสถียร (n11n_{11} มักเป็น 0 หรือ 1) ดังนั้น (1) ใช้ประวัติให้ยาวที่สุด (หลายปี หลายพอร์ต) (2) backtest หลายระดับ (97.5% และ 99%) (3) ใช้ร่วมกับ P&L attribution, การวินิจฉัย residual และการทบทวนเชิงคุณภาพ แทนการพึ่ง p-value เพียงตัวเดียว
7.6 สามทางในการปรับปรุง VaR
- ค่าเฉลี่ย: ตัด μ ออกแล้วหรือยัง? μ ที่เป็นบวกทำให้ VaR เอียงไปทางมองโลกในแง่ดี
- ความผันผวน: ไวพอไหม? procyclical เกินไปไหม? GARCH เพิ่มพารามิเตอร์และดึงการพยากรณ์เข้าหาค่าเฉลี่ยระยะยาว ผู้ปฏิบัติงานใช้ EWMA แต่ต้องบริหาร procyclicality
- ตัวคูณ: เปอร์เซ็นไทล์ Normal “ดีพอ” แต่ไม่เพียงพอสำหรับ P&L เชิงประจักษ์ ตัวคูณ Cornish–Fisher หรือ t ช่วยได้
เทียบกฎเกณฑ์ · Backtesting
| กรอบ | ข้อกำหนด |
|---|---|
| UCITS | backtest รายเดือนของ VaR 1 วันเป็นอย่างน้อย; overshooting เกิน 4 ครั้งที่ 99% ใน 250 วันต้องรายงานต่อผู้บริหารระดับสูงและผู้กำกับดูแล พร้อมทบทวนแบบจำลอง (สอดคล้องกับเขตเขียว 0–4 ของ Basel) |
| AIFMD | Level 2 Art. 45 กำหนดให้ backtest เป็นระยะ “ตามความเหมาะสม” โดยไม่มีเกณฑ์ตัวเลข; ในทางปฏิบัติมักยืมเกณฑ์ 4 overshooting ของ UCITS |
| MiFID II | บริษัทหลักทรัพย์ที่ใช้ internal model ตาม CRR ปฏิบัติตามกฎ backtest ของธนาคาร (VaR 1 วัน 99% เทียบ P&L จริงและสมมุติ, ตัวคูณตามสัญญาณไฟ) |
ห้องทดลอง: Binomial, Kupiec และสัญญาณไฟ
เลือกจำนวนการเปรียบเทียบ ระดับความเชื่อมั่น และจำนวน breach ที่สังเกตได้ เพื่อดูเขตตามกฎความน่าจะเป็นสะสม 95% / 99.99% และผล Kupiec ตัวเลขทั้งหมดคำนวณจากการแจกแจง Binomial ไม่ใช่ผล backtest ของพอร์ตจริง
เปิด JavaScript เพื่อใช้ห้องทดลอง