Lợi nhuận:
- Khả năng tạo ra các tính năng phái sinh có ý nghĩa với kiến thức miền và mã hóa các danh mục phân loại bằng các phương pháp thích hợp (một nóng, nhãn, đích)
- Khả năng chia tỷ lệ các biến số theo loại mô hình (chuẩn hóa, chuẩn hóa) và tránh chia tỷ lệ không cần thiết hoặc không đầy đủ
- Khả năng tránh rò rỉ tính năng bằng cách học tất cả các phép biến đổi sau khi phân tách đào tạo/kiểm tra và chỉ từ đào tạo
Có một câu nói cổ trong lĩnh vực học máy: “Học máy ứng dụng về cơ bản là kỹ thuật tính năng”. Bởi vì sự thành công của một mô hình thường đến từ những yếu tố đầu vào bạn đưa vào mô hình hơn là bạn chọn thuật toán nào. Kỹ thuật tính năng là nghệ thuật tạo ra các tín hiệu có ý nghĩa từ dữ liệu thô mà mô hình có thể học hỏi từ đó. Trí tuệ nhân tạo là nguồn ý tưởng phong phú ở giai đoạn này: khi bạn hỏi "những tính năng nào có thể được tạo ra từ dữ liệu này", nó sẽ liệt kê hàng chục gợi ý. Nhưng một số gợi ý này có thể có giá trị, một số có thể vô ích và một số có thể nguy hiểm (rò rỉ). Công việc của bạn là sắp xếp nó ra.
Tại sao tính năng kỹ thuật
Dữ liệu thô hiếm khi được đưa vào mô hình ở dạng tốt nhất. Mặc dù chỉ riêng cột "ngày sinh" là vô nghĩa nhưng giá trị "tuổi" được tạo ra từ cột này là một tín hiệu mạnh. Bạn có thể trích xuất các thuộc tính như "ngày trong tuần", "ngày/đêm", "có phải là ngày lễ không" từ "dấu thời gian đặt hàng". Bạn có thể kết hợp hai cột để tạo ra tỷ lệ ("tỷ lệ nợ/thu nhập"). Ở đây, kỹ thuật tính năng đang chuyển kiến thức miền thành tín hiệu toán học; Và chính vì vậy mà đây chính là giai đoạn đòi hỏi trí tuệ con người nhiều nhất.
Chuyển đổi các biến phân loại thành số: mã hóa
Các mô hình thường làm việc với các con số chứ không phải văn bản. Việc chuyển đổi các biến phân loại (như thành phố, màu sắc, loại sản phẩm) thành số được gọi là mã hóa. Ba phương pháp phổ biến:
Mã hóa một lần: Mở một cột riêng biệt có giá trị 0/1 cho mỗi danh mục. Đối với "thành phố", các cột Istanbul, Ankara, Izmir được hình thành; Nếu khách hàng đến từ Istanbul, chỉ cột đó sẽ là 1. Lý tưởng khi số lượng danh mục ít; Nếu có quá nhiều danh mục, nó sẽ tạo ra hàng trăm cột (điều này được gọi là "bùng nổ kích thước").
Mã hóa nhãn: Cung cấp một số cho mỗi danh mục (Istanbul=0, Ankara=1). Việc này đơn giản nhưng có thể vô tình dạy cho mô hình một trình tự (như Ankara > Istanbul); vì vậy nó được sử dụng một cách thận trọng trong các danh mục không có thứ tự.
Mã hóa mục tiêu: Thay thế từng danh mục bằng giá trị trung bình của biến mục tiêu trong danh mục đó. Nó rất mạnh nhưng là nguồn rò rỉ nguy hiểm nhất: nếu bạn tính đến mục tiêu của dữ liệu thử nghiệm, mô hình sẽ nhìn thấy tương lai. Nó chỉ nên được tính toán từ dữ liệu đào tạo và cẩn thận (trong quá trình xác thực chéo).
Chia tỷ lệ: số lượng lớn không lấn át mô hình
Một số mô hình (mô hình dựa trên khoảng cách, mô hình tuyến tính, mạng lưới thần kinh) rất nhạy cảm với quy mô của các biến. Nếu "thu nhập" (0-500.000) và "tuổi" (0-100) rơi vào cùng một khuôn mẫu, thu nhập có thể chiếm ưu thế đơn giản vì nó lớn hơn. Thu nhỏ sửa lỗi này. Hai phương pháp phổ biến: tiêu chuẩn hóa (chuyển đổi từng giá trị thành "có bao nhiêu độ lệch chuẩn so với giá trị trung bình") và chuẩn hóa (chuẩn hóa tối thiểu-tối đa - nén các giá trị vào phạm vi 0-1). Các mô hình dựa trên cây (cây quyết định, rừng ngẫu nhiên) không nhạy cảm về quy mô, chúng không yêu cầu mở rộng quy mô.
Thận trọng: Chỉ nên tính các tham số tỷ lệ và mã hóa (trung bình, độ lệch chuẩn, ánh xạ trung bình danh mục) từ dữ liệu huấn luyện, sau đó áp dụng tương tự cho dữ liệu thử nghiệm. Việc bao gồm dữ liệu thử nghiệm là sự rò rỉ và làm cho mô hình của bạn trông đẹp hơn thực tế.
Trọng tâm của sự rò rỉ trong kỹ thuật tính năng
Tạo tính năng là nơi rò rỉ dữ liệu thường bắt nguồn nhất. Hai lỗi điển hình: Rò rỉ thời gian - tạo ra một tính năng bao gồm thông tin trong tương lai (bao gồm cả những ngày sau ngày dự báo khi tính toán “trung bình 30 ngày qua”). Rò rỉ số liệu thống kê - tính toán một tính năng (trung bình tỷ lệ, giá trị mã hóa mục tiêu) từ tất cả dữ liệu trước khi phân tách đào tạo/kiểm tra. Quy tắc: tìm hiểu từng phép biến đổi sau khi thực hiện phân tách huấn luyện/kiểm tra trước tiên và chỉ từ dữ liệu huấn luyện. Cách an toàn nhất để thực hiện việc này thường xuyên là sử dụng đường ống - một cấu trúc thu thập tất cả các phép biến đổi trong một chuỗi duy nhất và áp dụng chúng sau khi phân tách.
phương pháp
để làm gì
Nguy cơ rò rỉ
ghi chú
Mã hóa một lần
Có thể thay đổi với một vài danh mục
thấp
Kích thước bùng nổ trong nhiều danh mục
Mã hóa nhãn
Danh mục được sắp xếp
thấp
Ngoài trật tự dạy sai trật tự
mã hóa mục tiêu
Đa chủng loại, tín hiệu mạnh
rất cao
Chỉ từ trình độ học vấn, trong CV
tiêu chuẩn hóa
Mô hình tuyến tính/khoảng cách
trung bình
Thông số chỉ phụ thuộc vào trình độ học vấn
Tính năng cửa sổ thời gian
chuỗi thời gian
cao
Thêm tương lai
ba trường hợp nhỏ
Trường hợp 1 - Tài sản có giá trị. Nhóm tín dụng đã tạo ra đặc điểm "tỷ lệ nợ trên thu nhập" từ cột "thu nhập hàng tháng" và "thanh toán nợ hàng tháng" thô. Tính năng dẫn xuất duy nhất này đã tăng độ chính xác của mô hình từ 71% lên 79%; bởi vì chính tỷ lệ chứ không phải thu nhập tuyệt đối mới thực sự quyết định rủi ro. Bài học: các tỷ lệ được tạo ra bởi kiến thức miền là những tín hiệu mạnh mẽ.
Trường hợp 2 - Rò rỉ mã hóa mục tiêu. Một nhóm đã chuyển đổi “mã zip” thành một số có mã hóa mục tiêu (tỷ lệ rời bỏ trung bình trong khu vực đó), nhưng đã làm như vậy từ tất cả dữ liệu trước khi tách. Mô hình cho kết quả 94% trên bộ thử nghiệm, giảm xuống còn 68% trong sản xuất. 6 tuần nỗ lực bị lãng phí. Bài học: mã hóa mục tiêu được thực hiện cẩn thận, chỉ trong quá trình đào tạo.
Trường hợp 3 - Quên chia tỷ lệ. Một nhà phân tích đã đưa doanh thu (0-400.000) và độ tuổi của khách hàng (18-75) vào mô hình dựa trên khoảng cách mà không cần mở rộng quy mô. Mô hình hầu như chỉ xem xét thu nhập, loại bỏ hiệu ứng tuổi tác. Khi chia tỷ lệ được thêm vào, việc phân đoạn trở nên có ý nghĩa. Bài học: việc chia tỷ lệ không bị bỏ qua trong các mô hình khoảng cách/tuyến tính.
Bốn mẫu có thể sao chép
1) Tạo ý tưởng về tính năng (việc loại bỏ tùy thuộc vào bạn):
Vai trò của bạn: trợ lý kỹ thuật tính năng. Các cột df của tôi: ngày sinh, thời gian đặt hàng (dấu thời gian), thu nhập_tl, nợ_tl, thành phố, sản phẩm_category. Mục tiêu: “khoản vay có được hoàn trả không” (0/1). Đề xuất 15 tính năng có thể được tạo từ các cột này; chỉ định nguy cơ rò rỉ (thấp/trung bình/cao) cho từng loại. Đánh dấu rõ ràng những thông tin có chứa thông tin trong tương lai.
2) Mã hóa an toàn (sau chia tách):
Viết mã one-hot mã hóa "city" và "product_category". QUAN TRỌNG: chỉ khớp mã hóa với dữ liệu huấn luyện, sau đó chuyển đổi dữ liệu thử nghiệm (với sklearn OneHotEncode). Giải thích cách bạn xử lý danh mục không nhìn thấy (handle_unknown) trong giáo dục.
3) Chuyển đổi không bị rò rỉ với Đường ống:
Thiết lập Đường ống sklearn: áp dụng StandardScaler cho các cột số, OneHotEncode cho các cột phân loại, thêm bộ phân loại ở cuối. Đảm bảo tất cả các phép biến đổi đều được học SAU quá trình phân chia đào tạo/kiểm tra và chỉ từ quá trình đào tạo. Giải thích mã và lý do tại sao nó không bị rò rỉ.
4) Tính năng cửa sổ thời gian (kiểm soát rò rỉ):
Tạo thuộc tính "số lượng đơn đặt hàng trong 30 ngày qua" cho mỗi khách hàng nhưng KHÔNG BAO GIỜ bao gồm dữ liệu sau ngày dự báo. Giải thích từng dòng rằng mã không nhìn vào tương lai. Tôi sẽ cung cấp cột ngày tham chiếu.
Dấu nhắc yếu / Dấu nhắc mạnh
Dấu nhắc yếu:
Thêm các thuộc tính tốt vào dữ liệu này.
“Tốt” không xác định, mục tiêu không rõ ràng, không có biện pháp kiểm soát rò rỉ. AI tạo ra các tính năng ngẫu nhiên, có thể bị rò rỉ.
Lời nhắc mạnh mẽ:
Vai trò của bạn: kỹ sư tính năng. Mục tiêu: "xuất hiện trong 30 ngày" (0/1), ngày tham chiếu ước tính: save_date. Có lịch sử giao dịch trong df.Task: Tạo 8 tính năng, trả lời câu hỏi "Tôi có thông tin này tại thời điểm dự đoán" cho MỖI. Thêm ngày sau ngày tham chiếu trong các tính năng của cửa sổ thời gian. Viết mã theo cách tương thích với quy trình để được thực thi sau phần đào tạo/kiểm tra.
Ở đây, mục tiêu, thời gian tham chiếu và kiểm soát rò rỉ được xác định ngay từ đầu.
Những lỗi thường gặp
- Học phép biến đổi từ tất cả dữ liệu trước khi chia. Nếu tham số chia tỷ lệ/mã hóa nhìn thấy dữ liệu thử nghiệm thì sẽ xảy ra rò rỉ.
- Sử dụng mã hóa mục tiêu một cách bất cẩn. Đó là phương pháp mạnh mẽ nhất nhưng dễ bị rò rỉ nhất; chỉ từ việc đào tạo, xác nhận chéo.
- Thêm tương lai với tính năng cửa sổ thời gian. Nếu phép tính "30 ngày qua" được nhập sau ngày dự báo, mô hình sẽ nhìn thấy tương lai.
- Chia tỷ lệ không cần thiết trong mô hình cây và chia tỷ lệ không đầy đủ trong mô hình tuyến tính. Các quyết định mở rộng quy mô được thực hiện tùy theo loại mô hình.
- Thêm đề xuất mọi tính năng của AI mà không cần thắc mắc. Đề xuất có thể bao gồm các tính năng vô dụng và bị rò rỉ.
Mẹo: Viết ra một câu hỏi duy nhất cho mỗi đặc điểm bạn tạo ra: “Tôi có thể tính giá trị này với thông tin tôi có tại thời điểm đưa ra dự đoán không?” Nếu câu trả lời không rõ ràng là "có", thì đừng sử dụng tính năng này. Kỷ luật duy nhất này giúp loại bỏ hầu hết các rò rỉ liên quan đến tính năng.
Tóm lại
Kỹ thuật tính năng là nghệ thuật tạo ra các tín hiệu có ý nghĩa từ dữ liệu thô và thường quyết định sự thành công của mô hình hơn là thuật toán. Mã hóa các phân loại (one-hot, label, target), chia tỷ lệ bằng số (tiêu chuẩn hóa, chuẩn hóa) và tạo ra các tính năng phái sinh với kiến thức miền là những công cụ cơ bản. Nhưng giai đoạn này cũng là tâm điểm của rò rỉ: tất cả các phép biến đổi phải được học sau khi tách đào tạo/kiểm tra và chỉ từ dữ liệu đào tạo. AI tạo ra nhiều ý tưởng; Chính sự phán đoán của con người đã phân biệt được điều có giá trị với điều nguy hiểm.
Nhiệm vụ ứng dụng
Chọn một biến mục tiêu và thiết kế ít nhất năm đặc điểm phái sinh từ các cột bạn có. Đối với mỗi người trong số họ, hãy trả lời câu hỏi "tôi có sẵn sàng vào thời điểm dự đoán không" bằng văn bản và loại bỏ ít nhất một câu hỏi là "nguy cơ rò rỉ cao". Sau đó mã hóa các tính năng bảo mật trong một quy trình để triển khai sau khi phân vùng.
danh sách kiểm tra
- [ ] Tôi có áp dụng tất cả các phép biến đổi sau khi phân chia đào tạo/kiểm tra không?
- [ ] Tôi chỉ học các tham số chia tỷ lệ/mã hóa từ quá trình đào tạo phải không?
- [ ] Tôi đã trả lời câu hỏi "tôi có nó vào thời điểm dự đoán" cho từng tính năng chưa?
- [ ] Tôi đã cẩn thận hơn với các phương pháp có rủi ro cao như mã hóa mục tiêu chưa?
- [ ] Tôi đã quyết định chia tỷ lệ phù hợp cho loại mô hình (cây/tuyến tính) chưa?