การแปลงตัวแปร

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

Maarten Van den Broeck

Content Developer at DataCamp

ชุดข้อมูลปลาเพิร์ช

perch = fish[fish["species"] == "Perch"]
print(perch.head())
   species  mass_g  length_cm
55   Perch     5.9        7.5
56   Perch    32.0       12.5
57   Perch    40.0       13.8
58   Perch    51.5       15.0
59   Perch    70.0       15.7

ปลาเพิร์ชยุโรป _Perca fluviatilis_

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

ความสัมพันธ์ไม่เป็นเชิงเส้น

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

plt.show()

กราฟกระจายของมวลปลาเพิร์ชเทียบกับความยาว พร้อมเส้นแนวโน้ม ปลาเพิร์ชมีมวลเพิ่มขึ้นเร็วกว่าความสัมพันธ์เชิงเส้น ส่งผลให้กราฟโค้งขึ้น

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

บรีมกับเพิร์ช

ปลาบรีม ลำตัวค่อนข้างแบน

ปลาเพิร์ชยุโรป ลำตัวค่อนข้างกลม

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

กราฟมวลเทียบกับความยาวยกกำลังสาม

perch["length_cm_cubed"] = perch["length_cm"] ** 3
sns.regplot(x="length_cm_cubed",
            y="mass_g",
            data=perch,
            ci=None)
plt.show()

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

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

โมเดลมวลเทียบกับความยาวยกกำลังสาม

perch["length_cm_cubed"] = perch["length_cm"] ** 3

mdl_perch = ols("mass_g ~ length_cm_cubed", data=perch).fit()
mdl_perch.params
Intercept         -0.117478
length_cm_cubed    0.016796
dtype: float64
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

การพยากรณ์มวลจากความยาวยกกำลังสาม

explanatory_data = pd.DataFrame({"length_cm_cubed": np.arange(10, 41, 5) ** 3,
                                 "length_cm": np.arange(10, 41, 5)})
prediction_data = explanatory_data.assign(
  mass_g=mdl_perch.predict(explanatory_data))
print(prediction_data)
   length_cm_cubed  length_cm       mass_g
0             1000         10    16.678135
1             3375         15    56.567717
2             8000         20   134.247429
3            15625         25   262.313982
4            27000         30   453.364084
5            42875         35   719.994447
6            64000         40  1074.801781
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

กราฟมวลเทียบกับความยาวยกกำลังสาม

fig = plt.figure()
sns.regplot(x="length_cm_cubed", y="mass_g",
            data=perch, ci=None)
sns.scatterplot(data=prediction_data,
                x="length_cm_cubed", y="mass_g",
                color="red", marker="s")

กราฟกระจายของมวลปลาเพิร์ชเทียบกับความยาวยกกำลังสาม พร้อมเส้นแนวโน้มและจุดที่คำนวณจากฟังก์ชัน predict() จุดข้อมูลทับเส้นแนวโน้มพอดี

fig = plt.figure()
sns.regplot(x="length_cm", y="mass_g",
            data=perch, ci=None)
sns.scatterplot(data=prediction_data,
                x="length_cm", y="mass_g",
                color="red", marker="s")

กราฟกระจายของมวลปลาเพิร์ชเทียบกับความยาว พร้อมเส้นแนวโน้มและจุดที่คำนวณจากฟังก์ชัน predict() จุดข้อมูลไม่ทับเส้นแนวโน้ม แต่ตามแนวโค้งของข้อมูลจริง

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

ชุดข้อมูลโฆษณา Facebook

โฆษณาทำงานอย่างไร

  1. จ่ายเงินให้ Facebook เพื่อแสดงโฆษณา
  2. ผู้ใช้เห็นโฆษณา ("impressions")
  3. บางคนที่เห็นแล้วคลิก

 

  • 936 แถว
  • แต่ละแถวแทน 1 โฆษณา
spent_usd n_impressions n_clicks
1.43 7350 1
1.82 17861 2
1.25 4259 1
1.29 4133 1
4.77 15615 3
... ... ...
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

กราฟแน่นเกินไป

sns.regplot(x="spent_usd",
            y="n_impressions",
            data=ad_conversion,
            ci=None)

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

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

รากที่สองเทียบกับรากที่สอง

ad_conversion["sqrt_spent_usd"] = np.sqrt(
  ad_conversion["spent_usd"])

ad_conversion["sqrt_n_impressions"] = np.sqrt(
  ad_conversion["n_impressions"])

sns.regplot(x="sqrt_spent_usd",
            y="sqrt_n_impressions",
            data=ad_conversion,
            ci=None)

กราฟกระจายของรากที่สองของจำนวน impressions เทียบกับรากที่สองของค่าโฆษณา พร้อมเส้นแนวโน้ม ตอนนี้จุดข้อมูลกระจายสม่ำเสมอทั่วกราฟ

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

การสร้างโมเดลและการพยากรณ์

mdl_ad = ols("sqrt_n_impressions ~ sqrt_spent_usd", data=ad_conversion).fit()
explanatory_data = pd.DataFrame({"sqrt_spent_usd": np.sqrt(np.arange(0, 601, 100)),
                                 "spent_usd": np.arange(0, 601, 100)})
prediction_data = explanatory_data.assign(sqrt_n_impressions=mdl_ad.predict(explanatory_data),
                          n_impressions=mdl_ad.predict(explanatory_data) ** 2)
print(prediction_data)
   sqrt_spent_usd  spent_usd  sqrt_n_impressions  n_impressions
0        0.000000          0           15.319713   2.346936e+02
1       10.000000        100          597.736582   3.572890e+05
2       14.142136        200          838.981547   7.038900e+05
3       17.320508        300         1024.095320   1.048771e+06
4       20.000000        400         1180.153450   1.392762e+06
5       22.360680        500         1317.643422   1.736184e+06
6       24.494897        600         1441.943858   2.079202e+06
การถดถอยเบื้องต้นด้วย statsmodels ใน Python

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

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

Preparing Video For Download...