top of page
Market Risk Managementสารบัญ
Market Risk Managementพิมพ์หน้านี้

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 ของคอร์ส)

VaR⁡t=Φ−1(0.01)×σt10 (+10μ),r10D,t=ln⁡(St+10/St),breacht=1{r10D,t<VaR⁡t}\operatorname{VaR}_t=\Phi^{-1}(0.01)\times\sigma_t\sqrt{10}\ (+10\mu), \qquad r_{10D,t}=\ln(S_{t+10}/S_t), \qquad \text{breach}_t=\mathbb 1\{r_{10D,t}<\operatorname{VaR}_t\}
  1. ผลตอบแทน: ราคาวันแรกใช้คำนวณ log-return ตัวแรกเท่านั้น
  2. σ แบบหน้าต่างเลื่อน: ต้องใช้ผลตอบแทน 21 ค่าสำหรับส่วนเบี่ยงเบนมาตรฐาน (รายวัน) ตัวแรก หน้าต่างเลื่อนไปทีละหนึ่งค่า (ผลตอบแทน 1–21, 2–22, …)
  3. VaR: ตั้งแต่วันของผลตอบแทนที่ 21 คำนวณ VaR⁡t\operatorname{VaR}_t ทุกวัน
  4. ผลตอบแทนไปข้างหน้า: r10D,tr_{10D,t} ใช้ราคา 10 วันหลัง tt; 10 วันสุดท้ายจึงไม่มีค่า
  5. การเปรียบเทียบที่ใช้ได้: T=Nprices−21−10T=N_{\text{prices}}-21-10 ข้อมูลของคอร์ส: ราคา 1,250 ค่า → 1,219 การเปรียบเทียบ
  6. สถิติ: (a) จำนวนและสัดส่วนของ breach; (b) ความน่าจะเป็นแบบมีเงื่อนไข Pr⁡(breacht∣breacht−1)\Pr(\text{breach}_t\mid\text{breach}_{t-1}); (c) เทียบกับ binomial
  7. กราฟ: VaR⁡t\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

X∼Binomial⁡(T, p=1−c),E[X]=Tp,Pr⁡(X≤k)=∑j=0k(Tj)pj(1−p)T−j(Excel: BINOM.DIST(k,T,p,TRUE))X\sim\operatorname{Binomial}(T,\ p=1-c), \qquad \mathbb E[X]=Tp, \qquad \Pr(X\le k)=\sum_{j=0}^{k}\binom{T}{j}p^j(1-p)^{T-j} \quad(\text{Excel: }\texttt{BINOM.DIST(k,T,p,TRUE)})
กราฟแท่งการแจกแจงจำนวน exception ใน 250 วันสำหรับ VaR 99%: 0 ถึง 4 สีเขียว 5 ถึง 9 สีเหลือง ตัวเลขบนแท่งเป็นความน่าจะเป็นสะสม 0.0811, 0.2858, 0.5432, 0.7581, 0.8922, 0.9588, 0.9863, 0.9960, 0.9989, 0.9997, 0.9999
ภาพที่ 5 (ต้นฉบับ Figure 5) การแจกแจงจำนวน breach เมื่อ T = 250, p = 1% ตัวเลขบนแท่งเป็นความน่าจะเป็นสะสม

กฎของ 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

LRPOF=−2ln⁡(1−p)T−xpx(1−p^)T−xp^x,p^=xT,LRPOF∼χ12  (ค่าวิกฤตที่ 5% คือ 3.841)\mathrm{LR}_{\mathrm{POF}}=-2\ln\frac{(1-p)^{T-x}p^{x}}{(1-\hat p)^{T-x}\hat p^{x}}, \qquad \hat p=\frac{x}{T}, \qquad \mathrm{LR}_{\mathrm{POF}}\sim\chi^2_1\ \ (\text{ค่าวิกฤตที่ 5\% คือ }3.841)

สมมติฐานหลัก: ความน่าจะเป็นของ 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

π0=n01n00+n01,π1=n11n10+n11,LRind=−2ln⁡(1−π)n00+n10πn01+n11(1−π0)n00π0n01(1−π1)n10π1n11∼χ12,LRcc=LRPOF+LRind∼χ22\pi_0=\frac{n_{01}}{n_{00}+n_{01}},\quad \pi_1=\frac{n_{11}}{n_{10}+n_{11}},\quad \mathrm{LR}_{\mathrm{ind}}=-2\ln\frac{(1-\pi)^{n_{00}+n_{10}}\pi^{n_{01}+n_{11}}}{(1-\pi_0)^{n_{00}}\pi_0^{n_{01}}(1-\pi_1)^{n_{10}}\pi_1^{n_{11}}}\sim\chi^2_1,\quad \mathrm{LR}_{\mathrm{cc}}=\mathrm{LR}_{\mathrm{POF}}+\mathrm{LR}_{\mathrm{ind}}\sim\chi^2_2

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

  1. ค่าเฉลี่ย: ตัด μ ออกแล้วหรือยัง? μ ที่เป็นบวกทำให้ VaR เอียงไปทางมองโลกในแง่ดี
  2. ความผันผวน: ไวพอไหม? procyclical เกินไปไหม? GARCH เพิ่มพารามิเตอร์และดึงการพยากรณ์เข้าหาค่าเฉลี่ยระยะยาว ผู้ปฏิบัติงานใช้ EWMA แต่ต้องบริหาร procyclicality
  3. ตัวคูณ: เปอร์เซ็นไทล์ 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 เพื่อใช้ห้องทดลอง

ผู้เขียนต้นฉบับ

Yini Gao

ผู้เขียน Market Risk Handbook (English edition, Version 2.1, กันยายน 2026) ซึ่งเป็นต้นฉบับของบันทึกการเรียนภาษาไทยชุดนี้

อ่านบทนี้แล้วอยากเรียนรู้ต่อ? ติดตาม QuantCorner ได้ที่นี่

Market Risk Managementโดย Yini Gao

ค้นหาในสมุดบันทึก

ปิด
คำค้นหา

© 2023 by QuantCorner, Thailand.

bottom of page