การถดถอยเชิงเส้นแบบความชันขนาน

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

Maarten Van den Broeck

Content Developer at DataCamp

คอร์สก่อนหน้า

คอร์สนี้ต่อยอดจาก Introduction to Regression with statsmodels in Python

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

จากการถดถอยอย่างง่ายสู่การถดถอยพหุ

การถดถอยพหุ คือโมเดลการถดถอยที่มีตัวแปรอธิบายมากกว่าหนึ่งตัว

การเพิ่มตัวแปรอธิบายช่วยให้ได้ insight ที่ลึกขึ้น และ การพยากรณ์ที่แม่นยำขึ้น

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

เนื้อหาของคอร์ส

บทที่ 1

  • การถดถอยแบบ "ความชันขนาน"

บทที่ 2

  • Interactions
  • Simpson's Paradox

บทที่ 3

  • ตัวแปรอธิบายเพิ่มเติม
  • การถดถอยเชิงเส้นทำงานอย่างไร

บทที่ 4

  • การถดถอยโลจิสติกพหุ
  • การแจกแจงโลจิสติก
  • การถดถอยโลจิสติกทำงานอย่างไร
Regression ระดับกลางด้วย statsmodels ใน Python

ชุดข้อมูลปลา

mass_g length_cm species
242.0 23.2 Bream
5.9 7.5 Perch
200.0 30.0 Pike
40.0 12.9 Roach
  • แต่ละแถวแทนปลาหนึ่งตัว
  • mass_g คือตัวแปรตอบสนอง
  • มีตัวแปรอธิบาย 1 ตัวเชิงตัวเลข และ 1 ตัวเชิงกลุ่ม
Regression ระดับกลางด้วย statsmodels ใน Python

ทีละตัวแปรอธิบาย

from statsmodels.formula.api import ols

mdl_mass_vs_length = ols("mass_g ~ length_cm",
                         data=fish).fit()
print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
dtype: float64
  • ค่าสัมประสิทธิ์จุดตัดแกน 1 ตัว
  • ค่าสัมประสิทธิ์ความชัน 1 ตัว
mdl_mass_vs_species = ols("mass_g ~ species + 0",
                          data=fish).fit()

print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
dtype: float64
  • ค่าสัมประสิทธิ์จุดตัดแกน 1 ตัวต่อแต่ละกลุ่ม
Regression ระดับกลางด้วย statsmodels ใน Python

ใช้ทั้งสองตัวแปรพร้อมกัน

mdl_mass_vs_both = ols("mass_g ~ length_cm + species + 0",
                       data=fish).fit()
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
dtype: float64
  • ค่าสัมประสิทธิ์ความชัน 1 ตัว
  • ค่าสัมประสิทธิ์จุดตัดแกน 1 ตัวต่อแต่ละกลุ่ม
Regression ระดับกลางด้วย statsmodels ใน Python

เปรียบเทียบค่าสัมประสิทธิ์

print(mdl_mass_vs_length.params)
Intercept   -536.223947
length_cm     34.899245
print(mdl_mass_vs_both.params)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
print(mdl_mass_vs_species.params)
species[Bream]    617.828571
species[Perch]    382.239286
species[Pike]     718.705882
species[Roach]    152.050000
Regression ระดับกลางด้วย statsmodels ใน Python

การแสดงภาพ: ตัวแปรอธิบายเชิงตัวเลข 1 ตัว

import matplotlib.pyplot as plt
import seaborn as sns

sns.regplot(x="length_cm",
            y="mass_g",
            data=fish,
            ci=None)

plt.show()

กราฟกระจายของน้ำหนักปลาเทียบกับความยาว พร้อมเส้นแนวโน้มเชิงเส้น

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

การแสดงภาพ: ตัวแปรอธิบายเชิงกลุ่ม 1 ตัว

sns.boxplot(x="species",
            y="mass_g",
            data=fish,
            showmeans=True)

กราฟ boxplot ของน้ำหนักปลาแยกตามชนิด

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

การแสดงภาพ: ตัวแปรอธิบายทั้งสองตัว

coeffs = mdl_mass_vs_both.params
print(coeffs)
species[Bream]    -672.241866
species[Perch]    -713.292859
species[Pike]    -1089.456053
species[Roach]    -726.777799
length_cm           42.568554
ic_bream, ic_perch, ic_pike, ic_roach, sl = coeffs
sns.scatterplot(x="length_cm",
                y="mass_g",
                hue="species",
                data=fish)
plt.axline(xy1=(0, ic_bream), slope=sl, color="blue")
plt.axline(xy1=(0, ic_perch), slope=sl, color="green")
plt.axline(xy1=(0, ic_pike), slope=sl, color="red")
plt.axline(xy1=(0, ic_roach), slope=sl, color="orange")

โมเดลความชันขนานของน้ำหนักปลาเทียบกับความยาว แยกตามชนิด

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

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

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

Preparing Video For Download...