การศึกษา Augmented Dickey-Fuller (ADF) ทดสอบจากตัวอย่างแปลกๆ
ความคงที่เป็นหนึ่งในแนวคิดพื้นฐานที่สุดสำหรับการวิเคราะห์อนุกรมเวลา โดยทั่วไป ความนิ่งจะให้คุณสมบัติที่ดีเยี่ยมสำหรับการสร้างแบบจำลองอนุกรมเวลาด้วยวิธีทางสถิติต่างๆ ดิกกี้-ฟูลเลอร์เสริม (ADF) การทดสอบน่าจะเป็นแนวทางที่ใช้กันอย่างแพร่หลายที่สุดในการตรวจสอบความคงที่
มีบทความออนไลน์มากมายในหัวข้อนี้ ฉันจะไม่เสียเวลากับบทนำพื้นฐาน เช่น คำจำกัดความของความคงที่ วิธีทดสอบ ADF เป็นต้น ในโพสต์นี้ ฉันจะแชร์การเดินทางของฉันในการสำรวจการทดสอบ ADF หลังจากเจอกรณีแปลกๆ ในแอปพลิเคชัน
เส้นทางการเรียนรู้ที่ฉันจะแสดงเป็นเรื่องปกติสำหรับการเรียนรู้วิทยาศาสตร์ข้อมูล ประการแรก เราคิดว่าเราเข้าใจเครื่องมือหรือแนวคิด แต่เราเพียงรับทราบและจดจำคำนั้น เมื่อเรานำไปใช้กับข้อมูลจริง เราอาจพบปัญหาที่ท้าทายและไม่คาดคิดซึ่งผลักดันให้เราตรวจสอบมากขึ้นและทำความเข้าใจเพิ่มเติม
อีกครั้ง ฉันจะแชร์โค้ดของฉันบน GitHub โปรดดูลิงค์ในส่วนอ้างอิงในที่สุด
จุดเริ่มต้นของการเดินทางที่ไม่คาดคิด
วันก่อนฉันกำลังทำงานกับซีรีส์เรื่องเวลาอยู่ รูปที่ 1 แสดงหนึ่งในนั้น ไม่มีสองเท่าที่เป็น มีแนวโน้มขาขึ้น และ ความแปรปรวนยังเปลี่ยนแปลงไปตามกาลเวลา- ด้วยการแสดงภาพที่ชัดเจนนี้ ฉันจึงไม่จำเป็นต้องทดสอบความนิ่ง ด้วยเหตุผลบางอย่างฉันจำไม่ได้ ฉันยังคงลองใช้การทดสอบ ADF อยู่ น่าประหลาดใจที่ค่า p เกือบเป็น 0 ซึ่งบอกเป็นนัยว่าฉันควรปฏิเสธสมมติฐานว่างและยอมรับว่ามันอยู่นิ่ง
นั่นแปลกมาก ผลการทดสอบดูเหมือนผิด ฉันต้องการตรวจสอบว่าเกิดอะไรขึ้นเบื้องหลังการทดสอบ ADF ขั้นตอนแรกที่ฉันพยายามคือจำลองปัญหานี้ด้วยข้อมูลสังเคราะห์ ฉันสร้างข้อมูลทดสอบด้วยรหัสต่อไปนี้ โค้ดนี้เลียนแบบเฉพาะพฤติกรรมของมาแรงที่ช้า แต่ไม่ใช่ฤดูกาล
มีการสังเกต 20,000 รายการในรูปที่ 1 บ่งบอกว่าแนวโน้มกำลังเพิ่มขึ้นช้ามาก ฉันสร้างอนุกรมเวลาโดยมีความชันเล็กน้อยที่ 0.0005 ค่าเฉลี่ยอนุกรมเวลาจะเพิ่มขึ้นจากประมาณ 0 เป็น 0.5 หลังจากการสังเกต 1000 ครั้ง จากนั้นมาทดสอบด้วยฟังก์ชัน adfuller() จาก statsmodels.tsa.stattools ด้วยพารามิเตอร์เริ่มต้น ค่า p เท่ากับ 0.01 และ “ปัญหา” ก็เกิดขึ้นอีกครั้ง รูปที่ 2 แสดงผลลัพธ์ คุณอาจเพิกเฉยต่อชื่อเรื่อง และมุ่งเน้นไปที่แนวโน้มขาขึ้น ฉันจะอธิบายว่าทำไมเราถึงมีค่า p จากการทดสอบ 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 หมายความว่าเราต้องพอดีกับเส้นที่มีจุดตัด (ค่าคงที่)
Skitlearn การถดถอยเชิงเส้น รองรับทั้งสองตัวเลือกได้ดีด้วยพารามิเตอร์ fit_intercept ด้านล่างรูปที่ 4 คือเส้นพอดีสองเส้น อย่างที่คุณเห็น เส้นที่มีจุดตัดกันพอดีกว่าเส้นที่ไม่มีจุดตัดกัน คะแนน R-squared ก็ยืนยันได้ชัดเจนเช่นกัน นอกจากนี้ โปรดทราบว่าความชันของเส้นสีส้มนั้นเล็กกว่าเส้นสีน้ำเงิน กล่าวอีกนัยหนึ่ง ความชันของเส้นสีส้มจะเข้าใกล้ 0 มากขึ้น
เรายังคิดโดยใช้การแสดงภาพได้ด้วย: จุดต่างๆ ไม่ได้อยู่ตรงกลางรอบ (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ᵢ₋₁)
ตั้งแต่การทดสอบ DF ไปจนถึงการทดสอบ ADF
ตอนนี้เราเข้าใจแล้วว่าการทดสอบ DF เป็นการถดถอยเชิงเส้น และวิธีรับค่า p จากการถดถอยเชิงเส้น มาดู ADF กันต่อ สูตรของ ADF คือ:
อีกครั้ง การถดถอยเชิงเส้น ส่วน "Augmented" คือเราต้องปรับค่าสัมประสิทธิ์ให้มากขึ้น
แพ็คเกจ statsmodels ช่วยให้สามารถแสดงข้อมูลสรุปโดยละเอียดของการทดสอบ AFT รูปที่ 7 คือผลลัพธ์
เราเห็น 'OLS Regression' (วิธีแก้ปัญหาเริ่มต้นสำหรับการถดถอยเชิงเส้น) และค่าสัมประสิทธิ์ 17 ค่า ฉันไม่ได้ระบุความล่าช้าสูงสุด ดังนั้นการทดสอบจะลองใช้ตัวเลขตามความยาวของอนุกรมเวลา ซึ่งก็คือ 17
const (สกัดกั้น) ก็ได้รับการติดตั้งเช่นกัน ค่าคือ 0.0596
เรามาลองใช้การทดสอบ ADF โดยใช้การถดถอยเชิงเส้นใน Scikit-learn รูปที่ 8 คือโค้ดและเอาท์พุต
ค่าตัดแกนคือ 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: ฉันมีประสบการณ์และความหลงใหลในข้อมูลอนุกรมเวลา หากคุณชอบบทความนี้คุณอาจสนใจบทความอื่นของฉัน โพสต์เกี่ยวกับ อนุกรมเวลา.
อ้างอิง
เหตุใดอนุกรมเวลาที่กำลังมาแรงนี้จึงหยุดนิ่ง เผยแพร่ซ้ำจากที่มา https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 ทาง https://towardsdatascience.com/feed
<!–
->
- Bitcoin
- bizbuildermike
- blockchain
- การปฏิบัติตามบล็อคเชน
- การประชุม blockchain
- ที่ปรึกษาบล็อคเชน
- coinbase
- เหรียญอัจฉริยะ
- เอกฉันท์
- การประชุม crypto
- การทำเหมือง crypto
- cryptocurrency
- ซึ่งกระจายอำนาจ
- Defi
- สินทรัพย์ดิจิทัล
- ethereum
- เรียนรู้เครื่อง
- โทเค็นที่ไม่สามารถทำซ้ำได้
- เพลโต
- เพลโตไอ
- เพลโตดาต้าอินเทลลิเจนซ์
- Platoblockchain
- เพลโตดาต้า
- เพลโตเกม
- รูปหลายเหลี่ยม
- หลักฐานการเดิมพัน
- W3
- ลมทะเล