Transformer des variables

Introduction à la régression avec statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Ensemble de données : perche

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

Perche européenne, _Perca fluviatilis_

Introduction à la régression avec statsmodels en Python

Relation non linéaire

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

plt.show()

Nuage de points des masses de perches selon leur longueur, avec ligne de tendance. Le poids augmente plus vite que linéairement, formant une courbe vers le haut.

Introduction à la régression avec statsmodels en Python

Brème vs perche

Une brème commune. Les brèmes sont plutôt plates.

Une perche européenne. Les perches sont plutôt rondes.

Introduction à la régression avec statsmodels en Python

Tracer masse vs longueur au cube

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

Nuage de points des masses de perches selon la longueur au cube, avec ligne de tendance. Après cette transformation, les points sont surtout près de la ligne.

Introduction à la régression avec statsmodels en Python

Modéliser masse vs longueur au cube

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
Introduction à la régression avec statsmodels en Python

Prédire masse vs longueur au cube

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
Introduction à la régression avec statsmodels en Python

Tracer masse vs longueur au cube

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

Nuage de points des masses de perches selon la longueur au cube, avec ligne de tendance, annoté par des points calculés avec predict(). Les points suivent exactement la ligne.

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

Nuage de points des masses de perches selon leur longueur, avec ligne de tendance, annoté par des points calculés avec predict(). Les points ne suivent pas la ligne, mais suivent la courbe des données.

Introduction à la régression avec statsmodels en Python

Ensemble de données sur la publicité Facebook

Comment fonctionne la publicité

  1. Payer Facebook pour afficher des annonces.
  2. Les gens voient les annonces (« impressions »).
  3. Certain·e·s cliquent dessus.

 

  • 936 lignes
  • Chaque ligne représente 1 annonce
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
... ... ...
Introduction à la régression avec statsmodels en Python

Graphique tassé

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

Nuage de points du nombre d'impressions selon les dépenses publicitaires, avec ligne de tendance. La plupart des points sont tassés en bas à gauche.

Introduction à la régression avec statsmodels en Python

Racine carrée vs racine carrée

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)

Nuage de points de la racine carrée du nombre d'impressions selon la racine carrée des dépenses, avec ligne de tendance. Les points sont maintenant mieux répartis.

Introduction à la régression avec statsmodels en Python

Modéliser et prédire

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
Introduction à la régression avec statsmodels en Python

Passons à la pratique !

Introduction à la régression avec statsmodels en Python

Preparing Video For Download...