Structural breaks

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

Jamsheed Shorish

Computational Economist

ความเสี่ยงและการแจกแจง

  • ชุดเครื่องมือบริหารความเสี่ยง
    • การลดความเสี่ยง: MPT
    • การวัดความเสี่ยง: VaR, CVaR
  • ความเสี่ยง: การกระจาย, ความผันผวน
    • ความแปรปรวน (ส่วนเบี่ยงเบนมาตรฐาน) ในฐานะนิยามของความเสี่ยง
  • ความเชื่อมโยงระหว่างความเสี่ยงกับการแจกแจงของปัจจัยเสี่ยงในรูปตัวแปรสุ่ม
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Stationarity

  • สมมติฐาน: การแจกแจงเหมือนกันตลอดเวลา
  • การแจกแจงที่ไม่เปลี่ยนแปลง = Stationary
  • Efficient frontier ในช่วงวิกฤตการเงินโลก
    • ไม่ Stationary
  • เทคนิคการประมาณค่าต้องการความเป็น Stationarity
    • Historical: การแจกแจง Stationary ที่ไม่รู้จากข้อมูลในอดีต
    • Parametric: คลาสการแจกแจง Stationary ที่สมมติขึ้น
    • Monte Carlo: การแจกแจง Stationary ที่สมมติขึ้นสำหรับการสุ่มตัวอย่าง
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Structural breaks

  • Non-stationary => การแจกแจงอาจเปลี่ยนแปลงตามเวลา
  • สมมติว่ามีจุดเปลี่ยนแปลงที่เฉพาะเจาะจง
    • แบ่งข้อมูลออกเป็น ช่วงย่อย
    • ภายในแต่ละช่วงย่อย ให้สมมติว่า Stationarity
  • Structural break(s): จุดที่เกิดการเปลี่ยนแปลง
    • การเปลี่ยนแปลงใน "แนวโน้ม" ของค่าเฉลี่ยและ/หรือความผันผวนของข้อมูล
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

ตัวอย่าง: การเติบโตของประชากรจีน

  • ศึกษาช่วงปี 1950 - 2019
  • แนวโน้มเป็น เส้นตรง โดยประมาณ...

กราฟจำนวนประชากรของจีนตามเวลา ปี 1950-2019

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

ตัวอย่าง: การเติบโตของประชากรจีน

  • ศึกษาช่วงปี 1950 - 2019
  • แนวโน้มเป็น เส้นตรง โดยประมาณ...
  • ...แต่ดูเหมือนชะลอตัวตั้งแต่ราวปี 1990
  • อาจมี structural break ใกล้ปี 1990
  • บ่งชี้ว่าการแจกแจงของจำนวนประชากรสุทธิ (เกิด - ตาย) เปลี่ยนแปลง
  • สาเหตุที่เป็นไปได้: นโยบายรัฐบาล, มาตรฐานการครองชีพ ฯลฯ

กราฟจำนวนประชากรของจีนตามเวลาพร้อมลูกศรแสดงแนวโน้ม ปี 1950-2019

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

Chow Test

  • ตัวอย่างก่อนหน้า: หลักฐานเชิงภาพ สำหรับ structural break
  • การวัดเชิงปริมาณ: ใช้ค่าสถิติ
  • Chow Test:
    • ทดสอบการมีอยู่ของ structural break ในโมเดล เส้นตรง
    • Null hypothesis: ไม่มี break
    • ต้องใช้การถดถอย OLS สามครั้ง
      • การถดถอยสำหรับช่วงเวลา ทั้งหมด
      • การถดถอยสองครั้ง ก่อน และ หลัง จุด break
    • รวบรวม sum-of-squared residuals
    • Test statistic มีการแจกแจงตาม "F" distribution
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Chow Test ใน Python

  • สมมติฐาน: มี structural break ในปี 1990 สำหรับประชากรจีน
  • สมมติ "factor model" เชิงเส้น: $$\log(\text{Population}_t) = \alpha + \beta * \text{Year}_t + u_t$$
  • การถดถอย OLS ด้วยออบเจกต์ OLS ของ statsmodels ตลอดช่วงปี 1950 - 2019
    • ดึงค่า sum-of-squared residual ด้วย res.ssr
import statsmodels.api as sm
res = sm.OLS(log_pop, year).fit()

print('SSR 1950-2019: ', res.ssr)
SSR 1950-2019: 0.29240576138055463
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Chow Test ใน Python

  • แบ่งช่วง 1950 - 2019 เป็นช่วงย่อย 1950 - 1989 และ 1990 - 2019
  • ทำการถดถอย OLS บนแต่ละช่วงย่อย
    • ดึงค่า res_before.ssr และ res_after.ssr
pop_before = log_pop.loc['1950':'1989']; year_before = year.loc['1950':'1989'];
pop_after  = log_pop.loc['1990':'2019']; year_after =  year.loc['1990':'2019'];

res_before = sm.OLS(pop_before, year_before).fit() res_after = sm.OLS(pop_after, year_after).fit()
print('SSR 1950-1989: ', res_before.ssr) print('SSR 1990-2019: ', res_after.ssr)
SSR 1950-1989: 0.011741113017411783
SSR 1990-2019: 0.0013717593339608077
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Chow Test ใน Python

  • คำนวณ Chow test statistic ที่มีการแจกแจงแบบ F
    • คำนวณตัวเศษ
      • k = 2 degrees of freedom = OLS coefficients 2 ตัว ได้แก่ $\alpha$, $\beta$
    • คำนวณตัวส่วน
      • 66 degrees of freedom = จำนวนข้อมูลทั้งหมด (70) - 2*k
numerator = (ssr_total - (ssr_before + ssr_after)) / 2

denominator = (ssr_before + ssr_after) / 66
chow_test = numerator / denominator print("Chow test statistic: ", chow_test, "; Critical value, 99.9%: ", 7.7)
Chow test statistic: 702.8715822890057; Critical value, 99.9%: 7.7
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

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

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

Preparing Video For Download...