เหตุใดอนุกรมเวลาที่กำลังมาแรงนี้จึงหยุดนิ่ง

การศึกษา Augmented Dickey-Fuller (ADF) ทดสอบจากตัวอย่างแปลกๆ

ภาพถ่ายโดย แจน ฮูเบอร์ on Unsplash

ความคงที่เป็นหนึ่งในแนวคิดพื้นฐานที่สุดสำหรับการวิเคราะห์อนุกรมเวลา โดยทั่วไป ความนิ่งจะให้คุณสมบัติที่ดีเยี่ยมสำหรับการสร้างแบบจำลองอนุกรมเวลาด้วยวิธีทางสถิติต่างๆ ดิกกี้-ฟูลเลอร์เสริม (ADF) การทดสอบน่าจะเป็นแนวทางที่ใช้กันอย่างแพร่หลายที่สุดในการตรวจสอบความคงที่

มีบทความออนไลน์มากมายในหัวข้อนี้ ฉันจะไม่เสียเวลากับบทนำพื้นฐาน เช่น คำจำกัดความของความคงที่ วิธีทดสอบ ADF เป็นต้น ในโพสต์นี้ ฉันจะแชร์การเดินทางของฉันในการสำรวจการทดสอบ ADF หลังจากเจอกรณีแปลกๆ ในแอปพลิเคชัน

เส้นทางการเรียนรู้ที่ฉันจะแสดงเป็นเรื่องปกติสำหรับการเรียนรู้วิทยาศาสตร์ข้อมูล ประการแรก เราคิดว่าเราเข้าใจเครื่องมือหรือแนวคิด แต่เราเพียงรับทราบและจดจำคำนั้น เมื่อเรานำไปใช้กับข้อมูลจริง เราอาจพบปัญหาที่ท้าทายและไม่คาดคิดซึ่งผลักดันให้เราตรวจสอบมากขึ้นและทำความเข้าใจเพิ่มเติม

อีกครั้ง ฉันจะแชร์โค้ดของฉันบน GitHub โปรดดูลิงค์ในส่วนอ้างอิงในที่สุด

จุดเริ่มต้นของการเดินทางที่ไม่คาดคิด

วันก่อนฉันกำลังทำงานกับซีรีส์เรื่องเวลาอยู่ รูปที่ 1 แสดงหนึ่งในนั้น ไม่มีสองเท่าที่เป็น มีแนวโน้มขาขึ้น และ ความแปรปรวนยังเปลี่ยนแปลงไปตามกาลเวลา- ด้วยการแสดงภาพที่ชัดเจนนี้ ฉันจึงไม่จำเป็นต้องทดสอบความนิ่ง ด้วยเหตุผลบางอย่างฉันจำไม่ได้ ฉันยังคงลองใช้การทดสอบ ADF อยู่ น่าประหลาดใจที่ค่า p เกือบเป็น 0 ซึ่งบอกเป็นนัยว่าฉันควรปฏิเสธสมมติฐานว่างและยอมรับว่ามันอยู่นิ่ง

รูปที่ 1 อนุกรมเวลาพร้อมแนวโน้ม (ภาพโดยผู้เขียน)

นั่นแปลกมาก ผลการทดสอบดูเหมือนผิด ฉันต้องการตรวจสอบว่าเกิดอะไรขึ้นเบื้องหลังการทดสอบ ADF ขั้นตอนแรกที่ฉันพยายามคือจำลองปัญหานี้ด้วยข้อมูลสังเคราะห์ ฉันสร้างข้อมูลทดสอบด้วยรหัสต่อไปนี้ โค้ดนี้เลียนแบบเฉพาะพฤติกรรมของมาแรงที่ช้า แต่ไม่ใช่ฤดูกาล

มีการสังเกต 20,000 รายการในรูปที่ 1 บ่งบอกว่าแนวโน้มกำลังเพิ่มขึ้นช้ามาก ฉันสร้างอนุกรมเวลาโดยมีความชันเล็กน้อยที่ 0.0005 ค่าเฉลี่ยอนุกรมเวลาจะเพิ่มขึ้นจากประมาณ 0 เป็น 0.5 หลังจากการสังเกต 1000 ครั้ง จากนั้นมาทดสอบด้วยฟังก์ชัน adfuller() จาก statsmodels.tsa.stattools ด้วยพารามิเตอร์เริ่มต้น ค่า p เท่ากับ 0.01 และ “ปัญหา” ก็เกิดขึ้นอีกครั้ง รูปที่ 2 แสดงผลลัพธ์ คุณอาจเพิกเฉยต่อชื่อเรื่อง และมุ่งเน้นไปที่แนวโน้มขาขึ้น ฉันจะอธิบายว่าทำไมเราถึงมีค่า p จากการทดสอบ ADF ที่แตกต่างกันสามครั้งในภายหลัง

รูปที่ 2 อนุกรมเวลาสังเคราะห์พร้อมผลการทดสอบ ADF (ภาพโดยผู้เขียน)

คณิตศาสตร์เบื้องหลังการทดสอบ DF

เราต้องลงลึกเพื่อดูว่าการทดสอบ ADF ทำอะไรได้อย่างแม่นยำ ปรากฎว่าพื้นฐานทางคณิตศาสตร์ของมันไม่ซับซ้อน ขั้นแรก การทดสอบ ADF เป็นเพียงเวอร์ชันขั้นสูงของ การทดสอบ Dickey-Fuller. มี การทดสอบ DF หลักสามเวอร์ชัน (จากวิกิพีเดีย):

1 เวอร์ชัน: ทดสอบรากของหน่วย: ∆yᵢ = δyᵢ₋₁ + uᵢ

2 เวอร์ชัน: ทดสอบหาหน่วยรูทด้วยค่าคงที่: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

รุ่น 3 ทดสอบรากของหน่วยด้วยแนวโน้มคงที่และกำหนดได้: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

ในแต่ละเวอร์ชั่น สมมติฐานว่างคือมีหน่วยรูต δ=0

แพ็คเกจ Statsmodels รองรับทั้งสามเวอร์ชันด้วยพารามิเตอร์ “การถดถอย”

สำหรับเวอร์ชัน 1 การถดถอยจะเป็น 'n' (ไม่คงที่ ไม่มีแนวโน้ม)

สำหรับเวอร์ชัน 2 การถดถอยคือ 'c' (ค่าคงที่เท่านั้น) นี่คือการตั้งค่าเริ่มต้น.

สำหรับเวอร์ชัน 3 การถดถอยคือ 'ct' (ค่าคงที่และแนวโน้ม)

ฉันรันการทดสอบใหม่โดยใช้การตั้งค่าที่แตกต่างกันสามแบบ และด้านล่างนี้คือผลลัพธ์ใหม่

สำหรับเวอร์ชัน 1 ค่า p-value คือ 0.09 เราไม่ควรปฏิเสธสมมติฐานว่าง

สำหรับเวอร์ชัน 2 ค่า p-value คือ 0.01 เราได้ถือว่ามันเป็นปัญหาแล้วเพราะนี่คือการตั้งค่าเริ่มต้น

สำหรับเวอร์ชัน 3 ค่า p คือ 0.00 ที่คาดหวังเพราะอนุกรมเวลาเป็นจริง นิ่งกับแนวโน้มที่กำหนด.

ดังนั้นสำหรับข้อมูลตัวอย่างนี้ หากเราทดสอบด้วยเวอร์ชัน 1 (regression='n') เราจะไม่บอกว่าข้อมูลนั้นอยู่กับที่ เราอาจไม่ควรใช้การตั้งค่าเริ่มต้น แต่คุณอาจสงสัยด้วยว่า ทำไมพจน์คงที่ถึงสร้างความแตกต่างมากตรงนี้? มาขุดเพิ่มเติมกันดีกว่า

จากการทดสอบ DF ไปจนถึงการถดถอยเชิงเส้น

จากคำจำกัดความข้างต้น การทดสอบ DF เป็นเพียงการถดถอยเชิงเส้น รูปที่ 3 แสดงจุดทั้งหมดสำหรับการถดถอยเชิงเส้น แกน Y คือ ∆yᵢ แกน X คือ yᵢ₋₁ และ uᵢ คือส่วนที่เหลือ เวอร์ชัน 1 หมายความว่าเราต้องจัดแนวให้พอดีโดยไม่มีจุดตัดกัน (ไม่มีค่าคงที่) เวอร์ชัน 2 หมายความว่าเราต้องพอดีกับเส้นที่มีจุดตัด (ค่าคงที่)

รูปที่ 3. ∆yᵢ และ yᵢ₋₁ (ภาพโดยผู้เขียน)

Skitlearn การถดถอยเชิงเส้น รองรับทั้งสองตัวเลือกได้ดีด้วยพารามิเตอร์ fit_intercept ด้านล่างรูปที่ 4 คือเส้นพอดีสองเส้น อย่างที่คุณเห็น เส้นที่มีจุดตัดกันพอดีกว่าเส้นที่ไม่มีจุดตัดกัน คะแนน R-squared ก็ยืนยันได้ชัดเจนเช่นกัน นอกจากนี้ โปรดทราบว่าความชันของเส้นสีส้มนั้นเล็กกว่าเส้นสีน้ำเงิน กล่าวอีกนัยหนึ่ง ความชันของเส้นสีส้มจะเข้าใกล้ 0 มากขึ้น

รูปที่ 4 ผลการถดถอยเชิงเส้น (ภาพโดยผู้เขียน)

เรายังคิดโดยใช้การแสดงภาพได้ด้วย: จุดต่างๆ ไม่ได้อยู่ตรงกลางรอบ (0,0) ดังนั้นเส้นการถดถอยที่พอดีไม่ควรผ่าน (0,0) จุดตัดควรมากกว่า 0 เนื่องจาก 0 คือค่าเฉลี่ยเริ่มต้น ∆y ควรมากกว่า 0 ดังนั้นค่าเฉลี่ยโดยรวมจึงเพิ่มขึ้น หากเราบังคับให้เส้นการถดถอยผ่าน (0,0) เส้นดังกล่าวจะพอดีกับข้อมูล และความชันจะเข้าใกล้ 0 มากขึ้นเนื่องจากอิทธิพลจาก (0,0)

เราได้เห็นแล้วว่าการรวมผลกระทบจากการสกัดกั้นเข้ากับการถดถอยเชิงเส้นหรือไม่ เหตุใดการติดตั้งเส้นจึงส่งผลต่อผลการทดสอบ ADF และค่า p-value มาจากไหน

จากการถดถอยเชิงเส้นถึงค่า p

ตอนนี้มีความซับซ้อนเล็กน้อย ค่า p สุดท้ายของการทดสอบ DF ไม่ได้มาจากค่า p ของสัมประสิทธิ์จากการถดถอยเชิงเส้น โดยพื้นฐานแล้ว สถิติมีการกระจายเฉพาะที่เรียกว่าตาราง Dickey-Fuller จากนั้นเราใช้ค่า p-value โดยประมาณของ MacKinnon สำหรับสถิติการทดสอบ สามารถดูรายละเอียดได้ใน ซอร์สโค้ด Statsmodels.

เนื่องจากสมมติฐานว่างคือ δ=0 หมายความว่าการทดสอบความชันของเส้นพอดีคือ 0 เราไม่จำเป็นต้องลงรายละเอียดเกี่ยวกับวิธีการรับค่า p สายโซ่ตรรกศาสตร์ของการเชื่อมโยงระหว่างค่า p และความชัน (δ ในการถดถอยเชิงเส้น ไม่ใช่ความชันที่มีแนวโน้ม) เป็นดังนี้:

โดยทั่วไป หากความชันอยู่ห่างจาก 0 ค่า p ควรน้อยกว่า มีแนวโน้มที่จะปฏิเสธสมมติฐานว่างมากกว่า และแนะนำว่าไม่มีหน่วยรูทและค่าคงที่ หากความชันเป็น 0 หรือใกล้กับ 0 มาก ค่า p ควรสูงกว่า มีแนวโน้มที่จะยอมรับสมมติฐานว่างและแนะนำหน่วยรากและไม่คงที่ สำหรับสถานการณ์ที่สอง วิกิพีเดียกล่าวว่า "การทดสอบมีอำนาจทางสถิติต่ำ โดยมักจะไม่สามารถแยกแยะระหว่างกระบวนการต่อหน่วยที่แท้จริง (δ = 0) และกระบวนการที่ใกล้เคียงต่อหน่วยราก (δ ใกล้ 0)" นั่นเป็นเหตุผลที่เรามีปัญหาตั้งแต่แรก เรากำลังจัดการกับกระบวนการใกล้หน่วย-รูท เวอร์ชัน 1 ค้นหายูนิตรูท และเวอร์ชัน 2 ไม่พบยูนิตรูท

เหตุใดเวอร์ชัน 1 จึงใช้งานได้กับตัวอย่างข้างต้น

เวอร์ชัน 1 ใช้งานได้กับข้อมูลในรูปที่ 2 เพราะเราทำให้ความชันเข้าใกล้ 0 มากขึ้น ดังนั้นค่า p จึงสูงขึ้น

อย่างไรก็ตาม เราไม่สามารถใช้เวอร์ชัน 1 เป็นการตั้งค่าเริ่มต้นได้ มีสองกรณีสำหรับเวอร์ชัน 1 (บังคับให้บรรทัดผ่าน (0,0) ):

กรณีที่ 1: (0,0) อยู่ใกล้จุดข้อมูลทั้งหมดมากขึ้น หากเส้นต้องผ่าน (0,0) เส้นจะแบนขึ้น และความชันจะเข้ามาใกล้ 0 มากขึ้น รูปที่ 4 แสดงกรณีนี้ โปรดทราบว่าการสาธิตในรูปที่ 4 เหมาะกับตัวแปรเพียงตัวเดียวเท่านั้น ADF จริงจะพอดีกับตัวแปรล่าช้ามากขึ้น

กรณีที่ 2: (0,0) อยู่ห่างจากจุดข้อมูลทั้งหมด ถ้าเส้นต้องผ่าน (0,0) เราอาจล้มเหลวในการติดตั้ง โดยพื้นฐานแล้ว ความชันคือ 0 ซึ่งหมายความว่าเราไม่สามารถหาความสัมพันธ์เชิงเส้นของ ∆yᵢ และ yᵢ₋₁ เพื่อให้เส้นผ่าน (0,0) และครอบคลุมจุดข้อมูลส่วนใหญ่ ดังนั้นผลการทดสอบจะมีความลำเอียงต่อการมีหน่วยรูท.

รูปที่ 5 ด้านล่างแสดงตัวอย่างการทดสอบเวอร์ชัน 1 ที่ล้มเหลวในการปฏิเสธสมมติฐานว่าง (p-value 0.6) และข้อมูลมีความคงที่โดยมีค่าเฉลี่ยเท่ากับ 10 รูปที่ 6 อธิบายเหตุผล อย่างที่คุณเห็น เราไม่สามารถหาเส้นตรงที่ไม่มีจุดตัดกัน (R-กำลังสองคือ 0) ดังนั้นความชันของเส้นพอดีจึงเป็น 0 (∆yᵢ ไม่ได้ขึ้นอยู่กับ yᵢ₋₁)

รูปที่ 5 เวอร์ชัน 1 ล้มเหลวในการจดจำอนุกรมเวลาที่อยู่กับที่ (ภาพโดยผู้เขียน)
รูปที่ 6 การถดถอยเชิงเส้นล้มเหลวในการค้นหาเส้นที่ไม่มีจุดตัด (ผ่าน (0,0)) (ภาพโดยผู้เขียน)

ตั้งแต่การทดสอบ DF ไปจนถึงการทดสอบ ADF

ตอนนี้เราเข้าใจแล้วว่าการทดสอบ DF เป็นการถดถอยเชิงเส้น และวิธีรับค่า p จากการถดถอยเชิงเส้น มาดู ADF กันต่อ สูตรของ ADF คือ:

อีกครั้ง การถดถอยเชิงเส้น ส่วน "Augmented" คือเราต้องปรับค่าสัมประสิทธิ์ให้มากขึ้น

แพ็คเกจ statsmodels ช่วยให้สามารถแสดงข้อมูลสรุปโดยละเอียดของการทดสอบ AFT รูปที่ 7 คือผลลัพธ์

รูปที่ 7 การทดสอบ ADF พร้อมสรุปโดยละเอียด (ภาพโดยผู้เขียน)

เราเห็น 'OLS Regression' (วิธีแก้ปัญหาเริ่มต้นสำหรับการถดถอยเชิงเส้น) และค่าสัมประสิทธิ์ 17 ค่า ฉันไม่ได้ระบุความล่าช้าสูงสุด ดังนั้นการทดสอบจะลองใช้ตัวเลขตามความยาวของอนุกรมเวลา ซึ่งก็คือ 17

const (สกัดกั้น) ก็ได้รับการติดตั้งเช่นกัน ค่าคือ 0.0596

เรามาลองใช้การทดสอบ ADF โดยใช้การถดถอยเชิงเส้นใน Scikit-learn รูปที่ 8 คือโค้ดและเอาท์พุต

รูปที่ 8 การทดสอบ ADF (เฉพาะส่วนการถดถอยเชิงเส้น) ด้วย Scikit-learn (ภาพโดยผู้เขียน)

ค่าตัดแกนคือ 0.0596 และค่าสัมประสิทธิ์อื่นๆ เหมือนกับในรูปที่ 7 การถดถอยเชิงเส้นใน Scikit-Learn เป็นเพียง OLS ธรรมดา เรากำลังทำสิ่งเดียวกัน จึงไม่น่าแปลกใจที่ผลลัพธ์จะเหมือนกัน

สิ้นสุดการเดินทาง

หลังจากที่ฉันหาวิธีตั้งค่าพารามิเตอร์ได้แล้ว ฉันทดสอบอนุกรมเวลาดั้งเดิมในรูปที่ 1 โดยใช้เวอร์ชัน 1 (การถดถอย = 'n') และได้ค่า p-value เป็น 0.08 ซึ่งบ่งบอกว่ามันไม่คงที่ โปรดทราบว่าข้อมูลในรูปที่ 1 นั้นมีค่าเฉลี่ยเป็นศูนย์ ดังนั้นคุณคงจินตนาการได้ว่า (0,0) อยู่ใกล้จุดข้อมูลมากกว่า (∆yᵢ, yᵢ₋₁) การใช้การทดสอบเวอร์ชัน 1 จะช่วยเราได้

เนื่องจากความชันของแนวโน้มในรูปที่ 1 มีน้อย เราจึงสามารถสุ่มอนุกรมเวลาใหม่ด้วยขั้นตอน ซึ่งจะเพิ่มความชัน ตัวอย่างเช่น หากฉันทดสอบด้วยสี่ขั้นตอน ( value[::4] ) มันจะไม่ผ่านการทดสอบ ADF ด้วยการตั้งค่าเริ่มต้น (p-value คือ 0.17 สำหรับ regression='c')

แก้ไขปัญหา.

Takeaways

อย่าเชื่อถือผลลัพธ์ของ ADF อย่างสุ่มสี่สุ่มห้า การสร้างภาพเป็นเพื่อนของคุณ

การทดสอบ ADF เป็นการถดถอยเชิงเส้นอย่างง่าย และการนำแบบจำลองสถิติไปใช้จะใช้ OLS เพื่อแก้ปัญหาการถดถอย จากนั้นจะใช้ตาราง Dickey–Fuller เพื่อแยกค่า p ซึ่งตรวจสอบความถูกต้องของสมมติฐาน Null ว่าสัมประสิทธิ์ของตัวแปรล่าช้าตัวแรกจากการถดถอยที่ติดตั้งไว้คือ 0

การทดสอบ ADF มีข้อจำกัดเมื่อทำการทดสอบกระบวนการใกล้หน่วย-รูท (δ ใกล้ถึง 0)

เราจำเป็นต้องเลือกรุ่น ADF ที่เหมาะสมตามนั้น ตัวอย่างเช่น เมื่อคุณเห็นแนวโน้มคงที่และต้องการทดสอบ 'แนวโน้มคงที่' คุณต้องเลือก 'ct' เป็นพารามิเตอร์ หากคุณกำลังจะจับแนวโน้มที่ช้าสำหรับสัญญาณที่มีค่าเฉลี่ยควรจะเป็น 0 เหมือนในรูปที่ 1 และรูปที่ 2 บางทีคุณอาจต้องเลือก 'n' เป็นพารามิเตอร์เพื่อหลีกเลี่ยงผลกระทบจากการปรับจุดตัดให้เหมาะสม แบบจำลองสถิติยังสนับสนุนแนวโน้มเชิงปริมาณด้วยพารามิเตอร์ 'ctt' ตัวเลือกขั้นสูงนี้อาจเป็นทางเลือกที่ดีสำหรับในบางกรณี ในกรณีที่คุณต้องการขุดเพิ่มเติม โปรดดูที่ การจัดการกับความไม่แน่นอนเกี่ยวกับการรวมเงื่อนไขแนวโน้มเวลาสกัดกั้นและกำหนดไว้.

ฉันหวังว่าคุณจะได้เรียนรู้บางอย่างเกี่ยวกับการทดสอบ ADF

ขอให้สนุกกับอนุกรมเวลาของคุณ!

ติดต่อฉันได้ที่ LinkedIn.

PS: ฉันมีประสบการณ์และความหลงใหลในข้อมูลอนุกรมเวลา หากคุณชอบบทความนี้คุณอาจสนใจบทความอื่นของฉัน โพสต์เกี่ยวกับ อนุกรมเวลา.

อ้างอิง

ไฟล์สมุดบันทึกบน GitHub

เหตุใดอนุกรมเวลาที่กำลังมาแรงนี้จึงหยุดนิ่ง เผยแพร่ซ้ำจากที่มา https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 ทาง https://towardsdatascience.com/feed

<!–

->

ประทับเวลา:

เพิ่มเติมจาก ที่ปรึกษาบล็อคเชน