Simpson's Paradox

Regression ระดับกลางด้วย statsmodels ใน Python

Maarten Van den Broeck

Content Developer at DataCamp

ปริศนาที่แยบยลที่สุด!

Simpson's Paradox เกิดขึ้นเมื่อแนวโน้มของโมเดลบนชุดข้อมูลทั้งหมดแตกต่างอย่างมากจากแนวโน้มที่แสดงโดยโมเดลบนชุดข้อมูลย่อย

แนวโน้ม = ค่าสัมประสิทธิ์ความชัน

Regression ระดับกลางด้วย statsmodels ใน Python

ข้อมูล Simpson สังเคราะห์

x y group
62.24344 70.60840 D
52.33499 14.70577 B
56.36795 46.39554 C
66.80395 66.17487 D
66.53605 89.24658 E
62.38129 91.45260 E
  • ข้อมูล 5 กลุ่ม ตั้งชื่อว่า "A" ถึง "E"
1 https://www.rdocumentation.org/packages/datasauRus/topics/simpsons_paradox
Regression ระดับกลางด้วย statsmodels ใน Python

การถดถอยเชิงเส้น

ชุดข้อมูลทั้งหมด

mdl_whole = ols("y ~ x", 
                 data=simpsons_paradox).fit()

print(mdl_whole.params)
Intercept           -38.554  
x                     1.751  

แยกตามกลุ่ม

mdl_by_group = ols("y ~ group + group:x + 0",
                   data = simpsons_paradox).fit()

print(mdl_by_group.params)
  groupA    groupB    groupC    groupD    groupE  
 32.5051   67.3886   99.6333  132.3932  123.8242  
groupA:x  groupB:x  groupC:x  groupD:x  groupE:x  
 -0.6266   -1.0105   -0.9940   -0.9908   -0.5364
Regression ระดับกลางด้วย statsmodels ใน Python

พล็อตชุดข้อมูลทั้งหมด

sns.regplot(x="x",
            y="y",
            data=simpsons_paradox,
            ci=None)

กราฟกระจายของชุดข้อมูล Simpson Paradox รวมทุกกลุ่ม แนวโน้มเป็นบวก

Regression ระดับกลางด้วย statsmodels ใน Python

พล็อตแยกตามกลุ่ม

sns.lmplot(x="x",
           y="y",
           data=simpsons_paradox,
           hue="group",
           ci=None)

กราฟกระจายของชุดข้อมูล Simpson Paradox แยกสีตามกลุ่ม แนวโน้มของแต่ละกลุ่มเป็นลบ

Regression ระดับกลางด้วย statsmodels ใน Python

การปรับให้สอดคล้องกัน

คำแนะนำที่ดี

หากเป็นไปได้ ควรพล็อตชุดข้อมูลก่อน

คำแนะนำทั่วไป

ไม่มีโมเดลที่ดีที่สุดในทุกกรณี — ขึ้นอยู่กับชุดข้อมูลและคำถามที่ต้องการตอบ

คำแนะนำเพิ่มเติม

กำหนดคำถามให้ชัดเจนก่อนเริ่มสร้างโมเดล

Regression ระดับกลางด้วย statsmodels ใน Python

ตัวอย่างคะแนนสอบ

scatter-video-games-whole.png

scatter-video-games-by-group.png

Regression ระดับกลางด้วย statsmodels ใน Python

ตัวอย่างโรคติดเชื้อ

scatter-cities-whole.png

scatter-cities-by-group.png

Regression ระดับกลางด้วย statsmodels ใน Python

การปรับให้สอดคล้องกัน

  • โดยทั่วไป (แต่ไม่เสมอไป) โมเดลที่แบ่งกลุ่มให้ข้อมูลเชิงลึกมากกว่า
  • มีตัวแปรอธิบายที่ขาดหายไปหรือไม่
  • บริบทมีความสำคัญ
Regression ระดับกลางด้วย statsmodels ใน Python

Simpson's Paradox ในชุดข้อมูลจริง

  • โดยทั่วไปปรากฏการณ์นี้จะไม่ชัดเจนนัก
  • อาจพบว่าความชันเป็นศูนย์ แทนที่จะกลับทิศทางโดยสิ้นเชิง
  • อาจไม่ปรากฏในทุกกลุ่ม
Regression ระดับกลางด้วย statsmodels ใน Python

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

Regression ระดับกลางด้วย statsmodels ใน Python

Preparing Video For Download...