คู่มือฉบับสมบูรณ์เกี่ยวกับการถดถอยเชิงเส้นใน 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: ความเป็นอิสระของสารตกค้าง
- ตรวจสอบสมมติฐานนี้โดยทำการ ทดสอบ Durbin-Watson
สมมติฐาน #3: ความเป็นเนื้อเดียวกันของสารตกค้าง
- ตรวจสอบสมมติฐานนี้โดยทำการ ทดสอบ Breusch-Pagan
สมมติฐานที่ 4: ความปกติของสารตกค้าง
- ตรวจสอบสมมติฐานนี้ด้วยสายตาโดยใช้ พล็อต QQ
- ยืนยันสมมติฐานนี้ด้วยการทดสอบอย่างเป็นทางการ เช่น การทดสอบ Jarque-Bera หรือ การทดสอบ Anderson-Darling
สมมติฐานที่ 5: ตรวจสอบว่าไม่มีตัวแปรหลายเส้นในตัวแปรทำนาย
- ตรวจสอบสมมติฐานนี้โดยการคำนวณ ค่า VIF ของตัวแปรทำนายแต่ละตัว
หากเป็นไปตามสมมติฐานเหล่านี้ คุณจะมั่นใจได้ว่าผลลัพธ์ของแบบจำลองการถดถอยเชิงเส้นพหุคูณมีความน่าเชื่อถือ
คุณสามารถค้นหาโค้ด Python แบบเต็มที่ใช้ในบทช่วยสอนนี้ ได้ที่นี่