[DS Blog #63] Thuật Toán Học Máy Vỡ Lòng: Hồi Quy Tuyến Tính (Linear Regression) & Hồi Quy Logistic (Logistic Regression) – Từ Bản Chất Trực Quan Đến Code Scikit-Learn
0 views
![[DS Blog #63] Thuật Toán Học Máy Vỡ Lòng: Hồi Quy Tuyến Tính (Linear Regression) & Hồi Quy Logistic (Logistic Regression) – Từ Bản Chất Trực Quan Đến Code Scikit-Learn](/uploads/ai-images/cover-hoi-quy-tuyen-tinh-logistic.png)
1. Bối cảnh thực tế (Context & Problem Statement)
Trong thực tế doanh nghiệp, mọi bài toán Machine Learning có giám sát (Supervised Learning) đều quy về 2 dạng bài toán cốt lõi:
- Bài toán Hồi quy (Regression): Mục tiêu là dự đoán một con số thực liên tục.
- Ví dụ: Dự đoán giá bán của một căn nhà (bao nhiêu tỷ đồng?), dự đoán doanh thu tháng tới (bao nhiêu triệu?), dự đoán nhiệt độ ngày mai.
- Bài toán Phân loại (Classification): Mục tiêu là dự đoán một nhãn danh mục rời rạc.
- Ví dụ: Khách hàng này sẽ Mua hay Không mua? Giao dịch này là Hợp lệ hay Gian lận? Email này là Spam hay Hộp thư đến?
Hai thuật toán nền tảng, thanh lịch và được sử dụng rộng rãi nhất làm tiêu chuẩn đối chuẩn (Baseline) cho 2 dạng bài toán này chính là Linear Regression và Logistic Regression.
2. Các Khái Niệm & Cơ Chế Cốt Lõi
2.1. Hồi Quy Tuyến Tính (Linear Regression) - Tìm Đường Thẳng Tối Ưu
1. Phương trình đường thẳng quen thuộc từ thời phổ thông:
Giả sử ta muốn dự đoán Giá nhà () dựa trên Diện tích căn nhà ():
- : Biến độc lập đầu vào (Diện tích, ví dụ: ).
- : Giá trị dự đoán đầu ra (Giá nhà dự tính).
- (Weight / Slope): Hệ số góc – Cho biết khi diện tích tăng thêm thì giá nhà tăng thêm bao nhiêu triệu đồng.
- (Bias / Intercept): Hệ số chặn – Giá trị cơ sở khi diện tích bằng .
Giá nhà (y)
^ * (Điểm thực tế y_i)
| /
| * / | (Sai số e_i = y_i - y_hat)
| / * (Điểm dự đoán y_hat)
| * /
| /
| * / Đường hồi quy tối ưu: y = w*x + b
| /
b +--------------------------+------------------------------> Diện tích (x)
0
2. Thế nào là đường thẳng "tốt nhất"? (Ordinary Least Squares - OLS):
- Với mỗi điểm dữ liệu thực tế , khoảng cách chênh lệch giữa thực tế và đường thẳng dự đoán gọi là Phần dư (Residual / Sai số): .
- Thuật toán OLS tìm bộ trọng số và sao cho Tổng bình phương các sai số (Residual Sum of Squares - RSS) là nhỏ nhất:
3. Đo lường chất lượng bằng Hệ số xác định (R-Squared):
- (): Mô hình hoàn hảo, giải thích được toàn bộ sự biến thiên của dữ liệu.
- : Mô hình giải thích được sự biến thiên của giá nhà dựa vào diện tích; còn lại do các yếu tố khác (vị trí, số phòng ngủ, nội thất).
- : Mô hình vô dụng, đoán không khá hơn việc lấy mức giá trung bình của thị trường.
2.2. Hồi Quy Logistic (Logistic Regression) - Dự Đoán Xác Suất Phân Loại
1. Tại sao KHÔNG THỂ dùng Linear Regression để phân loại nhị phân ( hoặc )?
- Nếu dùng đường thẳng để đoán xác suất, khi diện tích quá lớn, đường thẳng sẽ cho ra kết quả (vô nghĩa vì xác suất không thể ), hoặc khi diện tích quá nhỏ, đường thẳng cho ra (xác suất không thể âm)!
2. Cứu cánh từ Hàm Sigmoid (Hàm chữ S):
Hàm Sigmoid nhận bất kỳ giá trị số thực nào từ đến và nén chặt nó vào khoảng xác suất từ đến :
Xác suất P(Y=1)
1.0 + /---------------- (Tiến sát về 1.0)
| /
0.5 + - - - - - - - - - - - - - - - - - - / (Ngưỡng Threshold = 0.5)
| /
0.0 +-----------------------------------+---------------------> Giá trị z = w*x + b
0
- Khi .
- Khi rất lớn .
- Khi rất nhỏ (âm vô cùng) .
3. Quy tắc ra quyết định (Decision Threshold):
Mặc định, mô hình so sánh xác suất với ngưỡng :
- Nếu Dự đoán nhãn là (ví dụ: Khách sẽ mua hàng).
- Nếu Dự đoán nhãn là (Khách không mua).
2.3. Đánh Giá Mô Hình Phân Loại: Ma Trận Nhầm Lẫn (Confusion Matrix)
Xét bài toán Chẩn đoán bệnh nhân có bị nhiễm virus hay không:
THỰC TẾ KHÁCH QUAN (Ground Truth)
+-----------------------+-----------------------+
| CÓ BỆNH (Y = 1) | KHÔNG BỆNH (Y = 0) |
+--------------+---------------+-----------------------+-----------------------+
| MÔ HÌNH | ĐOÁN CÓ BỆNH | TRUE POSITIVE (TP) | FALSE POSITIVE (FP) |
| DỰ ĐOÁN | (Predict = 1) | (Bắt đúng bệnh nhân) | (Báo động giả / Oan) |
| (Prediction) +---------------+-----------------------+-----------------------+
| | ĐOÁN KHÔNG | FALSE NEGATIVE (FN) | TRUE NEGATIVE (TN) |
| | (Predict = 0) | (BỎ SÓT NGƯỜI BỆNH!) | (Bắt đúng người khỏe) |
+--------------+---------------+-----------------------+-----------------------+
- Accuracy (Độ chính xác tổng thể): Tỷ lệ đoán đúng trên toàn bộ mẫu: .
⚠️ Chỉ dùng khi 2 lớp cân bằng nhau (). - Precision (Độ chuẩn xác - Tránh báo động giả): (Trong những ca mô hình khẳng định là Có bệnh, có bao nhiêu % thực sự có bệnh?)
- Recall (Độ bao phủ - Tránh bỏ sót): (Trong tất cả những người thực tế bị bệnh, mô hình tìm ra được bao nhiêu %?)
- F1-Score (Trung bình điều hòa giữa Precision và Recall):
3. Các Bảng Markdown So Sánh Chi Tiết
📊 Bảng 1: So Sánh Toàn Diện Linear Regression vs. Logistic Regression
| Tiêu chí | Hồi Quy Tuyến Tính (Linear Regression) | Hồi Quy Logistic (Logistic Regression) |
|---|---|---|
| Loại bài toán | Hồi quy (Regression) | Phân loại (Classification) |
| Bản chất biến mục tiêu () | Số thực liên tục ( đến ) | Nhãn danh mục rời rạc ( hoặc , Nhị phân) |
| Hàm toán học áp dụng | Đường thẳng: | Đường cong Sigmoid: |
| Hàm mất mát (Loss Function) | Mean Squared Error (MSE / OLS) | Binary Cross-Entropy (Log Loss) |
| Chỉ số đánh giá chính | (R-squared), RMSE, MAE | Accuracy, Precision, Recall, F1-Score, ROC-AUC |
| Ví dụ thực tế đời thường | Dự đoán giá nhà, Doanh số, Nhiệt độ | Dự đoán khách rời bỏ, Email Spam, Rớt/Đậu phỏng vấn |
📊 Bảng 2: Khi Nào Ưu Tiên Precision? Khi Nào Ưu Tiên Recall?
| Tình huống thực tế | Chỉ số BẮT BUỘC ưu tiên | Lý do kinh doanh & Hậu quả nếu sai sót |
|---|---|---|
| Chẩn đoán bệnh nan y (Y tế) | Ưu tiên RECALL tối đa | Bỏ sót người bệnh (FN) đồng nghĩa với mất mạng người. Thà báo nhầm (FP) rồi xét nghiệm lại còn hơn để bệnh nhân về nhà! |
| Bộ lọc thư rác (Spam Filter) | Ưu tiên PRECISION tối đa | Nếu email quan trọng của đối tác (hợp đồng, việc làm) bị phân loại nhầm thành Spam (FP), hậu quả rất nghiêm trọng. Thà lọt vài thư rác vào inbox (FN) còn hơn mất email quan trọng! |
| Phát hiện gian lận tín dụng (Fraud) | Ưu tiên RECALL | Ngăn chặn tối đa việc lọt giao dịch lừa đảo hàng tỷ đồng (FN). Khách hàng có thể chịu phiền xác nhận OTP một lần (FP). |
| Hệ thống đề xuất tuyển dụng | Ưu tiên PRECISION | Nhà tuyển dụng chỉ muốn xem Top 5 ứng viên chắc chắn phù hợp nhất, tránh mất thời gian phỏng vấn người không đạt yêu cầu. |
📊 Bảng 3: So Sánh Các Kỹ Thuật Chính Quy Hóa (Regularization): Ridge vs. Lasso
| Tiêu chí | Ridge Regression ( Regularization) | Lasso Regression ( Regularization) |
|---|---|---|
| Thành phần phạt cộng thêm | Phạt bình phương trọng số: | Phạt trị tuyệt đối trọng số: |
| Tác động lên trọng số | Thu nhỏ trọng số về gần 0, nhưng KHÔNG triệt tiêu | Ép các trọng số của biến vô nghĩa về đúng bằng 0! |
| Khả năng chọn biến (Feature Selection) | Không (Giữ lại tất cả các biến) | Có (Tự động loại bỏ các biến vô dụng) |
| Khi nào nên sử dụng? | Khi hầu hết các biến đều có đóng góp nhỏ | Khi có hàng trăm biến nhưng nghi ngờ chỉ có vài biến quan trọng |
4. Thực Hành Thực Chiến: Code Scikit-Learn Chuẩn Từng Dòng (Walkthrough)
📌 Bài toán: Dự đoán Khách hàng Mua xe hơi dựa trên Tuổi tác và Thu nhập
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import classification_report, confusion_matrix
# 1. Tạo tập dữ liệu mô phỏng:
data = {
'age': [22, 25, 47, 52, 46, 56, 41, 35, 30, 48, 55, 23],
'salary': [20, 25, 80, 110, 95, 120, 75, 40, 35, 90, 130, 22], # Triệu đồng/tháng
'purchased': [0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0] # 1: Mua xe, 0: Không mua
}
df = pd.DataFrame(data)
# 2. Tách biến đầu vào (X) và biến mục tiêu (y):
X = df[['age', 'salary']]
y = df['purchased']
# 3. Chia tập Train (80%) và tập Test (20%):
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=42)
# 4. Chuẩn hóa thang đo (Bắt buộc cho Logistic Regression để gradient hội tụ tốt):
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train) # Học mean, std từ Train
X_test_scaled = scaler.transform(X_test) # Áp dụng sang Test
# 5. Khởi tạo và huấn luyện mô hình Logistic Regression:
model = LogisticRegression()
model.fit(X_train_scaled, y_train)
# 6. Xem hệ số ảnh hưởng của từng thuộc tính:
print("Hệ số chặn (Intercept b):", model.intercept_[0])
print(f"Hệ số góc Tuổi tác: {model.coef_[0][0]:.4f}")
print(f"Hệ số góc Thu nhập: {model.coef_[0][1]:.4f}") # Thu nhập có hệ số dương lớn -> Thu nhập càng cao càng dễ mua xe!
# 7. Dự đoán trên tập Test:
y_pred = model.predict(X_test_scaled)
y_prob = model.predict_proba(X_test_scaled)[:, 1] # Lấy xác suất P(Y=1)
print("\n=== ĐÁNH GIÁ KẾT QUẢ MÔ HÌNH ===")
print("Confusion Matrix:\n", confusion_matrix(y_test, y_pred))
print("\nBáo cáo chi tiết (Classification Report):\n", classification_report(y_test, y_pred))
5. Góc Ôn Luyện Phỏng Vấn (Interview Corner)
❓ Câu hỏi 1: Tại sao chúng ta không nên sử dụng Hồi quy tuyến tính (Linear Regression) cho các bài toán phân loại nhị phân (Binary Classification)?
- Gợi ý trả lời ngắn gọn, tự tin:
- Đầu ra vượt ngoài biên xác suất : Linear Regression sinh ra giá trị trên toàn bộ trục số thực . Khi dự đoán cho một người có thu nhập rất cao, kết quả có thể cho ra , hoàn toàn vô nghĩa vì xác suất không thể vượt quá .
- Rất nhạy cảm với các điểm ngoại lai (Outliers): Nếu trong tập dữ liệu xuất hiện một khách hàng cực giàu (Outlier), đường thẳng hồi quy sẽ bị bẻ cong lệch hẳn đi để cố gắng khớp với điểm đó, làm thay đổi vị trí cắt ngưỡng quyết định và khiến hàng loạt điểm dữ liệu bình thường bị phân loại sai.
- Hàm mất mát không lồi (Non-convex Loss): Nếu ép dùng hàm bình phương sai số MSE cho bài toán nhị phân, đồ thị hàm mất mát sẽ xuất hiện nhiều cực tiểu địa phương gồ ghề, khiến thuật toán Gradient Descent dễ bị mắc kẹt tại điểm tối ưu kém.
❓ Câu hỏi 2: Giải thích ý nghĩa của chỉ số (R-squared) trong Hồi quy tuyến tính. Chỉ số có bao giờ nhận giá trị âm không? Nếu có thì trong trường hợp nào?
- Gợi ý trả lời:
- Ý nghĩa của :
- Đại diện cho Tỷ lệ phần trăm sự biến thiên của biến mục tiêu được giải thích bởi các biến đầu vào .
- Công thức: .
- Chỉ số CÓ THỂ ÂM ĐƯỢC:
- Mặc dù trên tập Train khi dùng phương pháp OLS chuẩn thì , nhưng khi đánh giá mô hình trên Tập Test độc lập (hoặc khi mô hình không có hệ số chặn Intercept), hoàn toàn có thể bị âm ().
- Ý nghĩa khi : Dự đoán của mô hình còn tệ hơn cả việc bạn chỉ lấy giá trị trung bình cộng của tập dữ liệu để làm dự đoán cho tất cả mọi người! Điều này chứng tỏ mô hình bị sai lệch nghiêm trọng hoặc dữ liệu Test hoàn toàn khác biệt với dữ liệu Train.
- Ý nghĩa của :
❓ Câu hỏi 3: Trong một bài toán Phát hiện Giao dịch Gian lận Ngân hàng (Credit Card Fraud Detection), giữa Precision và Recall, bạn sẽ ưu tiên tối ưu hóa chỉ số nào hơn và tại sao?
- Gợi ý trả lời:
- Lựa chọn tối thượng: Ưu tiên RECALL!
- Lập luận kinh doanh & rủi ro:
- Định nghĩa trong bài toán này:
- Recall: Trong vụ gian lận thực tế, hệ thống bắt được bao nhiêu vụ?
- Precision: Trong vụ hệ thống cảnh báo còi, có bao nhiêu vụ thực sự là gian lận?
- Hậu quả của việc bỏ sót (False Negative - FN / Recall thấp): Kẻ gian đánh cắp thành công từ tài khoản khách hàng. Ngân hàng mất tiền đền bù, mất uy tín thương hiệu và bị phạt bởi cơ quan quản lý.
- Hậu quả của việc báo nhầm (False Positive - FP / Precision thấp): Khách hàng bình thường quẹt thẻ mua hàng và nhận được tin nhắn SMS yêu cầu xác thực OTP hoặc bị tạm dừng thẻ 1 phút. Khách hàng có thể cảm thấy hơi phiền một chút nhưng an tâm vì tài khoản được bảo vệ.
- Chi phí của một ca bỏ sót (FN) đắt hơn gấp hàng trăm lần so với chi phí của một ca báo động giả (FP). Do đó, kỹ sư bắt buộc phải hạ thấp ngưỡng quyết định (Threshold) để tối đa hóa chỉ số Recall lên mức .
- Định nghĩa trong bài toán này:
6. Tóm Tắt Ghi Nhớ Nhanh (Key Takeaways)
- Linear Regression dự đoán con số liên tục bằng đường thẳng tối thiểu hóa tổng bình phương sai số (OLS).
- Hệ số đo lường tỷ lệ phần trăm dữ liệu được giải thích; đồng nghĩa mô hình đoán tệ hơn cả giá trị trung bình.
- Logistic Regression dự đoán xác suất phân loại nhị phân nhờ hàm Sigmoid nén kết quả vào đoạn .
- Accuracy Paradox: Không dùng Accuracy cho dữ liệu mất cân bằng; ưu tiên Recall khi cần chống bỏ sót (Y tế, Gian lận) và ưu tiên Precision khi cần chống báo động giả (Spam filter).
- Lasso () giúp chọn lọc biến bằng cách ép trọng số về 0; Ridge () giúp thu nhỏ trọng số để chống Overfitting.
0Claps