Chuyển đến nội dung chính

Hướng dẫn DeepChecks: Tự động hoá kiểm thử Machine Learning

Tìm hiểu cách thực hiện kiểm định dữ liệu và mô hình để đảm bảo hiệu năng machine learning vững chắc với hướng dẫn từng bước tự động hoá kiểm thử bằng DeepChecks.
· 12 phút đọc

Khám phá cùng AI

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về DeepChecks và cách sử dụng để thực hiện kiểm định dữ liệu và kiểm thử machine learning. Chúng ta cũng sẽ dùng GitHub Actions để tự động hoá kiểm thử mô hình và lưu kết quả dưới dạng artifacts. 

Trong quá trình thực hiện, chúng ta sẽ tìm hiểu về kiểm thử machine learning và DeepChecks, chạy bộ kiểm tra tính toàn vẹn dữ liệu (data integrity suite) của DeepChecks, và tạo báo cáo tổng hợp. Chúng ta cũng sẽ tạo báo cáo kiểm thử machine learning bằng cách chạy bộ đánh giá mô hình, học cách chạy một bài kiểm tra đơn lẻ thay vì toàn bộ bộ kiểm tra, tự động hoá quy trình kiểm thử bằng GitHub Actions, và lưu báo cáo kiểm thử machine learning dưới dạng GitHub Artifact. 

Hình minh hoạ Tự động hoá kiểm thử Machine Learning bằng DeepChecks

Hình do tác giả cung cấp

Kiểm thử Machine Learning là gì?

Kiểm thử machine learning là một quy trình quan trọng nhằm đánh giá và xác thực hiệu năng của các mô hình machine learning để đảm bảo tính công bằng, độ chính xác và khả năng chịu lỗi. Kiểm thử không chỉ là về độ chính xác và hiệu năng mô hình. Chúng ta cần xem xét sai lệch (bias) của mô hình, dương tính giả, âm tính giả, các chỉ số hiệu năng khác nhau, thông lượng của mô hình, và sự phù hợp của mô hình với các nguyên tắc đạo đức AI. 

Quy trình kiểm thử bao gồm nhiều dạng đánh giá như kiểm định dữ liệu, cross-validation, F1-score, ma trận nhầm lẫn (confusion matrix), trôi dự đoán (prediction drift), trôi dữ liệu (data drift), và kiểm thử độ bền (robustness), mỗi loại được thiết kế để xác minh các khía cạnh khác nhau về hiệu năng và độ tin cậy của mô hình. 

Chúng ta cũng chia bộ dữ liệu thành ba phần để có thể đánh giá mô hình trong quá trình huấn luyện và sau khi huấn luyện trên tập dữ liệu chưa từng thấy. 

Kiểm thử machine learning là phần thiết yếu của các ứng dụng AI, và tự động hoá nó cùng với huấn luyện mô hình sẽ giúp chúng ta có các hệ thống AI đáng tin cậy phục vụ con người.

Nếu bạn mới bắt đầu với machine learning và muốn học những điều cơ bản, hãy tham gia Machine Learning Fundamentals với lộ trình kỹ năng Python. Khoá học này sẽ dạy bạn các nền tảng machine learning với Python, bắt đầu từ học có giám sát bằng thư viện scikit-learn.

Bắt đầu với DeepChecks

DeepChecks là một gói Python mã nguồn mở được thiết kế để hỗ trợ kiểm thử và kiểm định toàn diện cho mô hình và dữ liệu machine learning. Nó cung cấp nhiều kiểm tra dựng sẵn nhằm phát hiện các vấn đề liên quan đến hiệu năng mô hình, phân phối dữ liệu, tính toàn vẹn dữ liệu, và nhiều hơn nữa. DeepChecks bao gồm các chức năng kiểm định liên tục, đảm bảo mô hình duy trì độ tin cậy và hiệu quả khi được triển khai và sử dụng trong môi trường thực tế.

Chúng ta sẽ bắt đầu bằng cách cài đặt gói Python bằng lệnh pip.

%pip install deepchecks --upgrade -q

Nạp dữ liệu

Trong hướng dẫn này, chúng ta sử dụng Loan Data từ bộ dữ liệu của DataCamp. Bộ dữ liệu gồm 9578 dòng và thông tin về cấu trúc khoản vay, người vay, và liệu khoản vay có được hoàn trả đầy đủ hay không.

Tải tệp CSV bằng Pandas và hiển thị 5 dòng đầu.

import pandas as pd
loan_data = pd.read_csv("loan_data.csv")
loan_data.head()

5 dòng đầu của bộ dữ liệu khoản vay

Chuẩn bị dữ liệu

Tạo dataset DeepChecks bằng bộ dữ liệu khoản vay, tên cột nhãn, và tên thuộc tính phân loại.

from sklearn.model_selection import train_test_split
from deepchecks.tabular import Dataset

label_col = 'not.fully.paid'

deep_loan_data = Dataset(loan_data, label=label_col, cat_features=["purpose"])

Chạy bộ kiểm tra tính toàn vẹn dữ liệu của DeepChecks

Chúng ta sẽ dùng bộ kiểm tra tính toàn vẹn cho dữ liệu dạng bảng. Bộ này sẽ tự động chạy tất cả các bài kiểm tra và tạo một báo cáo tương tác với kết quả. 

Để làm điều này, chúng ta sẽ nhập bộ kiểm tra tính toàn vẹn dữ liệu, khởi tạo nó, sau đó chạy bộ kiểm tra với dữ liệu khoản vay của DeepChecks. Cuối cùng, chúng ta sẽ hiển thị kết quả.

from deepchecks.tabular.suites import data_integrity

integ_suite = data_integrity()
suite_result = integ_suite.run(deep_loan_data)
suite_result.show()

Lưu ý: Chúng ta đang dùng DataLab làm môi trường phát triển. Việc sử dụng ipywidgets đã bị vô hiệu hoá, khiến kết quả không thể hiển thị trực tiếp. Thay vào đó, chúng ta sẽ dùng hàm 'show_in_iframe' để hiển thị kết quả dưới dạng iframe. Kết quả sẽ giống nhau ở mọi cấp độ.

suite_result.show_in_iframe()

Báo cáo tính toàn vẹn dữ liệu của chúng ta bao gồm kết quả các bài kiểm tra về:

  • Tương quan Thuộc tính - Nhãn
  • Tương quan Thuộc tính - Thuộc tính
  • Giá trị đơn trong cột
  • Ký tự đặc biệt
  • Null hỗn hợp
  • Kiểu dữ liệu hỗn hợp
  • Không khớp chuỗi
  • Bản ghi trùng lặp
  • Độ dài chuỗi vượt giới hạn
  • Nhãn xung đột
  • Phát hiện mẫu ngoại lệ

kết quả bộ kiểm tra tính toàn vẹn dữ liệu

Kết quả kiểm tra Tính toàn vẹn dữ liệu trong Jupyter Notebook. 

Bạn thậm chí có thể lưu kết quả dưới dạng tệp HTML và chia sẻ với đồng nghiệp. 

suite_result.save_as_html()
'output.html'

Chạy một bài kiểm tra đơn lẻ

Chạy toàn bộ bộ kiểm tra trên một bộ dữ liệu lớn không hiệu quả vì sẽ mất nhiều thời gian để sinh kết quả. Thay vào đó, bạn có thể chạy một vài bài kiểm tra riêng lẻ phù hợp với dữ liệu của bạn và tự tạo báo cáo.

Để chạy một bài kiểm tra đơn, hãy nhập các kiểm tra cho dữ liệu dạng bảng, khởi tạo kiểm tra, và chạy nó với dữ liệu Khoản vay của DeepCheck. Sau đó, hiển thị các giá trị thay vì tạo báo cáo tương tác bằng hàm results.value.

from deepchecks.tabular.checks import IsSingleValue, DataDuplicates

result = IsSingleValue().run(deep_loan_data)
result.value

Như ta thấy, nó hiển thị số lượng giá trị duy nhất có trong mỗi cột. 

{'credit.policy': 2,
 'purpose': 7,
 'int.rate': 249,
 'installment': 4788,
 'log.annual.inc': 1987,
 'dti': 2529,
 'fico': 44,
 'days.with.cr.line': 2687,
 'revol.bal': 7869,
 'revol.util': 1035,
 'inq.last.6mths': 28,
 'delinq.2yrs': 11,
 'pub.rec': 6,
 'not.fully.paid': 2}

Hãy thử kiểm tra các mẫu trùng lặp trong dữ liệu của chúng ta. 

result = DataDuplicates().run(deep_loan_data)
result.value

Chúng ta có 0 bản ghi trùng lặp trong tập dữ liệu. 

0.0

Kiểm thử Machine Learning với DeepChecks

Trong phần này, chúng ta sẽ kết hợp nhiều mô hình và huấn luyện chúng trên bộ dữ liệu khoản vay đã xử lý. Sau đó, để tạo báo cáo kiểm thử mô hình, chúng ta sẽ chạy bộ đánh giá mô hình trên các tập huấn luyện và kiểm tra. 

Xử lý dữ liệu và huấn luyện mô hình

  1. Nhập các hàm thiết yếu từ thư viện Scikit-learn. 
  2. Chia bộ dữ liệu thành tập huấn luyện và kiểm tra. 
  3. Chuyển cột phân loại 'purpose' sang dạng số bằng bộ mã hoá nhãn.
  4. Định nghĩa các mô hình LogisticRegression, RandomForestClassifier, và GaussianNB. 
  5. Kết hợp mô hình bằng voting classifier. 
  6. Huấn luyện mô hình tổ hợp trên tập huấn luyện. 
from sklearn.linear_model import LogisticRegression
from sklearn.ensemble import RandomForestClassifier
from sklearn.ensemble import VotingClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import LabelEncoder

# Train test split
df_train, df_test = train_test_split(loan_data, stratify=loan_data[label_col], random_state=0)

# Encode the 'purpose' column
label_encoder = LabelEncoder()
df_train['purpose'] = label_encoder.fit_transform(df_train['purpose'])
df_test['purpose'] = label_encoder.fit_transform(df_test['purpose'])

# Define models
model_1 = LogisticRegression(random_state=1, max_iter=10000)
model_2 = RandomForestClassifier(n_estimators=50, random_state=1)
model_3 = GaussianNB()

# Create the VotingClassifier
clf_model = VotingClassifier(
    estimators=[('lr', model_1), ('rf', model_2), ('svc', model_3)],
    voting='soft'
)

# Train the model
clf_model.fit(df_train.drop(label_col, axis=1), df_train[label_col])

tóm tắt mô hình

Chạy bộ đánh giá mô hình

Chúng ta sẽ chạy bộ đánh giá mô hình của DeepChecks để đánh giá hiệu năng mô hình. 

  1. Chuyển cả tập huấn luyện và kiểm tra thành dataset DeepCheck. 
  2. Khởi tạo đánh giá mô hình và chạy với các tập huấn luyện, kiểm tra, cùng mô hình. 
  3. Hiển thị kết quả trong iframe. 
from deepchecks.tabular.suites import model_evaluation

deep_train = Dataset(df_train, label=label_col, cat_features=[])
deep_test =  Dataset(df_test,  label=label_col, cat_features=[])

evaluation_suite = model_evaluation()
suite_result = evaluation_suite.run(deep_train, deep_test, clf_model)
suite_result.show_in_iframe()

Báo cáo đánh giá mô hình của chúng ta bao gồm kết quả các bài kiểm tra về:

  • Báo cáo ROC
  • Hiệu năng phân đoạn yếu
  • Thuộc tính không được sử dụng
  • Hiệu năng Train - Test
  • Trôi dự đoán
  • So sánh với mô hình đơn giản
  • Thời gian suy luận mô hình
  • Báo cáo Ma trận nhầm lẫn
  • Và nhiều nội dung khác

kết quả bộ đánh giá mô hình

  1. Để xem kết quả ở định dạng JSON, hãy dùng hàm to_json(). 
suite_result.to_json()

Chạy một bài kiểm tra đơn lẻ

Tương tự như kiểm định dữ liệu, bạn có thể chạy một bài kiểm thử machine learning đơn lẻ. Trong ví dụ này, chúng ta sẽ chạy kiểm tra trôi nhãn trên tập huấn luyện và kiểm tra để xem nhãn có thay đổi theo thời gian hay không. 

from deepchecks.tabular.checks import LabelDrift
check = LabelDrift()
result = check.run(deep_train, deep_test)
result.value

Không phát hiện trôi trong dữ liệu.

{'Drift score': 0.0, 'Method': "Cramer's V"}

Nếu bạn gặp khó khăn khi chạy các bộ kiểm định dữ liệu và đánh giá mô hình, vui lòng tham khảo không gian làm việc DataLab tại Machine Learning Testing with DeepChecks.

Nếu bạn quan tâm đến kiểm thử machine learning theo cách “thủ công”, hãy theo dõi hướng dẫn Machine Learning Experimentation để học cách cấu trúc, ghi log, và phân tích các thí nghiệm machine learning của bạn bằng Weights & Biases.

Tự động hoá kiểm thử Machine Learning bằng GitHub Actions và DeepChecks

Hãy tự động hoá giai đoạn kiểm định dữ liệu, huấn luyện mô hình, và đánh giá mô hình với GitHub Actions và lưu kết quả dưới dạng tệp zip. 

Tự động hoá kiểm thử machine learning là phần không thể thiếu của đường ống MLOps. Tìm hiểu thêm bằng cách tham gia lộ trình kỹ năng MLOps Fundamentals. Trong chuỗi khoá học này, bạn sẽ học các nguyên tắc cơ bản để đưa mô hình machine learning vào sản xuất và giám sát chúng nhằm mang lại giá trị kinh doanh.

Thiết lập

  1. Truy cập tài khoản GitHub và tạo một repository mới với đầy đủ thông tin cần thiết. 

tạo repository GitHub mới

  1. Clone repository về máy cục bộ.
  2. Chuyển thư mục làm việc sang repository. 
  3. Tạo thư mục mới “data” và di chuyển tệp CSV dữ liệu khoản vay từ thư mục "Downloads" vào thư mục của repository. 
  4. Tạo kiểm định dữ liệu bằng Python và mở VSCode (môi trường phát triển tích hợp). 
$ cd C:\Repository\GitHub\
$ git clone https://github.com/kingabzpro/Automating-Machine-Learning-Testing.git

$ cd .\Automating-Machine-Learning-Testing\
$ mkdir data
$ mv -v ".Downloads\loan_data.csv" ".\Automating-Machine-Learning-Testing\data"
$ code -r data_validation.py

Tệp kiểm định dữ liệu

  1. Trong tệp kiểm định dữ liệu, bạn sẽ tải tệp CSV, chuyển đổi thành dataset DeepChecks, khởi tạo bộ kiểm tra tính toàn vẹn dữ liệu và chạy nó trên bộ dữ liệu khoản vay. 
  2. Tạo thư mục mới “results” và lưu kết quả dưới dạng tệp HTML. 
import pandas as pd
from deepchecks.tabular import Dataset
from deepchecks.tabular.suites import data_integrity

# Load the loan data from a CSV file
loan_data = pd.read_csv("data/loan_data.csv")

# Define the label column
label_col = "not.fully.paid"

# Create a Deepchecks Dataset object with the loan data
deep_loan_data = Dataset(loan_data, label=label_col, cat_features=["purpose"])

# Initialize the data integrity suite
integ_suite = data_integrity()

# Run the data integrity suite on the dataset
suite_result = integ_suite.run(deep_loan_data)

# Save the results of the data integrity suite as an HTML file
suite_result.save_as_html("results/data_validation.html")

Tệp kiểm thử mô hình

  1. Tạo một tệp Python cho kiểm định dữ liệu bao gồm xử lý dữ liệu, xây dựng mô hình, huấn luyện và đánh giá. Tệp cũng cần bao gồm việc chuyển đổi dữ liệu thành dataset DeepChecks, chạy bộ đánh giá mô hình, và lưu dưới dạng tệp HTML trong thư mục "results".
$ code -r train_validation.py
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, VotingClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.preprocessing import LabelEncoder, StandardScaler
from deepchecks.tabular import Dataset
from deepchecks.tabular.suites import model_evaluation

# Load the loan data from a CSV file
loan_data = pd.read_csv("data/loan_data.csv")

# Define the label column
label_col = "not.fully.paid"

# Train test split
df_train, df_test = train_test_split(
    loan_data, stratify=loan_data[label_col], random_state=0
)

# Encode the 'purpose' column
label_encoder = LabelEncoder()
df_train["purpose"] = label_encoder.fit_transform(df_train["purpose"])
df_test["purpose"] = label_encoder.transform(df_test["purpose"])

# Standardize the features
scaler = StandardScaler()
df_train[df_train.columns.difference([label_col])] = scaler.fit_transform(df_train[df_train.columns.difference([label_col])])
df_test[df_test.columns.difference([label_col])] = scaler.transform(df_test[df_test.columns.difference([label_col])])

# Define models
model_1 = LogisticRegression(random_state=1, max_iter=10000)
model_2 = RandomForestClassifier(n_estimators=50, random_state=1)
model_3 = GaussianNB()

# Create the VotingClassifier
clf_model = VotingClassifier(
    estimators=[("lr", model_1), ("rf", model_2), ("gnb", model_3)], voting="soft"
)

# Train the model
clf_model.fit(df_train.drop(label_col, axis=1), df_train[label_col])

# Calculate the accuracy score using the .score function
accuracy = clf_model.score(df_test.drop(label_col, axis=1), df_test[label_col])

# Print the accuracy score
print(f"Accuracy: {accuracy:.2f}")

# Create Deepchecks datasets
deep_train = Dataset(df_train, label=label_col, cat_features=["purpose"])
deep_test = Dataset(df_test, label=label_col, cat_features=["purpose"])

# Run the evaluation suite
evaluation_suite = model_evaluation()
suite_result = evaluation_suite.run(deep_train, deep_test, clf_model)

# Save the results as HTML
suite_result.save_as_html("results/model_validation.html")

Sử dụng GitHub Actions

Nếu bạn mới làm quen với GitHub Actions, vui lòng hoàn tất hướng dẫn "GitHub Actions and MakeFile: A Hands-on Introduction" trước khi bắt đầu quá trình tự động hoá. Hướng dẫn này sẽ cung cấp cái nhìn chi tiết về cách GitHub Actions hoạt động kèm ví dụ mã.

  1. Để khởi tạo GitHub Actions, bạn cần stage và commit các thay đổi rồi đẩy (push) lên repository GitHub từ xa. 
$ git add .
$ git commit -m "Data and Validation files"  
$ git push
  1. Truy cập repository GitHub, nhấp vào tab “Actions” và sau đó nhấp vào dòng chữ màu xanh “set up a workflow yourself”. 

thiết lập quy trình công việc GitHub Action

  1. Chúng ta sẽ được chuyển hướng tới tệp workflow main.yml. Vui lòng sao chép và dán đoạn mã sau. Đoạn mã dưới đây sẽ thiết lập môi trường và cài đặt gói DeepChecks. Sau đó, nó sẽ tạo thư mục, chạy kiểm định dữ liệu và đánh giá mô hình, đồng thời lưu kết quả dưới dạng GitHub Artifact.
name: Model Training and Validation

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Set up Python 3.10
        uses: actions/setup-python@v5
        with:
          python-version: '3.10'

      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install deepchecks
          
      - name: Create a folder
        run: |
          mkdir -p results
          
      - name: Validate Data
        run: |
          python data_validation.py
      - name: Validate Model Performance
        run: |
          python train_validation.py
      - name: Archive Deepchecks Results
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: deepchecks results
          path: results/*_validation.html
  1. Commit các thay đổi kèm thông điệp. 

commit các thay đổi trên GitHub

Khi commit thay đổi lên nhánh chính, quy trình làm việc sẽ được khởi chạy. Để xem nhật ký chạy, chuyển đến tab "Actions" và nhấp vào lượt chạy hiện tại gắn với thông điệp commit.

theo dõi nhật ký chạy của workflow

  1. Khi lượt chạy workflow hoàn tất, vui lòng cuộn xuống và tải tệp zip trong phần “Artifacts”.

Artifact tạo ra trong thời gian chạy

  1. Mở tệp zip trên máy và xem kết quả kiểm định dữ liệu và mô hình. 

tệp zip chứa các tệp HTML của kiểm định dữ liệu và mô hình.

Vui lòng tham khảo repository kingabzpro/Automating-Machine-Learning-Testing làm tài liệu hướng dẫn. Repository này chứa dữ liệu, mã Python, tệp workflow, và các tệp cần thiết khác để chạy kiểm thử tự động hoàn chỉnh. 

Tự động hoá toàn bộ pipeline machine learning đòi hỏi kiến thức về nhiều quy trình và công cụ. Để tìm hiểu về các nội dung này, hãy cân nhắc tham gia khoá MLOps Deployment and Lifecycle. Khoá học này khám phá các khung MLOps hiện đại, tập trung vào vòng đời và triển khai mô hình machine learning.

Kết luận

Bằng cách tự động hoá quy trình kiểm thử, các nhà phát triển có thể nhanh chóng và hiệu quả xác thực độ chính xác và độ bền của mô hình trên các bộ dữ liệu lớn và phức tạp. Kiểm thử tự động giúp phát hiện sớm các vấn đề như không nhất quán dữ liệu, trôi dữ liệu, và thiên lệch mô hình — những vấn đề có thể không rõ ràng khi kiểm thử thủ công. Điều này giúp tiết kiệm thời gian và tăng cường khả năng đưa ra dự đoán công bằng, chính xác của mô hình.

Trong hướng dẫn này, chúng ta đã tìm hiểu về kiểm thử machine learning và cách sử dụng DeepChecks cho kiểm định dữ liệu và kiểm thử machine learning. Chúng ta cũng đã tự động hoá kiểm thử dữ liệu và mô hình, đồng thời lưu kết quả dưới dạng artifacts bằng GitHub Actions. 

Nếu bạn thấy hướng dẫn hữu ích và quan tâm đến việc bắt đầu sự nghiệp trong lĩnh vực machine learning, hãy cân nhắc đăng ký lộ trình nghề nghiệp Machine Learning Scientist with Python. Hoàn thành tất cả khoá học trong 3 tháng để sở hữu những kỹ năng cần thiết cho vị trí nhà khoa học machine learning.

Abid Ali Awan

Tác giả

Abid Ali Awan

Là một nhà khoa học dữ liệu được chứng nhận, tôi đam mê tận dụng công nghệ tiên tiến để tạo ra các ứng dụng học máy đổi mới. Với nền tảng vững chắc về nhận dạng giọng nói, phân tích và báo cáo dữ liệu, MLOps, AI hội thoại và NLP, tôi đã rèn giũa kỹ năng phát triển các hệ thống thông minh có thể tạo ra tác động thực sự. Bên cạnh chuyên môn kỹ thuật, tôi cũng là một người truyền đạt tốt, có khả năng chắt lọc các khái niệm phức tạp thành ngôn ngữ rõ ràng, súc tích. Nhờ đó, tôi trở thành một blogger được nhiều người quan tâm trong lĩnh vực khoa học dữ liệu, chia sẻ góc nhìn và kinh nghiệm với cộng đồng các chuyên gia dữ liệu ngày càng lớn. Hiện tại, tôi tập trung vào sáng tạo và biên tập nội dung, làm việc với các mô hình ngôn ngữ lớn để phát triển nội dung mạnh mẽ và hấp dẫn, giúp doanh nghiệp và cá nhân tận dụng tối đa dữ liệu của mình.

Chủ đề

Liên quan