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

Các giả định của Hồi quy Logistic: Những gì bạn cần kiểm tra trước khi mô hình hóa

Hướng dẫn thực tế về các giả định của hồi quy logistic, các chẩn đoán phát hiện vi phạm trong Python và R, và lựa chọn thay thế khi giả định không giữ.
Đã cập nhật 15 thg 6, 2026  · 15 phút đọc

Sau khi bạn huấn luyện một mô hình hồi quy logistic, làm sao để chắc rằng bạn có thể tin vào các hệ số?

Hồi quy logistic nổi tiếng vì sự đơn giản. Với scikit-learn, bạn gọi .fit(), đọc tỷ lệ odds, và cơ bản là xong. Nhưng điều mà đa số người mới không biết là mô hình có những giả định riêng, và khi bạn không tuân theo chúng, các hệ số sẽ gây hiểu lầm và dự đoán sai lệch theo những cách mà không chỉ số đánh giá nào cho bạn biết.

Thực tế mà nói, hồi quy logistic có ít giả định hơn hồi quy tuyến tính, và những giả định nó có thì dễ kiểm tra. Bạn chỉ cần chạy đúng các chẩn đoán trước khi diễn giải kết quả để biết phần nào của mô hình có thể tin cậy.

Trong bài viết này, tôi sẽ hướng dẫn bạn mọi giả định mà hồi quy logistic đặt ra, cách kiểm tra từng cái trong Python và R, điều gì xảy ra khi chúng bị vi phạm, và những lựa chọn thay thế khi không thể tuân theo các giả định.

Nếu bạn mới với khoa học dữ liệu và máy học, hãy đọc bài blog của chúng tôi về Hồi quy tuyến tính đơn giản để hiểu các giả định và chẩn đoán của nó.

Hồi quy Logistic là gì?

Hồi quy logistic là một mô hình phân loại dự đoán xác suất của một kết quả phân loại. Bạn cung cấp các biến dự báo, và nó trả về một số giữa 0 và 1 mà bạn có thể hiểu là xác suất thuộc về một lớp nhất định.

Hầu hết dùng cho phân loại nhị phân như rời bỏ hay không rời bỏ, spam hay không spam. Các biến thể như hồi quy logistic đa thức (multinomial) và có thứ bậc (ordinal) bao phủ hơn hai lớp, nhưng trường hợp nhị phân là điều đa số người ám chỉ khi nói "hồi quy logistic".

Bên dưới, mô hình khớp một tổ hợp tuyến tính của các biến dự báo và đưa kết quả qua hàm logistic. Đầu ra là một xác suất, và các hệ số cho biết mỗi biến dự báo làm dịch chuyển log-odds như thế nào.

Đáng lưu ý là hồi quy logistic khác với hồi quy tuyến tính. Mô hình sau có các giả định quen thuộc như phần dư phân phối chuẩn, phương sai đồng nhất, tuyến tính giữa biến dự báo và mục tiêu. Hồi quy logistic không có những giả định đó. Nó có danh sách riêng, và đủ khác biệt để việc dùng giả định của hồi quy tuyến tính sẽ cho kết quả sai lệch.

Để biết thêm chi tiết về hồi quy logistic, hãy đọc bài blog của chúng tôi minh họa cách triển khai trong Python.

Vì sao các giả định của Hồi quy Logistic quan trọng

Các giả định quan trọng vì chúng gắn trực tiếp với cách bạn sử dụng mô hình.

Nếu bạn tôn trọng các giả định, các hệ số mang ý nghĩa như bạn nghĩ. Tỷ lệ odds bạn đọc là hợp lệ, và các xác suất của mô hình khớp tốt với kết quả thực tế. Khi không tôn trọng giả định, tất cả điều đó trở nên bấp bênh theo những cách mà ma trận nhầm lẫn hay bất kỳ chỉ số nào khác không cho bạn thấy.

Điều tốt là các vi phạm không mang tính nhị phân. Sai lệch nhẹ khỏi, chẳng hạn, giả định tuyến tính của logit sẽ không khiến mô hình vô dụng. Nó chỉ có nghĩa là tỷ lệ odds hơi lệch và dự đoán có thể kém hơn mức nên có. Rất nhiều mô hình sản xuất sống chung với kiểm tra giả định chưa hoàn hảo, và điều đó ổn.

Điều bạn không nên làm là bỏ qua kiểm tra. Không có chẩn đoán, bạn không thể biết mình đang nhìn vào vấn đề nhỏ hay lớn cho tới khi dự đoán sai.

Tổng quan các giả định của Hồi quy Logistic

Trước khi đi vào từng giả định, đây là danh sách đầy đủ bạn cần kiểm tra.

Giả định Yêu cầu Chẩn đoán thường dùng
Quan sát độc lập Không bản ghi nào ảnh hưởng bản ghi khác Thiết kế nghiên cứu, tương quan nội lớp
Biến kết quả phù hợp Nhị phân, hoặc được mô hình hóa bằng biến thể đúng Kiểm tra biến mục tiêu
Tuyến tính của logit Biến dự báo tuyến tính trong log-odds Kiểm định Box-Tidwell, splines
Không đa cộng tuyến nghiêm trọng Các biến dự báo không tương quan mạnh VIF, ma trận tương quan
Cỡ mẫu đủ lớn Đủ số sự kiện trên mỗi biến Quy tắc ngón tay cái EPV
Không có ngoại lệ ảnh hưởng mạnh Không bản ghi đơn lẻ nào làm lệch khớp Khoảng cách Cook, leverage

Bảng giả định của hồi quy logistic

Đó là toàn bộ danh sách. Trong phần còn lại của bài viết, tôi sẽ hướng dẫn bạn từng giả định kèm chẩn đoán trong Python và R, dấu hiệu khi vi phạm, và cách xử lý khi có vấn đề.

Các giả định chính của Hồi quy Logistic

Giả định 1: Biến kết quả là nhị phân (hoặc được mô hình hóa phù hợp)

Hồi quy logistic tiêu chuẩn được xây dựng cho kết quả nhị phân. Biến mục tiêu phải có đúng hai nhóm, và mô hình được thiết kế quanh trường hợp đó.

Ví dụ kinh điển là rời bỏ hay không rời bỏ, mắc bệnh hay không mắc bệnh. Bất cứ điều gì có thể diễn đạt thành câu hỏi có/không đều phù hợp.

Khi kết quả có hơn hai nhóm, bạn cần biến thể khác. Hồi quy logistic đa thức xử lý các nhóm không có thứ tự như phân khúc khách hàng hay loại sản phẩm. Hồi quy logistic có thứ bậc xử lý các nhóm có thứ tự như điểm hài lòng từ 1 đến 5, nơi thứ tự giữa các mức có ý nghĩa.

Ép một kết quả đa lớp vào mô hình nhị phân thường đồng nghĩa gộp các nhóm mà bạn không nên gộp. Nếu bạn có mục tiêu hài lòng với năm mức và cắt còn "hài lòng vs không", bạn mất thông tin có thể giúp mô hình. Hãy chọn biến thể khớp với hình dạng mục tiêu của bạn.

Giả định 2: Các quan sát là độc lập

Mỗi dòng dữ liệu nên cung cấp cho mô hình thông tin mà không dòng nào khác đã cung cấp. Nếu hai bản ghi liên kết theo cách vi phạm điều này, sai số chuẩn và p-value sẽ không còn ý nghĩa như chúng nên có.

Giả định thất bại bất cứ khi nào các quan sát chia sẻ cấu trúc mà bạn chưa mô hình hóa. Ví dụ điển hình là đo lặp lại trên cùng bệnh nhân, do chia sẻ sinh học của bệnh nhân đó. Ví dụ khác là học sinh trong cùng lớp, do chia sẻ giáo viên và phòng học.

Khi bạn bỏ qua điều này và khớp một hồi quy logistic thuần, mô hình coi mỗi dòng là thông tin mới và giảm sai số chuẩn nhiều hơn mức nên có. Các hệ số vẫn có vẻ ổn bề mặt, nhưng p-value và khoảng tin cậy sẽ quá tự tin.

Các lựa chọn thay thế tiêu chuẩn là hồi quy logistic hiệu ứng hỗn hợp và GEE. Mô hình hiệu ứng hỗn hợp thêm hiệu ứng ngẫu nhiên cho các nhóm (bệnh nhân, lớp học) để mô hình tính tới tương quan trong nhóm. GEE, viết tắt của generalized estimating equations, cho hiệu ứng trung bình quần thể với sai số chuẩn đã hiệu chỉnh, không cần cơ chế hiệu ứng ngẫu nhiên.

Chọn hiệu ứng hỗn hợp khi bạn quan tâm tới biến thiên trong nhóm. Chọn GEE khi bạn muốn hiệu ứng biên trên toàn bộ quần thể.

Giả định 3: Tuyến tính của logit

Đây là giả định mà nhiều người hay hiểu sai nhất về hồi quy logistic.

Mô hình không giả định các biến dự báo có quan hệ tuyến tính với kết quả. Nó giả định chúng có quan hệ tuyến tính với log-odds của kết quả. Đó là phát biểu khác, và nó thay đổi thứ bạn cần kiểm tra.

Logit là gì

Logit là log tự nhiên của odds. Với một xác suất p, odds là p / (1 - p), và logit là log của tỷ số đó:

The logit

Logit

Hồi quy logistic sau đó khớp một phương trình tuyến tính trên thang đo này:

Logistic regression formula

Công thức hồi quy logistic

Vế phải là tuyến tính trong các biến dự báo. Vế trái là log-odds, không phải xác suất. Xác suất mà bạn quan tâm được khôi phục bằng cách đưa tổ hợp tuyến tính qua hàm logistic, vốn là phi tuyến tính.

Vì vậy mối quan hệ giữa bất kỳ biến dự báo nào và xác suất là phi tuyến. Mối quan hệ giữa biến dự báo và log-odds mới cần tuyến tính.

Vì sao điều này quan trọng trong thực hành

Khi tính tuyến tính của logit không đúng với một biến dự báo nào đó, hệ số của biến đó đang tóm tắt một đường cong bằng một đường thẳng. Mô hình vẫn cho bạn một con số, và con số đó vẫn có thể có ý nghĩa thống kê, nhưng nó không mô tả mối quan hệ thực tế trong dữ liệu.

Ví dụ, age có thể có hiệu ứng hình chữ U lên log-odds của một bệnh, với rủi ro cao ở hai đầu và thấp hơn ở giữa. Nếu bạn đưa age vào như một hạng tuyến tính đơn, hệ số có thể gần 0 và bạn kết luận tuổi không quan trọng. Thực ra có. Đặc tả sai.

Kiểm tra tính tuyến tính của logit

Bạn có vài lựa chọn để kiểm tra giả định này.

Kiểm tra nhanh nhất là quan sát trực quan. Chia mỗi biến liên tục thành thập phân vị, tính log-odds thực nghiệm trong mỗi nhóm, và vẽ đồ thị kết quả theo biến dự báo. Xấp xỉ đường thẳng nghĩa là giả định giữ. Đường cong rõ ràng nghĩa là không. Kiểm tra mang tính không chính thức nhưng hiệu quả khi bạn có đủ dữ liệu mỗi nhóm.

Kiểm định Box-Tidwell thêm một hạng tương tác giữa mỗi biến liên tục và log tự nhiên của chính nó. Nếu tương tác có ý nghĩa thống kê, giả định tuyến tính của logit bị vi phạm cho biến đó. Kiểm định chỉ áp dụng cho biến dương (vì không thể lấy log của 0 hay số âm), và nhạy cảm với cỡ mẫu như mọi kiểm định ý nghĩa khác.

Spline là một lựa chọn khác. Thay vì kiểm tra tính tuyến tính có giữ không, bạn thay hạng tuyến tính bằng một hàm cơ sở linh hoạt như restricted cubic spline, và để mô hình khớp hình dạng nó cần. Nếu spline khớp tốt hơn nhiều so với hạng tuyến tính (đánh giá bằng kiểm định tỉ lệ khả năng hay AIC), bạn có bằng chứng rằng đặc tả tuyến tính là quá chặt. Splines cũng đồng thời là cách khắc phục. Giữ chúng trong mô hình cuối thường là câu trả lời tốt nhất khi tính tuyến tính thất bại.

Làm gì khi tính tuyến tính thất bại

Nếu giả định thất bại với một biến dự báo, bạn có vài lựa chọn:

  • Biến đổi biến dự báo (log hoặc căn bậc hai thường hiệu quả) cho tới khi mối quan hệ trông tuyến tính trong log-odds
  • Dùng splines và chấp nhận mô hình phức tạp hơn chút

Cả hai đều giữ bạn trong họ hồi quy logistic, và đều tốt hơn loại bỏ một biến thực ra mang thông tin.

Giả định 4: Không đa cộng tuyến nghiêm trọng

Hồi quy logistic xử lý được các biến dự báo tương quan tới một mức nào đó. Vượt mức đó, mô hình bắt đầu cư xử bất thường theo những cách khó phát hiện từ bất kỳ chỉ số kiểm tra nào.

Đa cộng tuyến xảy ra khi hai hoặc nhiều biến dự báo chứa cùng (hoặc rất giống) thông tin. Có thể bạn có chiều cao theo inch và theo centimet trong cùng mô hình. Hoặc có tổng doanh thu và doanh thu trên mỗi khách hàng cùng với số lượng khách hàng.

Hai điều sai xảy ra khi có đa cộng tuyến:

  • Hệ số trở nên bất ổn: Nếu bạn thêm hoặc bỏ một dòng, hệ số của một biến đồng tuyến có thể dao động mạnh hoặc đổi dấu. Mô hình vẫn hoạt động, nhưng từng hệ số không còn ý nghĩa.
  • Sai số chuẩn phình to: Với ít thông tin độc lập cho mỗi biến dự báo, mô hình ít chắc chắn hơn về từng hệ số. P-value tăng, và các hiệu ứng thực có thể bị báo là không có ý nghĩa.

Dự đoán thường vẫn ổn. Nếu bạn chỉ quan tâm xác suất dự đoán, đa cộng tuyến nhẹ đến vừa hiếm khi gây vấn đề. “Tổn hại” tập trung ở các hệ số và suy luận bạn thực hiện trên chúng.

Hai kiểm tra là ma trận tương quan và hệ số phóng đại phương sai (VIF). Ma trận tương quan là thứ đầu tiên nên xem, đặc biệt các cặp có tương quan trên 0,8 hoặc 0,9 theo trị tuyệt đối. Hạn chế là ma trận tương quan chỉ bắt cộng tuyến theo cặp, không bắt được trường hợp nhiều biến mà ba hay nhiều biến dư thừa tập thể.

VIF dùng cho trường hợp nhiều biến. Với mỗi biến dự báo, VIF đo lường mức độ phương sai của hệ số bị phóng đại bởi cộng tuyến với phần còn lại. VIF bằng 1 nghĩa là không cộng tuyến, tới 5 thường ổn, và trên 10 là tín hiệu mạnh rằng biến đó dư thừa với các biến khác trong mô hình.

Khi VIF báo động, cách sửa dễ nhất là bỏ một trong các biến đồng tuyến hoặc kết hợp chúng thành một đặc trưng duy nhất như tổng hay tỷ lệ. Nếu bạn muốn giữ tất cả, regularization (ridge hoặc elastic net) sẽ ổn định các hệ số mà không bắt bạn phải chọn.

Giả định 5: Cỡ mẫu phù hợp

Hồi quy logistic hoạt động với mẫu nhỏ, nhưng có phần kém tin cậy. Các hệ số dao động nhiều hơn mức nên có, và hiệu ứng của lớp hiếm gần như bất khả thi để ước lượng.

Cỡ mẫu quan trọng với hồi quy logistic không phải tổng số dòng. Đó là số sự kiện (quan sát thuộc lớp thiểu số). Một tập dữ liệu có 100.000 dòng và 50 ca gian lận là vấn đề mẫu nhỏ, vì mô hình chỉ có 50 ví dụ về điều nó cố học.

Đó là nơi số sự kiện trên mỗi biến (EPV) xuất hiện. EPV là số quan sát lớp thiểu số chia cho số biến dự báo trong mô hình. Nếu bạn có 50 ca gian lận và 10 biến, EPV là 5.

Quy tắc cũ là EPV ít nhất 10. Mô phỏng gần đây cho thấy con số đúng phụ thuộc vào kích thước hiệu ứng trong dữ liệu và mức regularization bạn dùng. EPV thấp tới 5 có thể ổn trong vài bối cảnh, và EPV 20 trở lên có thể cần ở bối cảnh khác.

Kết luận là coi EPV như thông tin cảnh báo. Dưới 10, kỳ vọng ước lượng bất ổn và cân nhắc phương pháp phạt như hồi quy logistic Firth hoặc ridge. Dưới 5, hãy lấy thêm dữ liệu hoặc đơn giản hóa mô hình trước khi tin vào bất kỳ hệ số riêng lẻ nào.

Mất cân bằng lớp là vấn đề liên quan nhưng khác biệt.

Một tập dữ liệu mà 99% ca thuộc một lớp vẫn có thể có đủ số sự kiện trên mỗi biến theo giá trị tuyệt đối. Điều thay đổi là tỷ lệ nền của kết quả, không phải EPV. Dữ liệu mất cân bằng có xu hướng tạo ra ước lượng xác suất thận trọng, và độ chính xác không còn là chỉ số hữu ích. Để khắc phục, đánh giá bằng log-loss hoặc Brier score thay vì accuracy, và cân nhắc trọng số lớp hoặc tinh chỉnh ngưỡng nếu bạn cần quyết định cân bằng.

Giả định 6: Không có ngoại lệ có ảnh hưởng mạnh

Hồi quy logistic không giả định các biến dự báo phân phối chuẩn. Biến lệch và biến đếm đều ổn. Điều mô hình quan tâm là liệu có quan sát đơn lẻ nào có ảnh hưởng quá lớn đến các hệ số khớp hay không.

Một quan sát có ảnh hưởng là quan sát mà nếu bạn loại bỏ, mô hình sẽ thay đổi đáng kể. Nó không giống ngoại lệ theo phần dư. Một điểm có thể có phần dư lớn (mô hình dự đoán kém) mà không ảnh hưởng mạnh, và một điểm có thể ảnh hưởng mạnh (mô hình dựa nhiều vào nó) mà không có phần dư lớn.

Bạn sẽ muốn vài chẩn đoán nhìn vào các khía cạnh khác nhau của ảnh hưởng:

  • Leverage đo mức độ giá trị biến dự báo của một quan sát là bất thường so với phần còn lại. Leverage tự nó không có nghĩa là quan sát có ảnh hưởng. Nó nghĩa là điểm đó có tiềm năng ảnh hưởng nếu kết quả của nó không khớp với điều các biến dự báo gợi ý
  • Khoảng cách Cook kết hợp leverage với phần dư thành một con số ước lượng mức độ các hệ số khớp sẽ thay đổi nếu bạn bỏ quan sát đó. Giá trị Cook lớn làm nổi bật các điểm đáng điều tra. Quy ước thường dùng là giá trị trên 4/n (với n là cỡ mẫu) hoặc chỉ xem vài giá trị Cook lớn nhất trong tập dữ liệu
  • Chẩn đoán phần dư rất hữu ích cho các trường hợp leverage và Cook không bắt được. Phần dư deviance và Pearson đánh dấu các quan sát mà mô hình gặp khó khi khớp. Một điểm có phần dư lớn đáng xem xét dù leverage ở mức vừa, vì mô hình đang nói rằng nó không thể giải thích ca đó bằng các biến dự báo khác

Khi bạn tìm thấy một điểm ảnh hưởng, câu hỏi là điểm đó thật hay sai. Lỗi nhập liệu thì sửa hoặc loại. Một ca thật nhưng bất thường thì giữ lại, và bạn ghi chú rằng kết luận phụ thuộc vào nó. Chỉ đừng loại điểm chỉ vì chúng ảnh hưởng. Đó là cách bạn có một mô hình khớp dữ liệu huấn luyện và không gì khác.

Hiểu lầm thường gặp về các giả định của Hồi quy Logistic

Hầu hết nhầm lẫn về giả định của hồi quy logistic đến từ việc dùng danh sách kiểm tra của hồi quy tuyến tính. Các giả định của hồi quy tuyến tính được biết đến rộng rãi và được dạy khắp nơi, và chúng xuất hiện trong hồi quy logistic nơi chúng không phù hợp. Dưới đây là bốn điều phổ biến nhất cần làm rõ.

Hồi quy logistic yêu cầu các biến phân phối chuẩn

Sai. Hồi quy logistic không có giả định chuẩn tính nào cho bất kỳ biến nào trong mô hình.

Kết quả được kỳ vọng là nhị phân, không phải chuẩn, và chúng ta đã đề cập ở Giả định 1. Các biến dự báo cũng không giả định chuẩn, và có thể mang bất kỳ hình dạng nào dữ liệu có. Điều quan trọng là mối quan hệ giữa các biến dự báo và log-odds, không phải phân phối biên của từng biến đơn lẻ.

Hồi quy logistic yêu cầu phương sai đồng nhất

Cũng sai. Phương sai đồng nhất (phần dư có phương sai không đổi trên dải giá trị dự đoán) là giả định của hồi quy tuyến tính và không áp dụng cho hồi quy logistic.

Phương sai của kết quả trong hồi quy logistic phụ thuộc vào chính xác suất dự đoán. Với biến Bernoulli, phương sai bằng p(1 - p), cao nhất gần p = 0.5 và thấp nhất gần 0 và 1. Phương sai không hằng, và mô hình tính tới điều đó qua hàm khả năng mà nó tối đa hóa.

Vì vậy khi bạn khớp hồi quy logistic, bạn không vi phạm gì khi có các xác suất dự đoán với phương sai khác nhau. Đó là cách mô hình vận hành.

Biến dự báo phải phân phối chuẩn

Sai. Hồi quy logistic không đặt giả định phân phối lên các biến dự báo.

Bạn có thể trộn biến liên tục, nhị phân, đếm và phân loại trong cùng mô hình. Biến lệch thì vẫn ổn. Biến có đuôi nặng cũng ổn. Mô hình không quan tâm hình dạng biên. Điều duy nhất nó quan tâm là tính tuyến tính của logit (đã đề cập ở Giả định 3), vốn là giả định về hình dạng mối quan hệ, không phải hình dạng phân phối.

Nếu độ lệch của một biến gây vấn đề, thường là vì tính tuyến tính của logit hoặc ngoại lệ có ảnh hưởng.

Phần dư phải phân phối chuẩn

Sai. Không có giả định chuẩn tính nào với phần dư của hồi quy logistic.

Hồi quy tuyến tính giả định phần dư phân phối chuẩn quanh 0, vì đó là một phần cách suy luận của nó hoạt động. Hồi quy logistic dùng ước lượng hợp lý tối đa trên hàm khả năng nhị thức, và phân phối phần dư của nó được quyết định bởi kết quả (0 hoặc 1) và xác suất khớp. Chúng không chuẩn, và không được kỳ vọng chuẩn.

Vì vậy khi bạn kiểm tra chẩn đoán phần dư cho hồi quy logistic (như Giả định 6), bạn đang tìm các quan sát có ảnh hưởng và điểm mô hình không giải thích được, không phải đường cong hình chuông.

Cách kiểm tra các giả định của Hồi quy Logistic trong Python

Tôi sẽ thực hiện các chẩn đoán với statsmodels. Scikit-learn khớp hồi quy logistic nhưng không cung cấp VIF, thống kê ảnh hưởng, hay chẩn đoán phần dư sẵn có.

Thiết lập ví dụ

Tôi sẽ tạo một tập dữ liệu rời bỏ tổng hợp với ba biến dự báo (tuổi, thu nhập và điểm chi tiêu), trong đó tuổi và thu nhập được cố tình tương quan để đa cộng tuyến có cái mà phát hiện.

import numpy as np
import pandas as pd
import statsmodels.api as sm
import statsmodels.formula.api as smf

np.random.seed(42)
n = 1000

age = np.random.normal(40, 12, n).clip(18, 80)
income = 30000 + 1500 * age + np.random.normal(0, 8000, n)
spending_score = np.random.uniform(1, 100, n)
logit_p = -3 + 0.04 * age + 0.02 * spending_score
p = 1 / (1 + np.exp(-logit_p))
y = np.random.binomial(1, p)

df = pd.DataFrame({
    "churned": y,
    "age": age,
    "income": income,
    "spending_score": spending_score,
})

model = smf.glm(
    "churned ~ age + income + spending_score",
    data=df, family=sm.families.Binomial()
).fit()
print(model.summary())

Model summary

Tóm tắt mô hình

Tóm tắt cho bạn các hệ số, sai số chuẩn, thống kê z và p-value. agespending_score là các biến dự báo có ý nghĩa. Hệ số của income rất nhỏ vì kết quả không phụ thuộc trực tiếp vào thu nhập. Ảnh hưởng bề ngoài của nó bị hấp thụ bởi tuổi.

Đa cộng tuyến với VIF

Statsmodels khiến phép tính này cực kỳ dễ:

from statsmodels.stats.outliers_influence import variance_inflation_factor

X = sm.add_constant(df[["age", "income", "spending_score"]])
vif = pd.DataFrame({
    "feature": X.columns,
    "VIF": [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]
})
print(vif[vif["feature"] != "const"])

VIF output

Kết quả VIF

VIF cho ageincome khoảng 5,5, cho thấy đa cộng tuyến nhẹ. spending_score gần 1, đó là điều bạn muốn. Phương sai của nó không bị phóng đại bởi cộng tuyến với các biến khác. VIF trên 5 là cờ nhẹ; trên 10 là vấn đề nghiêm trọng cần xử lý ngay. Nước đi ở đây là bỏ một trong age hoặc income hoặc kết hợp chúng thành một đặc trưng.

Tuyến tính của logit với Box-Tidwell

Kiểm định Box-Tidwell thêm các hạng tương tác giữa mỗi biến liên tục và log tự nhiên của chính nó. Tương tác có ý nghĩa báo hiệu mối quan hệ log-odds phi tuyến cho biến đó.

df_bt = df.copy()
for col in ["age", "income", "spending_score"]:
    df_bt[f"{col}_logx"] = df_bt[col] * np.log(df_bt[col])

bt_formula = (
    "churned ~ age + income + spending_score + "
    "age_logx + income_logx + spending_score_logx"
)
bt_model = smf.glm(
    bt_formula, data=df_bt, family=sm.families.Binomial()
).fit()

interactions = ["age_logx", "income_logx", "spending_score_logx"]
print(bt_model.pvalues[interactions])

Box-Tidwell output

Kết quả Box-Tidwell

Nếu bất kỳ p-value nào dưới 0,05, giả định tuyến tính của logit là đáng ngờ cho biến đó. Ở đây logit được tạo tuyến tính, nên các tương tác không nên có ý nghĩa. Với dữ liệu thực, hãy coi kết quả có ý nghĩa là gợi ý để vẽ log-odds thực nghiệm theo biến đó và quyết định dùng biến đổi hay spline là cách sửa phù hợp.

Chẩn đoán ảnh hưởng

Statsmodels cho bạn truy cập khoảng cách Cook và leverage qua get_influence().

influence = model.get_influence()
cooks_d = influence.cooks_distance[0]
leverage = influence.hat_matrix_diag

flagged = pd.DataFrame({
    "cooks_d": cooks_d,
    "leverage": leverage,
}).sort_values("cooks_d", ascending=False).head(10)
print(flagged)

Influence diagnostics output

Kết quả chẩn đoán ảnh hưởng

Ngưỡng khoảng cách Cook đáng điều tra xấp xỉ 4/n. Với 1000 dòng, đó là 0.004. Bất cứ gì cao hơn nhiều đều cần xem kỹ. Trong tập dữ liệu này, các khoảng cách Cook lớn nhất vẫn nhỏ theo trị tuyệt đối, là kết quả buồn-chán-mà-tốt bạn thường muốn.

Giờ tôi tạo một trực quan hóa để dễ đọc phân bố hơn:

Influence diagnostics visualized

Chẩn đoán ảnh hưởng được trực quan hóa

Các điểm nằm cao hẳn trên đường gạch đứt là những điểm cần điều tra. Có một vài, nhưng không quá nhiều.

Chẩn đoán phần dư

Phần dư deviance cho bạn biết các quan sát mà mô hình gặp khó khi khớp.

deviance_resid = model.resid_deviance
fitted = model.fittedvalues

resid_df = pd.DataFrame({
    "fitted": fitted,
    "deviance": deviance_resid,
}).sort_values("deviance", key=abs, ascending=False).head(10)
print(resid_df)

Residual diagnostics output

Kết quả chẩn đoán phần dư

Phần dư deviance dương lớn là các ca mô hình gán xác suất thấp nhưng thực tế là dương. Phần dư âm lớn là ngược lại. Bạn nên đối chiếu các quan sát có phần dư cao với chẩn đoán ảnh hưởng ở trên. Một ca vừa dự đoán kém vừa có ảnh hưởng là đáng điều tra nhất.

Cách kiểm tra các giả định của Hồi quy Logistic trong R

R có hỗ trợ tích hợp chặt chẽ hơn cho các chẩn đoán này. Phần lớn thứ bạn cần có sẵn từ glm() của base R cùng gói car.

Thiết lập ví dụ

Tôi sẽ tạo loại tập dữ liệu tổng hợp giống ví dụ Python, với tuổi và thu nhập cố ý tương quan.

set.seed(42)
n <- 1000

age <- pmin(pmax(rnorm(n, mean = 40, sd = 12), 18), 80)
income <- 30000 + 1500 * age + rnorm(n, sd = 8000)
spending_score <- runif(n, min = 1, max = 100)
logit_p <- -3 + 0.04 * age + 0.02 * spending_score
p <- 1 / (1 + exp(-logit_p))
churned <- rbinom(n, size = 1, prob = p)

df <- data.frame(churned, age, income, spending_score)

model <- glm(churned ~ age + income + spending_score,
             data = df, family = binomial)
summary(model)

Model summary output

Kết quả tóm tắt mô hình

Kết quả summary(model) cho bạn các hệ số, sai số chuẩn, thống kê z và p-value. agespending_score sẽ trông có ý nghĩa, trong khi ảnh hưởng của income bị hấp thụ bởi age.

Đa cộng tuyến với VIF

Gói car cung cấp vif() cho bất kỳ glm nào:

library(car)

vif(model)

VIF output in R

Kết quả VIF trong R

ageincome đều có VIF khoảng 5,7, thể hiện đa cộng tuyến được cài sẵn trong dữ liệu. spending_score gần 1. Như trong Python, giá trị trên 5 đáng chú ý và trên 10 là vấn đề rõ ràng.

Tuyến tính của logit với Box-Tidwell

Hàm car::boxTidwell được thiết kế cho hồi quy tuyến tính, nên với hồi quy logistic cách tốt nhất là thêm các hạng tương tác thủ công và khớp lại:

df_bt <- df
df_bt$age_logx <- df_bt$age * log(df_bt$age)
df_bt$income_logx <- df_bt$income * log(df_bt$income)
df_bt$spending_score_logx <- df_bt$spending_score * log(df_bt$spending_score)

bt_model <- glm(
  churned ~ age + income + spending_score +
    age_logx + income_logx + spending_score_logx,
  data = df_bt, family = binomial
)

interactions <- c("age_logx", "income_logx", "spending_score_logx")
summary(bt_model)$coefficients[interactions, ]

Box-Tidwell output in R

Kết quả BoX-Tidwell trong R

Kết quả cho hệ số và p-value của mỗi hạng tương tác. P-value có ý nghĩa báo hiệu vi phạm tính tuyến tính của logit cho biến đó. Với dữ liệu tổng hợp ở đây, kiểm định không nên bác bỏ tuyến tính. Với dữ liệu thực, theo sau bằng đồ thị log-odds thực nghiệm hoặc khớp mô hình dùng splines (từ gói splines) cho bất kỳ biến nào bị kiểm định gắn cờ.

Chẩn đoán ảnh hưởng

R cung cấp cooks.distance()hatvalues() trong base, nên không cần gói bên thứ ba:

cooks_d <- cooks.distance(model)
leverage <- hatvalues(model)

influence_df <- data.frame(
  index = seq_along(cooks_d),
  cooks_d = cooks_d,
  leverage = leverage
)
head(influence_df[order(-influence_df$cooks_d), ], 10)

Influence diagnostics in R

Chẩn đoán ảnh hưởng trong R

Ngưỡng khoảng cách Cook giống Python: 4/n, hay 0.004 với tập 1000 dòng. Bất cứ gì cao hơn nhiều đáng để điều tra. Để xem nhanh, plot(model, which = 4) của base R cho biểu đồ khoảng cách Cook chỉ với một dòng.

Chẩn đoán ảnh hưởng trong R được trực quan hóa

Chẩn đoán phần dư

Hàm residuals() của R cho phần dư deviance từ một glm:

deviance_resid <- residuals(model, type = "deviance")
fitted_vals <- fitted(model)

resid_df <- data.frame(
  fitted = fitted_vals,
  deviance = deviance_resid
)
head(resid_df[order(-abs(resid_df$deviance)), ], 10)

Residual diagnostics in R

Chẩn đoán phần dư trong R

Giá trị tuyệt đối phần dư deviance lớn là các ca mô hình dự đoán chệch. Bạn nên đối chiếu các điểm này với các cờ khoảng cách Cook ở trên để tìm quan sát vừa khớp kém vừa có ảnh hưởng.

Để xem tất cả trong một lần, influence.measures(model) trả về bảng kết hợp khoảng cách Cook, leverage, DFBETA và một vài thống kê ảnh hưởng khác tại một nơi. Đây là cách nhanh nhất để quét mọi chẩn đoán tiêu chuẩn trên một glm đã khớp.

Điều gì xảy ra khi giả định bị vi phạm?

Đa số vi phạm giả định sẽ không làm hỏng mô hình theo kiểu nó không chạy được. Chúng khiến mô hình cư xử sai tinh vi mà bạn chỉ nhận ra nếu biết cần tìm gì.

Bốn hệ quả thường gặp nhất:

  1. Hệ số bất ổn: Thay đổi nhỏ trong dữ liệu (thêm hoặc bớt vài dòng, thay đổi nhẹ đặc trưng) có thể làm hệ số thay đổi mạnh hoặc đổi dấu. Đây là điều đa cộng tuyến gây ra, và cũng xảy ra khi cỡ mẫu quá nhỏ so với số biến dự báo
  2. Hiệu chỉnh kém: Xác suất dự đoán của mô hình không còn khớp với tỷ lệ thực trong dữ liệu. Nó dự đoán 30% rời bỏ cho một nhóm nhưng quan sát được 15%. Độ chính xác có thể vẫn ổn, nhưng xác suất sai. Vi phạm tính tuyến tính của logit và các điểm ảnh hưởng đều góp phần
  3. Suy luận gây hiểu lầm: Đây là điều khó phát hiện nhất, vì mô hình vẫn tạo sai số chuẩn và p-value trông ổn. Các quan sát tương quan làm giảm sai số chuẩn dưới mức nên có, và đặc tả biến dự báo sai làm chúng phình to. Dù thế nào, p-value bạn nhận được không mang ý nghĩa như bạn nghĩ
  4. Suy giảm chất lượng dự đoán: Triệu chứng rõ ràng nhất, dù thường là nhỏ nhất trong thực tế. Dự đoán thường bền hơn hệ số, đó là lý do các đội chỉ tập trung vào độ chính xác thường bỏ qua dấu hiệu cảnh báo.

Nhưng thực lòng, các vi phạm hiếm khi làm mô hình vô dụng. Chúng khiến một số phần không đáng tin, và phần nào không đáng tin phụ thuộc vào giả định nào hỏng. Đó là lý do các chẩn đoán quan trọng.

Lựa chọn thay thế khi các giả định của Hồi quy Logistic thất bại

Nếu chẩn đoán cho thấy các vấn đề bạn không thể sửa trong hồi quy logistic, bước tiếp theo là dùng mô hình không đưa ra những giả định đó.

Mô hình cộng tính tổng quát (GAM) là thứ tiếp theo nên xem. GAM giữ hàm liên kết logistic và cấu trúc cộng dễ diễn giải, nhưng thay hạng tuyến tính bằng các hàm trơn theo từng biến dự báo. Bạn nhận được “hệ số-cùng-hình-dạng” thay vì một con số, giải quyết vấn đề tuyến tính của logit. GAM vẫn đủ tham số để kiểm tra và diễn giải, khiến chúng là bước nâng hợp lý từ hồi quy logistic khi giả định tuyến tính không thể giữ.

Các mô hình dựa trên cây là lựa chọn linh hoạt hơn. Rừng ngẫu nhiên và boosting theo gradient không đưa ra giả định về phân phối biến dự báo hay hình dạng mối quan hệ. Chúng xử lý đa cộng tuyến và thậm chí bắt được phi tuyến. Chúng không cho bạn diễn giải hệ số dễ dàng như hồi quy logistic, nhưng thường vượt trội về chỉ số dự đoán khi dữ liệu có cấu trúc phi tuyến hoặc tương tác bạn không đưa vào mô hình.

Việc chọn giữa GAM và mô hình cây phụ thuộc vào bạn cần gì từ mô hình.

  • Chọn GAM khi ưu tiên khả năng diễn giải và bạn muốn thấy mỗi biến dự báo ảnh hưởng log-odds thế nào
  • Chọn cây tăng cường gradient khi ưu tiên chất lượng dự đoán và bạn chấp nhận mô hình kém minh bạch hơn

Đáng lưu ý là giả định của hồi quy logistic dễ kiểm tra hơn là bỏ qua. Nếu bạn có thể sửa bằng biến đổi, spline, regularization, hoặc mẫu tốt hơn, khả năng diễn giải và đầu ra suy luận của hồi quy logistic thường vượt trội so với chuyển sang mô hình linh hoạt hơn.

Vì vậy, hãy chuyển sang GAM hoặc mô hình cây khi chẩn đoán cho thấy giả định thực sự không giữ, chứ không phải chỉ vì hồi quy logistic không phải thuật toán tối tân.

Thực hành tốt nhất khi mô hình hóa Hồi quy Logistic

Và cuối cùng, hãy theo danh sách ngắn này để luôn có mô hình đáng tin:

  • Kiểm tra giả định trước khi diễn giải: Chạy VIF, kiểm định Box-Tidwell, và chẩn đoán ảnh hưởng trước khi đọc hệ số. Nếu bạn diễn giải trước và kiểm tra sau, bạn sẽ phải bảo vệ những con số bạn chưa xác minh. Bạn không muốn là người đó trong cuộc họp
  • Dùng regularization khi cỡ mẫu nhỏ: Ridge hoặc elastic net ổn định hệ số khi EPV thấp hoặc biến dự báo tương quan. Đánh đổi là một chút chệch để đổi lấy giảm phương sai lớn, thường là thương vụ có lời
  • Xác thực trên dữ liệu mô hình chưa thấy: Giữ lại tập kiểm tra hoặc dùng cross-validation. Chỉ số trên tập huấn luyện thổi phồng hiệu năng bất cứ khi nào mô hình có chỗ để overfit, điều hồi quy logistic có khi bạn có nhiều biến dự báo hoặc sự kiện hiếm
  • Đánh giá hiệu chỉnh (calibration): Độ chính xác che giấu việc xác suất dự đoán có khớp với tỷ lệ thực hay không. Dùng log-loss hoặc Brier score để đánh giá, và xem biểu đồ hiệu chỉnh khi xác suất quan trọng cho quyết định kinh doanh

Kết luận

Thực lòng, hồi quy logistic là một trong những mô hình “dễ tính” hơn mà bạn có thể khớp.

Nó chịu được biến dự báo lệch và kết quả mất cân bằng, và không quan tâm phần dư trông thế nào. Điều nó không chịu được là mối quan hệ với log-odds bị đặc tả sai, hoặc một tập biến dự báo đều mang cùng thông tin.

Đó là lý do tính tuyến tính của logit và đa cộng tuyến là hai kiểm tra giả định đáng coi là bắt buộc. Chúng là những thứ bóp méo mô hình theo những cách không chỉ số nào bắt được. Bốn giả định còn lại cũng liên quan, nhưng hai điều này là thứ bạn nên thực sự tập trung.

Để an toàn, hãy chạy chẩn đoán song song với đánh giá, không phải sau đó. Một mô hình dự đoán tốt và vượt qua các kiểm tra giả định là mô hình bạn có thể bảo chứng. Bất kỳ điều gì ít hơn là mô hình bạn đã huấn luyện nhưng chưa thật sự xác minh.

Nếu điều này nghe có vẻ phức tạp, đó là vì đúng vậy. Để trở thành kỹ sư máy học giỏi cần rất nhiều, nên chúng tôi khuyên bạn đăng ký lộ trình Machine Learning Scientist in Python. 85 giờ tài liệu sẽ giúp bạn sẵn sàng cho công việc vào năm 2026.


Dario Radečić's photo
Author
Dario Radečić
LinkedIn
Chuyên gia Khoa học Dữ liệu Cấp cao, làm việc tại Croatia. Tác giả Công nghệ Hàng đầu với hơn 700 bài viết đã xuất bản, đạt trên 10 triệu lượt xem. Tác giả cuốn sách Tự động hóa Machine Learning với TPOT.

FAQs

Hồi quy logistic có giả định không?

Có. Hồi quy logistic có ít giả định hơn hồi quy tuyến tính, nhưng không phải không có giả định. Những giả định chính bao gồm hình dạng của biến kết quả, tính độc lập của quan sát, tính tuyến tính của log-odds, và không có đa cộng tuyến cao hoặc các điểm có ảnh hưởng mạnh.

Những giả định quan trọng nhất của hồi quy logistic là gì?

Hai giả định quan trọng nhất là tính tuyến tính của logit và không có đa cộng tuyến cao. Tính tuyến tính của logit thường bị hiểu sai, vì hồi quy logistic không giả định quan hệ tuyến tính giữa biến dự báo và kết quả, nhưng có giả định quan hệ tuyến tính giữa biến dự báo và log-odds. Đa cộng tuyến quan trọng vì nó làm méo các hệ số và thổi phồng sai số chuẩn mà không ảnh hưởng tới độ chính xác, nên có thể ẩn khỏi mọi kiểm tra chỉ nhìn vào hiệu năng dự đoán.

Điều gì xảy ra nếu các giả định của hồi quy logistic bị vi phạm?

Tùy vào giả định nào hỏng. Vi phạm tính tuyến tính của logit hoặc đa cộng tuyến mạnh âm thầm làm hỏng các hệ số trong khi độ chính xác vẫn nguyên, đó là lý do chúng dễ bị bỏ lỡ. Vi phạm tính độc lập làm phồng hoặc thu hẹp sai số chuẩn, khiến p-value không đáng tin. Đa số vi phạm không làm mô hình vô dụng, nhưng khiến một số phần không đáng tin theo những cách mà chỉ nhìn độ chính xác sẽ không cho thấy.

Hồi quy logistic có yêu cầu biến dự báo phân phối chuẩn không?

Không. Hồi quy logistic không đặt giả định phân phối lên các biến dự báo. Bạn có thể trộn biến liên tục, phân loại, lệch và đuôi nặng trong cùng mô hình mà không vấn đề. Điều quan trọng là mối quan hệ giữa mỗi biến dự báo và log-odds, không phải hình dạng biên của chính biến đó.

Ngưỡng VIF tốt cho hồi quy logistic là bao nhiêu?

Giá trị VIF tới 5 thường ổn, từ 5 đến 10 gợi ý đa cộng tuyến vừa phải đáng điều tra, và trên 10 là tín hiệu một hoặc nhiều biến dự báo dư thừa. Các ngưỡng này không phải quy tắc cứng mà là thông lệ, vì diễn giải VIF phụ thuộc cỡ mẫu và độ chính xác bạn cần. Nếu VIF của một biến cao và sai số chuẩn của nó trông bất ổn trên các tập con dữ liệu, bạn có bằng chứng rằng cộng tuyến đang gây rắc rối.

Chủ đề

Học cùng DataCamp

Courses

Nhập môn Hồi quy bằng R

4 giờ
77.1K
Dự đoán giá nhà và tỷ lệ nhấp chuột vào quảng cáo bằng cách triển khai, phân tích và diễn giải phân tích hồi quy trong R.
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow