วิธีทดสอบ multicollinearity ใน python


ในการวิเคราะห์การถดถอย พหุคอลลิเนียร์ริตี้ เกิดขึ้นเมื่อตัวแปรทำนายตั้งแต่สองตัวขึ้นไปมีความสัมพันธ์กันอย่างมาก ส่งผลให้ตัวแปรเหล่านั้นไม่ได้ให้ข้อมูลเฉพาะหรือเป็นอิสระในแบบจำลองการถดถอย

หากระดับความสัมพันธ์ระหว่างตัวแปรทำนายสูงเพียงพอ สิ่งนี้อาจทำให้เกิดปัญหาเมื่อทำการปรับให้เหมาะสมและตีความแบบจำลองการถดถอย

วิธีที่ง่ายที่สุดในการตรวจจับพหุคอลลิเนียร์ในแบบจำลองการถดถอยคือการคำนวณหน่วยเมตริกที่เรียกว่าปัจจัยอัตราเงินเฟ้อแปรปรวน ซึ่งมักใช้ตัวย่อ VIF

VIF วัดความแข็งแกร่งของความสัมพันธ์ระหว่างตัวแปรทำนายในแบบจำลอง รับค่าระหว่าง 1 ถึงอนันต์บวก

เราใช้กฎง่ายๆ ต่อไปนี้ในการตีความค่า VIF:

  • VIF = 1: ไม่มีความสัมพันธ์ระหว่างตัวแปรทำนายที่กำหนดกับตัวแปรทำนายอื่นๆ ในแบบจำลอง
  • VIF ระหว่าง 1 ถึง 5: มีความสัมพันธ์ในระดับปานกลางระหว่างตัวแปรตัวทำนายที่กำหนดกับตัวแปรตัวทำนายอื่นๆ ในแบบจำลอง
  • VIF > 5 : มีความสัมพันธ์กันอย่างมากระหว่างตัวแปรทำนายที่กำหนดกับตัวแปรทำนายอื่นๆ ในแบบจำลอง

ตัวอย่างต่อไปนี้แสดงวิธีการตรวจหา multicollinearity ในโมเดลการถดถอยใน Python โดยการคำนวณค่า VIF สำหรับตัวแปรทำนายแต่ละตัวในโมเดล

ตัวอย่าง: การทดสอบ multicollinearity ใน Python

สมมติว่าเรามี DataFrame แพนด้าต่อไปนี้ซึ่งมีข้อมูลเกี่ยวกับผู้เล่นบาสเกตบอลต่างๆ:

 import pandas as pd

#createDataFrame
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

สมมติว่าเราต้องการปรับ โมเดลการถดถอยเชิงเส้นหลายตัวให้พอดี โดยใช้ การให้คะแนน เป็นตัวแปรตอบสนอง และ จุด ช่วยเหลือ และ รีบาวด์ เป็นตัวแปรทำนาย

ในการคำนวณ VIF สำหรับตัวแปรทำนายแต่ละตัวในโมเดล เราสามารถใช้ฟังก์ชัน variance_inflation_factor() จากไลบรารี statsmodels :

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

#find design matrix for regression model using 'rating' as response variable 
y ,

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

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

#view VIF for each predictor variable 
print (viv_df)

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

เราสามารถดูค่า VIF ของตัวแปรทำนายแต่ละตัวได้:

  • คะแนน: 1.76
  • แอสซิสต์: 1.96
  • รีบาวน์: 1.18

หมายเหตุ: ไม่ต้องสนใจ VIF สำหรับ “Intercept” ในเทมเพลต เนื่องจากค่านี้ไม่เกี่ยวข้อง

เนื่องจากแต่ละค่า VIF ของตัวแปรทำนายในแบบจำลองมีค่าใกล้เคียงกับ 1 ความเป็นหลายเส้นตรงจึงไม่เป็นปัญหาในแบบจำลอง

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีทำงานทั่วไปอื่นๆ ใน Python:

วิธีดำเนินการถดถอยเชิงเส้นอย่างง่ายใน Python
วิธีดำเนินการถดถอยเชิงเส้นพหุคูณใน Python
วิธีสร้างพล็อตที่เหลือใน Python

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *