Hướng dẫn tham gia cuộc thi Học máy cho người mới bắt đầu

Cường Vũ
9 min readJul 26, 2020

--

Từ khi phát động cuộc thi Kalapa’s CreditScoring Challenge For Students, có rất nhiều bạn sinh viên chia sẻ với mình là chưa có kinh nghiệm nên còn nhiều bỡ ngỡ và không biết bắt đầu từ đâu. Vì vậy, mình viết bài Hướng dẫn tham gia cuộc thi Học máy cho người mới bắt đầu nhằm giới thiệu những bước cơ bản. Hi vọng bài viết này sẽ có ích với các bạn lần đầu tiên tham gia.

Bước 1. Đọc thông tin cuộc thi

Cuộc thi Kalapa's CreditScoring Challenge For Students

Khi tham gia một cuộc thi Học máy, ví dụ với cuộc thi Kalapa’s CreditScoring Challenge For Students, một số thông tin các bạn cần nắm được ngay tại mục Giới thiệu cuộc thi:

Bài toán giải quyết vấn đề gì?

Credit score là chỉ số thể hiện uy tín của một cá nhân và thường là cơ sở để các tổ chức tín dụng xét duyệt, cấp hạn mức cho khoản vay hoặc cấp thẻ tín dụng cho khách hàng.

Trong cuộc thi, các bạn sẽ làm việc với tập dữ liệu gồm nhiều trường thông tin để xây dựng một mô hình dự đoán điểm tín dụng của khách hàng.

Với phần thông tin về cuộc thi này, dễ hiểu bài toán ở đây là: “Xây dựng mô hình dự đoán Điểm tín dụng của khách hàng. Ý nghĩa của bài toán là giúp các ngân hàng/tổ chức tín dụng quyết định xét duyệt và cấp hạn mức vay tiền cho khách hàng.

Dữ liệu có gì?

Dữ liệu là cơ sở để xây dựng mô hình, đây là phần cần quan tâm nhất trong một cuộc thi. Những thông tin cần xem xét:

  • Thông tin của tập dữ liệu là gì?
    Với cuộc thi của Kalapa (link), tập dữ liệu là THÔNG TIN KHÁCH HÀNG đăng ký Xét duyệt điểm tín dụng tại thời điểm Đăng ký, vì hệ thống cần ra quyết định tại thời điểm này, chứ không phải sau khi khách hàng đã được duyệt khoản vay. Tương tự, một bài toán về Dự đoán lừa đảo khi đăng ký vay tiền (AntiFraud), thời điểm lấy dữ liệu hành vi khách hàng phải là khi khách đăng ký chứ không thể là dữ liệu sau khi khách hàng đã nhận tiền giải ngân. :D
  • Tập dữ liệu có bao nhiêu samples? Tỷ lệ chia training/testing như thế nào?

Thông tin 53.030 khách hàng kèm theo mức độ uy tín (nhãn GOOD / BAD). Thông tin 20.381 khách hàng không kèm nhãn GOOD / BAD.

Trong tập dữ liệu của Kalapa, nhãn GOOD/BAD được thể hiện bởi cột Label. Giá trị cột Label là 1, tức là nhãn BAD, 0 là nhãn GOOD. 20.381 khách hàng trong tập testing chính là khách hàng ta cần dự đoán mức độ uy tín. 50% dữ liệu trong tập này sẽ được sử dụng để chấm public score (điểm hiển thị trên Bảng xếp hạng trong lúc cuộc thi diễn ra), 50% còn lại được sử dụng để chấm private score (khi cuộc thi đã kết thúc, và đây cũng chính là điểm Chung cuộc của cả cuộc thi). Private Score sẽ được công bố sau khi thời gian diễn ra cuộc thi kết thúc.

Cách phân chia dữ liệu phổ biến trong các cuộc thi Học máy. Nguồn: Internet.
  • Target cần dự đoán của bài toán là trường nào, có dạng gì?

Nhiệm vụ của bạn là xây dựng mô hình Credit Score và đưa ra dự đoán xác suất thuộc nhãn BAD của 20.381 khách hàng.

Target cần dự đoán là Dự đoán xác suất thuộc nhãn BAD của từng khách hàng. Giá trị dự đoán sẽ là số trong khoảng [0–1], giá trị càng cao sẽ càng có khả năng thuộc nhãn BAD lớn hơn.

Như vậy sau khi phân tích về tập dữ liệu của cuộc thi, chúng ta đã có hình dung kỹ hơn về bài toán và dữ liệu, từ đó có thể làm bước 2. Phân loại bài toán. Tuy nhiên, chúng ta chưa biết cách đánh giá chất lượng mô hình, thế nào là mô hình tốt hay không. Chúng ta sẽ phân tích tới phần tiếp theo: Tiêu chí đánh giá.

Tiêu chí đánh giá là gì?

Dù bạn đang đi học hay đi làm, khi làm Bài tập lớn hay xử lý công việc được sếp giao, chúng ta cũng cần nắm được Tiêu chí đánh giá công việc của mình là gì, từ đó có được cách thức làm việc tốt nhất. Ví dụ, công việc của bạn là Xây dựng ứng dụng tìm kiếm khách sạn gần nhất cho khách du lịch, thì tiêu chí đánh giá có thể là Thời gian ứng dụng trả về kết quả. Nếu công việc của bạn là Nâng cao hài lòng của khách hàng sử dụng ứng dụng Học Tiếng Anh, thì tiêu chí đánh giá có thể là Thời gian sử dụng ứng dụng/ngày, hoặc NPS (Net Promoter Score — khách hàng có sẵn lòng giới thiệu cho bạn bè học cùng hay không).

Cách tính điểm: GINI coeficient

Với cuộc thi này, Tiêu chí đánh giá một mô hình tốt là điểm Gini cao. Các bạn có thể tìm hiểu công thức chi tiết ở Link. Có thể hiểu đơn giản là, nếu những người có tín dụng thực tế thấp được xếp hạng tín dụng thấp hơn những người có tín dụng thực tế cao, thì điểm Gini của bạn càng cao (xếp đúng hơn).

Bước 2. Phân loại bài toán

Đầu tiên, chúng ta cần nắm được Có bao nhiêu loại bài toán trong Machine Learning. Các bạn có thể tham khảo bài viết này: https://ongxuanhong.wordpress.com/2015/10/05/cach-xac-dinh-dang-bai-toan-trong-machine-learning/

Các loại bài toán và thuật toán phổ biến. Nguồn: Internet

Trong bài viết, tác giả có nói tới việc Trả lời các câu hỏi nghiên cứu để xác định bài toán cần giải quyết.

Với bài toán của Kalapa, câu hỏi cần trả lời là: Khách hàng thuộc nhãn BAD hay GOOD? Do đó đây là bài toán Phân lớp (Classification), kết quả đưa ra sẽ là xác suất thuộc BAD là bao nhiêu. Chúng ta sẽ có các lựa chọn khác nhau về thuật toán sử dụng để giải bài này.

Đánh giá khách hàng: Good hay Bad? Nguồn: Internet

Bước 3. Bắt đầu với baseline model

Với bài toán Phân lớp, ta có nhiều thuật toán khác nhau để lựa chọn. Các bạn có thể tham khảo một vài thuật toán tại bài viết sau: https://analyticsindiamag.com/7-types-classification-algorithms/

Chúng ta có thể bắt đầu cuộc thi với một thuật toán đơn giản nhất, mục đích là xây dựng một Luồng hoàn chỉnh, bao gồm:

1. Đọc dữ liệu

2. Xử lý dữ liệu

3. Áp dụng thuật toán Học máy

4. Kiểm thử kết quả

5. Tối ưu (lặp lại từ bước 2: Xử lý dữ liệu)

Với cuộc thi của Kalapa, mình lựa chọn thuật toán LogisticRegression để dễ dàng sử dụng. Các bạn có thể đọc về Logistic Regression tại đây: https://machinelearningcoban.com/2017/01/27/logisticregression/.

Bài viết có giải thích khá rõ về mô hình thuật toán, cách hoạt động và tính chất của thuật toán. Nên nắm vững các thông tin này để sau này có hướng tuning thuật toán và lựa chọn cho các bài toán phù hợp. Tương tự với các thuật toán sử dụng về sau, các bạn cũng nên dành thời gian tìm hiểu để có cách sử dụng đúng thuật toán.

Baseline đơn giản nhất mình làm để bắt đầu được cuộc thi: https://www.kaggle.com/cuongvc93/klp-s-creditscoring-challenge-for-students

Trong baseline này, mình có các thành phần:

  • build_model_input: gồm phần đọc dữ liệu từ file (dữ liệu cuộc thi mình đã đưa lên kaggle data), xử lý dữ liệu (siêu đơn giản, mình chỉ loại bỏ các cột có giá trị dạng object và nhiều hơn 10 giá trị unique, sau đó dùng hàm get_dummies của pandas — Convert categorical variable into dummy/indicator variables để không phải xử lý các trường dữ liệu categorical). Sau đó chia dữ liệu training/testing (X & y là thuộc training, X_pred là dữ liệu testing)
  • Sử dụng thuật toán LogisticRegression (thư viện có sẵn của sklearn), học từ dữ liệu training

clf.fit(X, y)

  • Sử dụng mô hình đã được training (clf) để thực hiện dự đoán cho tập dữ liệu testing

y_pred = clf.predict_proba(X_pred.values)[:, 1]

  • Ghi dữ liệu dự đoán ra file theo đúng định dạng để thực hiện submit trên challenge.kalapa.vn. Điểm nhận được sẽ là Gini trên public score. (Đã có nhắc tới trong Phần 1, mục Dữ liệu có gì?).

Sau khi đã có baseline để hoàn thiện Luồng hoàn chỉnh, chúng ta bắt đầu bắt tay vào tối ưu mô hình bằng cách quay lại phần Xử lý dữ liệu, lựa chọn và tối ưu thuật toán, submit lại để kiểm thử kết quả tối ưu.

* Baseline này các bạn có thể login vào Kaggle, Clone về notebook của mình, chỉnh sửa và chạy thử nghiệm ngay trên Notebook của kaggle. Việc này tiết kiệm nhiều thời gian setup ở máy cá nhân cùng với việc dễ dàng chia sẻ, trao đổi với các thành viên trong team. Video hướng dẫn thực hiện clone notebook và sử dụng có tại đây.

Bước 4. Thử nghiệm, tối ưu, thử nghiệm, tối ưu…

Có rất nhiều hướng thử nghiệm khác nhau trong một cuộc thi học máy:

Xử lý dữ liệu

Đây là phần quan trọng bậc nhất trong việc nâng điểm số của cuộc thi. Xử lý dữ liệu có thể thực hiện các công việc sau:

  • Feature selections. Phân tích các trường dữ liệu theo nhiều cách khác nhau để phát hiện các trường dữ liệu quan trọng và không quan trọng => có thể bỏ các trường không quan trọng, làm ảnh hưởng tới kết quả cuối. Trong lời giải của team đạt giải nhì đồng đội cuộc thi lần 1, @Bắc đã có phần Feature selections, đã làm giảm được overfit của mô hình. Link tham khảo.
  • Loại bỏ outlier của các trường dữ liệu. Tham khảo bài viết tại link.
  • Tạo ra các trường dữ liệu mới có ý nghĩa. Ví dụ, trong cuộc thi Kalapa’ CreditScoring Challenge, với một vài bước đơn giản, anh @Hà Nguyễn đã thêm 88 new features trong bước xử lý Numerical Features (bài chia sẻ tham khảo tại link)
  • Và nhiều phương pháp khác nữa

Các bạn có thể tìm hiểu một số phương pháp Feature Engineering tại đây: https://towardsdatascience.com/feature-engineering-for-machine-learning-3a5e293a5114

Thuật toán

Có nhiều thuật toán Classification khác nhau để áp dụng cho bài toán này. Tuy nhiên từng thuật toán sẽ phù hợp với các bài toán và dữ liệu khác nhau, do đó mình suggest các bạn nên tìm hiểu nguyên lý, ưu nhược điểm của từng thuật toán để có cách áp dụng tốt nhất.

Khác

Một cách để tìm được nhiều hướng tối ưu là tham khảo các notebooks được chia sẻ từ các cuộc thi tương tự. Danh sách các notebook các bạn có thể tham khảo:

Solutions cho cuộc thi Kalapa’s CreditScoring Challenge For Students (06/07/2020–20/08/2020 — cuộc thi hiện tại):

Solutions cho cuộc thi Kalapa’s CreditScoring Challenge 1(15/01/2020–15/04/2020):

(Link cuộc thi: https://submission.kalapa.vn/)

Các bài chia sẻ của cuộc thi Home Credit Default Risk trên Kaggle (một cuộc thi tương tự Kalapa's CreditScoring Challenge do Home Credit tổ chức):

Chúc các bạn có thể học được nhiều điều từ các cuộc thi Học máy.

Nếu gặp khó khăn gì trong việc tham gia cuộc thi, các bạn có thể liên hệ với mình qua email cuongvc@kalapa.vn.

--

--