Introducing Flint: A Time-Series Library for Apache Spark

Bài tóm tắt Two Sigma 2018 2. Tăng trưởng Độ khó: Trung bình

Two Sigma · 2018 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Dữ liệu tăng tới mức giải pháp một máy không còn đủ; Spark đã thành chuẩn cho big data, nhưng thiếu các thao tác chuỗi thời gian mà nghiên cứu cần.
  • Phân tích chuỗi thời gian gồm xử lý (làm sạch, biến dữ liệu thành feature: join theo thời gian, cửa sổ, đổi tần suất, điền giá trị thiếu) và mô hình hoá (ARIMA, hồi quy…). Flint chỉ lo phần xử lý.

Thay đổi chính

  • Flint, lấy cảm hứng từ một thư viện nội bộ của Two Sigma, mở mã nguồn (Maven, PyPI). API chính là Python: TimeSeriesDataFrame mở rộng DataFrame của PySpark.
  • Asof join: join theo thời gian với khớp không chính xác trong một dung sai (ví dụ "1 ngày"); leftJoin nhìn về quá khứ, futureLeftJoin nhìn về tương lai. Dùng cho dữ liệu khác tần suất hoặc timestamp lệch.
  • Cycle (các dòng cùng timestamp): addColumnsForCycle chạy hàm Pandas trên từng cycle, ví dụ xếp hạng hay biến đổi Box-Cox cắt ngang các tài sản tại cùng thời điểm.
  • Summarizer theo toàn bảng, theo cycle, theo khoảng, theo cửa sổ, cộng dồn (ví dụ max drawdown). summarizeWindows không cần partition key nên xử lý được một chuỗi thời gian lớn duy nhất (khác rolling window của Spark SQL).
  • Ví dụ: lợi suất ngày của S&P 500, hỏi "lợi suất hôm qua có dự báo hôm nay không". Self-join bị null vào thứ Hai vì cuối tuần không có dữ liệu; đặt dung sai 3 ngày để thứ Hai nối với thứ Sáu. Tạo feature theo cửa sổ rồi fit hồi quy tuyến tính bằng Spark ML.

Vì sao

  • Theo Two Sigma, trong nghiên cứu nội bộ đã có nhiều ca dùng Flint để scale phân tích chuỗi thời gian. Họ định làm việc với cộng đồng Spark và tích hợp Catalyst/Tungsten để nhanh hơn.

Bài học cho SWE

  • Chuỗi thời gian tài chính cần những phép join "gần đúng theo thời gian" và phép tính cắt ngang tại cùng thời điểm mà engine SQL thường không có sẵn.
  • Asof join có hướng (chỉ nhìn quá khứ) là cách tránh dùng thông tin tương lai khi tạo feature.
  • Một thư viện nội bộ đã chứng minh giá trị có thể được tách ra thành mã nguồn mở trên nền phổ biến (Spark).

Liên quan