Variabelen transformeren

Introductie tot regressie met statsmodels in Python

Maarten Van den Broeck

Content Developer at DataCamp

Baars-dataset

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

Europese baars, _Perca fluviatilis_

Introductie tot regressie met statsmodels in Python

Het is geen lineair verband

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

plt.show()

Een scatterplot van baarsmassa’s versus lengte, met een trendlijn. De baars wordt sneller dan lineair zwaarder naarmate hij langer wordt, wat een opwaartse kromme geeft.

Introductie tot regressie met statsmodels in Python

Brasem vs. baars

Een gewone brasem. Brasems zijn vrij plat.

Een Europese baars. Baarzen zijn vrij rond.

Introductie tot regressie met statsmodels in Python

Massa vs. lengte tot de derde macht plotten

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

Een scatterplot van baarsmassa’s versus lengte tot de derde macht, met een trendlijn. Na deze transformatie liggen de punten grotendeels dicht bij de lijn.

Introductie tot regressie met statsmodels in Python

Massa vs. lengte tot de derde macht modelleren

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
Introductie tot regressie met statsmodels in Python

Massa vs. lengte tot de derde macht voorspellen

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
Introductie tot regressie met statsmodels in Python

Massa vs. lengte tot de derde macht plotten

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

De scatterplot van baarsmassa’s versus lengte tot de derde macht, met een trendlijn, geannoteerd met punten uit de functie predict(). De punten volgen de trendlijn exact.

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

De scatterplot van baarsmassa’s versus lengte, met een trendlijn, geannoteerd met punten uit de functie predict(). De punten volgen de trendlijn niet, maar wel de kromme van de datapoints.

Introductie tot regressie met statsmodels in Python

Facebook-advertentiedataset

Hoe adverteren werkt

  1. Betaal Facebook om advertenties te tonen.
  2. Mensen zien de advertenties ("impressies").
  3. Sommige kijkers klikken.

 

  • 936 rijen
  • Elke rij is 1 advertentie
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
... ... ...
Introductie tot regressie met statsmodels in Python

Plot is opgepakt

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

Een scatterplot van het aantal impressies versus advertentie-uitgaven, met een trendlijn. De meeste punten zitten samengepakt linksonder.

Introductie tot regressie met statsmodels in Python

Wortel vs. wortel

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)

Een scatterplot van de vierkantswortel van het aantal impressies versus de vierkantswortel van de advertentie-uitgaven, met een trendlijn. De punten zijn nu gelijkmatiger verdeeld.

Introductie tot regressie met statsmodels in Python

Modelleren en voorspellen

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
Introductie tot regressie met statsmodels in Python

Laten we oefenen!

Introductie tot regressie met statsmodels in Python

Preparing Video For Download...