Giới thiệu tổng quan
- AWS experience: Intermediate / Advanced
- Time to complete: 90~120 minutes
- AWS Region: Singapore ap-southeast-1
- Cost to complete: ~5-8$ (Free Tier eligible)
- Services used: Amazon SageMaker AI
1. Chuẩn bị
Trong bước chuẩn bị cho lab SageMaker, chúng ta sẽ tiến hành tạo Amazon SageMaker Studio và tải các tập tin phục vụ cho lab từ GitHub repo. Bước chuẩn bị này có thể được sử dụng để chuẩn bị cho các bước tiếp theo trong chuỗi lab về Amazon SageMaker.
Amazon SageMaker Studio là một môi trường phát triển tích hợp (IDE) dựa trên web cho phép bạn Build, Train, Debug, Deploy và Monitor các mô hình ML của mình. Studio cung cấp tất cả các công cụ bạn cần để đưa các model của mình từ thử nghiệm đến môi trường thực tế đồng thời nâng cao năng suất của bạn.
1.1 Tạo SageMaker Studio
Ở bước chuẩn bị này, chúng ta sẽ tiến hành khởi tạo Amazon SageMaker Studio.
- Đăng nhập vào AWS Management Console, chọn Region Singapore, sau đó tìm kiếm và truy cập dịch vụ Sage Maker AI.
- Ở tab bên trái: Chọn Admin configurations -> Domains -> Setup for single user (Quick setup). SageMaker Domain là kho lưu trữ trung tâm để quản lý cấu hình SageMaker cho tổ chức của bạn.

- Sau khi quá trình khởi tạo Sage Maker Studio hoàn tất, tiếp theo sẽ tạo User profiles.

- Nhập thông tin user profiles, Name: admin-workshopsagemaker, Execution role: chọn Create a new role -> Chọn option Any S3 bucket -> Create role.


- Configure Application, giữ các giá trị mặc định. Chọn Next.

- Customize Studio UI, giữ các giá trị mặc định. Chọn Next.

- Data and storage settings, điền thông tin: Posix User(Uid): 1001 và Posix Group ID(Gid): 10000
- POSIX User ID (Uid): Đây là con số định danh duy nhất cho mỗi người dùng trong hệ thống Linux/Unix. Ví dụ,
1001
nghĩa là người dùng này sẽ có UID = 1001 trên các máy Linux, giúp phân biệt với các user khác. - POSIX Group ID (Gid): Tương tự như UID, GID là con số định danh cho một nhóm. Người dùng này sẽ thuộc về nhóm có GID =
10000
. Các quyền (permission) trên hệ thống file Linux sẽ dựa trên UID/GID để cho phép (hoặc không cho phép) người dùng đọc, ghi, thực thi,… trên các file/thư mục.
- Review and submit

- Sau khi quá trình khởi tạo User hoàn tất , click Open Studio.

- Đây là giao diện khởi đầu của Sage Maker AI Studio :

- Tiếp theo, khởi tạo JupyterLab phục vụ cho việc chạy các đoạn code ML. Chọn Create JupyterLab space. Đặt tên là cmp-jupyterLab -> chọn option Share with my domain -> Create space.

- Chọn cấu hình để chạy Notebook. Instance type: ml.t3.medium để tiết kiệm chi phí trong bài thực hành. Chọn nút Run space.

- Sau khi instance được khởi tạo, chọn Open để truy cập vào môi trường Notebook. Lưu ý: AWS sẽ tính phí dựa trên thời gian sử dụng instance, nếu không có nhu cầu sử dụng thì hãy Stop.

1.2 Tải Github repo
- Đây là giao diện Notebook. Tiếp theo, tải file Notebook đã được chuẩn bị sẵn trong bài thực hành tại đây. Sau đó thực hiện upload file lên Amazon Notebook. https://drive.google.com/file/d/1tNedSMNakuW2PDG2z__H7yOaM09laEsx/view?usp=sharing

- Bạn đã hoàn thành bước setup và chuẩn bị môi trường. Ở bước tiếp theo chúng ta sẽ tìm hiểu về Feature Engineering.
2. Feature Engineering
Trong phần này, bạn sẽ đảm nhận vai trò của một nhà phát triển ML làm việc tại một ngân hàng. Bạn đã được yêu cầu "phát triển một model ML để dự đoán liệu khách hàng có đăng ký chứng chỉ tiền gửi (CD)" hay không, model sẽ được train về bộ dữ liệu tiếp thị chứa thông tin về nhân khẩu học của khách hàng, phản ứng với các sự kiện tiếp thị và các yếu tố bên ngoài.
Dữ liệu đã được label để thuận tiện cho bạn và một cột trong tập dữ liệu xác định liệu khách hàng có đăng ký sản phẩm do ngân hàng cung cấp hay không. Một phiên bản của tập dữ liệu này có sẵn công khai từ kho lưu trữ ML do Đại học California, Irvine quản lý. Hướng dẫn này deploy model ML được giám sát, vì dữ liệu được label. (Học không giám sát xảy ra khi các tập dữ liệu không được label.)
Trong phần này, bạn sẽ tìm hiểu về phần được hightlight trong qui trình ML bên dưới:
- Chúng ta sẽ tập trung vào Feature Engineering và Visualization, tìm hiểu cách sử dụng Amazon SageMaker Data Wrangler để chuẩn bị data cho ML. Chúng ta cũng sẽ sử dụng Amazon SageMaker Feature để lưu trữ, sử dụng và chia sẻ các machine learning (ML) feature.

2.1 Chuẩn bị Dataset
Chuẩn bị Dataset và upload lên S3 bucket
- Kết nối tới địa chỉ sau trên trình duyệt của bạn và download dataset dưới đây để chuẩn bị cho bài lab.
https://sagemaker-sample-data-us-west-2.s3-us-west-2.amazonaws.com/autopilot/direct_marketing/bank-additional.zip
- Giải nén và lưu vào máy tính của bạn.
- Vào giao diện AWS Management Console và truy cập vào dịch vụ S3.
- Bucket sagemaker-studio-xxx được tạo tự động khi bạn tạo SageMaker Studio domain trong phần chuẩn bị.
- Thực hiện Upload các file lên S3 bucket.

- Bạn đã hoàn thành bước upload dataset vào Amazon S3. Ở bước tiếp theo chúng ta sẽ cấu hình tính năng Data Wrangler.
2.2 Cài đặt Data Wrangler
- Quay trở lại SageMaker Studio. Tại menu bên trái , click vào Data Wrangler -> Chọn nút Run in Canvas.
- Workspace instance (Session-Hrs) charges: $1.9/hour
- Data processing charges


- Amazon SageMaker Data Wrangler giảm thời gian chuẩn bị dữ liệu cho dữ liệu dạng bảng, hình ảnh và văn bản từ nhiều tuần xuống còn vài phút. Với SageMaker Data Wrangler, bạn có thể đơn giản hóa việc chuẩn bị dữ liệu và thiết kế tính năng thông qua giao diện ngôn ngữ tự nhiên và trực quan. Nhanh chóng chọn, nhập và chuyển đổi dữ liệu bằng SQL và hơn 300+ phép chuyển đổi tích hợp mà không cần viết mã. Tạo báo cáo dữ liệu trực quan để phát hiện các bất thường trên các loại dữ liệu và ước tính hiệu suất mô hình. Mở rộng quy mô để xử lý hàng petabyte dữ liệu.

- Tiếp theo, thực hiện import data từ S3.
- Click Import and prepare ở giữa màn hình.
- Dataset type: chọn Tabular
- chọn file bank-additional-full.csv.

Nhấn Next -> Click Import
Bạn đã hoàn thành bước tạo Data Wrangler Flow và Import Dataset từ S3. Bước tiếp theo chúng ta sẽ thực hiện một số phân tích cơ bản.
2.3 Phân tích Dataset
- Sau khi cấu hình import Dataset xong, chúng ta sẽ thấy Data Flow được biểu diễn như hình dưới.
- Trong Amazon SageMaker Data Wrangler, Data Flow (hoặc Data Wrangler Flow) là một luồng thao tác (data pipeline) giúp bạn:
- Nạp dữ liệu (import data) từ nhiều nguồn (S3, Redshift, Athena, v.v.).
- Biến đổi (transform) dữ liệu theo từng bước (operator) trong một giao diện trực quan.
- Xem trước và đánh giá kết quả biến đổi qua các bước (bạn có thể lọc, gộp cột, chuyển đổi kiểu dữ liệu, áp dụng hàm thống kê, chuẩn hoá text, v.v.).
- Xuất dữ liệu ra S3, feature store, hoặc dùng ngay trong các quy trình huấn luyện (training) và dự đoán (inference).

- Click tab Data, bạn sẽ có cái nhìn tổng quan về tập dữ liệu với tên và loại cột:

- Thông tin chi tiết của các features được mô tả dưới đây:
Thông tin cá nhân
- age : Tuổi khách hàng (numeric)
- job : Nghành nghề ( Chia theo nhóm : ‘admin.’, ‘services’, …)
- marital : Tình trạng hôn nhân ( Chia theo nhóm : ‘married’, ‘single’, …)
- education : Tình trạng học vấn ( Chia theo nhóm : ‘basic.4y’, ‘high.school’, …)
Sự kiện khách hàng
- default : Có sử dụng credit hay không ? ( Chia theo nhóm: ‘no’, ‘unknown’, …)
- housing : Có vay mua nhà không ? ( Chia theo nhóm: ‘no’, ‘yes’, …)
- loan : Có khoản vay cá nhân không ? ( Chia theo nhóm: ‘no’, ‘yes’, …)
Thông tin liên lạc phục vụ marketing
- contact : Phương thức liên lạc ( Chia theo nhóm: ‘cellular’, ‘telephone’, …)
- month : Tháng liên lạc lần cuối trong năm ( Chia theo nhóm: ‘may’, ‘nov’, …)
- day_of_week : Ngày liên lạc lần cuối trong tuần ( Chia theo nhóm: ‘mon’, ‘fri’, …)
- duration : Thời gian lần liên lạc cuối, theo giây(numeric). Ghi chú quan trọng: Nếu duration = 0 thì y = ‘no’.
Thông tin chương trình
- campaign : Số lượng liên lạc thực hiện trong campaign (chương trình )với khách hàng (numeric, kèm lần liên lạc cuối)
- pdays : Số ngày đã qua từ khi khách hàng liên lạc lần cuối từ một chương trình trước. (numeric)
- previous : Số lần liên lạc thực hiện trước chương trình với khách hàng.(numeric)
- poutcome : Kết quả của chương trình marketing. ( Chia theo nhóm: ‘nonexistent’,‘success’, …)
Yếu tố tác động bên ngoài.
- emp.var.rate : Tỷ lệ thay đổi việc làm - chỉ số hàng quý (numeric)
- cons.price.idx : Chỉ số giá tiêu dùng - chỉ số hàng tháng (numeric)
- cons.conf.idx : Chỉ số niềm tin người tiêu dùng - chỉ số hàng tháng (numeric)
- euribor3m : Lãi suất Euribor 3 tháng - chỉ báo hàng ngày (numeric)
- nr.employed : Số lượng nhân viên - chỉ số hàng quý (numeric)
Biến mục tiêu.
- y : Khách hàng có gửi tiền theo kỳ hạn không ?(binary: ‘yes’,‘no’)
2.4 Phân tích tương quan giữa feature và biến số mục tiêu
- Trước khi phân tích sự tương quan của dữ liệu, chúng ta hãy tạo bảng báo cáo phân tích chi tiết tổng quan của dữ liệu đã import.
Click dấu + , chọn option Get data insights. Nhập name là BankingDataDetails -> Click Create.

Data Wrangler sẽ thực hiện phân tích chi tiết data được import từ S3 và đưa ra 1 bản báo cáo tổng quan.
- Tiếp theo, thực hiện phân tích sự tương quan giữa feature Tuổi và biến mục tiêu y.
- Click tab Analyses.
- Analysis type: Histogram.
- Analytics name: đặt tên là Age.
- Click chọn cột age tại mục X asis.
- Click chọn cột y tại mục Color by.
- Click Preview để xem analysis. Bạn sẽ thấy biểu đồ trực quan về mối tương quan của feature Tuổi của một người lên biến mục tiêu y.
- Click Update để lưu thông tin analysis.

- Thực hiện tương tự để tạo anlysis tương quan giữa ngành nghề và biến mục tiêu y.
- Analysis tương quan theo ngành nghề.

- Thực hiện tương tự để tạo anlysis tương quan giữa tình trạng hôn nhân và biến mục tiêu y.
- Analysis tương quan theo tình trạng hôn nhân.

- Bạn đã hoàn thành tạo các phân tích tương quan giữa các feature và biến mục tiêu. Khi bạn thực hiện phân tích tương quan (correlation) giữa các biến đầu vào (features) và biến mục tiêu (target), mục đích chính là để:
- Xác định mức độ liên hệ giữa từng đặc trưng (feature) với biến mục tiêu, từ đó thấy được biến nào có đóng góp/ảnh hưởng lớn đến kết quả dự đoán.
- Phát hiện hiện tượng đa cộng tuyến (multicollinearity). Nếu hai hoặc nhiều feature có tương quan quá cao với nhau, việc giữ tất cả những feature này đôi khi có thể gây nhiễu mô hình hoặc làm mô hình bị overfit.
- Hỗ trợ lựa chọn đặc trưng (feature selection). Dựa vào mức độ tương quan, bạn có thể:
- Loại bớt các feature ít tương quan hoặc trùng lặp thông tin.
- Tập trung vào những feature thật sự quan trọng, giúp mô hình gọn nhẹ hơn.
- Đề xuất cách biến đổi dữ liệu (feature engineering). Nếu thấy có những quan hệ thú vị nhưng chưa phản ánh tốt bằng các biến gốc, bạn có thể tiến hành tạo mới (feature generation) hoặc biến đổi dữ liệu để tăng chất lượng mô hình.
- Bước tiếp theo, chúng ta sẽ thực hiện chuyển đổi dữ liệu.
2.5 Chuyển đổi dữ liệu
Làm sạch dữ liệu là một phần quan trọng nhất của hầu hết mọi dự án Machine Learning. Nó được cho là mang lại rủi ro lớn nhất nếu thực hiện không đúng cách, chất lượng model sẽ phụ thuộc vào ~70% dữ liệu đầu vào.
Chúng ta sẽ cùng thực hiện một vài chuyển đổi tùy chỉnh có chứa một số lệnh Python Pandas thực hiện các việc sau.
- Thay đổi dấu chấm . giá trị thành giá trị _
- Thêm một biến chỉ báo để lưu khi ngày có giá trị là 999.
- Gom nhóm các đối tượng ngành nghề student, retired và unemployed thành nhóm not_working.
- Thêm ID và ngày duy nhất cho feature store.
- Click tab Data -> Chọn nút Add transform.

- Click Custom Transform, sau đó click chọn Python (Pandas).

import time
import pandas as pd
# Change the value . into _
df = df.replace(regex=r'\.', value='_')
df = df.replace(regex=r'\_$', value='')
# Add two new indicators
df["no_previous_contact"] = (df["pdays"] == 999).astype(int)
df["not_working"] = df["job"].isin(["student", "retired", "unemployed"]).astype(int)
# Add unique ID and event time for features store
df['FS_ID'] = df.index + 1000
current_time_sec = int(round(time.time()))
df['FS_time'] = pd.Series([current_time_sec]*len(df), dtype="float64")
- Click Preview.
- Click Add.

- Bước tiếp theo chúng ta sẽ xóa feature duration khỏi Dataset vì chúng cần được dự báo với độ chính xác cao để sử dụng làm dữ liệu đầu vào cho các dự đoán trong tương lai.
- Click Add transform
- Click Manage Column.
- Click chọn Drop column.
- Click chọn cột duration.
- Click Preview để xem trước dữ liệu.
- Click Add để thêm bước biến đổi vào data flow.

- Chúng ta sẽ làm tương tự bước trên để loại bỏ năm cột sau đây và thêm các bước chuyển đổi đó vào data flow.
- emp.var.rate
- cons.price.idx
- cons.conf.idx
- euribor3m
- nr.employed

- Tiếp theo chúng ta sẽ thực hiện One hot encoding với các biến phân loại để chuyển đổi các biến phân loại thành tập hợp các chỉ số. Điều này sẽ mã hóa các tính năng phân loại dưới dạng one hot numeric array.
- One hot encoding là một trong những bước xử lí data trước khi trở thành input cho các machine learning model. Về cơ bản thì machine learning cần làm các phép tính, nếu data dạng số thì không vấn đề gì, nhưng nếu data ở dạng chữ (categorical data) thì không thể làm được như vậy. Chính vì thế, giải pháp là one hot encoding.

- Chúng ta sẽ sử dụng tính năng Encode Categorical của Data Wrangler để thực hiện việc biến đổi One hot encoding.
- Click chọn Ordinal encode.
- Click chọn cột job.
- Click Preview.
- Click Add để thêm biến đổi vào luồng dữ liệu.

- Chúng ta có thể sử dụng cùng một phương pháp cho phần còn lại của các cột phân loại sử dụng Custom Transform để thực hiện One hot encoding cho tất cả các cột phân loại trong một bước bằng cách sử dụng Custom Transform với Python (Pandas).
- Click Custom Transformation.
- Click chọn Python (Pandas).
- Sử dụng đoạn mã dưới đây.
import pandas as pd
df=pd.get_dummies(df)
- Click Preview để xem trước.
- Click Add để thêm biến đổi vào luồng dữ liệu.

- Bạn đã hoàn thành thêm các bước chuyển đổi dữ liệu vào dataflow. Bước tiếp theo chúng ta sẽ thực hiện export các feature vào SageMaker feature store.
2.6 Feature Store
SageMaker Feature Store là một kho quản lý và lưu trữ các biến đầu vào (features) được sử dụng trong mô hình machine learning (ML). Thay vì mỗi đội nhóm hoặc mỗi lần huấn luyện mô hình lại tạo và lưu riêng các features, Feature Store cho phép:
- Tạo kho lưu trữ tập trung (Centralized Store): Bạn định nghĩa “Feature Group” – một dạng bảng chứa các cột (features) và dòng (bản ghi dữ liệu). Tất cả mô hình hoặc pipeline có thể truy cập tập trung thay vì phải tự làm lại từng bước tiền xử lý.
- Tách biệt môi trường Online và Offline:
- Online Store: phục vụ các yêu cầu suy luận (inference) theo thời gian thực, có khả năng truy xuất dữ liệu “mới nhất” để input vào mô hình.
- Offline Store: lưu lịch sử dữ liệu khối lượng lớn (thường ở S3) để phục vụ huấn luyện (training), phân tích hoặc xây dựng tính năng mới.
- Theo dõi phiên bản, quản lý metadata: Feature Store quản lý thời gian, người tạo, kiểu dữ liệu, version… của từng feature.
- Click tab Data flow.
- Click dấu +.
- Click Export -> Export via Jupyter notebook -> SageMaker Feature Store.
- Chọn Download a local copy
- Click Download


- Thực hiện giải nén và upload 2 file .ipynb và .flow lên Notebook.

- Sau khi upload thành công, rename tên file sau khi upload, để dễ dàng quản lý. Mở file .ipynb vừa upload và chọn Kernel Python 3 để thực thi code.


Note: Chúng ta có thể xuất trực tiếp các feature được tạo sau khi chuyển đổi sang Amazon S3. Tuy nhiên trong lab này, trước tiên chúng ta sẽ xuất sang Amazon Feature Store (offline) để minh họa cách sử dụng dịch vụ này.
- Chúng ta sẽ truy xuất các tính năng từ Amazon Feature Store và chia chúng thành tập dữ liệu training và dữ liệu phục vụ validation/test . Sau đó, chúng ta sẽ export vào Amazon S3 trước giai đoạn training trong Amazon SageMaker.
- Chúng ta cùng xem cell đầu tiên của notebook.

- Copy và Paste đoạn code dưới đây để cập nhật các thông tin biến giúp xác định feature store. Sau đó nhấn Shift + Enter để chạy cell.
record_identifier_feature_name = "FS_ID"
if record_identifier_feature_name is None:
raise SystemExit("Select a column name as the feature group record identifier.")
event_time_feature_name = "FS_time"
if event_time_feature_name is None:
raise SystemExit("Select a column name as the event time feature name.")

- Tiếp tục thực thi cell thứ 2 và cell thứ 3.
- Tại cell thứ 4 chúng ta sẽ thay đổi giá trị enable_online_store = true thành enable_online_store = false vì trong lab này chúng ta không sử dụng tính năng online feature store để thực hiện lấy feature training trong real-time inference.

- Bên dưới và một vài hình ảnh thực thi các cell, quá trình thực thi khoảng 5 phút.


- Quay lại SageMaker studio, click mục Feature store, chúng ta sẽ thấy được thông tin feature group đã được tạo.

- Bạn có thể truy cập vào giao diện management console của SageMaker AI.
- Click Processing.
- Bạn sẽ thấy một Job của Data Wrangler flow export dữ liệu vào feature store.

(OPTIONAL HAND-ONS): Lấy thông tin từ Feature Store sử dụng Amazon Athena. SageMaker Feature Store metadata cũng được lưu trữ trong AWS Glue Catalog và chúng ta có thể thực hiện truy vấn thông qua Amazon Athena.
- Thực hiện câu truy vấn bằng Athena. Bạn sẽ cần thay thế thông tin YOUR FEATURE GROUP TABLE NAME bằng thông tin feature group tables nằm bên menu tay trái.

- Bạn đã hoàn thành export các feature vào SageMaker feature store. Ở bước tiếp theo, sẽ thực hiện export data vào S3 để thực hiện training model.
2.7 Export Data tới S3 để chuẩn bị cho việc training
Note: Ở bước 2.1 -> 2.6 chúng ta đã thực hiện ETL data -> export data vào Feature store, thao tác trên AWS Console. Ở bước 2.7 chúng ta cũng thực hiện các bước chuyển đổi data tương tự -> export data vào S3, sử dụng code. Mục đích: Biết được 2 cách thực hiện ETL data thông qua Console và code.
- Quay lại giao diện Notebook và mở file numpy_xgboost_direct_marketing_sagemaker.ipynb.

- Thực hiện Cell 1 và 2 để import các thư viện ML, bằng cách click chọn vào cell và ấn tổ hợp phím Shift + Enter.

- Tương tự cho Cell 3. Đoạn mã đọc tệp CSV “bank-bổ sung-full.csv” thành DataFrame data.Sau đó, cấu hình cho Pandas hiển thị tối đa 500 cột và chỉ 20 dòng.Cuối cùng, gọi dữ liệu để xem dữ liệu bảng vừa đọc.

- Đến với cell tiếp theo, đầu tiên, vòng lặp duyệt qua các cột kiểu object (trừ cột y), dùng pd.crosstab để thống kê tần suất (theo cột y) cho mỗi giá trị của cột đó. Tiếp theo, vòng lặp cho các cột dạng số (numeric) in tên cột và vẽ biểu đồ histogram, chia theo hai nhóm y (by='y'), giúp so sánh phân phối dữ liệu của từng cột giữa các giá trị y.

- Tiếp theo, đoạn code sẽ:
- data.corr(numeric_only=True): Tính ma trận tương quan (Correlation Matrix) giữa các biến số, giúp xem mối quan hệ tuyến tính giữa các cột numeric.
- pd.plotting.scatter_matrix(data, figsize=(12, 12)): Tạo ma trận biểu đồ phân tán (scatter plot) của tất cả cặp cột trong DataFrame, trực quan hóa tương quan giữa các thuộc tính.
- plt.show(): Hiển thị biểu đồ vừa được tạo.

- Thực thi cell kế tiếp:
- data['no_previous_contact']: Gắn giá trị 1 nếu cột pdays bằng 999 (tức chưa liên lạc lần nào), ngược lại 0.
- data['not_working']: Gắn 1 nếu cột job nằm trong danh sách ['student', 'retired', 'unemployed'], còn lại 0.
- model_data = pd.get_dummies(data, dtype=float): Chuyển các cột phân loại trong data thành dạng biến giả (one-hot encoding) và ép kiểu thành float, lưu kết quả vào model_data.

- Tiếp tục, đoạn code này loại bỏ một số cột không muốn sử dụng (ví dụ duration, emp.var.rate, v.v.) ra khỏi DataFrame model_data. Các cột trong danh sách được truyền vào drop và chỉ định axis=1 để xóa theo chiều cột.

- Đoạn code ngẫu nhiên trộn (shuffle) toàn bộ dữ liệu model_data (nhờ sample(frac=1, random_state=1729)) rồi chia thành 3 phần theo tỷ lệ 70% – 20% – 10%: train_data (70% đầu), validation_data (20% tiếp theo), test_data (10% cuối).

- Ở 2 cell cuối cùng, 2 dòng pd.concat(...) đầu tiên chuyển cột nhãn (‘y_yes’) lên đầu và loại bỏ các cột không cần thiết (y_no, y_yes) trong train_data và validation_data, sau đó lưu dữ liệu thành hai file CSV (train.csv và validation.csv) mà không ghi kèm cột và chỉ số dòng. Sau đó sẽ tải hai file CSV đó lên Amazon S3, để SageMaker có thể lấy dữ liệu và huấn luyện mô hình.


- Bạn đã chuẩn bị thành công dữ liệu để train model XGBoost.
Trong phần 2 này, bạn đã trải qua quá trình thiết lập môi trường cần thiết và sử dụng kỹ thuật để làm sạch dữ liệu và chuẩn bị dữ liệu của bạn cho việc build, train model.
Trong phần tiếp theo, chúng ta sẽ thực hiện train, tuning và deploy model XGBoost bằng thuật toán XGBoost tích hợp sẵn của SageMaker.
3. Train/Tune/Deploy XGBoost
Trong phần này, bạn sẽ tìm hiểu về phần được hightlight trong qui trình ML bên dưới:
- Train & Tune model
- Deploy model
- Đánh giá hiệu suất model ML của bạn
- Tune model tự động

3.1 Train & Tune model
XGBoost là một thuật toán tích hợp sẵn (built-in algorithm) trong Amazon SageMaker, dựa trên thư viện eXtreme Gradient Boosting (XGBoost) – một trong những mô hình học máy phổ biến và mạnh mẽ cho các bài toán Hồi quy (Regression) và Phân loại (Classification).
Dưới đây là một số trường hợp sử dụng (use cases) phổ biến:
- Dự đoán gian lận (Fraud Detection): Các giao dịch thanh toán, hoạt động ngân hàng, đăng ký tài khoản… thường có dấu hiệu gian lận.
- Dự báo nhu cầu (Demand Forecasting): Dùng trong bán lẻ, kho vận, quản lý chuỗi cung ứng…kết hợp các biến dự báo về mùa vụ, lễ tết, xu hướng, và các yếu tố bên ngoài (thời tiết, marketing…).
- Phân loại khách hàng (Customer Segmentation) & Churn Prediction: Trong marketing, CRM, bạn có thể dự đoán khả năng rời bỏ (churn) của khách.
- Phân loại và hồi quy chung (General Classification/Regression): dự báo giá nhà, phân loại ảnh có sử dụng đặc trưng tabular, dự đoán tín dụng, v.v.
- Phân tích rủi ro và định giá (Risk Analysis, Pricing): Trong tài chính, bảo hiểm, XGBoost thường được dùng để ước tính xác suất tổn thất, tính phí bảo hiểm, v.v.
- Bước đầu tiên chúng ta sẽ chỉ định vị trí của ECR container.

- Chỉ định vị trí của train và validation data set.

- Quy trình huấn luyện XGBoost trong SageMaker bao gồm:
- Tải dữ liệu (đã chuẩn hoá) lên S3.
- Tạo phiên bản Estimator với
sagemaker.xgboost.estimator.XGBoost
(hoặc “BYO container” XGBoost). - Khai báo các tham số training (hyperparameters) như
max_depth
, eta
, num_round
, …trong set_hyperparameters. - Gọi lệnh
.fit(...)
chỉ định dữ liệu trên S3, SageMaker sẽ tạo môi trường và huấn luyện tự động. - Sau khi huấn luyện xong, bạn có thể
.deploy(...)
mô hình lên endpoint để phục vụ dự đoán real-time.
- Sau khi run cell, có thể thấy quá trình training đang diễn ra.

- Vào giao diện dịch vụ Amazon SageMaker AI.
- Click Training.
- Click Training jobs.
- Sẽ mất 3-5 phút để training job hoàn tất.

- Sau khi hoàn thành quá trình training, model sẽ được đóng gói và lưu ở S3.

- Chúng ta đã hoàn tất bước train cho model XGBoost, bước tiếp theo chúng ta sẽ thực hiện deploy model.
3.2 Deploy model
- Trong bước này chúng ta sẽ thực hiện deploy model dưới dạng một HTTPS endpoint. Quá trình này sẽ mất khoảng 6-8 phút. Bạn cũng có thể chọn mẫu instance type mới hơn như ml.m5.xlarge cho deployment này.
- Pricing: https://instances.vantage.sh/aws/ec2/m4.xlarge

- Quay trở lại management console của dịch vụ Sage Maker để kiểm tra tiến trình deploy endpoint.
- Click Inference.
- Click Endpoints.

- Sau khi tiến trình deploy endpoint hoàn tất bạn có thể tiếp tục làm bước tiếp theo , thực hiện đánh giá model.
3.3 Đánh giá hiệu suất model
Trong bước này chúng ta sẽ thực hiện format lại CSV data, sau đó chạy model để thực hiện tiên đoán.
Chúng ta sẽ đánh giá hiệu suất của model sử dụng confusion matrix. Trong trường hợp này chúng ta sẽ tiên đoán liệu khách hàng có đăng ký gửi tiền theo kỳ hạn(1) hay không(0).
- Đầu tiên chúng ta sẽ cần xác định cách thức truyền data và nhận data từ endpoint. Data của chúng ta hiện được lưu trữ dưới dạng NumPy arrays trong bộ nhớ của notebook instance. Để gửi nó thông qua HTTP POST request, chúng ta sẽ thực hiện serialize data như một CSV string và decode kết quả CSV đó.

- Tiếp theo chúng ta sẽ tạo một hàm đơn giản để :
- Lặp lại tập test data set của chúng ta.
- Chia nó thành các nhóm nhỏ theo hàng.
- Chuyển đổi các nhóm nhỏ đó thành chuỗi nội dung CSV (lưu ý, trước tiên chúng ta loại bỏ biến mục tiêu khỏi data set).
- Truy xuất các dự đoán theo nhóm nhỏ bằng cách gọi XGBoost endpoint.
- Thu thập các dự đoán và chuyển đổi từ đầu ra CSV mà model của chúng ta cung cấp thành một NumPy array.

- Kiểm tra kết quả confusion matrix để xem hiệu suất kết quả tiên đoán so với kết quả thực tế.

- Như vậy, trong số ~ 4000 khách hàng tiềm năng, mô hình dự đoán 53 người sẽ đăng ký và 101 người trong số họ thực sự đã đăng ký. Chúng ta cũng có 382 người đăng ký thực sự đăng ký mà mô hình đó không dự đoán sẽ đăng ký.

3.4 Tune model tự động (Optional advance)
Tune model tự động trên Amazon SageMaker, còn được gọi là Tune hyperparameters, tìm phiên bản tốt nhất của model bằng cách chạy nhiều công việc training trên data set của bạn sử dụng thuật toán và phạm vi hyperparameters mà bạn chỉ định.
Ví dụ bài toán: Bạn đang giải quyết bài toán phân loại nhị phân (thành hai nhóm) với dữ liệu tiếp thị. Mục tiêu là tối ưu chỉ số AUC (AUC càng cao, khả năng mô hình phân tách đúng, giá trị AUC nằm trong khoảng 0 đến 1) cho mô hình XGBoost. Bạn không chắc nên chọn giá trị cụ thể nào cho các tham số: eta, alpha, min_child_weight, và max_depth. Thay vào đó, bạn có thể dùng chức năng Tune Hyperparameters của Amazon SageMaker để tự động tìm ra những giá trị “tối ưu” trong khoảng mà bạn đặt ra, giúp mô hình đạt AUC cao nhất.
- Chúng ta sẽ điều chỉnh bốn hyperparameters trong ví dụ này:
- eta (learning rate): Quy định mức điều chỉnh trọng số sau mỗi lần huấn luyện một “cây” mới. Giá trị nhỏ (ví dụ 0.01) khiến mô hình học chậm nhưng cẩn thận hơn, giúp giảm nguy cơ overfitting. Giá trị lớn (ví dụ 0.3) đẩy tốc độ học nhanh, nhưng dễ dẫn đến sai số cao.
- min_child_weight: Xác định “tổng lượng thông tin” tối thiểu (hessian) để XGBoost tạo thêm một nhánh (leaf) mới trong cây. Nếu min_child_weight lớn, mô hình cần dữ liệu “đủ nặng” mới chia nhánh, nhờ đó hạn chế việc chia nhỏ quá mức (overfitting). Nếu quá nhỏ, mô hình dễ “phân nhánh lung tung”, tăng rủi ro học quá kỹ chi tiết (nhiễu).
- alpha (L1 regularization): Thêm hình phạt L1 vào loss function, ép một số trọng số nhỏ về 0. Giúp mô hình “gọn” hơn, bớt phức tạp, hạn chế ảnh hưởng từ các biến ít quan trọng. Alpha cao ⇒ “càng nghiêm khắc” với các trọng số, giảm bớt nhiễu.
- max_depth: Độ sâu tối đa của cây quyết định mức độ phức tạp mô hình. Cây càng sâu, mô hình có thể học nhiều quy tắc chi tiết nhưng rủi ro overfitting tăng. Bạn chọn giá trị vừa phải để cân bằng giữa độ chính xác và khả năng khái quát.

- Tiếp theo, chúng ta sẽ chỉ định chỉ số (metric) mục tiêu mà chúng ta muốn điều chỉnh và định nghĩa của nó, bao gồm regular expression (Regex) cần thiết để trích xuất chỉ số đó từ CloudWatch logs của công việc training.
- Vì chúng ta đang sử dụng thuật toán XGBoost tích hợp sẵn, nó tạo ra hai chỉ số được xác định trước: validatioN: auc và training : auc và chúng ta đã chọn giám sát chỉ số validation: auc như bạn có thể thấy bên dưới.
- Trong trường hợp này, chúng tôi chỉ cần chỉ định tên chỉ số và không cần sử dụng regex. Nếu bạn sử dụng thuật toán của riêng mình, thì thuật toán của bạn sẽ tự tạo ra các chỉ số . Trong trường hợp đó, bạn sẽ cần thêm đối tượng MetricDefinition tại đây để xác định định dạng của các chỉ số đó thông qua regex, để SageMaker biết cách trích xuất các chỉ số đó từ CloudWatch logs của bạn.

- Bây giờ, chúng ta sẽ tạo một đối tượng Hyperparameter Tuner, chúng ta sẽ truyền vào đối tượng đó:
- XGBoost estimator mà chúng ta đã tạo ở trên
- Tên và định nghĩa chỉ số mục tiêu
- Phạm vi hyperparameters chúng ta muốn.
- Điều chỉnh cấu hình tài nguyên chẳng hạn như Tổng số công việc train sẽ chạy và số lượng công việc train có thể chạy song song.

- Bây giờ chúng ta có thể khởi chạy công việc điều chỉnh hyperparameters bằng cách gọi hàm fit (). Sau khi công việc điều chỉnh hyperparameters được tạo.

- Chúng ta có thể vào bảng điều khiển SageMaker để theo dõi tiến trình của công việc điều chỉnh hyperparameters cho đến khi hoàn thành.
- Click Training.
- Click Hyperparameter tuning jobs.
- Click tên job.
- Chúng ta có thể theo dõi chi tiết các training jobs tại giao diện summary.


- Trạng thái hoàn tất thể hiện công việc tuning hyperparameters đã hoàn tất.

- Sau khi hoàn thành công việc tune model, bạn có thể chọn công việc train có hiệu suất tốt nhất, deploy, thực hiện predict và đánh giá model như các bước đã thực hiện trước. Version: xgboost-250301-0552-019-cd458d12 có metric value cao nhất.


- Có nhiều version model khác nhau được lưu ở S3 output. Bạn có thể chọn model có tỉ lệ chính xác cao nhất để deploy lên môi trường production thông qua SageMaker Endpoint.

- Bạn đã đi qua quá trình preparedata, build , train , tune và deploy model XGBoost bằng cách sử dụng thuật toán tích hợp sẵn của SageMaker AI.
Chúng ta cũng đã sử dụng SageMaker Python SDK để build, tune và deploy model. Bạn cũng đã làm quen với giao diện của SageMaker trong khi thực hiện train, automatic model tuning và deploy model vào môi trường sử dụng.
4. Dọn dẹp tài nguyên
Chúng ta sẽ tiến hành xóa các tài nguyên theo thứ tự sau
- Xóa endpoint đã được deploy, bằng cách thực thi các cell sau.

- Mở giao diện quản trị của Amazon SageMaker AI.
- Click Amazon SageMaker Studio để mở giao diện Amazon SageMaker Studio. Stop và delete instance.

- Thực hiện các bước dưới cho mỗi user được tạo ra.
- Click chọn user.
- Tại trang chi tiết user, thực hiện Delete.
- Click chọn Yes, delete user và gõ delete để xác nhận.
- Click Delete.

- Sau khi thực hiện delete hết user, click chọn Delete Domain.
- Click Delete để hoàn tất việc xóa SageMaker Domain.
