Làm cách nào để kiểm tra đa cộng tuyến trong hồi quy logistic bằng Python?

Trong phân tích hồi quy, đa cộng tuyến xảy ra khi hai hoặc nhiều biến dự đoán có tương quan cao với nhau, do đó chúng không cung cấp thông tin duy nhất hoặc độc lập trong mô hình hồi quy

Nếu mức độ tương quan đủ cao giữa các biến dự đoán, nó có thể gây ra vấn đề khi điều chỉnh và giải thích mô hình hồi quy.  

Cách đơn giản nhất để phát hiện đa cộng tuyến trong mô hình hồi quy là tính toán một số liệu được gọi là hệ số lạm phát phương sai, thường được viết tắt là VIF

VIF đo lường mức độ tương quan giữa các biến dự đoán trong một mô hình. Nó nhận giá trị từ 1 đến vô cực dương

Chúng tôi sử dụng các quy tắc ngón tay cái sau đây để giải thích các giá trị VIF

  • VIF = 1. Không có mối tương quan giữa một biến dự đoán nhất định và bất kỳ biến dự báo nào khác trong mô hình
  • VIF giữa 1 và 5. Có mối tương quan vừa phải giữa một biến dự đoán nhất định và các biến dự đoán khác trong mô hình
  • VIF > 5. Có mối tương quan chặt chẽ giữa một biến dự đoán nhất định và các biến dự báo khác trong mô hình

Ví dụ sau đây cho thấy cách phát hiện đa cộng tuyến trong mô hình hồi quy bằng Python bằng cách tính giá trị VIF cho từng biến dự đoán trong mô hình

Ví dụ. Kiểm tra tính đa cộng tuyến trong Python

Giả sử chúng ta có DataFrame gấu trúc sau chứa thông tin về các cầu thủ bóng rổ khác nhau

import pandas as pd

#create DataFrame
df = pd.DataFrame({'rating': [90, 85, 82, 88, 94, 90, 76, 75, 87, 86],
                   'points': [25, 20, 14, 16, 27, 20, 12, 15, 14, 19],
                   'assists': [5, 7, 7, 8, 5, 7, 6, 9, 9, 5],
                   'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]})

#view DataFrame
print(df)

	rating	points	assists	rebounds
0	90	25	5	11
1	85	20	7	8
2	82	14	7	10
3	88	16	8	6
4	94	27	5	6
5	90	20	7	9
6	76	12	6	6
7	75	15	9	10
8	87	14	9	10
9	86	19	5	7

Giả sử chúng ta muốn điều chỉnh mô hình hồi quy tuyến tính bội bằng cách sử dụng xếp hạng làm biến phản hồi và điểm, hỗ trợ và phục hồi làm biến dự báo

Để tính toán VIF cho từng biến dự đoán trong mô hình, chúng ta có thể sử dụng hàm phương sai_inflation_factor() từ thư viện statsmodels

from patsy import dmatrices
from statsmodels.stats.outliers_influence import variance_inflation_factor

#find design matrix for regression model using 'rating' as response variable 
y, X = dmatrices('rating ~ points+assists+rebounds', data=df, return_type='dataframe')

#create DataFrame to hold VIF values
vif_df = pd.DataFrame()
vif_df['variable'] = X.columns 

#calculate VIF for each predictor variable 
vif_df['VIF'] = [variance_inflation_factor(X.values, i) for i in range(X.shape[1])]

#view VIF for each predictor variable 
print(vif_df)

	       VIF	 variable
0	101.258171	Intercept
1	  1.763977	   points
2	  1.959104	  assists
3	  1.175030	 rebounds

Chúng ta có thể thấy các giá trị VIF cho từng biến dự đoán

  • điểm. 1. 76
  • hỗ trợ. 1. 96
  • phục hồi. 1. 18

Ghi chú. Bỏ qua VIF cho “Đánh chặn” trong mô hình vì giá trị này không liên quan

Vì mỗi giá trị VIF cho các biến dự đoán trong mô hình đều gần bằng 1, nên đa cộng tuyến không phải là vấn đề trong mô hình

Đa cộng tuyến có thể khó phát âm nhưng đó là một chủ đề bạn nên biết trong lĩnh vực máy học. Tôi quen thuộc với nó vì nền tảng thống kê của tôi nhưng tôi đã thấy rất nhiều chuyên gia không biết rằng đa cộng tuyến tồn tại

Điều này đặc biệt phổ biến ở những người học máy không có nền tảng toán học. Và mặc dù đúng vậy, đa cộng tuyến có thể không phải là chủ đề quan trọng nhất cần nắm bắt trong hành trình của bạn, nhưng nó vẫn đủ quan trọng để tìm hiểu. Đặc biệt nếu bạn đang ngồi phỏng vấn nhà khoa học dữ liệu

Vì vậy, trong bài viết này, chúng ta sẽ hiểu đa cộng tuyến là gì, tại sao lại là vấn đề, nguyên nhân gây ra đa cộng tuyến, từ đó tìm hiểu cách phát hiện và khắc phục đa cộng tuyến

Trước khi đi sâu hơn, bắt buộc phải có hiểu biết cơ bản về hồi quy và một số thuật ngữ thống kê. Đối với điều này, tôi thực sự khuyên bạn nên xem qua các tài nguyên bên dưới

Mục lục

  • Đa cộng tuyến là gì?
  • Vấn đề có đa cộng tuyến
  • Điều gì gây ra đa cộng tuyến?
  • Phát hiện đa cộng tuyến với VIF
  • Khắc phục đa cộng tuyến

Đa cộng tuyến là gì?

Đa cộng tuyến xảy ra khi hai hoặc nhiều biến độc lập có tương quan cao với nhau trong mô hình hồi quy

Điều này có nghĩa là một biến độc lập có thể được dự đoán từ một biến độc lập khác trong mô hình hồi quy. Ví dụ: chiều cao và cân nặng, thu nhập hộ gia đình và mức tiêu thụ nước, quãng đường đã đi và giá xe, thời gian học tập và giải trí, v.v.

Hãy để tôi lấy một ví dụ đơn giản từ cuộc sống hàng ngày của chúng ta để giải thích điều này. Colin thích vừa xem tivi vừa nhai khoai tây chiên. Anh ấy càng xem nhiều TV, anh ấy càng ăn nhiều khoai tây chiên và càng hạnh phúc

Bây giờ, nếu chúng ta có thể định lượng hạnh phúc và đo lường mức độ hạnh phúc của Colin khi anh ấy đang bận rộn thực hiện hoạt động yêu thích của mình, bạn nghĩ điều gì sẽ có tác động lớn hơn đến hạnh phúc của anh ấy? . Và khoảnh khắc chúng tôi thử đo mức độ hạnh phúc của anh ấy khi xem tivi, anh ấy bắt đầu ăn khoai tây chiên

Ăn khoai tây chiên và xem tivi có mối tương quan cao trong trường hợp của Colin và chúng ta không thể xác định riêng lẻ tác động của các hoạt động cá nhân đối với hạnh phúc của anh ấy. Đây là vấn đề đa cộng tuyến

Vậy tại sao bạn phải lo lắng về đa cộng tuyến trong bối cảnh máy học?

Vấn đề có đa cộng tuyến

Đa cộng tuyến có thể là một vấn đề trong mô hình hồi quy vì chúng ta sẽ không thể phân biệt giữa các tác động riêng lẻ của các biến độc lập lên biến phụ thuộc. Ví dụ: giả sử rằng trong phương trình tuyến tính sau

Y = W0+W1*X1+W2*X2

Hệ số W1 là mức tăng của Y khi X1 tăng một đơn vị trong khi giữ X2 không đổi. Nhưng vì X1 và X2 có mối tương quan cao, những thay đổi trong X1 cũng sẽ gây ra những thay đổi trong X2 và chúng ta sẽ không thể thấy tác động riêng lẻ của chúng đối với Y

“ Điều này làm cho tác động của X1 lên Y khó phân biệt với tác động của X2 lên Y. ”

Đa cộng tuyến có thể không ảnh hưởng nhiều đến độ chính xác của mô hình. Nhưng chúng tôi có thể mất độ tin cậy trong việc xác định tác động của các tính năng riêng lẻ trong mô hình của bạn – và đó có thể là một vấn đề khi nói đến khả năng diễn giải

Điều gì gây ra đa cộng tuyến?

Đa cộng tuyến có thể xảy ra do các vấn đề sau

  • Đa cộng tuyến có thể tồn tại do các vấn đề trong tập dữ liệu tại thời điểm tạo. Những vấn đề này có thể là do thí nghiệm được thiết kế kém, dữ liệu mang tính quan sát cao hoặc không có khả năng thao tác dữ liệu
    • Ví dụ, xác định mức tiêu thụ điện của một hộ gia đình từ thu nhập của hộ gia đình và số lượng thiết bị điện. Ở đây, chúng ta biết rằng số lượng thiết bị điện trong một hộ gia đình sẽ tăng theo thu nhập của hộ gia đình. Tuy nhiên, điều này không thể bị xóa khỏi tập dữ liệu
  • Đa cộng tuyến cũng có thể xảy ra khi các biến mới được tạo phụ thuộc vào các biến khác
    • Ví dụ: tạo một biến cho BMI từ các biến chiều cao và cân nặng sẽ bao gồm thông tin dư thừa trong mô hình
  • Bao gồm các biến giống hệt nhau trong tập dữ liệu
    • Ví dụ: bao gồm các biến cho nhiệt độ tính bằng Fahrenheit và nhiệt độ tính bằng độ C
  • Việc sử dụng biến giả không chính xác cũng có thể gây ra vấn đề đa cộng tuyến. Đây được gọi là cái bẫy biến giả
    • Ví dụ: trong tập dữ liệu chứa trạng thái của biến hôn nhân có hai giá trị duy nhất. 'kết hôn', 'độc thân'. Tạo các biến giả cho cả hai sẽ bao gồm thông tin dư thừa. Chúng ta có thể thực hiện chỉ với một biến chứa 0/1 cho trạng thái 'đã kết hôn'/'độc thân'
  • Dữ liệu không đầy đủ trong một số trường hợp cũng có thể gây ra vấn đề đa cộng tuyến

Phát hiện đa cộng tuyến bằng VIF

Hãy thử phát hiện đa cộng tuyến trong một tập dữ liệu để giúp bạn biết điều gì có thể xảy ra sai sót

Tôi đã tạo một bộ dữ liệu xác định mức lương của một người trong công ty dựa trên các tính năng sau

  • Giới tính (0 – nữ, 1- nam)
  • Tuổi
  • Số năm làm việc (Số năm làm việc trong công ty)
  • Trình độ học vấn (0 – không học chính quy, 1 – chưa tốt nghiệp, 2 – sau tốt nghiệp)

Đa cộng tuyến có thể được phát hiện thông qua các phương pháp khác nhau. Trong bài viết này, chúng tôi sẽ tập trung vào một vấn đề phổ biến nhất – VIF (Các yếu tố lạm phát có thể thay đổi)

” VIF xác định độ mạnh của mối tương quan giữa các biến độc lập. Nó được dự đoán bằng cách lấy một biến và hồi quy nó theo mọi biến khác. “

hoặc

Điểm VIF của một biến độc lập thể hiện mức độ giải thích của biến đó bởi các biến độc lập khác

Giá trị R^2 được xác định để tìm hiểu xem một biến độc lập được mô tả tốt như thế nào bởi các biến độc lập khác. Giá trị R^2 cao có nghĩa là biến này có tương quan cao với các biến khác. Điều này được ghi lại bởi VIF được ký hiệu bên dưới

Vì vậy, giá trị R^2 càng gần 1, giá trị của VIF càng cao và tính đa cộng tuyến với biến độc lập cụ thể càng cao

  • VIF bắt đầu từ 1 và không có giới hạn trên
  • VIF = 1, không có tương quan giữa biến độc lập với các biến khác
  • VIF vượt quá 5 hoặc 10 cho thấy tính đa cộng tuyến cao giữa biến độc lập này với các biến khác

Ở đây chúng ta có thể thấy rằng ‘Tuổi tác’ và ‘Số năm phục vụ’ có giá trị VIF cao, nghĩa là chúng có thể được dự đoán bởi các biến độc lập khác trong tập dữ liệu

Mặc dù ma trận tương quan và biểu đồ phân tán cũng có thể được sử dụng để tìm đa cộng tuyến, nhưng kết quả của chúng chỉ cho thấy mối quan hệ hai chiều giữa các biến độc lập. VIF được ưa thích hơn vì nó có thể hiển thị mối tương quan của một biến với một nhóm các biến khác

Khắc phục đa cộng tuyến

Loại bỏ một trong các tính năng tương quan sẽ giúp giảm tính đa cộng tuyến giữa các tính năng tương quan

Hình bên trái chứa giá trị VIF ban đầu cho các biến và hình bên phải là sau khi loại bỏ biến 'Tuổi'

Chúng tôi có thể loại bỏ biến 'Tuổi' khỏi tập dữ liệu vì thông tin của nó đang được biến 'Số năm phục vụ' nắm bắt. Điều này đã làm giảm sự dư thừa trong tập dữ liệu của chúng tôi

Việc loại bỏ các biến phải là một quá trình lặp đi lặp lại bắt đầu với biến có giá trị VIF lớn nhất vì xu hướng của nó bị các biến khác nắm bắt cao. Nếu bạn làm điều này, bạn sẽ nhận thấy rằng các giá trị VIF cho các biến khác cũng sẽ giảm, mặc dù ở một mức độ khác nhau.

Trong ví dụ của chúng tôi, sau khi loại bỏ biến 'Tuổi', các giá trị VIF cho tất cả các biến đã giảm ở một mức độ khác nhau

Tiếp theo, kết hợp các biến tương quan thành một và loại bỏ các biến khác. Điều này sẽ làm giảm đa cộng tuyến

Hình bên trái chứa giá trị VIF ban đầu cho các biến và hình bên phải là sau khi kết hợp biến 'Tuổi tác' và 'Số năm phục vụ'. Việc kết hợp 'Tuổi' và 'Số năm kinh nghiệm' thành một biến duy nhất 'Tuổi_tại_gia' cho phép chúng tôi thu thập thông tin trong cả hai biến

Tuy nhiên, đa cộng tuyến không phải lúc nào cũng là vấn đề. Việc khắc phục đa cộng tuyến phụ thuộc chủ yếu vào các nguyên nhân sau

  1. Khi bạn quan tâm nhiều hơn đến mức độ ảnh hưởng của từng tính năng riêng lẻ thay vì một nhóm các tính năng ảnh hưởng đến biến mục tiêu, thì việc loại bỏ đa cộng tuyến có thể là một lựa chọn tốt
  2. Nếu đa cộng tuyến không xuất hiện trong các tính năng bạn quan tâm, thì đa cộng tuyến có thể không phải là vấn đề

Ghi chú kết thúc

Kiến thức về đa cộng tuyến có thể khá hữu ích khi bạn đang xây dựng các mô hình học máy có thể hiểu được

Tôi hy vọng bạn thấy bài viết này hữu ích trong việc hiểu vấn đề về đa cộng tuyến và cách giải quyết nó. Nếu bạn muốn hiểu các mô hình hồi quy khác hoặc muốn hiểu diễn giải mô hình, tôi thực sự khuyên bạn nên xem qua các bài viết tuyệt vời sau đây

Đa cộng tuyến có ảnh hưởng đến hồi quy logistic không?

Đa cộng tuyến cũng có thể dẫn đến sai dấu và độ lớn của các ước tính hệ số hồi quy logistic và do đó dẫn đến kết luận không chính xác về mối quan hệ giữa các biến giải thích và biến phản hồi.

VIF trong hồi quy logistic là gì?

Các khái niệm giống nhau đối với mô hình hồi quy tuyến tính logistic và thông thường vì đa cộng tuyến đề cập đến các biến độc lập tương quan. Đối với hồi quy tuyến tính thông thường, hệ số lạm phát phương sai (VIF) thường được sử dụng làm thước đo để đánh giá mức độ đa cộng tuyến.