Biến đổi biến số

Giới thiệu về Hồi quy với statsmodels trong Python

Maarten Van den Broeck

Content Developer at DataCamp

Bộ dữ liệu cá rô

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

Cá rô châu Âu, _Perca fluviatilis_

Giới thiệu về Hồi quy với statsmodels trong Python

Không phải quan hệ tuyến tính

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

plt.show()

Biểu đồ scatter khối lượng cá rô so với chiều dài, có đường xu hướng. Cá nặng lên nhanh hơn tuyến tính khi dài hơn, tạo thành đường cong hướng lên.

Giới thiệu về Hồi quy với statsmodels trong Python

Cá trắm vs. cá rô

Cá trắm cỏ. Thân cá dẹt.

Cá rô châu Âu. Thân cá tròn.

Giới thiệu về Hồi quy với statsmodels trong Python

Vẽ khối lượng vs. chiều dài mũ ba

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

Biểu đồ scatter khối lượng cá rô so với chiều dài lũy thừa ba, có đường xu hướng. Sau biến đổi, các điểm chủ yếu nằm sát đường xu hướng.

Giới thiệu về Hồi quy với statsmodels trong Python

Mô hình hóa khối lượng vs. chiều dài mũ ba

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
Giới thiệu về Hồi quy với statsmodels trong Python

Dự đoán khối lượng vs. chiều dài mũ ba

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
Giới thiệu về Hồi quy với statsmodels trong Python

Vẽ khối lượng vs. chiều dài mũ ba

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")

Biểu đồ scatter khối lượng cá rô so với chiều dài mũ ba, có đường xu hướng, kèm các điểm từ hàm predict(). Các điểm trùng khít đường xu hướng.

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")

Biểu đồ scatter khối lượng cá rô so với chiều dài, có đường xu hướng, kèm các điểm từ hàm predict(). Các điểm không theo đường xu hướng nhưng bám theo đường cong của dữ liệu.

Giới thiệu về Hồi quy với statsmodels trong Python

Bộ dữ liệu quảng cáo Facebook

Cách quảng cáo hoạt động

  1. Trả tiền cho Facebook để hiển thị quảng cáo.
  2. Người dùng nhìn thấy quảng cáo ("impressions").
  3. Một số người nhấp vào quảng cáo.

 

  • 936 dòng
  • Mỗi dòng là 1 quảng cáo
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
... ... ...
Giới thiệu về Hồi quy với statsmodels trong Python

Biểu đồ bị dồn chật

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

Biểu đồ scatter số lần hiển thị so với chi tiêu quảng cáo, có đường xu hướng. Phần lớn điểm dồn ở góc dưới bên trái.

Giới thiệu về Hồi quy với statsmodels trong Python

Căn bậc hai vs. căn bậc hai

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)

Biểu đồ scatter căn bậc hai số lần hiển thị so với căn bậc hai chi tiêu quảng cáo, có đường xu hướng. Các điểm nay phân bố đều hơn.

Giới thiệu về Hồi quy với statsmodels trong Python

Mô hình và dự đoán

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
Giới thiệu về Hồi quy với statsmodels trong Python

Ayo berlatih!

Giới thiệu về Hồi quy với statsmodels trong Python

Preparing Video For Download...