Tại sao chuỗi thời gian thịnh hành này lại đứng yên?

Một nghiên cứu về Dickey-Fuller tăng cường (ADF) kiểm tra từ một ví dụ kỳ lạ

Photo by Jan Huber on Unsplash

Tính dừng là một trong những khái niệm cơ bản nhất trong phân tích chuỗi thời gian. Nói chung, tính dừng sẽ cung cấp các đặc tính tuyệt vời để mô hình hóa chuỗi thời gian bằng các phương pháp thống kê khác nhau. Tăng cường Dickey-Fuller (ADF) kiểm tra có lẽ là phương pháp được sử dụng rộng rãi nhất để kiểm tra tính dừng.

Có rất nhiều bài viết trực tuyến về chủ đề này. Tôi sẽ không lãng phí thời gian của bạn vào phần giới thiệu cơ bản, chẳng hạn như định nghĩa về tính dừng, cách thực hiện các bài kiểm tra ADF, v.v. Trong bài đăng này, tôi sẽ chia sẻ hành trình khám phá bài kiểm tra ADF sau khi gặp một trường hợp lạ trong một ứng dụng.

Lộ trình học tập mà tôi sẽ trình bày là điển hình cho việc học khoa học dữ liệu. Đầu tiên, chúng ta nghĩ rằng chúng ta hiểu một công cụ hoặc một khái niệm, nhưng chúng ta chỉ thừa nhận và ghi nhớ thuật ngữ đó. Khi áp dụng nó vào dữ liệu thực tế, chúng ta có thể gặp phải những vấn đề bất ngờ, đầy thách thức khiến chúng ta phải điều tra và hiểu sâu hơn.

Một lần nữa, tôi sẽ chia sẻ mã của mình trên GitHub; vui lòng tìm liên kết trong phần tham khảo cuối cùng.

Sự khởi đầu của một cuộc hành trình bất ngờ

Tôi đã làm việc với một số chuỗi thời gian vào ngày hôm trước. Hình 1 cho thấy một trong số chúng. Không có gì gấp đôi xu hướng tăng tồn tại,phương sai cũng thay đổi theo thời gian. Với sự hình dung rõ ràng này, tôi không cần phải kiểm tra tính tĩnh tại. Vì lý do nào đó tôi không nhớ, tôi vẫn thử với bài kiểm tra ADF. Đáng ngạc nhiên là giá trị p gần như bằng 0, điều này ngụ ý rằng tôi nên bác bỏ giả thuyết Null và chấp nhận nó là dừng.

Hình 1. Chuỗi thời gian có xu hướng (Ảnh tác giả)

Thật ki quặc. Kết quả kiểm tra có vẻ sai. Tôi muốn điều tra xem điều gì đang diễn ra đằng sau cuộc kiểm tra ADF. Bước đầu tiên tôi thử là tái tạo vấn đề này bằng dữ liệu tổng hợp. Tôi đã tạo một số dữ liệu thử nghiệm với đoạn mã sau. Mã chỉ bắt chước hành vi của xu hướng chậm chứ không bắt chước tính thời vụ.

Có 20,000 quan sát trong Hình 1, cho thấy xu hướng đang tăng lên cực kỳ chậm. Tôi tạo một chuỗi thời gian có độ dốc nhỏ là 0.0005. Giá trị trung bình của chuỗi thời gian tăng từ khoảng 0 lên 0.5 sau 1000 lần quan sát. Sau đó, hãy kiểm tra nó bằng hàm adfuller() từ statsmodels.tsa.stattools với các thông số mặc định. Giá trị p là 0.01 và “vấn đề” lại xảy ra. Hình 2 cho thấy kết quả. Bạn có thể bỏ qua tiêu đề và tập trung vào xu hướng đi lên. Tôi sẽ giải thích tại sao chúng ta có giá trị p từ ba thử nghiệm ADF khác nhau sau.

Hình 2. Chuỗi thời gian tổng hợp với kết quả xét nghiệm ADF (Ảnh của Tác giả)

Toán học đằng sau bài kiểm tra DF

Chúng ta phải đi sâu hơn để xem thử nghiệm ADF đang thực hiện chính xác những gì. Hóa ra nền tảng toán học của nó không hề phức tạp. Đầu tiên, bài kiểm tra ADF chỉ là phiên bản nâng cao của Kiểm tra Dickey-Fuller. Có ba phiên bản chính của bài kiểm tra DF (từ Wikipedia):

Phiên bản 1: Kiểm tra nghiệm đơn vị: ∆yᵢ = δyᵢ₋₁ + uᵢ

Phiên bản 2: Kiểm tra nghiệm đơn vị với hằng số: ∆yᵢ = a₀ + δyᵢ₋₁ + uᵢ

Version 3. Kiểm tra nghiệm đơn vị có xu hướng không đổi và xác định: ∆yᵢ = a₀ + a₁*t + δyᵢ₋₁ + uᵢ

Trong mỗi phiên bản, giả thuyết không là có nghiệm đơn vị, δ=0.

Gói Statsmodels hỗ trợ cả 3 phiên bản với tham số "hồi quy".

Đối với phiên bản 1, hồi quy là 'n' (không có hằng số, không có xu hướng).

Đối với phiên bản 2, hồi quy là 'c' (chỉ hằng số); Đây là thiết lập mặc định.

Đối với phiên bản 3, hồi quy là 'ct' (không đổi và xu hướng).

Tôi chạy lại bài kiểm tra với ba cài đặt khác nhau và bên dưới là kết quả mới.

Đối với phiên bản 1, giá trị p là 0.09. Chúng ta không nên bác bỏ giả thuyết Null.

Đối với phiên bản 2, giá trị p là 0.01. Chúng tôi đã coi đây là một sự cố vì đây là cài đặt mặc định.

Đối với phiên bản 3, giá trị p là 0.00. Điều đó được mong đợi bởi vì chuỗi thời gian thực sự là cố định với một xu hướng xác định.

Vì vậy, đối với dữ liệu mẫu này, nếu chúng tôi kiểm tra nó bằng phiên bản 1 (hồi quy='n'), chúng tôi sẽ không nói rằng nó là tĩnh. Có lẽ chúng ta không nên sử dụng cài đặt mặc định. Nhưng bạn cũng có thể thắc mắc, tại sao số hạng không đổi lại tạo ra sự khác biệt lớn như vậy ở đây? Hãy tìm hiểu thêm.

Từ kiểm định DF đến hồi quy tuyến tính

Dựa trên định nghĩa trên, kiểm định DF chỉ là hồi quy tuyến tính. Hình 3 cho thấy tất cả các điểm của hồi quy tuyến tính. Trục Y là ∆yᵢ, trục X là yᵢ₋₁ và uᵢ là phần dư. Phiên bản 1 có nghĩa là chúng ta phải khớp một dòng không bị chặn (không có hằng số). Phiên bản 2 có nghĩa là chúng ta phải khớp một dòng với phần đánh chặn (không đổi).

Hình 3. ∆yᵢ và yᵢ₋₁ (Ảnh của Tác giả)

Hồi quy tuyến tính Skitlearn hỗ trợ tốt hai tùy chọn đó với tham số fit_intercept. Dưới đây Hình 4 là hai đường được trang bị. Như bạn có thể thấy, dòng có phần chặn phù hợp hơn dòng không có phần chặn. Điểm R bình phương cũng xác nhận điều đó một cách rõ ràng. Ngoài ra, hãy lưu ý rằng độ dốc của đường màu cam nhỏ hơn độ dốc của đường màu xanh. Nói cách khác, độ dốc của đường màu cam gần bằng 0.

Hình 4. Kết quả hồi quy tuyến tính (Ảnh của tác giả)

Chúng ta cũng có thể suy nghĩ bằng cách trực quan hóa: các điểm không tập trung quanh (0,0), do đó đường hồi quy phù hợp sẽ không vượt qua (0,0). Phần chặn phải lớn hơn 0. Vì 0 là giá trị trung bình ban đầu nên ∆y phải lớn hơn 0, do đó giá trị trung bình tổng thể sẽ tăng. Nếu chúng ta buộc đường hồi quy đi qua (0,0), nó sẽ không phù hợp với dữ liệu và độ dốc sẽ tiến gần đến 0 do ảnh hưởng từ (0,0).

Chúng tôi đã thấy liệu việc bao gồm các tác động chặn có phù hợp với hồi quy tuyến tính hay không. Tại sao cách lắp đường thẳng lại ảnh hưởng đến kết quả kiểm tra ADF và giá trị p đến từ đâu?

Từ hồi quy tuyến tính đến giá trị p

Bây giờ là nơi có một chút phức tạp. Giá trị p cuối cùng của kiểm định DF không phải từ giá trị p của các hệ số từ hồi quy tuyến tính. Về cơ bản, số liệu thống kê có một phân bố cụ thể được gọi là bảng Dickey-Fuller. Sau đó, chúng tôi sử dụng giá trị p gần đúng của MacKinnon cho thống kê kiểm tra. Bạn có thể tìm thấy chi tiết trong Mã nguồn mô hình thống kê.

Bởi vì giả thuyết khống là δ=0, nghĩa là việc kiểm tra độ dốc của đường thẳng phù hợp là 0. Chúng ta không cần đi sâu vào chi tiết về cách lấy giá trị p. Chuỗi logic của mối liên hệ giữa giá trị p và độ dốc (δ trong hồi quy tuyến tính, không phải độ dốc có xu hướng) là như sau:

Nói chung, nếu hệ số góc xa 0 thì giá trị p sẽ nhỏ hơn, có nhiều khả năng bác bỏ giả thuyết khống và cho thấy không có nghiệm đơn vị và tính dừng. Nếu độ dốc bằng 0 hoặc rất gần 0, giá trị p sẽ cao hơn, có nhiều khả năng chấp nhận giả thuyết khống và gợi ý nghiệm đơn vị và không dừng. Đối với kịch bản thứ hai, Wikipedia cho biết, “Các thử nghiệm có sức mạnh thống kê thấp ở chỗ chúng thường không thể phân biệt giữa các quy trình gốc đơn vị thực sự (δ = 0) và các quy trình gần gốc đơn vị (δ gần bằng 0)”. Đó là lý do tại sao chúng tôi gặp vấn đề ngay từ đầu. Chúng ta đang xử lý một quá trình gần gốc đơn vị. Phiên bản 1 tìm thấy nghiệm đơn vị và phiên bản 2 không thể tìm thấy nghiệm đơn vị.

Tại sao phiên bản 1 hoạt động cho ví dụ trên?

Phiên bản 1 hoạt động với dữ liệu trong Hình 2 vì chúng tôi làm cho độ dốc gần bằng 0, do đó giá trị p cao hơn.

Tuy nhiên, chúng tôi không thể sử dụng phiên bản 1 làm cài đặt mặc định. Có hai trường hợp đối với phiên bản 1 (buộc dòng phải đi qua (0,0) ):

Trường hợp 1: (0,0) gần với tất cả các điểm dữ liệu hơn. Nếu đường thẳng phải đi qua (0,0) thì đường thẳng sẽ phẳng hơn và độ dốc sẽ tiến gần đến 0. Hình 4 minh họa trường hợp này. Xin lưu ý rằng phần minh họa trong Hình 4 chỉ phù hợp với một biến yᵢ₋₁, ADF thực tế sẽ phù hợp với nhiều biến độ trễ hơn.

Trường hợp 2: (0,0) ở xa tất cả các điểm dữ liệu. Nếu đường dây phải đi qua (0,0), chúng ta có thể không khớp được; về cơ bản, độ dốc bằng 0, nghĩa là chúng ta không thể tìm thấy mối quan hệ tuyến tính của ∆yᵢ và yᵢ₋₁ sao cho một đường sẽ đi qua (0,0) và bao phủ hầu hết các điểm dữ liệu. Vì vậy, kết quả kiểm tra sẽ thiên về việc có một đơn vị gốc.

Hình 5 bên dưới cho thấy một ví dụ về thử nghiệm Phiên bản 1 không bác bỏ giả thuyết Null (giá trị p 0.6) và dữ liệu đứng yên với giá trị trung bình là 10. Hình 6 giải thích lý do. Như bạn có thể thấy, chúng ta không thể tìm thấy một đường thẳng không có điểm giao nhau (bình phương R là 0), do đó độ dốc của đường thẳng vừa vặn là 0 (∆yᵢ không phụ thuộc vào yᵢ₋₁).

Hình 5. Phiên bản 1 không nhận dạng được chuỗi thời gian đứng yên (Hình ảnh của tác giả)
Hình 6. Hồi quy tuyến tính không tìm được đường thẳng không bị chặn (chuyển (0,0)) (Hình ảnh của Tác giả)

Từ bài kiểm tra DF đến bài kiểm tra ADF

Bây giờ chúng ta đã hiểu rằng kiểm tra DF là hồi quy tuyến tính và cách lấy giá trị p từ hồi quy tuyến tính, hãy chuyển sang ADF. Công thức của ADF là:

Một lần nữa, hồi quy tuyến tính. Phần “Tăng cường” là chúng ta phải phù hợp với nhiều hệ số hơn.

Gói statsmodels cho phép hiển thị bản tóm tắt chi tiết về thử nghiệm AFT. Hình 7 là kết quả.

Hình 7. Kiểm tra ADF với tóm tắt chi tiết (Ảnh của Tác giả)

Chúng tôi thấy 'Hồi quy OLS' (giải pháp mặc định cho hồi quy tuyến tính) và 17 hệ số. Tôi không chỉ định độ trễ tối đa, vì vậy thử nghiệm sẽ thử tối đa một con số dựa trên độ dài chuỗi thời gian, là 17.

const (chặn) cũng được trang bị. Giá trị là 0.0596.

Hãy thử triển khai thử nghiệm ADF bằng cách sử dụng hồi quy tuyến tính trong Scikit-learn. Hình 8 là mã và đầu ra.

Hình 8. Kiểm tra ADF (chỉ là phần hồi quy tuyến tính) với Scikit-learn (Hình ảnh của tác giả)

Hệ số chặn là 0.0596 và các hệ số khác giống như trong Hình 7. Hồi quy tuyến tính trong Scikit-learn chỉ là OLS đơn giản. Chúng tôi đang làm điều tương tự nên không có gì ngạc nhiên khi kết quả giống hệt nhau.

Kết thúc cuộc hành trình

Sau khi tìm ra cách đặt tham số, tôi đã kiểm tra chuỗi thời gian ban đầu trong Hình 1 bằng cách sử dụng phiên bản 1 (hồi quy ='n') và nhận được giá trị p là 0.08, cho thấy nó không dừng. Xin lưu ý rằng dữ liệu trong Hình 1 có giá trị trung bình bằng 0,0, vì vậy bạn có thể tưởng tượng rằng (1) gần với các điểm dữ liệu hơn (∆yᵢ, yᵢ₋₁). Sử dụng thử nghiệm phiên bản XNUMX sẽ giúp chúng tôi.

Vì độ dốc có xu hướng trong Hình 1 là tối thiểu nên chúng ta cũng có thể lấy mẫu lại chuỗi thời gian theo các bước, làm tăng độ dốc. Chẳng hạn, nếu tôi kiểm tra nó bằng bốn bước ( value[::4] ), nó sẽ không vượt qua kiểm tra ADF với cài đặt mặc định (giá trị p là 0.17 cho hồi quy='c').

Vấn đề được giải quyết.

Takeaways

Đừng tin tưởng vào kết quả ADF một cách mù quáng. Hình dung là bạn của bạn.

Kiểm tra ADF là một phép hồi quy tuyến tính đơn giản và việc triển khai các mô hình thống kê sử dụng OLS để giải quyết vấn đề hồi quy. Sau đó, nó sử dụng bảng Dickey–Fuller để trích xuất giá trị p xác nhận giả thuyết Null rằng hệ số của biến độ trễ đầu tiên từ hồi quy phù hợp là 0.

Kiểm tra ADF có những hạn chế khi kiểm tra các tiến trình gần nghiệm đơn vị (δ gần bằng 0).

Chúng ta cần lựa chọn phiên bản ADF phù hợp cho phù hợp. Ví dụ: khi bạn thấy một xu hướng không đổi và muốn kiểm tra 'xu hướng ổn định', bạn cần chọn 'ct' làm tham số. Nếu bạn định nắm bắt xu hướng chậm của tín hiệu có giá trị trung bình được cho là 0 như trong Hình 1 và Hình 2, có thể bạn cần chọn 'n' làm tham số để tránh tác động của việc điều chỉnh điểm chặn. Mô hình thống kê cũng hỗ trợ xu hướng lượng tử với tham số 'ctt.' Tùy chọn nâng cao này có thể là lựa chọn tốt cho một số trường hợp. Trong trường hợp bạn muốn tìm hiểu sâu hơn, vui lòng tham khảo Xử lý sự không chắc chắn về việc bao gồm các thuật ngữ xu hướng thời gian chặn và xác định.

Tôi hy vọng bạn đã học được điều gì đó về bài kiểm tra ADF.

Chúc bạn vui vẻ với chuỗi thời gian của mình!

Liên hệ với tôi trên LinkedIn.

Tái bút: Tôi có kinh nghiệm và đam mê dữ liệu chuỗi thời gian. Nếu bạn thích bài viết này, bạn có thể quan tâm đến bài viết khác của tôi bài viết về chuỗi thời gian.

dự án

Tệp sổ ghi chép trên GitHub

Tại sao chuỗi thời gian thịnh hành này lại đứng yên? Được xuất bản lại từ Nguồn https://towardsdatascience.com/why-is-this-trending-time-series-stationary-f3fb9447336f?source=rss—-7f60cf5620c9—4 qua https://towardsdatascience.com/feed

<!–

->

Dấu thời gian:

Thêm từ Tư vấn chuỗi khối