paint-brush
Đơn giản hóa kỹ thuật tính năng cho AI/ML thời gian thựctừ tác giả@datastax
146 lượt đọc

Đơn giản hóa kỹ thuật tính năng cho AI/ML thời gian thực

từ tác giả DataStax9m2023/07/06
Read on Terminal Reader

dài quá đọc không nổi

Minh họa cách "dòng thời gian" giúp thể hiện các truy vấn thời gian đối với các sự kiện và quan trọng là giữa các sự kiện không chỉ dễ dàng mà còn trực quan.
featured image - Đơn giản hóa kỹ thuật tính năng cho AI/ML thời gian thực
DataStax HackerNoon profile picture
0-item


Khi phát triển các tính năng cho các ứng dụng AI/ML thời gian thực, điều quan trọng là phải hiểu các mẫu dựa trên thời gian trong dữ liệu của bạn, vì nó có thể tiết lộ những hiểu biết có giá trị. Tuy nhiên, thể hiện các truy vấn thời gian có thể đặt ra những thách thức. Chỉ cần hình dung khả năng dễ dàng phân tích hành vi của người dùng theo thời gian, thực hiện các phép nối thời gian chính xác và kiểm tra các mẫu hoạt động giữa các sự kiện khác nhau—tất cả trong khi vẫn duy trì khả năng xử lý thời gian trực quan và liền mạch. Đây là nơi các mốc thời gian, một khái niệm trừu tượng cấp cao để làm việc với dữ liệu tạm thời, có thể chứng minh là vô giá


Trong bài viết này, chúng ta sẽ đi sâu vào thế giới của các mốc thời gian. Chúng tôi sẽ chứng minh cách họ thực hiện các truy vấn tạm thời về các sự kiện và quan trọng là giữa các sự kiện, không chỉ dễ dàng mà còn trực quan. Bài viết này là bài thứ hai trong loạt bài viết về Kaskada , một công cụ xử lý sự kiện nguồn mở được thiết kế dựa trên sự trừu tượng hóa dòng thời gian. chúng tôi trước đây giới thiệu dòng thời gian , một trừu tượng cấp cao để làm việc với dữ liệu tạm thời. Các mốc thời gian tổ chức dữ liệu dựa trên sự kiện theo thời gian và thực thể, giúp có thể suy luận về bối cảnh xung quanh các sự kiện. Thể hiện các truy vấn tạm thời bằng cách sử dụng các mốc thời gian có một số lợi ích:


  • Trực quan Vì các mốc thời gian được sắp xếp theo thời gian nên các truy vấn cũng hoạt động theo thứ tự là điều tự nhiên. Theo thời gian, các sự kiện bổ sung – đầu vào – xảy ra và được phản ánh trong đầu ra của truy vấn. Cách suy nghĩ này về tính toán – khi tiến triển theo thời gian – là trực quan vì nó phù hợp với cách chúng ta quan sát các sự kiện.


  • Khai báo Các hoạt động tạm thời - như cửa sổ và dịch chuyển - được khai báo rõ ràng khi làm việc với các mốc thời gian vì thời gian là một phần của sự trừu tượng hóa.


  • Có thể kết hợp Mọi hoạt động đều có các mốc thời gian và tạo ra các mốc thời gian, nghĩa là các hoạt động có thể được xâu chuỗi khi cần thiết để tạo ra kết quả như mong muốn.


Dưới đây, chúng ta sẽ phân tích bốn ví dụ thực tế chứng minh lợi ích của các mốc thời gian. Chúng ta sẽ bắt đầu với một truy vấn đơn giản để tổng hợp và dần dần giải quyết các cửa sổ thời gian phức tạp hơn, cửa sổ phụ thuộc vào dữ liệu và các phép nối chính xác theo thời gian. Cuối cùng, bạn sẽ hiểu sâu về cách các mốc thời gian giúp việc viết các truy vấn tạm thời đơn giản trở nên đơn giản như SQL và cách chúng trao quyền cho chúng ta thực hiện các câu hỏi khó hơn.


Tổng quan nội dung

  • Tổng chi tiêu: Tổng hợp tích lũy.
  • Chi tiêu hàng tháng: Cửa sổ tạm thời
  • Lượt xem trang giữa các lần mua hàng
  • Phần kết luận


Tổng chi tiêu: Tổng hợp tích lũy

Các mốc thời gian hỗ trợ mọi thứ bạn có thể làm trong SQL , được mở rộng một cách trực quan để hoạt động theo thời gian. Trước khi xem xét một số khả năng mới cho các truy vấn thời gian phức tạp, chúng ta hãy xem xét một cái gì đó đơn giản – một tập hợp. Viết các truy vấn đơn giản thật dễ dàng: trên thực tế, bởi vì các mốc thời gian được sắp xếp theo thời gian và được nhóm theo thực thể, chúng có thể còn dễ dàng hơn cả trong SQL!


Hãy xem xét câu hỏi, mỗi người dùng đã chi bao nhiêu tiền? Khi nghĩ về điều này qua các sự kiện, việc xử lý các giao dịch mua theo thứ tự, cập nhật số tiền mà mỗi người dùng đã chi tiêu theo thời gian là điều tự nhiên. Kết quả là một tổng tích lũy tạo ra một dòng thời gian liên tục.





Truy vấn tương ứng được hiển thị bên dưới được viết theo hai cách tương đương. Câu đầu tiên nhấn mạnh số tiền được áp dụng cho các giao dịch mua trong khi câu thứ hai nhấn mạnh chuỗi hoạt động mà chúng tôi đã soạn thảo – “lấy số mua rồi áp dụng tổng”. Từ giờ trở đi, chúng tôi sẽ sử dụng cái sau vì nó phù hợp hơn với cách chúng tôi có xu hướng nghĩ về các mốc thời gian xử lý.



sum(Purchases.amount)

#OR

Purchases.amount | sum()


Viết các truy vấn thời gian đơn giản với các mốc thời gian dễ dàng như SQL. Xử lý các sự kiện theo thứ tự là một cách vận hành trực quan theo thời gian. Tất nhiên, tổng hợp tất cả các sự kiện chỉ là một cách mà chúng ta có thể muốn tổng hợp mọi thứ. Trong ví dụ tiếp theo, chúng ta sẽ xem cách mở rộng truy vấn này bằng cách sử dụng các cửa sổ tạm thời để tập trung vào các sự kiện gần đây.


Chi tiêu hàng tháng: Cửa sổ tạm thời

Khi nghĩ về các truy vấn thời gian, việc đặt câu hỏi về quá khứ gần đây là điều rất tự nhiên: từ đầu năm đến nay hoặc 30 ngày qua. Trực giác xử lý các sự kiện theo thứ tự gợi ý trả lời câu hỏi “Mỗi người dùng đã chi tiêu bao nhiêu trong tháng này” chỉ cần đặt lại giá trị vào đầu mỗi tháng. Và trực giác này chính xác là cách các loại cửa sổ thời gian này hoạt động với các mốc thời gian.




Truy vấn thời gian được hiển thị bên dưới. Nó chỉ ra rõ ràng ý định mà chúng tôi đã trình bày ở trên – thực hiện các giao dịch mua và tổng hợp chúng kể từ đầu mỗi tháng.


Purchases.amount

| sum(window=since(monthly()))


Bởi vì thời gian vốn dĩ là một phần của mọi dòng thời gian, nên mọi tập hợp đều có thể hoạt động trong các cửa sổ thời gian. Trong ví dụ tiếp theo, chúng ta sẽ thấy việc làm việc với các truy vấn phức tạp hơn dễ dàng như thế nào, bao gồm các tập hợp với các cửa sổ phức tạp hơn.


Lượt xem trang giữa các lần mua hàng

Không phải tất cả các cửa sổ đều được xác định theo thời gian. Việc sử dụng các sự kiện để xác định các cửa sổ được sử dụng để tổng hợp thường rất hữu ích. Ngoài ra, mặc dù tất cả các ví dụ cho đến nay đều hoạt động trên một loại sự kiện duy nhất - purchases - nhưng việc kiểm tra các mẫu hoạt động giữa các sự kiện khác nhau là rất quan trọng để xác định mối quan hệ nhân quả.


Trong ví dụ này, chúng ta sẽ tận dụng các mốc thời gian để khai báo các truy vấn diễn đạt bằng cách sử dụng các cửa sổ do dữ liệu xác định và nhiều loại sự kiện. Chúng tôi cũng sẽ lọc một dòng thời gian trung gian đến các điểm cụ thể để kiểm soát các giá trị được sử dụng trong các bước sau trong khi soạn truy vấn.


Câu hỏi mà chúng tôi sẽ trả lời là "Số lượt xem trang trung bình giữa mỗi lần mua cho mỗi người dùng là bao nhiêu?" Trước tiên, chúng tôi sẽ tính toán số lượt xem trang kể từ lần mua cuối cùng, quan sát chúng tại thời điểm mỗi lần mua và sau đó lấy giá trị trung bình.


Cửa sổ xác định dữ liệu

Điều đầu tiên chúng ta sẽ làm là tính số lượt xem trang kể từ lần mua cuối cùng. Trong ví dụ trước, chúng tôi đã có cửa sổ kể từ đầu tháng. Nhưng không có gì đặc biệt về dòng thời gian xác định thời điểm bắt đầu của một tháng – chúng ta có thể tạo cửa sổ với bất kỳ dòng thời gian nào khác.



PageViews

| count(window=since(is_valid(Purchases)))




Ngoài cửa sổ do dữ liệu xác định, chúng tôi thấy cách làm việc với nhiều loại sự kiện. Bởi vì mọi dòng thời gian được sắp xếp theo thời gian và được nhóm theo thực thể, mọi dòng thời gian có thể được sắp xếp theo thời gian và tham gia theo thực thể – một cách tự động.


Quan sát vào những thời điểm cụ thể

Bước trước đó đã cung cấp cho chúng tôi lượt xem trang kể từ lần mua cuối cùng. Nhưng đó là một dòng thời gian liên tục tăng lên ở mỗi lần xem trang cho đến lần mua hàng tiếp theo. Chúng tôi đang theo dõi một dòng thời gian riêng biệt với một giá trị duy nhất tại thời điểm mỗi lần mua đại diện cho các lượt xem trang kể từ lần mua trước đó. Để làm điều này, chúng tôi sử dụng thao tác when , cho phép quan sát – và nội suy nếu cần – một dòng thời gian tại các thời điểm cụ thể.




Thao tác khi có thể được sử dụng ở bất kỳ đâu trong truy vấn tạm thời và cho phép lọc các điểm có trong đầu ra – hoặc được chuyển đến các tập hợp sau này.


Tập hợp lồng nhau

Với số lần xem trang giữa các lần mua hàng được tính toán, giờ đây chúng tôi có thể tính giá trị trung bình của giá trị này. Tất cả những gì chúng ta cần làm là sử dụng tập hợp mean .




Đặt nó lại với nhau

Truy vấn hoàn chỉnh được hiển thị bên dưới. Chúng tôi thấy các bước phù hợp với các bước hợp lý mà chúng tôi đã nói ở trên. Mặc dù logic tương đối phức tạp, nhưng truy vấn tương đối đơn giản và nắm bắt được ý tưởng của chúng tôi về những gì chúng tôi muốn tính toán – có thể đưa ra các câu hỏi khó.


PageViews

| count(window=since(is_valid(Purchases)))

| when(is_valid(Purchases))

| mean()


Loại truy vấn này có thể được khái quát hóa để phân tích nhiều mẫu khác nhau trong hoạt động xem trang. Có thể chúng tôi chỉ muốn xem xét lượt xem trang cho mục được xem thường xuyên nhất hơn là tất cả các mục, tin rằng người dùng đang trở nên tập trung hơn vào mục đó. Có lẽ chúng tôi muốn tính sổ kể từ khi mua cùng một mặt hàng, hơn là bất kỳ giao dịch mua nào.


Truy vấn này cho thấy một số cách các mốc thời gian cho phép thể hiện các truy vấn thời gian phức tạp:


  1. Thứ tự cho phép các cửa sổ được xác định bằng dấu phân cách của chúng – khi chúng bắt đầu và kết thúc – thay vì phải tính toán “ID cửa sổ” từ mỗi giá trị để nhóm.


  2. Đặt hàng cũng cho phép sử dụng nhiều mốc thời gian trong cùng một biểu thức – trong trường hợp này là pageviewspurchases .


  3. Tính liên tục cho phép các giá trị được nội suy tại các thời điểm tùy ý và được lọc bằng cách sử dụng thao tác when .


  4. Khả năng kết hợp cho phép sử dụng kết quả của bất kỳ thao tác nào với các thao tác sau này để diễn đạt các câu hỏi về thời gian. Điều này cho phép các câu hỏi phức tạp được thể hiện dưới dạng một chuỗi các thao tác đơn giản.


Những khả năng này cho phép xác định các mẫu nguyên nhân và kết quả. Mặc dù việc mua hàng bây giờ có thể khiến tôi mua hàng sau, nhưng các sự kiện khác thường có mối quan hệ mạnh mẽ hơn – ví dụ: hết băng và mua thêm hoặc lên lịch cho một chuyến đi cắm trại và dự trữ. Có thể xem hoạt động ( pageviews ) trong một cửa sổ được xác định bởi các sự kiện khác ( purchases ) là điều quan trọng để hiểu mối quan hệ giữa các sự kiện đó.


Điểm đánh giá tối thiểu

Chúng ta đã thấy cách dòng thời gian cho phép làm việc với nhiều loại sự kiện được liên kết với cùng một thực thể. Nhưng nó cũng thường cần thiết để làm việc với nhiều thực thể. Chẳng hạn, sử dụng thông tin về toàn bộ dân số để chuẩn hóa các giá trị cho mỗi người dùng. Ví dụ cuối cùng của chúng tôi sẽ chỉ ra cách làm việc với nhiều thực thể và thực hiện nối tạm thời.


Câu hỏi cuối cùng mà chúng tôi sẽ trả lời là “Điểm (điểm) đánh giá sản phẩm trung bình tối thiểu tại thời điểm mỗi lần mua hàng là bao nhiêu?” Để thực hiện điều này, trước tiên chúng tôi sẽ làm việc với các bài đánh giá được liên kết với từng sản phẩm để tính điểm trung bình, sau đó chúng tôi sẽ kết hợp từng giao dịch mua với bài đánh giá trung bình tương ứng.


Thay đổi thực thể

Để bắt đầu, chúng tôi muốn tính toán đánh giá sản phẩm trung bình (điểm) cho từng mặt hàng. Vì các bài đánh giá hiện được nhóm theo người dùng nên chúng tôi sẽ cần nhóm lại chúng theo mục, sử dụng thao tác phím with. Khi chúng tôi đã hoàn thành việc đó, chúng tôi có thể sử dụng tập hợp trung bình mà chúng tôi đã thấy.




Tra cứu giữa các thực thể

Đối với mỗi giao dịch mua (được nhóm theo người dùng), chúng tôi muốn tra cứu điểm đánh giá trung bình của mặt hàng tương ứng. Điều này sử dụng các hoạt động lookup .





Đặt nó lại với nhau

Đặt tất cả lại với nhau, chúng tôi sử dụng tra cứu với tổng hợp min để xác định xếp hạng trung bình tối thiểu của các mặt hàng được mua bởi mỗi người dùng.


Reviews.score

| with_key(Reviews.item)

| mean()

| lookup(Purchases.item)

| min()


Mô hình nhóm lại thành một thực thể khác, thực hiện tổng hợp và tra cứu giá trị (hoặc chuyển trở lại các thực thể ban đầu) là phổ biến trong các tác vụ xử lý dữ liệu. Trong trường hợp này, giá trị kết quả được tra cứu và sử dụng trực tiếp. Trong các trường hợp khác, nó hữu ích cho việc chuẩn hóa – chẳng hạn như liên hệ giá trị của mỗi người dùng với giá trị trung bình trong thành phố của họ.


Việc sắp xếp thứ tự và nhóm cho phép các mốc thời gian thể hiện rõ ràng các hoạt động giữa các thực thể khác nhau. Kết quả tra cứu là từ thời điểm mà việc tra cứu được thực hiện. Điều này cung cấp một phép nối “as-of” đúng về mặt thời gian.


Thực hiện phép nối vào đúng thời điểm là rất quan trọng để tính toán các ví dụ đào tạo trong quá khứ có thể so sánh với các giá trị tính năng được sử dụng khi áp dụng mô hình. Tương tự, nó đảm bảo rằng mọi trang tổng quan, trực quan hóa hoặc phân tích được thực hiện trên kết quả của truy vấn đều thực sự chính xác như thể chúng đang xem xét các giá trị trong quá khứ, thay vì sử dụng thông tin không có sẵn tại thời điểm đó.


Phần kết luận

Chúng tôi đã chứng minh sức mạnh của các mốc thời gian dưới dạng trừu tượng cấp cao để xử lý dữ liệu tạm thời. Thông qua các hoạt động trực quan, khai báo và có thể tổng hợp, chúng tôi đã chỉ ra cách các mốc thời gian cho phép biểu đạt hiệu quả các truy vấn tạm thời về các sự kiện và giữa các sự kiện. Với các ví dụ từ tập hợp đơn giản đến các truy vấn phức tạp như cửa sổ phụ thuộc vào dữ liệu và phép nối chính xác theo thời gian, chúng tôi đã minh họa cách các hoạt động dòng thời gian có thể được xâu chuỗi để tạo ra kết quả mong muốn. Sức mạnh của các mốc thời gian nằm ở khả năng diễn đạt dễ dàng các câu hỏi đơn giản về thời gian và mở rộng một cách trực quan sang các truy vấn về thời gian phức tạp.


Từ tổng chi tiêu đến điểm đánh giá tối thiểu, chúng tôi đã xem xét bốn ví dụ minh họa làm nổi bật khả năng của các mốc thời gian trong truy vấn tạm thời. Chúng tôi đã khám phá tổng hợp tích lũy, cửa sổ thời gian và quan sát cách cửa sổ do dữ liệu xác định mang lại khả năng diễn đạt các câu hỏi phức tạp về thời gian. Chúng tôi cũng chỉ ra cách các mốc thời gian tạo điều kiện thuận lợi cho việc xử lý đa thực thể và liên kết tạm thời. Các ví dụ này cho thấy rằng với các mốc thời gian, bạn có một công cụ mạnh mẽ để xác định các mẫu nguyên nhân và kết quả và tính toán các ví dụ đào tạo có giá trị tương đối khi áp dụng một mô hình.


Sắp tới, chúng ta sẽ nghiên cứu sâu hơn về tính năng động của các truy vấn thời gian trên các mốc thời gian. Chúng ta sẽ khám phá cách các truy vấn này được thực hiện hiệu quả bằng cách tận dụng các thuộc tính của đường thời gian.\

Chúng tôi khuyến khích bạn bắt đầu viết các truy vấn tạm thời của riêng bạn ngay hôm nay và tham gia Cộng đồng Kaskada để biết thêm các cuộc thảo luận và hiểu biết sâu sắc về các mốc thời gian và các chủ đề xử lý dữ liệu khác.


Cũng được xuất bản ở đây.