คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยเชิงเส้นใน python


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

บทช่วยสอนนี้จะอธิบายวิธีการถดถอยเชิงเส้นใน Python

ตัวอย่าง: การถดถอยเชิงเส้นใน Python

สมมติว่าเราต้องการทราบว่าจำนวนชั่วโมงในการเรียนและจำนวนข้อสอบฝึกหัดที่สอบส่งผลต่อเกรดที่นักเรียนได้รับจากการสอบที่กำหนดหรือไม่

เพื่อสำรวจความสัมพันธ์นี้ เราสามารถทำตามขั้นตอนต่อไปนี้ใน Python เพื่อทำการถดถอยเชิงเส้นหลายรายการ

ขั้นตอนที่ 1: ป้อนข้อมูล

ขั้นแรก เราจะสร้าง DataFrame ของแพนด้าเพื่อเก็บชุดข้อมูลของเรา:

 import pandas as pd

#create data
df = pd.DataFrame({'hours': [1, 2, 2, 4, 2, 1, 5, 4, 2, 4, 4, 3, 6, 5, 3, 4, 6, 2, 1, 2],
                   'exams': [1, 3, 3, 5, 2, 2, 1, 1, 0, 3, 4, 3, 2, 4, 4, 4, 5, 1, 0, 1],
                   'score': [76, 78, 85, 88, 72, 69, 94, 94, 88, 92, 90, 75, 96, 90, 82, 85, 99, 83, 62, 76]})

#view data 
df

        hours exam score
0 1 1 76
1 2 3 78
2 2 3 85
3 4 5 88
4 2 2 72
5 1 2 69
6 5 1 94
7 4 1 94
8 2 0 88
9 4 3 92
10 4 4 90
11 3 3 75
12 6 2 96
13 5 4 90
14 3 4 82
15 4 4 85
16 6 5 99
17 2 1 83
18 1 0 62
19 2 1 76

ขั้นตอนที่ 2: ดำเนินการถดถอยเชิงเส้น

ต่อไป เราจะใช้ ฟังก์ชัน OLS() จากไลบรารี statsmodels เพื่อดำเนินการถดถอยกำลังสองน้อยที่สุดแบบธรรมดา โดยใช้ “ชั่วโมง” และ “การสอบ” เป็นตัวแปรทำนาย และใช้ “คะแนน” เป็นตัวแปรตอบสนอง:

 import statsmodels.api as sm

#define response variable
y = df['score']

#define predictor variables
x = df[['hours', 'exams']]

#add constant to predictor variables
x = sm.add_constant(x)

#fit linear regression model
model = sm.OLS(y, x).fit()

#view model summary
print(model.summary())

                            OLS Regression Results                            
==================================================== ============================
Dept. Variable: R-squared score: 0.734
Model: OLS Adj. R-squared: 0.703
Method: Least Squares F-statistic: 23.46
Date: Fri, 24 Jul 2020 Prob (F-statistic): 1.29e-05
Time: 13:20:31 Log-Likelihood: -60.354
No. Observations: 20 AIC: 126.7
Df Residuals: 17 BIC: 129.7
Df Model: 2                                         
Covariance Type: non-robust                                         
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
const 67.6735 2.816 24.033 0.000 61.733 73.614
hours 5.5557 0.899 6.179 0.000 3.659 7.453
exams -0.6017 0.914 -0.658 0.519 -2.531 1.327
==================================================== ============================
Omnibus: 0.341 Durbin-Watson: 1.506
Prob(Omnibus): 0.843 Jarque-Bera (JB): 0.196
Skew: -0.216 Prob(JB): 0.907
Kurtosis: 2,782 Cond. No. 10.8
==================================================== ============================

ขั้นตอนที่ 3: ตีความผลลัพธ์

ต่อไปนี้คือวิธีตีความตัวเลขที่เกี่ยวข้องมากที่สุดในผลลัพธ์:

R กำลังสอง: 0.734 . นี่เรียกว่าสัมประสิทธิ์การตัดสินใจ นี่คือสัดส่วนของความแปรปรวนในตัวแปรตอบสนองที่สามารถอธิบายได้ด้วยตัวแปรทำนาย ในตัวอย่างนี้ 73.4% ของการเปลี่ยนแปลงของคะแนนสอบอธิบายได้จากจำนวนชั่วโมงที่เรียนและจำนวนการสอบเพื่อเตรียมสอบ

สถิติ F: 23.46 . นี่คือสถิติ F โดยรวมของแบบจำลองการถดถอย

ค่าใช้จ่าย (สถิติ F): 1.29e-05 นี่คือค่า p ที่เกี่ยวข้องกับสถิติ F โดยรวม ข้อมูลนี้บอกเราว่าแบบจำลองการถดถอยโดยรวมมีนัยสำคัญทางสถิติหรือไม่ กล่าวอีกนัยหนึ่ง มันบอกเราว่าตัวแปรทำนายทั้งสองรวมกันมีความสัมพันธ์ที่มีนัยสำคัญทางสถิติกับตัวแปรตอบสนองหรือไม่ ในกรณีนี้ ค่า p น้อยกว่า 0.05 ซึ่งบ่งชี้ว่าตัวแปรทำนาย “ชั่วโมงเรียน” และ “การสอบเตรียมสอบ” รวมกันมีความสัมพันธ์ที่มีนัยสำคัญทางสถิติกับคะแนนสอบ

coef: ค่าสัมประสิทธิ์ของตัวแปรทำนายแต่ละตัวบอกเราถึงการเปลี่ยนแปลงโดยเฉลี่ยที่คาดหวังในตัวแปรตอบสนอง โดยถือว่าตัวแปรตัวทำนายอื่นคงที่ ตัวอย่างเช่น ในแต่ละชั่วโมงที่เรียนเพิ่มเติม คาดว่าคะแนนสอบเฉลี่ยจะเพิ่มขึ้น 5.56 โดยสมมติว่าข้อสอบฝึกหัดที่เรียนคงที่

อีกวิธีในการดู: หากนักเรียน A และนักเรียน B ทำข้อสอบเตรียมสอบเท่ากัน แต่นักเรียน A เรียนนานกว่าหนึ่งชั่วโมง นักเรียน A ควรมีคะแนนสูงกว่านักเรียน B 5.56 คะแนน

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

ป>|t|. ค่า p ส่วนบุคคลบอกเราว่าตัวแปรทำนายแต่ละตัวมีนัยสำคัญทางสถิติหรือไม่ เราจะเห็นได้ว่า “ชั่วโมง” มีนัยสำคัญทางสถิติ (p = 0.00) ในขณะที่ “การสอบ”   (p = 0.52) ไม่มีนัยสำคัญทางสถิติที่ α = 0.05 เนื่องจากคำว่า “การสอบ” ไม่มีนัยสำคัญทางสถิติ เราจึงอาจตัดสินใจลบคำนั้นออกจากแบบจำลอง

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

คะแนนสอบ = 67.67 + 5.56*(ชั่วโมง) – 0.60*(สอบเตรียมอุดมศึกษา)

เราสามารถใช้สมการการถดถอยโดยประมาณนี้เพื่อคำนวณคะแนนสอบที่คาดหวังสำหรับนักเรียน โดยพิจารณาจากจำนวนชั่วโมงเรียนและจำนวนข้อสอบฝึกหัดที่พวกเขาทำ เช่น นักเรียนที่เรียน 3 ชั่วโมงและสอบเตรียมสอบควรได้เกรด 83.75 :

โปรดทราบว่าเนื่องจากการสอบเตรียมการที่ผ่านมาไม่มีนัยสำคัญทางสถิติ (p = 0.52) เราอาจตัดสินใจลบออกเนื่องจากไม่ได้ให้การปรับปรุงใดๆ กับแบบจำลองโดยรวม ในกรณีนี้ เราสามารถทำการถดถอยเชิงเส้นอย่างง่ายโดยใช้เพียงชั่วโมงที่ศึกษาเป็นตัวแปรทำนาย

ขั้นตอนที่ 4: ตรวจสอบสมมติฐานแบบจำลอง

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

สมมติฐาน #1: มีความสัมพันธ์เชิงเส้นตรงระหว่างตัวแปรทำนายและตัวแปรตอบสนอง

  • ตรวจสอบสมมติฐานนี้โดยการสร้าง พล็อตส่วนที่เหลือ ซึ่งแสดงค่าที่พอดีเทียบกับส่วนที่เหลือสำหรับแบบจำลองการถดถอย

สมมติฐาน #2: ความเป็นอิสระของสารตกค้าง

สมมติฐาน #3: ความเป็นเนื้อเดียวกันของสารตกค้าง

สมมติฐานที่ 4: ความปกติของสารตกค้าง

สมมติฐานที่ 5: ตรวจสอบว่าไม่มีตัวแปรหลายเส้นในตัวแปรทำนาย

  • ตรวจสอบสมมติฐานนี้โดยการคำนวณ ค่า VIF ของตัวแปรทำนายแต่ละตัว

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

คุณสามารถค้นหาโค้ด Python แบบเต็มที่ใช้ในบทช่วยสอนนี้ ได้ที่นี่

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

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