Sử dụng gói dự báo R với các giá trị bị thiếu và / hoặc chuỗi thời gian không đều


16

Tôi ấn tượng bởi forecastgói R , cũng như zoogói cho chuỗi thời gian không đều và nội suy các giá trị bị thiếu.

Ứng dụng của tôi nằm trong lĩnh vực dự báo lưu lượng trung tâm cuộc gọi, vì vậy dữ liệu vào cuối tuần (hầu như) luôn bị thiếu, có thể được xử lý độc đáo zoo. Ngoài ra, một số điểm riêng biệt có thể bị thiếu, tôi chỉ sử dụng R NAcho điều đó.

Vấn đề là: tất cả các phép thuật tốt đẹp của gói dự báo, chẳng hạn như eta(), auto.arima()v.v., dường như mong đợi tscác đối tượng đơn giản , tức là chuỗi thời gian không thể thay thế không chứa bất kỳ dữ liệu bị thiếu. Tôi nghĩ rằng các ứng dụng trong thế giới thực cho chuỗi thời gian chỉ có thể thay thế chắc chắn là tồn tại, nhưng - theo ý kiến ​​của tôi - rất hạn chế.

Vấn đề của một vài NAgiá trị riêng biệt có thể dễ dàng được giải quyết bằng cách sử dụng bất kỳ hàm nội suy nào được cung cấp zoocũng như bởi forecast::interp. Sau đó, tôi chạy dự báo.

Những câu hỏi của tôi:

  1. Có ai đề xuất một giải pháp tốt hơn?
  2. (câu hỏi chính của tôi) Ít nhất là trong miền ứng dụng của tôi, dự báo lưu lượng truy cập trung tâm cuộc gọi (và theo như tôi có thể tưởng tượng hầu hết các miền có vấn đề khác), chuỗi thời gian không bị thay thế. Ít nhất chúng tôi có chương trình "ngày làm việc" định kỳ hoặc một cái gì đó. Cách tốt nhất để xử lý điều đó và vẫn sử dụng tất cả các phép thuật hay của gói dự báo là gì?

    Tôi có nên "nén" chuỗi thời gian để lấp đầy các ngày cuối tuần, thực hiện dự báo và sau đó "thổi phồng" dữ liệu một lần nữa để chèn lại các giá trị NA vào cuối tuần không? (Tôi nghĩ đó sẽ là một sự xấu hổ?)

    Có kế hoạch nào để làm cho gói dự báo tương thích hoàn toàn với các gói chuỗi thời gian bất thường như sở thú hay không? Nếu có, khi nào và nếu không, tại sao không?

Tôi còn khá mới với dự báo (và thống kê nói chung), vì vậy tôi có thể bỏ qua điều gì đó quan trọng.


Chào mừng đến với trang web và dự báo! Các ứng dụng thế giới thực cho equispaced chỉ chuỗi thời gian được chắc chắn không phải rất hạn chế. Tôi tình cờ biết một chút về dự báo đi vào siêu thị của bạn có đủ sản phẩm để đáp ứng nhu cầu quảng cáo, và tôi tin rằng, hàng triệu chuỗi thời gian đó (20.000 SKU trong 1.000 cửa hàng là rất phổ biến) thực sự rất không thể thay thế. (Xin lỗi, nhưng bạn đã yêu cầu điều đó ...) Nhưng tôi sẽ cố gắng đưa ra một cái gì đó hữu ích hơn cho bạn trong một phút.
S. Kolassa - Tái lập Monica

2
Bạn có thể rõ ràng hơn về lý do tại sao dữ liệu trung tâm cuộc gọi không phải là không thể thay thế? (Có lẽ tôi đang hiểu nhầm ý của bạn là "không thể thay thế".) Các phương pháp dự báo trung tâm cuộc gọi mà tôi đã thấy thường kết hợp các cuộc gọi đến trong khoảng thời gian 15 phút, đáp ứng định nghĩa của tôi về "không thể thay thế". Sau đó, chúng tôi phải đối phó với tính thời vụ phức tạp (trong ngày hàng ngày, hàng tuần, hàng năm), với chủ đề này có thể giúp bạn: stats.stackexchange.com/questions/44704/. Điều này có trả lời câu hỏi của bạn không? Nếu không, chỉ cần cho chúng tôi những gì bạn cần.
S. Kolassa - Tái lập Monica

5
auto.arimacó thể xử lý các giá trị còn thiếu.
Rob Hyndman

1
Cảm ơn tất cả các ý kiến ​​xây dựng! Stephan, dữ liệu của tôi không thể thay thế theo hai cách: 1. Nhiều trung tâm cuộc gọi chỉ đóng cửa vào thứ bảy và chủ nhật. Một số đóng cửa chỉ vào Chủ nhật. Vì vậy, không gian "bình thường" giữa hai điểm dữ liệu liền kề là một ngày, ngoại trừ từ Thứ Sáu đến Thứ Hai, là ba ngày. Vì vậy, không gian không bằng nhau, tức là không thể thay thế. Thứ hai, có thể chỉ có dữ liệu bị thiếu ngẫu nhiên ở đâu đó vì họ chỉ quên bật thiết bị đo của mình vào ngày hôm đó hoặc bất cứ điều gì. Tôi hy vọng điều đó làm cho quan điểm của tôi rõ ràng.
entreprogreur

1
Chỉ là một suy nghĩ (khiêu khích). Nếu bạn nói các trung tâm cuộc gọi sẽ đóng cửa vào cuối tuần. Sau đó, bạn không có dữ liệu thiếu. Chuỗi thời gian của bạn kéo dài Mo-Fr. 5 ngày. khá bình đẳng. Nội suy những ngày cuối tuần đối với tôi chính thức là sai, vì bạn biết rằng không có cuộc gọi nào xảy ra và bất kỳ thông tin nào bạn cho là sai. Tôi sẽ lập luận rằng bạn không bao giờ có thể cải thiện ước tính bằng cách phát minh ra dữ liệu ...
có nghĩa là

Câu trả lời:


1

Tôi không phải là chuyên gia về R nên có thể có một cách đơn giản hơn nhưng tôi đã bắt gặp điều này trước đây. Những gì tôi đã làm trước đây là thực hiện một chức năng đo khoảng cách (tính theo đơn vị thời gian) giữa các ngày thực tế và lưu nó trong một cột mới trong chuỗi thời gian hiện tại. Vì vậy, chúng tôi có một cái gì đó như:

index/date | value | distance  
01.01.2011 |  15   |   1  
02.01.2011 |  17   |   3  
05.01.2011 |  22   |   ..   

Bằng cách này, nếu chuỗi thời gian của bạn chưa được liên kết với một chuỗi điểm thực tế theo thời gian (hoặc định dạng sai hoặc bất cứ điều gì), thì bạn vẫn có thể làm việc với nó.

Tiếp theo, bạn viết một hàm tạo chuỗi thời gian mới cho bạn, như vậy:

Đầu tiên, bạn tính toán bao nhiêu đơn vị thời gian mà chuỗi thời gian thực sự sẽ có giữa các ngày bạn chọn và tạo dòng thời gian đó trong sở thú hoặc ts hoặc bất cứ lựa chọn nào có giá trị trống.

Thứ hai, bạn lấy mảng chuỗi thời gian chưa hoàn thành của mình và sử dụng vòng lặp, điền các giá trị vào dòng thời gian chính xác, theo giới hạn bạn chọn. Khi bạn gặp một hàng trong đó khoảng cách đơn vị không phải là một (ngày (đơn vị) bị thiếu), bạn điền vào các giá trị nội suy.

Bây giờ, vì đây là chức năng của bạn, bạn thực sự có thể chọn cách nội suy. Ví dụ: bạn quyết định rằng nếu khoảng cách nhỏ hơn hai đơn vị, bạn sử dụng phép nội suy tuyến tính tiêu chuẩn. Nếu một tuần bị thiếu, bạn sẽ làm một cái gì đó khác và nếu đạt đến một ngưỡng thiếu ngày nhất định, bạn đưa ra cảnh báo về dữ liệu - thực sự là bất cứ điều gì bạn muốn tưởng tượng.

Nếu vòng lặp đến ngày kết thúc, bạn trả lại ts mới.

Ưu điểm của chức năng như vậy là bạn có thể sử dụng các phép nội suy hoặc quy trình xử lý khác nhau tùy thuộc vào độ dài của khoảng cách và trả về một chuỗi tạo sạch theo định dạng bạn chọn. Sau khi viết, nó cho phép bạn thu được ts sạch và đẹp từ bất kỳ loại dữ liệu dạng bảng nào. Hy vọng điều này sẽ giúp bạn bằng cách nào đó.


Cảm ơn, IMA, vì câu trả lời hữu ích! Vì vậy, những gì tôi đang làm bây giờ: đối với các giá trị bị thiếu rời rạc, tôi sử dụng phép nội suy (cũng như "điều chỉnh" do người dùng cung cấp) để điền vào dữ liệu bị thiếu. IMA, câu trả lời của bạn trong việc tăng cường hơn nữa rất hữu ích. Đối với dữ liệu bị thiếu "thông thường" như cuối tuần, tôi chuyển đổi dữ liệu của mình thành giây, "giả" chỉ nhằm mục đích dự báo và sau đó chuyển kết quả trở lại chuỗi thời gian "chính xác", do đó, dự báo cũng sẽ bị thiếu giá trị vào ngày cuối tuần. Tôi vẫn sẽ biết ơn về một gợi ý thanh lịch hơn về cách xử lý các "khoảng trống" thường xuyên vào cuối tuần.
entreprogreur

@entreprogreur, tôi không trả lời, IMA đã làm. IMA nhận được tín dụng đầy đủ ở đây. Tôi chỉ điều chỉnh định dạng để nó sẽ hiển thị độc đáo.
gung - Phục hồi Monica

1

Bạn nên rất cẩn thận khi áp dụng phép nội suy trước khi điều trị thống kê thêm. Sự lựa chọn bạn thực hiện cho phép nội suy của bạn đưa ra sự thiên vị vào dữ liệu của bạn. Đây là điều bạn chắc chắn muốn tránh, vì nó có thể làm thay đổi chất lượng dự đoán của bạn. Theo ý kiến ​​của tôi đối với các giá trị bị thiếu như những giá trị bạn đã đề cập, thường được đặt cách nhau theo thời gian và tương ứng với việc dừng hoạt động, có thể đúng hơn khi loại bỏ những ngày này ra khỏi mô hình của bạn. Trong thế giới nhỏ bé của trung tâm cuộc gọi của bạn (mô hình bạn đang xây dựng về nó), có thể tốt hơn để xem xét rằng thời gian chỉ dừng lại khi nó đóng cửa thay vì phát minh ra các phép đo của một hoạt động không tồn tại. Mặt khác, mô hình ARIMA đã được xây dựng theo thống kê dựa trên giả định rằng dữ liệu có khoảng cách đều nhau. Theo như tôi biết thì không có sự thích ứng của ARIMA với trường hợp của bạn. Nếu bạn chỉ thiếu một vài phép đo vào ngày làm việc thực tế, bạn có thể buộc phải sử dụng phép nội suy.


0

Tôi sẽ không nội suy dữ liệu trước khi ước tính mô hình trên dữ liệu này, như @Remi lưu ý. Đó là một ý tưởng tồi. Một ví dụ cực đoan: hãy tưởng tượng bạn có hai điểm dữ liệu vào tháng 1 năm 2013 và tháng 1 năm 2014. Bây giờ nội suy 10 điểm hàng tháng ở giữa: Tháng 2 đến tháng 12 năm 2013 và chạy hồi quy vào ngày hàng tháng. Trong thực tế, nó sẽ không tệ như vậy, nhưng đó là cùng một ý tưởng: bạn sẽ làm tăng số liệu thống kê của mình một cách tốt nhất.

Cách để đi là sử dụng các phương pháp chuỗi thời gian xử lý dữ liệu bị thiếu. Ví dụ, các phương thức không gian trạng thái. Hãy xem gói astsa R. Nó đi kèm với một cuốn sách tuyệt vời về phân tích chuỗi thời gian. Điều này sẽ xử lý dữ liệu bị thiếu độc đáo. Matlab hiện có chức năng tương tự trong gói ssm . Bạn phải học cách chuyển đổi mô hình của mình thành dạng không gian trạng thái, nhưng bạn phải học cách này nếu bạn muốn tránh xa auto.arima"ma thuật".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.