Trường hợp trong quy trình làm việc chúng ta nên xử lý dữ liệu bị thiếu?


16

Tôi đang xây dựng một quy trình công việc để tạo các mô hình học máy (trong trường hợp của tôi, sử dụng các gói pandassklearngói của Python ) từ dữ liệu được lấy từ một cơ sở dữ liệu rất lớn (ở đây, Vertica bằng SQL và pyodbc), và một bước quan trọng trong quy trình đó liên quan đến việc mất tích giá trị của các yếu tố dự đoán. Điều này rất đơn giản trong một nền tảng phân tích hoặc thống kê duy nhất --- có thể là Python, R, Stata, v.v .--- nhưng tôi tò mò nơi tốt nhất để xác định bước này trong quy trình làm việc đa nền tảng.

Nó đủ đơn giản để thực hiện điều này trong Python, với sklearn.preprocessing.Imputerlớp, bằng cách sử dụng pandas.DataFrame.fillnaphương thức hoặc bằng tay (tùy thuộc vào độ phức tạp của phương thức cắt bỏ được sử dụng). Nhưng vì tôi sẽ sử dụng điều này cho hàng chục hoặc hàng trăm cột trong hàng trăm triệu bản ghi, tôi tự hỏi liệu có cách nào hiệu quả hơn để thực hiện việc này trực tiếp thông qua SQL trước thời hạn không. Ngoài hiệu quả tiềm năng của việc thực hiện điều này trong một nền tảng phân tán như Vertica, điều này sẽ có thêm lợi ích là cho phép chúng tôi tạo một đường ống tự động để xây dựng các phiên bản bảng "hoàn chỉnh", vì vậy chúng tôi không cần phải điền vào một bộ mới các giá trị bị thiếu từ đầu mỗi khi chúng ta muốn chạy một mô hình.

Tôi đã không thể tìm thấy nhiều hướng dẫn về điều này, nhưng tôi tưởng tượng rằng chúng ta có thể:

  1. tạo một bảng các giá trị thay thế (ví dụ: trung bình / trung bình / chế độ, tổng thể hoặc theo nhóm) cho mỗi cột không đầy đủ
  2. nối bảng giá trị thay thế với bảng gốc để gán giá trị thay thế cho mỗi hàng và cột không đầy đủ
  3. sử dụng một loạt các báo cáo trường hợp để lấy giá trị ban đầu nếu có và giá trị thay thế khác

Đây có phải là điều hợp lý để làm trong Vertica / SQL không, hay có lý do chính đáng để không làm phiền và chỉ xử lý nó trong Python thay thế? Và nếu sau này, có một trường hợp mạnh mẽ để làm điều này trong gấu trúc chứ không phải sklearn hoặc ngược lại? Cảm ơn!

Câu trả lời:


14

Ý kiến ​​mạnh mẽ của tôi về các tác vụ tự động như cắt cụt (nhưng, ở đây tôi có thể bao gồm cả chia tỷ lệ, định tâm, chọn tính năng, v.v.) là tránh mọi cách làm những việc đó mà không kiểm tra cẩn thận dữ liệu của bạn.

Tất nhiên, sau khi quyết định loại áp dụng nào có thể được tự động hóa (theo giả định rằng dữ liệu mới có hình dạng / vấn đề tương tự).

Vì vậy, trước khi bất cứ điều gì, hãy có một quyết định khôn ngoan. Tôi thường lãng phí thời gian để cố gắng tự động hóa những thứ này, phá hủy dữ liệu của tôi. Tôi sẽ cung cấp cho bạn một số ví dụ: - một thị trường được mã hóa thành N / A, mà tôi đã bỏ lỡ và được coi là Bắc / Mỹ - các số như -999.0, vì nhà sản xuất dữ liệu không thể tìm thấy sự thay thế tốt hơn cho dữ liệu bị thiếu - số như 0 cho Huyết áp hoặc nhiệt độ cơ thể, thay vì thiếu dữ liệu (thật khó tưởng tượng một người sống với 0 huyết áp) - nhiều chỗ dành cho dữ liệu bị thiếu, do thực tế là dữ liệu được thu thập từ nhiều nguồn khác nhau

Sau đó, bạn cần hiểu loại từ chối nào sẽ giống với thông tin từ dữ liệu của bạn cho một nhiệm vụ nhất định. Điều này thường khó hơn nhiều để làm điều đó đúng hơn nó có vẻ.

Sau tất cả những điều đó, lời khuyên của tôi là trì hoãn nhiệm vụ cắt bỏ của bạn đến lớp trên, nơi bạn có các công cụ để tạo lại dữ liệu mới và kiểm tra xem các giả định cho dữ liệu mới không bị vi phạm (nếu có thể).


1
Tự động hóa +1 không nhất thiết làm cho mọi thứ tốt hơn, chỉ nhất quán hơn và thường nhanh hơn!
James

4

Therriault, thực sự rất vui khi biết bạn đang sử dụng Vertica! Tiết lộ đầy đủ, tôi là nhà khoa học dữ liệu trưởng ở đó :). Quy trình công việc bạn mô tả chính xác là những gì tôi gặp phải khá thường xuyên và tôi là một người tin tưởng thực sự vào việc xử lý trước các bộ dữ liệu rất lớn đó trong cơ sở dữ liệu trước khi bất kỳ pyODBC và gấu trúc nào hoạt động. Tôi khuyên bạn nên tạo chế độ xem hoặc bảng thông qua truy vấn dựa trên tệp chỉ để đảm bảo công việc có thể lặp lại. Chúc may mắn

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.