DS-mini: Feature evaluation and model tuning

Feature vs Label
Feature vs Label

Trong thực tế, nếu tài nguyên của máy tính không là vấn đề thì ta nên sử dụng hết tất cả feature set dùng vào quá trình training và prediction. Ngược lại, việc giảm bớt được một lượng lớn feature sao cho performance của mô hình không bị ảnh hưởng nhiều nhờ vậy mà tính toán nhanh hơn sẽ là lựa chọn mà ta luôn nhắm tới.

Tiếp tục mini course, sau khi đã có predictive model cơ bản, ta sẽ tiến hành phân tích sâu hơn về việc lựa chọn feature và model tuning. Làm sao ta có thể biết trước feature mà mình tạo ra có độ tin cậy cao mà không cần phải đưa vào training? Làm sao để giảm gánh cho quá trình tính toán bằng cách loại bỏ những feature “vô dụng”? Làm sao tìm được các thông số phù hợp để mô hình cho ra kết quả dự đoán tối ưu? Tất cả sẽ được đề cập trong mục này.

Tiếp tục đọc “DS-mini: Feature evaluation and model tuning”

Advertisement

DS-mini: Modeling với XGBoost

ds_mini_modeling
ds_mini_modeling

Trong phần này, tôi sẽ thực hiện training trên tập dữ liệu feature đã được combine ở các phần trước. Để tiến hành thực nghiệm, ta cần phân chia tập dữ liệu thành 3 tập (train, validation, test). Ở đây, tôi lấy tương ứng tỉ lệ 70/15/15. Mục đích của việc này giúp cho model tránh bị overfitting. Đồng thời, ta có thể dùng validation set để tuning model.

Sau khi phân chia tập dữ liệu, ta sẽ dùng XGBoost để training model. Model này được đánh giá dựa trên AUC metric. Do đó, AUC càng cao, model của ta càng nắm bắt được nhiều pattern trong tập dữ liệu đồng nghĩa với việc khả năng dự đoán của mô hình cũng chính xác hơn.

Cuối cùng, ta dùng model build được để predict output cho tập test và upload submission file lên Kaggle. Tôi có thử upload 2 lần. Lần 1 chỉ gồm các feature binary trong bảng application. Lần 2 gồm các feature ở lần 1 cộng thêm các feature đã tinh chỉnh khác. Kết quả lần 2 vượt trội hơn hẳn lần 1 (0.74 vs 0.63).

Khi đã hoàn chỉnh toàn bộ các bước này, về sau khi thêm feature mới, ta chỉ việc combine features và bỏ vào model để xem kết quả có cải thiện hơn không cũng như phân tích và tuning lại các tham số cho model.
Tiếp tục đọc “DS-mini: Modeling với XGBoost”

DS-mini: Feature engineering (application)

Feature engineering là gì

“Coming up with features is difficult, time-consuming, requires expert knowledge. “Applied machine learning” is basically feature engineering.”
—  Andrew Ng, Machine Learning and AI via Brain simulations

“Feature engineering is the process of transforming raw data into features that better represent the underlying problem to the predictive models, resulting in improved model accuracy on unseen data.”
— Dr. Jason Brownlee from machinelearningmastery.com

Như vậy, feature engineering là tác vụ cần thiết trong quá trình xây dựng predictive model, rất tốn thời gian và công sức đòi hỏi phải có kiến thức ngành. Lý do, ta không thể đưa dữ liệu thô (raw data) trực tiếp vào bất kỳ mô hình Machine Learning nào. Nên mục tiêu của chúng ta cần làm là rút trích các đặc trưng (features) từ dữ liệu thô ban đầu này.

Vậy thế nào là một feature? Ví dụ, để nhận diện người bạn gặp là người quen hay người lạ, ta sẽ dựa vào các feature như dáng đi, màu tóc, quần áo, mắt, mũi, miệng của người đó. Trong bài toán home credit, feature có thể là các thông tin profile của người đi vay như độ tuổi, giới tính, lương hằng tháng, có bao nhiêu con, có sở hữu bất động sản không, etc.

Không nói nhiều lý thuyết nữa, ta hãy bắt tay vào feature engineering cho bảng application. Ta bắt đầu với bảng này vì nó chứa đầy đủ ID của user cả tập train và tập test, thuận tiện cho quá trình join features cũng như phân chia train/validation/test set.

Tiếp tục đọc “DS-mini: Feature engineering (application)”

DS-mini EDA: Explore Data Analysis

home_credit
home_credit

Mục tiêu của cuộc thi Home credit của Kaggle là xây dựng được mô hình dự đoán (predictive model) có điểm đánh giá (evaluation metric) AUC cao. Một mô hình Machine Learning chỉ có thể xây dựng được khi dữ liệu đầu vào đã được chuẩn bị và xử lý tốt. Kaggle cho trước tập các bảng (table), nhiệm vụ của chúng ta là biến đổi và kết hợp chúng lại thành các đặc trưng (feature) có ý nghĩa để model có thể dự đoán tốt trên tập dữ liệu chưa nhìn thấy (test set, unseen data), kết quả thực tế (label) này được giữ bí mật trên Kaggle và dùng để đánh giá các đội trong cuộc thi.

Để có thể làm feature engineering tốt, bước đầu tiên ta cần quan sát và hiểu được dữ liệu. Ta sẽ sử dụng các kỹ thuật bên thống kê gồm các số liệu thống kê và biểu đồ (visualization). Explore Data Analysis (EDA) sẽ giúp ta đánh giá, lựa chọn và biến đổi dữ liệu thành feature phù hợp cho model.

Khi đã có các phân tích từ EDA, ta sẽ có những hướng giải quyết tốt hơn khi đối mặt với các vấn đề bên dưới:

  • Dữ liệu bị NaN (Not a Number), Null (missing data), nguyên nhân từ đâu?
  • Kiểu dữ liệu không khớp (e.g. 1990.0 là kiểu số thực nhưng load lên lại là kiểu string), nên ép kiểu như thế nào?
  • Dữ liệu bị lặp (duplicate) nên chọn và bỏ bớt cái nào?
  • Dữ liệu không liên quan, có phải do nhập sai?
  • Dữ liệu bất thường (e.g. tuổi bị âm, huyết áp bằng không, ngày tháng không đúng format) nên biến đổi thế nào?
  • Dữ liệu ở dạng categorical thì nên biến đổi bằng one-hot encoding hay mapping number?
  • etc.

Tiếp tục đọc “DS-mini EDA: Explore Data Analysis”

Nổi bật

Data Science mini course

ds_mini_course

Mini course này được thiết kế dành cho những bạn còn “chân ướt chân ráo” bước vào lĩnh vực Data Science (DS). Các chủ đề sẽ xoay quanh tập dữ liệu từ cuộc thi Kaggle Home Credit Default Risk, việc này giúp cho người học tập trung kiến thức của mình vào trong ngữ cảnh là một cuộc thi. Từ đó, ta sẽ có động lực cũng như ghi nhớ tốt hơn các syntax và tình huống xử lý cụ thể trong ngôn ngữ lập trình Python.

Mỗi chương được trình bày bằng nhiều notebooks. Trong mỗi notebooks, có những đoạn code và phần ghi chú bằng Tiếng Việt cho người mới dễ theo dõi. Bên cạnh là Tiếng Anh được dùng trong những comment đơn giản. Ta có thể học bằng cách nhập lại đoạn code trên máy của mình và quan sát phản hồi. Những cú pháp khó hiểu, ta có thể tra Google để tìm hiểu thêm thông tin. Mỗi tuần, tôi sẽ cố gắng hoàn tất một chương cho đến lúc hoàn thành mini course này.

Kết thúc series, tôi hy vọng mọi người sẽ phát triển được các kỹ năng thực tế vào trong công việc, cải thiện khả năng quan sát và phân tích dữ liệu, hoặc có thể dùng course này làm tài nguyên training cho team DS của mình.

Tiếp tục đọc “Data Science mini course”

Vọc thử Orange: phần mềm data mining

orange_overview

Tôi thường nhận được nhiều câu hỏi từ các bạn ở nhóm ngành khác IT, rất quan tâm đến lĩnh vực Data mining và Machine learning, rằng họ không biết nên bắt đầu từ đâu và như thế nào, có cần phải học lập trình không, có cần phải biết xác suất thống kê không. Tôi thường trả lời rằng:

Cũng giống như bạn chơi piano vậy, bạn không cần phải học nhạc lý để có thể chơi được nhạc cụ này nhưng nếu bạn không học những kiến thức căn cơ đó, bạn chỉ chơi được ở level trung bình, chỉ đủ thoả mãn sở thích, không đi xa và lâu dài được.

Lập trình và thống kê toán là một trong các kĩ năng không thể thiếu để tiến hành xây dựng các mô hình phân tích và nghiên cứu phức tạp. Tuy nhiên, những người không biết lập trình vẫn có thể sử dụng các sản phẩm phần mềm để phân tích và xử lý thông tin ở mức cơ bản một cách nhanh chóng mà không cần biết lập trình. Điển hình là các phần mềm spreadsheet quen thuộc như Excel (Windows), Libre office Calc (Linux), Numbers (Mac OS). Ta có thể làm các thống kê trên bảng dữ liệu (sum, count, avg, stddev, quantile, etc.), transform dữ liệu, load dữ liệu từ nhiều nguồn, visualize bằng các biểu đồ trực quan, thậm chí ta có thể làm data mining nếu ta cài thêm các plugin cho chúng.

Xu hướng tương lai mà các bạn sẽ nhận thấy đó là tất cả các tác vụ hiện nay mà Data Engineer/Analyst/Scientist đang làm mỗi ngày dần dần sẽ bị thay thế bởi các công cụ automation mạnh mẽ và trực quan, tiết kiệm chi phí thực nghiệm thay vì hàng tuần, tháng chỉ cần một hai ngày là hoàn tất. Đó cũng là mục đích tiến hoá của ngành công nghiệp, cố gắng tự động hoá các công việc tay chân vất vả, nhàm chán để nhường chỗ cho con người sáng tạo ở các vai trò khác quan trọng hơn. Bản thân tôi cũng thuộc type người lười công việc tay chân, không thích coding nhiều, cái gì automation được thì tôi rất muốn thử và sử dụng ngay.

Orange là một trong những công cụ Data mining nhắm đến mục tiêu tự động hoá này. Tôi nhận thấy đây là phần mềm dễ sử dụng nhờ giao diện nhỏ gọn, các toolbox được sắp xếp hợp lý mạch lạc, ai cũng có thể bắt đầu. Trong bài viết này, tôi sẽ tiến hành phân tích dữ liệu cũng như cài đặt một số hàm Machine learning quen thuộc để cho các bạn mới bắt đầu có thể hình dung vắn tắt một pipeline làm việc với dữ liệu thì sẽ như thế nào.

Bài viết sẽ bắt đầu bằng lược đồ overview của workflow mà bạn đang quan tâm rồi mới đi vào chi tiết từng thành phần. Trong quá trình hướng dẫn, những bước đã được trình bày, tôi sẽ lướt qua và chỉ đề cập đến các bước mới. Ở mỗi phần, tôi cũng dẫn link đến file Orange workflows (*.ows) để các bạn có thể download về tham khảo.

Tiếp tục đọc “Vọc thử Orange: phần mềm data mining”

Python snippet: Visualizing

my-favorite-colors

Python snippet là series các bài viết tổng hợp lại những đoạn code hữu ích trong quá trình làm việc và nghiên cứu của tôi. Mục đích chủ yếu làm nơi tham khảo nhanh để tiết kiệm thời gian cài đặt và triển khai. Tôi sẽ bắt đầu với visualizing gồm các chart (biểu đồ) cơ bản thường hay dùng để phân tích dữ liệu.

Source code: data-science-works
Thư viện: matplotlib, numpy

Tiếp tục đọc “Python snippet: Visualizing”

Các bước phân tích dữ liệu

Các bước phân tích dữ liệu

Trong quá khứ, khi bắt đầu nghiên cứu một vấn đề nào đó, ta thường phải tìm kiếm hay thu thập dữ liệu tương ứng với bài toán mà ta đề ra. Nhờ có tiến bộ của internet mà ngày nay ta được tiếp cận với nhiều thông tin hơn, đến nỗi quá nhiều, quá Big khiến cho vấn đề không còn nằm ở chỗ thiếu thông tin nữa mà là làm sao rút trích được những thông tin hữu ích và súc tích nhất cho câu hỏi ban đầu.

Khi đó ta thường đối mặt với những thách thức về dữ liệu như:

  • Làm sao tìm được dữ liệu cho bài toán của mình?
  • Phân tích dữ liệu thu thập được như thế nào?
  • Sau khi phân tích, ta có thể đưa ra được kết luận thú vị nào không cho bài toán đề ra?

Mặc dù mỗi lĩnh vực nghiên cứu khác nhau sẽ có những đòi hỏi và mục tiêu khác nhau, nhưng nhìn chung, ta có thể áp dụng cùng một phương pháp hữu ích như tôi sắp trình bày bên dưới để có thể tiến hành một quy trình phân tích dữ liệu thành công.

Tiếp tục đọc “Các bước phân tích dữ liệu”

Exploratory Data Analysis: Các nguyên tắc trình bày biểu đồ

7 Kinds of Data Stories
7 Kinds of Data Stories

Mục tiêu của trình bày biểu đồ là để giao tiếp thông tin rõ ràng, toàn vẹn, và hiệu quả hơn. Một biểu đồ được trình bày tốt sẽ khuyến khích sự tham gia của nhiều thành viên trong nhóm, cũng như giúp mọi người tập trung vào bài báo cáo hơn. Với tập dữ liệu đồ sộ, ta cần một cách hiệu quả để có thể hiểu được tính chất của tập dữ liệu đó. Hệ thống thị giác của con người là kênh đón nhận thông tin nhanh chóng và hiệu quả nhất nên việc nắm bắt các nguyên tắc khi trình bày là một kiến thức hữu ích.

Tiếp tục đọc “Exploratory Data Analysis: Các nguyên tắc trình bày biểu đồ”

Công cụ Data Analysis

Data analysis tools
Data analysis tools

Sau một thời gian tìm kiếm các công cụ mã nguồn mở miễn phí phục vụ cho phân tích Big Data, tôi đã góp nhặt và tổng hợp thành danh sách 6 công cụ phân tích dữ liệu miễn phí và mạnh mẽ cho các doanh nghiệp hiện nay. Các công cụ này đều thoả các tiêu chí như: miễn phí (ai cũng có thể download về dùng), dễ dàng sử dụng (giao diện trực quan), khả năng tương thích cao (làm việc trên nhiều loại tài liệu khác nhau), có nhiều tài liệu hướng dẫn.

Tiếp tục đọc “Công cụ Data Analysis”

Exploratory Data Analysis: Các hệ thống Plotting

xyplot plotting 2x2
Trong bài viết này, ta sẽ khảo sát tổng quan ba hệ thống plotting trong R. Mỗi hệ thống có điểm mạnh và điểm yếu riêng. Chúng ta sẽ tìm hiểu sơ về ý tưởng tổng quát của các hệ thống này. Ở các bài viết sau, ta sẽ đi vào chi tiết hơn.

Notebooks: explore_plot_sys.

Exploratory Data Analysis: K Means Clustering

 

K Means Clustering
K Means Clustering

Trong bài viết này, ta sẽ khảo sát về k-means clustering, một cách đơn giản khác để quan sát tập dữ liệu đa chiều (multi-dimensional data). Tương tự như hierarchical clustering, kĩ thuật này hữu ích khi bước đầu phân tích dữ liệu (quan sát mối quan hệ giữa các điểm dữ liệu, thuộc tính).

Notebooks: explore_kmeans_clustering.

Exploratory Data Analysis: Hierarchical Clustering

 

Hierarchical Clustering
Hierarchical Clustering

Hôm nay, chúng ta sẽ tìm hiểu về hierarchical clustering. Đây là kĩ thuật hữu ích trong giai đoạn đầu phân tích dữ liệu, nó giúp chúng ta hiểu rõ hơn về tập dữ liệu đang khảo sát (nhận dạng mẫu, mối quan hệ giữa các thuộc tính). Hierarchical clustering có nghĩa là tạo ra cây phân cấp các nhóm dữ liệu.

Notebooks: explore_hierarchical_clustering.