Transformer des variables

Introduction à la régression avec statsmodels en Python

Maarten Van den Broeck

Content Developer at DataCamp

Ensemble de données sur les perches

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

Il ne s'agit pas d'une relation linéaire.

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

plt.show()

Diagramme en nuage de points représentant la masse des perches en fonction de leur longueur, avec une courbe de tendance. Les perches deviennent plus lourdes plus rapidement que de manière linéaire à mesure qu'elles s'allongent, ce qui entraîne une courbe ascendante.

Introduction à la régression avec statsmodels en Python

Brème commune et perche

Une brème commune. Les brèmes communes sont relativement plates.

Un perche européen. Les perches sont de forme assez ronde.

Introduction à la régression avec statsmodels en Python

Graphique de 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()

Diagramme en nuage de points représentant la masse des perches en fonction du cube de leur longueur, avec une courbe de tendance. Après cette transformation, les points sont pour la plupart proches de la courbe de tendance.

Introduction à la régression avec statsmodels en Python

Modélisation de 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évision de 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

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

Le diagramme en nuage de points représentant la masse des perches en fonction du cube de leur longueur, avec une courbe de tendance, annoté avec des points calculés à partir de la fonction predict(). Les points suivent parfaitement la courbe de tendance.

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

Le diagramme en nuage de points représentant la masse des perches en fonction de leur longueur, avec une courbe de tendance, annoté avec des points calculés à partir de la fonction predict(). Les points ne suivent pas la courbe de tendance, mais ils suivent la courbe des points de données.

Introduction à la régression avec statsmodels en Python

Ensemble de données publicitaires Facebook

Comment fonctionne la publicité

  1. Payez Facebook pour afficher des publicités.
  2. Les personnes voient les publicités (« impressions »).
  3. Certaines personnes qui les voient cliquent dessus.

 

  • 936 lignes
  • Chaque ligne représente une annonce.
spent_usd n_impressions n_clicks
1,43 7 350 1
1,82 17 861 2
1,25 4259 1
1,29 4 133 1
4,77 15 615 3
... ... ...
Introduction à la régression avec statsmodels en Python

Le graphique est trop serré.

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

Un diagramme en nuage de points représentant le nombre d'impressions par rapport aux dépenses publicitaires, avec une courbe de tendance. La plupart des points de données sont regroupés dans la partie inférieure gauche du diagramme.

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)

Diagramme en nuage de points représentant la racine carrée du nombre d'impressions par rapport à la racine carrée des dépenses publicitaires, avec une courbe de tendance. Les points sont désormais mieux répartis sur le diagramme.

Introduction à la régression avec statsmodels en Python

Modélisation et prévision

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...