ค่าผิดปกติ ค่า Leverage และอิทธิพล

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Maarten Van den Broeck

Content Developer at DataCamp

ชุดข้อมูล Roach

roach = fish[fish['species'] == "Roach"]
print(roach.head())
   species  mass_g  length_cm
35   Roach    40.0       12.9
36   Roach    69.0       16.5
37   Roach    78.0       17.5
38   Roach    87.0       18.2
39   Roach   120.0       18.6

ปลา Roach ทั่วไป

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

จุดใดเป็นค่าผิดปกติ?

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)
plt.show()

กราฟกระจายของน้ำหนักปลา Roach เทียบกับความยาว พร้อมเส้นแนวโน้ม จุดส่วนใหญ่อยู่ใกล้เส้นแนวโน้ม

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

ค่าตัวแปรอธิบายที่สุดขีด

roach["extreme_l"] = ((roach["length_cm"] < 15) |
                    (roach["length_cm"] > 26))

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                data=roach)

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

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

ค่า Response ที่ห่างจากเส้นถดถอย

roach["extreme_m"] = roach["mass_g"] < 1

fig = plt.figure()
sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None)

sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="extreme_l",
                style="extreme_m",
                data=roach)

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

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Leverage และ Influence

Leverage คือตัวชี้วัดความสุดขีดของค่าตัวแปรอธิบาย

Influence วัดว่าโมเดลจะเปลี่ยนแปลงมากแค่ไหน หากตัดข้อมูลนั้นออกจากชุดข้อมูลเมื่อสร้างโมเดล

คนกำลังหมุนประแจ

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

.get_influence() และ .summary_frame()

mdl_roach = ols("mass_g ~ length_cm", data=roach).fit()

summary_roach = mdl_roach.get_influence().summary_frame()
roach["leverage"] = summary_roach["hat_diag"] print(roach.head())
   species  mass_g  length_cm  leverage
35   Roach    40.0       12.9  0.313729
36   Roach    69.0       16.5  0.125538
37   Roach    78.0       17.5  0.093487
38   Roach    87.0       18.2  0.076283
39   Roach   120.0       18.6  0.068387
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Cook's distance

Cook's distance คือตัวชี้วัด Influence ที่ใช้บ่อยที่สุด

roach["cooks_dist"] = summary_roach["cooks_d"]
print(roach.head())
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015
36   Roach    69.0       16.5  0.125538    0.010429
37   Roach    78.0       17.5  0.093487    0.000020
38   Roach    87.0       18.2  0.076283    0.001980
39   Roach   120.0       18.6  0.068387    0.006610
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

ปลา Roach ที่มีอิทธิพลสูงสุด

print(roach.sort_values("cooks_dist", ascending = False))
   species  mass_g  length_cm  leverage  cooks_dist
35   Roach    40.0       12.9  0.313729    1.074015 # really short roach
54   Roach   390.0       29.5  0.394740    0.365782 # really long roach
40   Roach     0.0       19.0  0.061897    0.311852 # roach with zero mass
52   Roach   290.0       24.0  0.099488    0.150064
51   Roach   180.0       23.6  0.088391    0.061209
..     ...     ...        ...       ...         ...
43   Roach   150.0       20.4  0.050264    0.000257
44   Roach   145.0       20.5  0.050092    0.000256
42   Roach   120.0       19.4  0.056815    0.000199
47   Roach   160.0       21.1  0.050910    0.000137
37   Roach    78.0       17.5  0.093487    0.000020
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การตัดปลา Roach ที่มีอิทธิพลสูงสุดออก

roach_not_short = roach[roach["length_cm"] != 12.9]

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach,
            ci=None,
            line_kws={"color": "green"})

sns.regplot(x="length_cm",
            y="mass_g",
            data=roach_not_short,
            ci=None,
            line_kws={"color": "red"})

กราฟกระจายของน้ำหนักปลา Roach เทียบกับความยาว พร้อมเส้นแนวโน้มสองเส้น เส้นหนึ่งใช้ข้อมูลทั้งหมด อีกเส้นตัดปลาตัวที่สั้นที่สุดออก โดยเส้นที่สองมีความชันสูงกว่าอย่างเห็นได้ชัด

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

มาฝึกกันเถอะ!

การถดถอยเบื้องต้นด้วย statsmodels ใน Python

Preparing Video For Download...