วิธีดำเนินการถดถอยเชิงปริมาณใน python


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

โดยทั่วไป เมื่อเราทำการถดถอยเชิงเส้น เราต้องการประมาณค่าเฉลี่ยของตัวแปรตอบสนอง

อย่างไรก็ตาม เราสามารถใช้วิธีที่เรียกว่า การถดถอยเชิงควอนไทล์ แทนเพื่อประมาณ ค่า ควอนไทล์หรือค่าเปอร์เซ็นไทล์ของค่าตอบสนอง เช่น เปอร์เซ็นไทล์ที่ 70, เปอร์เซ็นไทล์ที่ 90, เปอร์เซ็นไทล์ที่ 98 เป็นต้น

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

ขั้นตอนที่ 1: โหลดแพ็คเกจที่จำเป็น

ขั้นแรก เราจะโหลดแพ็คเกจและฟังก์ชันที่จำเป็น:

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

ขั้นตอนที่ 2: สร้างข้อมูล

สำหรับตัวอย่างนี้ เราจะสร้างชุดข้อมูลที่ประกอบด้วยชั่วโมงเรียนและผลการสอบที่ได้รับสำหรับนักศึกษา 100 คนในมหาวิทยาลัย:

 #make this example reproducible
n.p. random . seeds (0)

#create dataset
obs = 100

hours = np. random . uniform (1, 10, obs)
score = 60 + 2*hours + np. random . normal (loc=0, scale=.45*hours, size=100)

df = pd. DataFrame ({' hours ':hours, ' score ':score})

#view first five rows
df. head ()

hours score
0 5.939322 68.764553
1 7.436704 77.888040
2 6.424870 74.196060
3 5.903949 67.726441
4 4.812893 72.849046

ขั้นตอนที่ 3: ดำเนินการถดถอยเชิงปริมาณ

ต่อไป เราจะปรับแบบจำลองการถดถอยเชิงปริมาณโดยใช้ชั่วโมงที่ศึกษาเป็นตัวแปรทำนายและคะแนนการสอบเป็นตัวแปรตอบสนอง

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

 #fit the model
model = smf. quantreg ('score~hours', df). fit (q= 0.9 )

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

                         QuantReg Regression Results                          
==================================================== ============================
Dept. Variable: Pseudo R-squared score: 0.6057
Model: QuantReg Bandwidth: 3.822
Method: Least Squares Sparsity: 10.85
Date: Tue, 29 Dec 2020 No. Observations: 100
Time: 15:41:44 Df Residuals: 98
                                        Model: 1
==================================================== ============================
                 coef std err t P>|t| [0.025 0.975]
-------------------------------------------------- ----------------------------
Intercept 59.6104 0.748 79.702 0.000 58.126 61.095
hours 2.8495 0.128 22.303 0.000 2.596 3.103
==================================================== ============================

จากผลลัพธ์เราจะเห็นสมการการถดถอยโดยประมาณ:

คะแนนสอบเปอร์เซ็นไทล์ที่ 90 = 59.6104 + 2.8495*(ชั่วโมง)

เช่น คะแนนเปอร์เซ็นไทล์ที่ 90 ของนักเรียนทุกคนที่เรียน 8 ชั่วโมงควรเป็น 82.4:

คะแนนสอบเปอร์เซ็นไทล์ที่ 90 = 59.6104 + 2.8495*(8) = 82.4

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

ขั้นตอนที่ 4: เห็นภาพผลลัพธ์

นอกจากนี้เรายังสามารถแสดงภาพผลลัพธ์การถดถอยได้โดยการสร้างแผนภาพกระจายที่มีสมการการถดถอยควอนไทล์ที่ติดตั้งไว้ซ้อนทับบนกราฟ:

 #define figure and axis
fig, ax = plt.subplots(figsize=(8, 6))

#get y values
get_y = lambda a, b: a + b * hours
y = get_y( model.params [' Intercept '], model.params [' hours '])

#plot data points with quantile regression equation overlaid
ax. plot (hours, y, color=' black ')
ax. scatter (hours, score, alpha=.3)
ax. set_xlabel (' Hours Studied ', fontsize=14)
ax. set_ylabel (' Exam Score ', fontsize=14)

การถดถอยเชิงปริมาณใน Python

ต่างจากเส้นการถดถอยเชิงเส้นแบบธรรมดา โปรดทราบว่าเส้นที่พอดีนี้ไม่ได้แสดงถึง “เส้นที่เหมาะสมที่สุด” สำหรับข้อมูล แต่จะผ่านเปอร์เซ็นไทล์ที่ 90 โดยประมาณในแต่ละระดับของตัวแปรทำนาย

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

วิธีดำเนินการถดถอยเชิงเส้นอย่างง่ายใน Python
วิธีดำเนินการถดถอยกำลังสองใน Python

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

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