Lợi nhuận:
- Khả năng nhận biết các loại rò rỉ dữ liệu (mục tiêu, thời gian, tiền xử lý, hàng được nhóm) và truy vấn điểm 'quá tốt để trở thành sự thật' làm cảnh báo
- Khả năng ngăn chặn rò rỉ bằng cách phân tách sớm bộ thử nghiệm, đường ống và phân chia chính xác (theo trình tự thời gian/nhóm)
- Khả năng tái tạo phân tích với các hạt giống cố định, kiểm soát phiên bản và loại bỏ các bước thủ công
Có hai sai lầm gây lãng phí công sức nhất trong khoa học dữ liệu và cả hai đều ngấm ngầm vì dẫn đến thảm họa ngay khi mọi thứ “có vẻ ổn”. Đầu tiên là rò rỉ dữ liệu: mô hình hoạt động tốt trên tập thử nghiệm nhưng gặp sự cố trong quá trình sản xuất. Thứ hai là không thể thực hiện được: sáu tháng sau bạn tiến hành phân tích và nhận được kết quả hoàn toàn khác. Phần này được dành riêng để tìm hiểu và tránh hai cạm bẫy này một cách sâu sắc. AI có thể làm tăng cả hai rủi ro (phát sinh nhanh chóng, gợi ý các rò rỉ ẩn, giúp bạn thực hiện các bước thủ công dễ dàng hơn) nhưng cũng có thể giảm thiểu chúng nếu sử dụng đúng cách. Sự khác biệt là ở kỷ luật.
Rò rỉ dữ liệu: mô hình thấu thị
Rò rỉ dữ liệu là khi mô hình nhìn thấy thông tin trong quá trình đào tạo mà nó sẽ không có tại thời điểm dự đoán thực tế. Mô hình "gian lận" với thông tin này, trông rất đẹp trên tập thử nghiệm nhưng lại gặp sự cố trong quá trình sản xuất nếu không có thông tin đó. Triệu chứng rò rỉ hầu như luôn giống nhau: quá tốt để có thể tin là đúng. Trước khi vui mừng khi thấy độ chính xác 99%, bạn nên tìm kiếm những rò rỉ.
Các loại rò rỉ chính là:
1. Rò rỉ mục tiêu: Một tính năng là kết quả của mục tiêu. Trong dự báo "đã bị hủy", cột "ngày hủy" hoặc "số tiền hoàn lại" là kết quả của mục tiêu; Chúng sẽ chỉ được điền khi kết quả rõ ràng.
2. Rò rỉ thời gian: Đưa thông tin tương lai về quá khứ. Khi tính toán "trung bình 30 ngày qua", hãy bao gồm những ngày sau ngày dự báo hoặc chia chuỗi thời gian một cách ngẫu nhiên.
3. Rò rỉ tiền xử lý: Học các phép biến đổi như chia tỷ lệ, điền, mã hóa từ tất cả dữ liệu trước phân vùng đào tạo/kiểm tra. Tính trung bình của dữ liệu kiểm tra cản trở việc đào tạo.
4. Rò rỉ hàng trùng lặp/nhóm: Các hàng thuộc cùng một người xuất hiện trong cả quá trình đào tạo và kiểm tra (hai lượt truy cập của cùng một bệnh nhân trong các bộ khác nhau). Người mẫu ghi nhớ con người.
loại rò rỉ
Làm thế nào được sinh ra
Làm thế nào để ngăn chặn
rò rỉ mục tiêu
Cột là kết quả của mục tiêu
Bài kiểm tra "Tôi có nó vào thời điểm dự đoán không"
rò rỉ thời gian
Đưa tương lai về quá khứ
Phân chia thời gian, kiểm soát cửa sổ
Rò rỉ tiền xử lý
Chuyển đổi trước khi chia tách
Đường ống, vừa vặn từ đào tạo
Rò rỉ hàng được nhóm
Cùng một đơn vị trong hai bộ
Chia theo nhóm (GroupKFold)
Kỷ luật duy nhất để ngăn chặn rò rỉ
Giải pháp chung cho tất cả các loại rò rỉ chỉ gói gọn trong một câu: Cô lập bộ thử nghiệm càng sớm càng tốt để bắt chước tương lai thực và không "dạy" nó bất cứ điều gì. Trong thực tế, điều này có nghĩa là: đầu tiên phân chia, sau đó chỉ học tất cả các phép biến đổi từ quá trình đào tạo và áp dụng chúng trong một quy trình (cấu trúc thu thập tất cả các bước trong một chuỗi duy nhất). Đối với mỗi đặc điểm, hãy đặt câu hỏi "Tôi có thông tin này vào thời điểm dự đoán không?" Nếu có thời gian, hãy chia nó theo trình tự thời gian; Nếu lặp lại cùng một đơn vị thì chia theo nhóm.
Thận trọng: Khía cạnh nguy hiểm nhất của rò rỉ là nó thể hiện là một sự thành công. Một mô hình tồi hiển nhiên sẽ tạo ra kết quả kém và sẽ được chú ý; Một mô hình bị rò rỉ hoạt động rất tốt, làm hài lòng tất cả mọi người và được đưa vào sản xuất - đó là nơi sự sụp đổ bắt đầu. Đó là lý do tại sao một kết quả “rất tốt” là nguyên nhân đáng báo động chứ không phải để ăn mừng.
Độ lặp lại: nhận được kết quả tương tự hai lần
Khả năng tái tạo là khả năng nhận được kết quả tương tự khi bạn chạy lại phân tích vào thời điểm khác, trên một máy khác. Không có điều này, phân tích của bạn chỉ là ngẫu nhiên, không khoa học. Nguyên nhân chính và giải pháp làm giảm khả năng tái sản xuất:
Các bước thủ công: Thay đổi thủ công một ô trong Excel, chỉnh sửa biểu đồ theo cách thủ công. Giải pháp: có từng bước trong mã.
Tính ngẫu nhiên không cố định: Huấn luyện mô hình, lấy mẫu, phân tách liên quan đến tính ngẫu nhiên. Giải pháp: sửa hạt giống ngẫu nhiên (giá trị ban đầu của trình tạo ngẫu nhiên) (random_state=42).
Phiên bản thay đổi: Kết quả có thể thay đổi khi phiên bản thư viện thay đổi. Giải pháp: sửa các phần phụ thuộc (requirements.txt, tệp môi trường).
Không lưu trữ hồ sơ: Không rõ dữ liệu nào, mã nào, thông số nào được sử dụng. Giải pháp: kiểm soát phiên bản (Git - hệ thống lưu tất cả các phiên bản của mã) và lập phiên bản dữ liệu.
"Nó chỉ hoạt động trên máy của tôi": Giải pháp: ghi lại môi trường, sử dụng container (Docker) nếu có thể.
ba trường hợp nhỏ
Trường hợp 1 - Rò rỉ mục tiêu. Một phân tích sức khỏe có cột "thuốc sau xuất viện" để dự đoán "liệu bệnh nhân có tái nhập viện hay không". Cột này chỉ được điền sau khi bệnh nhân được xuất viện. Mẫu mã đạt 96%, trong sản xuất đạt 61%. Dự án kéo dài 8 tuần thật rác rưởi. Bài học: hỏi từng đặc điểm “nó có hiện diện vào thời điểm dự đoán không?”
Trường hợp 2 - Rò rỉ tiền xử lý. Một nhóm thu nhỏ tất cả dữ liệu và sau đó chia nhỏ nó. Giá trị trung bình của dữ liệu thử nghiệm có liên quan đến việc mở rộng quy mô. Điểm CV 89%, sản xuất thực tế 76%. Thành công giả tạo đã biến mất khi tôi chuyển đến Pipeline và chỉ tìm hiểu về các phép biến đổi qua quá trình đào tạo. Bài học: chia trước, biến đổi sau.
Trường hợp 3 - Không tái tạo được. Một nhà phân tích muốn cập nhật biểu đồ mà anh ta trình bày với ban quản lý ba tháng sau đó nhưng không thể nhớ mình đã tạo ra nó như thế nào; nhiều bước được thực hiện thủ công trong Excel. Kết quả không như ý và lòng tin bị lung lay. Bài học: không cần các bước thủ công, mọi thứ đều có trong mã và Git.
Bốn mẫu có thể sao chép
1) Kiểm tra rò rỉ:
Vai trò của bạn: thanh tra rò rỉ. Mục tiêu: "churn" (0/1), ngày tham chiếu dự báo: record_date. Tôi sẽ cung cấp cho bạn danh sách các tính năng này. Đối với MỖI đặc điểm: (a) nó có phải là hệ quả của mục tiêu không, (b) nó có sẵn cho tôi tại thời điểm dự đoán không, (c) khung thời gian có bao gồm tương lai không? Đánh dấu nó là "không an toàn/nghi ngờ/rò rỉ" và viết lý do. Các tính năng: [danh sách]
2) Đường ống không rò rỉ:
Thiết lập Đường ống sklearn: đào tạo/kiểm tra phân tách đầu tiên (phân tầng, hạt giống = 42), SAU ĐÓ điều chỉnh tất cả quá trình tiền xử lý (xác định, chia tỷ lệ, mã hóa) vào đường ống CHỈ từ đào tạo. Giải thích tại sao mã không bị rò rỉ, bước nào đã được học ở đâu.
3) Mã danh sách kiểm tra độ tái lập:
Tôi muốn làm cho phân tích của tôi có thể tái sản xuất. Đề xuất mã/cấu trúc bổ sung: (1) hạt giống cứng cho tất cả tính ngẫu nhiên, (2) phiên bản thư viện in được sử dụng, (3) thẻ ngày/phiên bản cho dữ liệu và đầu ra. Đồng thời đưa cho tôi một danh sách kiểm tra để đảm bảo không có bước thủ công nào.
4) Phân vùng được nhóm (rò rỉ cùng một đơn vị):
Trong dữ liệu, cùng một customer_id tồn tại ở nhiều hàng. Thực hiện phân tách (GroupKFold hoặcGroupShuffleSplit, nhóm = customer_id) để NGĂN NGỪA cùng một khách hàng tham gia cả quá trình đào tạo và thử nghiệm. Bao gồm mã để xác minh rằng không có khách hàng nào ở cả hai bộ sau khi tách.
Dấu nhắc yếu / Dấu nhắc mạnh
Dấu nhắc yếu:
Mô hình của tôi trả về độ chính xác 98%, điều đó thật tuyệt phải không? Tối ưu hóa mã.
Ăn mừng 98% che giấu sự rò rỉ. Trước khi tối ưu hóa, cần đặt câu hỏi liệu điểm số này có thật hay không.
Lời nhắc mạnh mẽ:
Vai trò của bạn: thanh tra rò rỉ. Mô hình của tôi trả về độ chính xác 98% trên tập kiểm tra, điều này nghe có vẻ "quá tốt đến mức khó tin" đối với tôi. Kiểm tra: (1) có bất kỳ tính năng nào là kết quả của mục tiêu không, (2) các chuyển đổi được thực hiện trước khi tách, (3) có cùng một đơn vị trong hai bộ không, (4) có bất kỳ rò rỉ thời gian nào không. Liệt kê bất kỳ điểm đáng ngờ nào; Tập trung vào việc tìm ra chỗ rò rỉ chứ không phải sửa điểm.
Ở đây, điểm cao được coi là dấu hiệu đáng bị nghi ngờ chứ không phải để ăn mừng.
Những lỗi thường gặp
- Ăn mừng kết quả "rất tốt". Điểm quá tốt để có thể là sự thật là một cảnh báo rò rỉ chứ không phải là một thành tích.
- Học phép biến đổi từ tất cả dữ liệu trước khi chia. Rò rỉ phổ biến nhất; Tách đầu tiên bằng đường ống.
- Chia chuỗi thời gian một cách ngẫu nhiên. Người mẫu nhìn thấy tương lai; Việc phân chia theo thời gian là điều bắt buộc.
- Để lại cùng một đơn vị trong hai bộ. Người mẫu ghi nhớ con người; Chia theo nhóm.
- Không bước vào bằng tay và viết vào mã. Việc phân tích trở nên không thể thực hiện được; mọi thứ phải ở dạng mã và Git.
Mẹo: Viết hai câu "cam kết danh dự" khi bắt đầu dự án của bạn: "Tôi chưa hề chạm vào bộ thử nghiệm nào trước khi xem nó trong sản xuất. Mỗi bước đều có trong mã và hạt giống đã được cố định." Nếu bạn không thể ký hai câu này một cách trung thực thì kết quả của bạn chưa đáng tin cậy.
Tóm lại
Rò rỉ dữ liệu và không thể tái tạo là hai lỗi thầm lặng đắt giá nhất trong khoa học dữ liệu. Rò rỉ là tầm nhìn của mô hình về tương lai và tự thể hiện là thành công sai lầm; Giải pháp là sớm phân chia tập kiểm tra, chỉ tìm hiểu các phép biến đổi từ quá trình đào tạo (đường dẫn), đặt câu hỏi cho từng tính năng "Tôi có nó tại thời điểm dự đoán không" và thực hiện phân tách chính xác (theo trình tự thời gian/nhóm). Khả năng tái tạo là có thể nhận được kết quả tương tự hai lần; Giải pháp của anh ấy là loại bỏ các bước theo cách thủ công, ghim hạt giống, đóng băng các phiên bản và giữ mọi thứ trong Git. AI có thể tăng hoặc giảm những rủi ro này; Chính kỷ luật của bạn sẽ quyết định.
Nhiệm vụ ứng dụng
Lấy danh sách đặc điểm của mô hình bạn đã xây dựng (hoặc mô hình giả định) và đặt câu hỏi cho từng đặc điểm "tôi có thông tin này tại thời điểm dự đoán không?" bằng văn bản; Tìm ít nhất một ứng cử viên rò rỉ. Sau đó, hãy điền vào danh sách kiểm tra để phân tích của bạn có thể lặp lại: hạt giống có được cố định không, có các bước thủ công không, các phiên bản đã được đăng ký chưa, chúng có ở trong Git không. Khắc phục những thiếu sót.
danh sách kiểm tra
- [ ] Tôi có thắc mắc điểm "quá tốt để trở thành sự thật" là cảnh báo rò rỉ không?
- [ ] Có phải tôi đã học được tất cả các phép biến đổi sau khi chia tách, chỉ từ việc luyện tập thôi phải không?
- [ ] Tôi đã chia theo cấu trúc thời gian/nhóm (theo trình tự thời gian/GroupKFold) chưa?
- [ ] Tôi đã thực hiện lặp lại tất cả tính ngẫu nhiên bằng hạt giống cố định chưa?
- [ ] Tôi có loại bỏ các bước thủ công và giữ mọi thứ trong mã và kiểm soát phiên bản không?