Phân loại chuỗi thời gian - kết quả rất kém


11

Tôi đang giải quyết vấn đề phân loại chuỗi thời gian trong đó đầu vào là dữ liệu sử dụng giọng nói theo chuỗi thời gian (tính bằng giây) trong 21 ngày đầu tiên của tài khoản điện thoại di động. Biến mục tiêu tương ứng là liệu tài khoản đó có bị hủy trong phạm vi 35-45 ngày hay không. Vì vậy, nó là một vấn đề phân loại nhị phân.

Tôi đang nhận được kết quả rất kém từ tất cả các phương pháp mà tôi đã thử cho đến nay (ở các mức độ khác nhau). Đầu tiên tôi đã thử phân loại k-NN (với nhiều sửa đổi khác nhau) và nhận được kết quả cực kỳ tồi tệ. Điều này dẫn tôi trích xuất các tính năng từ chuỗi thời gian - nghĩa là trung bình, phương sai, tối đa, tối thiểu, tổng số ngày không, tổng số ngày không, khác biệt giữa trung bình nửa đầu và trung bình nửa thứ hai, v.v. và các tính năng dự đoán nhất dường như là tổng số số không ngày và tổng số ngày không (sử dụng một số thuật toán phân loại). Điều này thực hiện tốt nhất nhưng hiệu suất vẫn không được tốt lắm.

Chiến lược tiếp theo của tôi là vượt qua các trường hợp tiêu cực trong tập huấn luyện của tôi vì có rất ít trong số đó. Điều này dẫn đến dự đoán hủy bỏ chính xác hơn nhưng với chi phí cho nhiều kết quả sai.

Tôi bắt đầu nghĩ rằng có lẽ chính dữ liệu sử dụng chuỗi thời gian chỉ đơn giản là không mang tính dự đoán (mặc dù thông thường nói rằng nó nên như vậy). Có lẽ có một số biến tiềm ẩn mà tôi không xem xét. Nhìn vào dữ liệu cũng cho thấy một số hành vi kỳ lạ. tức là một số ví dụ cho thấy rất ít hoặc giảm mức sử dụng (hoặc đôi khi không có gì cả) và không hủy bỏ, và một số ví dụ cho thấy sự gia tăng trong việc sử dụng mà hủy bỏ. Có lẽ hành vi mâu thuẫn này không tạo ra ranh giới quyết định rất rõ ràng cho một bộ phân loại.

Một nguồn có thể có lỗi khác là thực tế là nhiều ví dụ đào tạo rất thưa thớt (tức là nhiều ngày với 0 lần sử dụng). Một ý tưởng mà tôi chưa thử là chia chuỗi thời gian thành các phân đoạn và tạo ra một số tính năng theo cách đó, nhưng tôi không có hy vọng cao.


1
Để bắt đầu, tôi khuyên bạn nên thử các biến thể của sau.1. Tổng hợp dữ liệu sử dụng theo giờ / ngày. 2. Từ dữ liệu đào tạo của bạn, các ô che phủ của các chuỗi thời gian này để xem các mẫu trong hai nhóm. 3. Khám phá các mô hình chuỗi thời gian / hồi quy khác nhau phù hợp với dữ liệu của bạn. 4. Sử dụng các hệ số mô hình làm các tính năng cho trình phân loại của bạn.
ramhiser

Tôi thích kỹ thuật trích xuất tính năng của bạn. Tôi sẽ thử nó. Tôi đã bị thuyết phục rằng dữ liệu của tôi quá thưa thớt để tìm các mẫu, nhưng ai biết được. Cảm ơn!
dùng1893354

Câu trả lời:


13

Tôi đã thành công khá tốt khi áp dụng KNN với độ cong thời gian động làm thước đo khoảng cách.

Nghiên cứu của tôi (pdf) cho thấy phương pháp này rất khó đánh bại. Sơ đồ dưới đây là từ triển khai KNN và DTW python của tôi trên github . Hoặc xem trong IPython Notebook

KNN và DTW

Nếu tập dữ liệu đào tạo của bạn rất lớn, tôi khuyên bạn nên thực hiện phân cụm theo cấp bậc của ma trận khoảng cách. Sau đó lấy mẫu từ các cụm mong muốn để tạo ra tập dữ liệu đào tạo nhỏ hơn của bạn. Các hclustsẽ đảm bảo bạn có chuỗi thời gian đại diện cho một loạt các đặc điểm chuỗi thời gian trong dữ liệu của bạn.


4
Bạn có thể cập nhật các liên kết đến bài nghiên cứu của bạn?
cá rô phi


10

Hai cách tiếp cận để phân loại chuỗi thời gian

Có hai cách về cách xử lý đầu vào có cấu trúc tạm thời cho các nhiệm vụ phân loại:

  1. Mô hình chuỗi thời gian chuyên dụng: Thuật toán học máy kết hợp trực tiếp chuỗi thời gian. Tôi đếm KNN với mô hình DTW trong danh mục này.
  2. Cách tiếp cận dựa trên tính năng: Ở đây chuỗi thời gian được ánh xạ sang biểu diễn khác, có thể là chiều thấp hơn. Điều này có nghĩa là thuật toán trích xuất tính năng tính toán các đặc điểm như giá trị trung bình hoặc tối đa của chuỗi thời gian. Các tính năng sau đó được truyền dưới dạng ma trận tính năng cho máy học "bình thường" như mạng thần kinh, rừng ngẫu nhiên hoặc máy vectơ hỗ trợ. Cách tiếp cận này có lợi thế về khả năng giải thích tốt hơn về kết quả. Hơn nữa nó cho phép chúng tôi sử dụng một lý thuyết phát triển tốt về học máy có giám sát.

Tôi cũng đã triển khai KNN thành công với DTW trong quá khứ. Tuy nhiên, tôi gần như luôn có thể đánh bại độ chính xác của nó bằng một mô hình sử dụng các tính năng được thiết kế tốt. Ngoài ra, KNN với DTW cho thang phân loại nhị phân với O (n_t · m_ {train} · m_ {test}) với n_t là độ dài của chuỗi thời gian, mtrain và mtest lần lượt là số lượng thiết bị trong bộ kiểm tra và thử nghiệm . Điều này có nghĩa là các tính toán mất khá nhiều thời gian ..

Do đó, tôi khuyên bạn nên theo đuổi một cách tiếp cận dựa trên tính năng.

tsfresh tính toán một số lượng lớn các tính năng

Gói tsfresh của python tính toán một số lượng lớn các tính năng như vậy từ một pandas.DataFrame chứa chuỗi thời gian. Bạn có thể tìm thấy tài liệu của nó tại http://tsfresh.readthedocs.io .

nhập mô tả hình ảnh ở đây

Bạn có thể thử nó để tính toán một lượng lớn các tính năng. Sau đó, bạn có thể lọc các tính năng cho tầm quan trọng của chúng và xác định các ứng cử viên đầy triển vọng.

Tuyên bố miễn trừ trách nhiệm: Tôi là một trong những tác giả của tsfresh.


Cảm ơn rất nhiều cho bài viết tuyệt vời của bạn. Tôi có một chuỗi thời gian thực sự nhỏ (ví dụ: 10 điểm dữ liệu trên mỗi chuỗi thời gian). Trong trường hợp đó, bạn có khuyên bạn nên sử dụng tsfresh cho tập dữ liệu của tôi không? Cảm ơn bạn :)
EmJ
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.