โมเดล Cointegration

การวิเคราะห์อนุกรมเวลาด้วย Python

Rob Reider

Adjunct Professor, NYU-Courant Consultant, Quantopian

Cointegration คืออะไร?

  • อนุกรมสอง ชุด $\large P_t$ และ $\large Q_t$ อาจเป็น random walk
  • แต่การรวมเชิงเส้น $\large P_t - c \ Q_t$ อาจไม่ใช่ random walk!
  • หากเป็นเช่นนั้น
    • $\large P_t - c \ Q_t$ สามารถพยากรณ์ได้
    • กล่าวว่า $\large P_t$ และ $\large Q_t$ มีความสัมพันธ์แบบ cointegrated
การวิเคราะห์อนุกรมเวลาด้วย Python

อุปมา: สุนัขกับสายจูง

  • $\large P_t = $ เจ้าของ
  • $\large Q_t = $ สุนัข
  • อนุกรมทั้งสองดูเหมือน random walk
  • ส่วนต่าง หรือระยะห่าง ระหว่างทั้งสองมีลักษณะ mean reverting
    • ถ้าสุนัขล้าหลังมากเกินไป จะถูกดึงกลับมาข้างหน้า
    • ถ้าสุนัขวิ่งนำมากเกินไป จะถูกดึงกลับ
การวิเคราะห์อนุกรมเวลาด้วย Python

ตัวอย่าง: น้ำมันเตาและก๊าซธรรมชาติ

  • Heating Oil and Natural Gas both look like random walks...

การวิเคราะห์อนุกรมเวลาด้วย Python

ตัวอย่าง: น้ำมันเตาและก๊าซธรรมชาติ

  • แต่ spread (ส่วนต่าง) มีลักษณะ mean reverting

การวิเคราะห์อนุกรมเวลาด้วย Python

อนุกรมประเภทใดที่มี Cointegration?

  • สินค้าทดแทนทางเศรษฐกิจ
    • น้ำมันเตาและก๊าซธรรมชาติ
    • แพลทินัมและพัลลาเดียม
    • ข้าวโพดและข้าวสาลี
    • ข้าวโพดและน้ำตาล
    • ...
    • Bitcoin และ Ethereum?
  • แล้วคู่แข่งล่ะ?
    • Coke และ Pepsi?
    • Apple และ Blackberry? ไม่! สายจูงขาดและสุนัขวิ่งหนีไปแล้ว
การวิเคราะห์อนุกรมเวลาด้วย Python

สองขั้นตอนในการทดสอบ Cointegration

  • ถดถอย $\large P_t$ บน $\large Q_t$ เพื่อหาความชัน $\large c$
  • รันการทดสอบ Augmented Dickey-Fuller บน $\large P_t - c \ Q_t$ เพื่อทดสอบ random walk
  • หรือจะใช้ฟังก์ชัน coint ใน statsmodels ซึ่งรวมทั้งสองขั้นตอนไว้ด้วยกัน
from statsmodels.tsa.stattools import coint
coint(P,Q)
การวิเคราะห์อนุกรมเวลาด้วย Python

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

การวิเคราะห์อนุกรมเวลาด้วย Python

Preparing Video For Download...