Học máy - tính năng kỹ thuật từ dữ liệu ngày / giờ


45

Các thực tiễn phổ biến / tốt nhất để xử lý dữ liệu thời gian cho ứng dụng học máy là gì?

Ví dụ: nếu trong tập dữ liệu có một cột có dấu thời gian của sự kiện, chẳng hạn như "2014-05-05", làm thế nào bạn có thể trích xuất các tính năng hữu ích từ cột này nếu có?

Cảm ơn trước!

Câu trả lời:


44

Tôi sẽ bắt đầu bằng cách vẽ đồ thị biến thời gian so với các biến khác và tìm kiếm xu hướng.

Ví dụ

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

Trong trường hợp này, có một xu hướng hàng tuần định kỳ và xu hướng tăng dài hạn. Vì vậy, bạn sẽ muốn mã hóa hai biến thời gian:

  • day_of_week
  • absolute_time

Nói chung

Có một số khung thời gian phổ biến mà xu hướng xảy ra:

  • absolute_time
  • day_of_year
  • day_of_week
  • month_of_year
  • hour_of_day
  • minute_of_hour

Tìm kiếm xu hướng trong tất cả những điều này.

Xu hướng kỳ lạ

Tìm kiếm xu hướng kỳ lạ quá. Ví dụ, bạn có thể thấy các xu hướng dựa trên thời gian hiếm nhưng kéo dài:

  • is_easter
  • is_superbowl
  • is_national_emergency
  • etc.

Chúng thường yêu cầu bạn tham chiếu chéo dữ liệu của mình với một số nguồn bên ngoài ánh xạ các sự kiện theo thời gian.

Tại sao đồ thị?

Có hai lý do mà tôi nghĩ rằng đồ thị là rất quan trọng.

  • Xu hướng kỳ lạ
    Mặc dù các xu hướng chung có thể được tự động hóa khá dễ dàng (chỉ cần thêm chúng mỗi lần), các xu hướng kỳ lạ thường sẽ đòi hỏi con người và kiến ​​thức về thế giới để tìm thấy. Đây là một lý do mà đồ thị rất quan trọng.

  • Lỗi dữ liệu
    Tất cả dữ liệu quá thường xuyên có lỗi nghiêm trọng trong đó. Ví dụ: bạn có thể thấy rằng ngày được mã hóa theo hai định dạng và chỉ một trong số chúng được tải chính xác vào chương trình của bạn. Có vô số vấn đề như vậy và chúng rất phổ biến. Đây là lý do khác tôi nghĩ rằng đồ thị là quan trọng, không chỉ cho chuỗi thời gian, mà cho bất kỳ dữ liệu nào.


7

Chia dữ liệu vào các cửa sổ và tìm các tính năng cho các cửa sổ đó như hệ số tự tương quan, sóng con, v.v. và sử dụng các tính năng đó cho việc học.

Ví dụ: nếu bạn có dữ liệu về nhiệt độ và áp suất, hãy chia nhỏ nó thành các tham số riêng lẻ và tính toán các tính năng như số lượng cực tiểu cục bộ trong cửa sổ đó và các tính năng khác và sử dụng các tính năng này cho mô hình của bạn.


7

Một điều nữa cần xem xét, ngoài tất cả mọi thứ mà Ben Haley nói, là chuyển đổi sang giờ địa phương của người dùng . Ví dụ: nếu bạn đang cố gắng dự đoán điều gì đó xảy ra vào khoảng 8 giờ tối cho tất cả người dùng, nếu bạn nhìn vào thời gian UTC, sẽ khó dự đoán hơn.


6

Trong một số trường hợp, dữ liệu và sự kiện trong một chuỗi thời gian là theo mùa. Trong những trường hợp như vậy, tháng và năm của sự kiện rất nhiều. Do đó trong các kịch bản như vậy, bạn có thể sử dụng các biến nhị phân để thể hiện nếu sự kiện có trong một tháng / năm nhất định hay không.

Hy vọng điều này trả lời câu hỏi của bạn. Nếu không vui lòng cụ thể hơn một chút về chính xác những gì bạn đang cố gắng để đạt được


4

Như BenNar đã giải thích một cách độc đáo, việc chia nhỏ đối tượng thời gian thành các nhóm thời gian và thời gian sẽ giúp phát hiện các xu hướng theo mùa, trong đó đối tượng thời gian hoàn chỉnh (và thậm chí tệ hơn - duy nhất) sẽ bỏ lỡ nó

Bạn đã không đề cập đến bất kỳ thuật toán học máy cụ thể nào mà bạn quan tâm, nhưng trong trường hợp bạn cũng quan tâm đến việc phân cụm dựa trên khoảng cách, như phương tiện k, tôi sẽ khái quát hóa đối tượng thời gian theo định dạng thời gian không trộn lẫn . Điều này sẽ cho phép so sánh khoảng cách số đơn giản cho thuật toán, chỉ cần nêu rõ giá trị của 2 ngày là bao xa.

Trong ví dụ của bạn, tôi sẽ khái quát giá trị chỉ ngày 2014-05-05 đến 1399248000 (thời gian unix đại diện cho ngày bắt đầu của ngày 5 tháng 5 năm 2014, UTC).

[Người ta có thể lập luận rằng bạn có thể đạt được điều đó bằng cách kết hợp thời gian ngày vào mọi phần thời gian có thể .. nhưng điều đó sẽ làm tăng đáng kể kích thước tập dữ liệu của bạn. Vì vậy, tôi khuyên bạn nên kết hợp thời gian unix, để đo khoảng cách và một số nhóm thời gian ngày]


3

Ben đang nói về các tính năng tĩnh và sử dụng các tính năng dấu thời gian.

Là một phần mở rộng, tôi sẽ giới thiệu các tính năng lag , tôi không nói về chuỗi thời gian thô, mà là các tổng hợp trên đó.

Phần huyền bí nhất là giá trị tương lai không thể thấy được đối với chúng ta, làm thế nào chúng ta có thể sử dụng các tính năng tổng hợp đó trong dữ liệu đào tạo?

Một ví dụ nhỏ: Có dữ liệu tiêu thụ điện hàng năm từ 1991 đến 2015, tôi muốn dự đoán mức tiêu thụ điện trong 5 năm tới, 2016 đến 2020. Tôi sẽ tính trung bình 5 năm qua của mức tiêu thụ điện là giá trị tính năng của năm 2020, nhưng Năm 2016 đến 2020 là một ẩn số đối với chúng tôi, vì vậy chúng tôi dẫn đầu (ngược lại độ trễ) chuỗi thời gian 5 năm, cho phép thực hiện trung bình di chuyển vào năm 2010 đến 2015, sau đó sử dụng giá trị này làm giá trị tính năng của năm 2020. Vì vậy, chúng tôi có thể xây dựng dữ liệu tính năng trong 5 năm tới.

Bước tiếp theo chỉ là sử dụng chức năng di chuyển (tính \ mean \ median \ min \ max.etc) và thử các cửa sổ khác nhau, sau đó bạn sẽ xây dựng nhiều tính năng!


2

Tùy thuộc vào những gì bạn quan tâm với thông tin ngày / giờ, bạn có thể chỉ muốn gửi thông tin đó. Ví dụ: nếu bạn quan tâm đến khoảng cách từ điểm bắt đầu (ví dụ: ngày 1 tháng 1 năm 2015) và bạn muốn đo nó theo tháng, tôi sẽ chỉ mã nó là tháng 1 (cho ngày 1 tháng 1 năm 2015), 2 (1-28, 2015), 3, 4, 5, 6, v.v. Vì khoảng cách giữa các ngày bắt đầu gần bằng nhau, điều này thể hiện khoảng cách thời gian theo định dạng liên tục đơn giản. Và tôi nói liên tục vì bạn có thể nói tháng 6.5 và biết rằng đó là nửa tháng 6 năm 2015. Sau đó, bạn không phải lo lắng về mã hóa ngày thực tế và bạn có thể sử dụng tất cả các phương pháp phân loại điển hình của mình.

Nếu bạn muốn đo theo ngày, tôi biết MySql có chức năng 'to_day', nếu bạn tình cờ sử dụng điều đó để lấy dữ liệu trước khi phân loại. Python có thể có một cái gì đó tương tự, hoặc sử dụng định dạng unix-time được đề xuất bởi mork.

Hi vọng điêu nay co ich!


1

Vẽ đồ thị với các biến thể thời gian khác nhau so với biến kết quả để xem tác động của nó. Bạn có thể sử dụng tháng, ngày, năm làm các tính năng riêng biệt và vì tháng là biến phân loại, bạn có thể thử biểu đồ hộp / ria và xem có mẫu nào không. Đối với các biến số, bạn có thể sử dụng biểu đồ phân tán.


1

Tôi không biết đây có phải là cách làm phổ biến / tốt nhất không, nhưng đó là một quan điểm khác về vấn đề này.

Nếu bạn có, giả sử, một ngày, bạn có thể coi mỗi trường là "biến danh mục" thay vì "biến liên tục". Ngày sẽ có một giá trị trong tập {1, 2 ..., 31}, tháng sẽ có giá trị trong {1, ..., 12} và trong năm, bạn chọn giá trị tối thiểu và tối đa và xây dựng một bộ.

Sau đó, vì các giá trị số cụ thể của ngày, tháng và năm có thể không hữu ích cho việc tìm xu hướng trong dữ liệu, hãy sử dụng biểu diễn nhị phân để mã hóa các giá trị số, mỗi bit là một tính năng. Ví dụ: tháng 5 sẽ là 0 0 0 0 1 0 0 0 0 0 0 0(11 0 là vị trí 1 trên 5, mỗi bit là một tính năng).

Vì vậy, ví dụ, có 10 năm trong "bộ năm", một ngày sẽ được chuyển thành một vectơ gồm 43 tính năng (= 31 + 12 + 10). Sử dụng "vectơ thưa thớt", số lượng tính năng không phải là vấn đề.

Một cái gì đó tương tự có thể được thực hiện cho dữ liệu thời gian, ngày trong tuần, ngày trong tháng ...

Tất cả phụ thuộc vào câu hỏi bạn muốn mô hình học máy của bạn trả lời.


Điều này không nắm bắt được các mối quan hệ có thể tồn tại, như, ngày 14 và 15 của tháng là 'tương tự'. Trong phạm vi mà bạn tin rằng mỗi ngày là khác nhau theo nghĩa đen, bạn cũng tin rằng dự đoán về ngày mai là không thể. Nó cũng không cần thiết đối với các loại phân loại mã hóa nóng, không nhất thiết phải như vậy.
Sean Owen

Tôi không thể thấy lý do tại sao nó không chụp được "khoảng cách" của ngày gần. Nếu bạn, ví dụ, đưa vectơ nhị phân vào NN, nó sẽ tự tìm ra nó sau khi được đào tạo thích hợp. Sử dụng vectơ nhị phân chỉ là một cách để thể hiện các danh mục.
Paco Barter

Trong trường hợp này, bạn thực sự có các cột như "is_12th" và "is_13th", trong không gian đầu vào, không liên quan và không liên quan đến "is_1st", v.v. Là một tính năng liên tục, nó sẽ nắm bắt chính xác rằng ngày 12 và 13 trong một số ý nghĩa gần hơn so với 1 và 12 là. Bạn đang hấp dẫn với những gì một mô hình có thể suy ra, nhưng, tôi đang nói về những gì các tính năng đầu vào mã hóa.
Sean Owen

Ok, tôi hiểu rồi. Bạn nói đúng, một tính năng liên tục nắm bắt tốt hơn chất lượng "gần" của ngày. Quan điểm của tôi là có thể có xu hướng trong dữ liệu về giá trị số của ngày không liên quan (ví dụ: một mẫu khách hàng nhất định chỉ mua trong thứ bảy). Do đó cung cấp một quan điểm khác để đối phó với ngày.
Paco Barter ngày

Actuall như @PacoBarter đã nói, mã hóa một nóng bỏ qua khoảng cách khác nhau giữa các danh mục. Điều này không dễ giải quyết vì các tính năng này thực chất là thông tin pha, trong khi hầu hết các mô hình học máy không có đầu vào loại pha. Một số DIY về số liệu khoảng cách có thể làm mặc dù.
plpopk

0

Bối cảnh phản hồi của tôi : Cho đến nay đã có những phản hồi tuyệt vời. Nhưng, tôi muốn mở rộng cuộc trò chuyện bằng cách giả sử bạn đang nói về một ứng dụng học máy để dự đoán các giá trị trong tương lai của chuỗi thời gian cụ thể này. Với bối cảnh đó trong tâm trí, lời khuyên của tôi là dưới đây.

Lời khuyên : Trước tiên, hãy xem xét các chiến lược dự báo thống kê truyền thống (ví dụ: Làm mịn theo cấp số nhân, SARIMAX hoặc Hồi quy động) làm cơ sở cho hiệu suất dự đoán. Mặc dù học máy đã cho thấy nhiều hứa hẹn cho nhiều ứng dụng, nhưng trong nhiều lần, có những phương pháp thống kê thực sự đã được thử và có thể phục vụ bạn tốt hơn cho ứng dụng của bạn. Tôi sẽ thu hút sự chú ý của bạn vào hai bài viết gần đây:

  1. Phương pháp dự báo học máy và thống kê: Mối quan tâm và cách chuyển tiếp của Spyros Makridakis et al. Bài báo chỉ ra rằng trong nhiều chuỗi thời gian, phân tích chuỗi thời gian thống kê truyền thống vượt trội hơn các mô hình học máy (ML). Về bản chất, ML có xu hướng quá phù hợp và bất kỳ giả định mô hình ML nào liên quan đến các mục độc lập đều bị vi phạm.
  2. Dự báo phức tạp Versus đơn giản: Bằng chứng của Kesten C Green et al. Bài viết so sánh và kiểm tra đầu ra chuỗi thời gian của bài báo phân tích báo cáo bài báo phân tích chuỗi thời gian có và không so sánh với một loạt các mô hình. Để kết luận, các nhà nghiên cứu quá phức tạp hóa phân tích của họ với các mô hình khó diễn giải hơn và có hiệu suất kém hơn. Thông thường, điều này xảy ra vì cấu trúc khuyến khích kém.

Nếu bạn đang tìm kiếm hiệu suất tốt, hãy chọn một số liệu để so sánh với một số mô hình (ví dụ như MASE) và quét qua một số thống kê (tham khảo bên dưới) và mô hình học máy (với các chiến lược phát triển tính năng được đề cập ở trên).

Chúc mừng

Tài nguyên cho việc học Dự báo thống kê : Tôi sẽ bắt đầu bằng cách xem lại sách giáo khoa miễn phí của Rob J Hyndman tại đây: https://otexts.org/fpp2/ . Văn bản dựa trên gói R mà bạn có thể dễ dàng kết hợp vào phân tích của mình: https://otexts.org/fpp2/appcill-USE-r.html . Cuối cùng, xin vui lòng lưu ý về sự khác biệt giữa xác thực chéo chéo và xác thực chéo chuỗi thời gian như được giải thích tại đây: https://robjhyndman.com/hyndsight/tscv/ .

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.