Tự động hóa Feature Engineering trong các dự án Machine Learning. (Phần 1)

Data Analysis- VelaCorp
VelaCorp
Published in
6 min readNov 23, 2018

**Bài viết được lược dịch từ Why Automated Feature Engineering Will Change the Way You Do Machine Learning (William Koehrsen)

Trong những năm gần đây, chúng ta đã thấy được những xu hướng trong việc tự động hóa việc tìm ra mô hình và các tham số trong mô hình một cách tối ưu để sử dụng cho bài toán cần giải quyết hiệu quả nhất. Tuy nhiên, đối với mỗi dự án, bên cạnh việc lựa chọn mô hình và tham số tối ưu, feature engineering cũng là một quá trình quan trọng không kém, có thể nói là mang tính quyết định đối với việc xây dựng một mô hình hiệu quả để giải quyết bài toán đặt ra. Tự động hóa feature engineering là một kỹ thuật khá mới, nhưng sau khi sử dụng nó để giải quyết một số bài toán data science sử dụng các bộ dataset thực tế, tôi nghĩ việc tự động hóa feature engineering này nên trở thành 1 phần trong bất kỳ dự án nào sử dụng Machine Learning.

Trong bài viết này, chúng ta sẽ sử dụng thư viện Featuretools (Python), áp dụng kỹ thuật tự động hóa feature engineering vào project Loan Repayment Prediction (https://www.kaggle.com/c/home-credit-default-risk) để thấy được tính hiệu quả của kỹ thuật này.

Feature Engineering là gì

Feature Engineering là quá trình xây dựng các features cần thiết cho việc training các mô hình machine learning dựa trên các dữ liệu thô truyền vào.

Với cách tiếp cận truyền thống, người thực hiện quá trình feature engineering này sẽ sử dụng những kiến thức nền tảng của mình để tìm ra các feature mà họ nghĩ là cần thiết để giải bài toán. Ngoài việc tốn rất nhiều thời gian cho việc tìm ra các features này, phương pháp tiếp cận này còn có nhiều điểm yếu như: Tự đặt ra giới hạn cho tính đa dạng của bộ features, Mã nguồn (code) sử dụng cho quá trình feature engineering này là đặc thù cho từng dự án, không thể dùng lại cho các dự án trong tương lai,…

Tự động hóa feature engineering là việc tự động đưa ra những feature có ý nghĩa dựa trên những column gốc của bộ dữ liệu. Việc tự động hóa quá trình này dựa trên 1 khung sẵn và có thể áp dụng cho các dự án khác nhau.

Áp dụng tự động hóa feature engineering vào project Loan Repayment Prediction.

Trong bài toán này, điều đầu tiên chúng ta cần làm là gom 7 bảng dữ liệu thô với 58 triệu dòng thành 1 bảng duy nhất, mỗi hàng ứng với 1 client, các cột là các features mà chúng ta sử dụng để training model.

Hình 1: Feature engineering requires capturing all information from a set of related tables into one table

Đầu tiên chúng ta sẽ thử tiếp cận theo hướng truyền thống. Tôi đã sử dụng tổng cộng 10 giờ cho việc tạo ra các features bằng tay. Trước hết, tôi đọc qua mô tả các cột trong bộ dataset thô, tiếp theo đọc các bài báo, nghiên cứu về chủ đề Loan Repayment này để có được những kiến thức nền tảng cần thiết và cuối cùng là build các feature mà tôi nghĩ là cần thiết. Kết quả đạt được cũng khá khả quan, cải thiện được 65% so với baseline features (so sánh với top leaderboard score). Điều này chỉ ra tầm quan trọng của feature engineering. Tuy nhiên, dễ thấy mặc dù việc design các feature này bằng tay rất mất thời gian, tất cả những đoạn code mà tôi đã viết để xử lý dữ liệu suốt 10 giờ qua không thể áp dụng cho các dự án khác trong tương lai.

Bên cạnh đó, việc tạo ra các feature này tốn rất nhiều thời gian nên những feature mà tôi tạo ra trong 10 giờ qua cũng sẽ bị giới hạn bởi sự sáng tạo cũng như sự kiên nhẫn của tôi.

Tiếp theo, chúng ta sẽ thử sử dụng kỹ thuật tự động hóa feature engineering bằng cách sử dụng thư viện Featuretools. Để sử dụng thư viện này, tất cả những gì chúng ta cần chuẩn bị là các thông tin cơ bản về các bảng dữ liệu và các quan hệ (relationship) giữa các bảng này, sau đó lưu tất cả các thông tin này vào 1 EntitySet.

Sau đó sử dụng hàm dfs để tạo ra tất cả các features một cách tự động bằng thư viện featuretools

# Deep feature synthesisfeature_matrix, features = ft.dfs(entityset=es,                                   target_entity='clients',                                  agg_primitives = agg_primitives,                                trans_primitives = trans_primitives)

Dưới đây là 1 vài feature được tạo ra tự động bằng thư viện featuretools

- Số tiền tối đa 1 khách hàng trả nợ trong 1 lần đối với khoản nợ trước đó

- Percentile rank của giá trị khoản nợ gần nhất của client

Các feature tạo bởi featuretools sử dụng các hàm aggregation đơn giản (min, max, mean, rank,…) nên các chúng hoàn toàn dễ hiểu. Featuretools cũng tạo ra nhiều features giống với những feature mà chúng ta đã tạo bằng tay như phần trên nhưng nó cũng tạo ra hàng nghìn feature mà chúng ta chưa hề nghĩ đến (hoặc đã nghĩ đến nhưng chưa có thời gian để implement). Hiển nhiên là không phải tất cả các feature mà featuretools tạo ra đều hữu ích cho bài toán của chúng ta, một vài trong số đó có tương quan lớn, tuy nhiên thì có quá nhiều features vẫn tốt hơn là có quá ít.

Dưới đây là kết quả của việc sử dụng kỹ thuật tự động hóa feature engineering trong bài toán Loan Repayment Prediction, so sánh với việc thực hiện feature engineering bằng tay.

Hình 2: Comparison between automated and manual feature engineering on time, number of features, and performance.

· Tổng thời lượng sử dụng để viết code cho quá trình feature engineering: 10 giờ bằng tay vs 1 giờ bằng kỹ thuật tự động hóa

· Số lượng features tạo ra: 30 features bằng tay vs 1820 features bằng kỹ thuật tự động hóa

· Model performance, so sánh với baseline features: 65% bằng tay vs 66% bằng kỹ thuật tự động hóa

Ngoài ra, tất cả những dòng code trong quá trình feature engineering của dự án này có thể được áp dụng cho bất kỳ bộ dataset nào trong các dự án tiếp theo.

Kết luận về việc tự động hóa feature engineering:

· Giảm thời gian sử dụng cho việc feature engineering lên đến 10 lần

· Giúp cải thiện performance của mô hình

· Đưa ra các feature hoàn toàn dễ hiểu (interpretable)

· Phù hợp với các workflow hiện tại

Trong bài viết này, chúng ta đã tìm hiểu cách sử dụng featuretools để tạo ra các feature để sử dụng cho mô hình machine learning. Tuy nhiên cũng có thể thấy 1 vấn đề mà chúng ta gặp phải là việc sử dụng thư viện này sẽ tạo ra quá nhiều features mà có thể phần lớn trong số đó là không hữu ích cho mô hình. Chúng ta cũng đã biết với các mô hình càng có nhiều features, thời gian training sẽ càng lâu. Trong bài viết tiếp theo, chúng ta sẽ cùng tìm hiểu các kỹ thuật Feature Selections để tìm ra các feature cần thiết cho bài toán của mình.

— Còn nữa —

--

--

Data Analysis- VelaCorp
VelaCorp

We are members of Data Analysis Department — VelaCorp, An investment company. VelaCorp is investing in some companies such as: Shippo, Posi, EzBiz…