Search
Régression linéaire

Dans ce cours, nous traitons la régression linéaire, une approche très simple pour l'apprentissage supervisé. En particulier, la régression linéaire est un outil utile pour prédire une variable réponse quantitative.

Régression linéaire simple

La régression linéaire simple porte bien son nom : il s'agit d'une approche très simple pour prédire une réponse quantitative Y sur la base d'une variable prédictive X sin- gle. Elle suppose qu'il existe approximativement une relation linéaire entre X et Y . Mathématiquement, nous pouvons écrire cette relation linéaire comme

$$ Y\approx \beta_0 + \beta_1 X \label{simpleLM}\tag{3.1} $$

Dans l'équation \ref{simpleLM}, $\beta_0$ et $\beta_1$ sont deux constantes inconnues qui représentent les termes de l'intercept ($\beta_0$) et de la pente ($\beta_1$ ) dans le modèle linéaire. Ils sont connus comme les coefficients ou paramètres du modèle.

Une fois que nous avons utilisé nos données d'entraînement du modèle pour estimer $\hat{\beta}_0$ et $\hat{\beta}_1$, nous pouvons prédire nos $Y$ en écrivant:

$$ \hat{y}= \hat{\beta}_0 + \hat{\beta}_1 X \label{simpleLM_vraie}\tag{3.2} $$

Estimation des coefficients

Soit $ \hat{y}= \hat{\beta}_0 + \hat{\beta}_1 X$ la prédiction pour $Y$ sur la $i$ème valeur de $X$. Pour chaque point rouge dans la figure ci-dessous, on peut calculer "de combien on s'est trompé" dans note modèle, en calculant la distance (verticale) entre le point rouge et la droite bleue qui la régression linéaire simple de notre jeu de données.

image.png

Alors pour chaque point $i$, nous pouvons écrire $e_i=y_i -\hat{y}_i$. Nous appelons $e_i$ le $i$ème résidu. Nous pouvons calculer la somme du carré (valeur positives et négatives) des résidus par:

$$ \text{RSS}=e_1^2, e_2^2, \dots, e_n^2, $$

ou de manière équivalente à

$$ \text{RSS}=(y_1-\hat{\beta}_0 - \hat{\beta}_1 x_1)^2, (y_2-\hat{\beta}_0 - \hat{\beta}_1 x_2)^2, \dots, (y_n-\hat{\beta}_0 - \hat{\beta}_1 x_2)^2. \label{RSS}\tag{3.3.1} $$

Le but bien évidemment est d'avoir cette somme des résidus la plus petite possible. Nous devons donc minimiser RSS

$$ \underset{\beta_0, \dots, \beta_p}{\text{arg min }} \text{RSS}=\sum_{i=1}^n\Bigg( y_i -\sum_{j=0}^p\beta_j x_{i,j} \Bigg)^2 \label{argminRSS}\tag{3.3.2} $$

L'approche des moindres carrés choisit $\beta_0$ et $\beta_0$ pour minimiser le RSS. On peut montrer que;

$$ \hat{\beta}_1=\frac{\sum_{i=1}^n (x_i-\bar{x})(y_i-\bar{y})}{\sum_{i=1}^n (x_i-\bar{x})^2} \label{RSSbeta}\tag{3.4.1} $$
$$ \hat{\beta}_0=\bar{y}-\hat{\beta}_1 \bar{x} \label{RSSy}\tag{3.4.2} $$

où $\bar{y}=\frac{1}{n}\sum_{i=1}^ny_i$ et$\bar{x}=\frac{1}{n}\sum_{i=1}^nx_i$ sont les moyennes d'échantillonnage. En d'autres termes, (3.4.1) et (3.4.2) définissent les estimations des coefficients des moindres carrés pour la régression linéaire simple.

Exercice:

Soit le vecteur de paramètres $\beta$; $$ \beta:=[\beta_0, \dots \beta_1]^T, $$

le vecteur de la variable réponse des données d'entraînement:

$$ \mathbf{y}=[y_1, \dots y_n]^T $$

et la matrice contenant les prédicteurs de l'ensemble des données d'entraînement:

\begin{equation*} \mathbf{X}_{n,p} = \begin{pmatrix} 1 & x_{1,1} & \cdots & x_{1,p} \\ 1 & x_{2,1} & \cdots & x_{2,p} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n,1} & \cdots & x_{n,p} \end{pmatrix} \end{equation*}

Montrer que l'estimateur OLS ( ordinary least square ) des paramètres $\beta$ dans une régression linéaire est donné par:

$$ \hat{\beta}= (\mathbf{x}^T \mathbf{x})^{-1}\mathbf{x}^T\mathbf{y} \label{simpleLMOLS}\tag{3.4.3} $$

Code Python

import pandas as pd
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
advertising = pd.read_csv('https://raw.githubusercontent.com/nmeraihi/data/master/islr/Advertising.csv', usecols=[1,2,3,4])
sns.regplot(advertising.TV, advertising.Sales, order=1, ci=None, scatter_kws={'color':'r', 's':9});

Estimation des Coefficients avec Sklearn

from sklearn.preprocessing import scale
import sklearn.linear_model as skl_lm
regr = skl_lm.LinearRegression()

X = advertising.TV.values.reshape(-1,1)
y = advertising.Sales

regr.fit(X,y)
LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
print("beta0=", regr.intercept_, "beta1=", regr.coef_)
beta0= 7.032593549127693 beta1= [0.04753664]

Estimation des Coefficients avec statsmodels

import statsmodels.formula.api as smf 
model1=smf.ols(formula='Sales~TV',data=advertising).fit() 
model1.params
Intercept    7.032594
TV           0.047537
dtype: float64

On peut donc écrire:

$$ \texttt{ventes} \approx 7.032594 + 0.047537\texttt{ télévision} $$

L'équation ci-dessus implique donc qu'une augmentation de 100 unités des coûts de publicité (TV) augmentera les vente de quatre unités.

model1.summary()
OLS Regression Results
Dep. Variable: Sales R-squared: 0.612
Model: OLS Adj. R-squared: 0.610
Method: Least Squares F-statistic: 312.1
Date: Sat, 25 Jan 2020 Prob (F-statistic): 1.47e-42
Time: 11:58:33 Log-Likelihood: -519.05
No. Observations: 200 AIC: 1042.
Df Residuals: 198 BIC: 1049.
Df Model: 1
Covariance Type: nonrobust
coef std err t P>|t| [0.025 0.975]
Intercept 7.0326 0.458 15.360 0.000 6.130 7.935
TV 0.0475 0.003 17.668 0.000 0.042 0.053
Omnibus: 0.531 Durbin-Watson: 1.935
Prob(Omnibus): 0.767 Jarque-Bera (JB): 0.669
Skew: -0.089 Prob(JB): 0.716
Kurtosis: 2.779 Cond. No. 338.


Warnings:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.

Régression linéaire multiple

La régression linéaire simple est une approche utile pour prédire une variable réponse sur la base d'une seule variable explicative. Cependant, dans la pratique, nous avons souvent plus d'un prédicteur. Par exemple, dans les données sur la publicité, nous avons examiné la relation entre les ventes et la publicité télévisée. Nous disposons également de données sur les sommes dépensées en publicité à la radio et dans les journaux, et nous souhaiterions peut-être savoir si l'un ou l'autre de ces deux médias est associé aux (plus ou moins) aux recettes des ventes.

Au lieu d'ajuster un modèle de régression linéaire simple distinct pour chaque prédicteur, une meilleure approche consiste à étendre le modèle de régression linéaire simple $Y= \beta_0 + \beta_1 X + \epsilon$ afin qu'il puisse directement s'adapter à de multiples prédicteurs. Nous pouvons le faire en donnant à chaque prédicteur un coefficient de pente distinct dans un modèle unique. En général, supposons que nous ayons $p$ prédicteurs distincts. Le modèle de régression linéaire multiple prend alors la forme

$$ Y= \beta_0 + \beta_1 X_1, \beta_2 X_2 + \dots + \beta_p X_p + \epsilon \tag{3.5} $$

où $X_j$ représente le $j$ème prédicteur et $\beta_j$ quantifie l'association entre cette variable et la réponse. Nous interprétons $\beta_j$ comme l'effet moyen sur $Y$ d'une augmentation d'une unité de $X_j$, en maintenant fixes tous les autres prédicteurs. Dans l'exemple de la publicité, (3.5) devient

$$ \texttt{ventes} = \beta_0 + \beta_1 \texttt{ télévision} + \beta_2 \texttt{ radio}+ \beta_3 \texttt{ journaux} +\epsilon $$

Estimation des coefficients de régression

Exemple 1

Les valeurs de $\hat{\beta}_0, \hat{\beta}_0, \dots, \hat{\beta}_p$ sont la solution qui minimiste l'équation \ref{argminRSS}. Tout logiciel statistique peut être utilisé pour calculer ces estimations de ces coefficients.

est = smf.ols('Sales ~ TV + Radio + Newspaper', advertising).fit()
est.summary().tables[1]
coef std err t P>|t| [0.025 0.975]
Intercept 2.9389 0.312 9.422 0.000 2.324 3.554
TV 0.0458 0.001 32.809 0.000 0.043 0.049
Radio 0.1885 0.009 21.893 0.000 0.172 0.206
Newspaper -0.0010 0.006 -0.177 0.860 -0.013 0.011

Exemple 2

Appliquons maintenat une régression linéaire multiple sur les deux prédicteurs 'Radio', 'TV'

regr = skl_lm.LinearRegression()

X = advertising[['Radio', 'TV']].values
y = advertising.Sales

regr.fit(X,y)
print(regr.coef_)
print(regr.intercept_)
[0.18799423 0.04575482]
2.9210999124051398

Traçons maintenant un graphique (3D) d'une régression linéaire effectuée sur les ventes en utilisant la télévision et la radio comme prédicteurs.

from mpl_toolkits.mplot3d import axes3d
Radio = np.arange(0,50)
TV = np.arange(0,300)

B1, B2 = np.meshgrid(Radio, TV, indexing='xy')
Z = np.zeros((TV.size, Radio.size))

for (i,j),v in np.ndenumerate(Z):
        Z[i,j] =(regr.intercept_ + B1[i,j]*regr.coef_[0] + B2[i,j]*regr.coef_[1])
fig = plt.figure(figsize=(10,6))
fig.suptitle('Régression: Ventes ~ Radio + Télévision', fontsize=20)

ax = axes3d.Axes3D(fig)

ax.plot_surface(B1, B2, Z, rstride=10, cstride=5, alpha=0.4)
ax.scatter3D(advertising.Radio, advertising.TV, advertising.Sales, c='r')

ax.set_xlabel('Radio')
ax.set_xlim(0,50)
ax.set_ylabel('Télévision')
ax.set_ylim(ymin=0)
ax.set_zlabel('Ventes');
/Users/nourmp/anaconda3/envs/vbook3/lib/python3.7/site-packages/ipykernel_launcher.py:12: MatplotlibDeprecationWarning: 
The `ymin` argument was deprecated in Matplotlib 3.0 and will be removed in 3.2. Use `bottom` instead.
  if sys.path[0] == '':

Donner un sens aux coefficients

Chaque $\beta_i$ sera estimé en utilisant la même méthode de la moindre somme des carrés ; par conséquent, chaque modèle aurait une p-value associée à l'estimation. Plus la p-value associée à une variable est faible, plus la signification de cette variable pour le modèle est grande. Les variables ayant une p-value importante doivent être éliminées du modèle car elles ne sont pas de bons prédicteurs de la variable réponse.

La régression multiple nous donne la possibilité d'utiliser plus de variables comme prédicteurs ; elle augmente donc l'efficacité du modèle. Elle augmente également la complexité du processus de construction du modèle, car la sélection des variables à conserver et à éliminer dans le modèle devient fastidieuse. Avec l'exemple de pblicité de trois variables explicatives, il peut y avoir sept modèles possibles. Ils sont les suivants :

  • Modèle 1 : Ventes~TV
  • Modèle 2 : Ventes~journaux
  • Modèle 3 : Ventes~Radio
  • Modèle 4 : Ventes~TV+Radio
  • Modèle 5 : Ventes~TV+journaux
  • Modèle 6 : Ventes~journaux+Radio
  • Modèle 7 : Ventes~TV+Radio+journaux

Pour un modèle avec $p$ variables prédicteurs possibles, il peut y avoir $2^p-1$ modèles possibles ; par conséquent, à mesure que le nombre de prédicteurs augmente, la sélection des variables devient fastidieuse. Par exemple, nous avons vu que si $p = 2$, alors il y a $2^2 = 4$ modèles à considérer. Mais si $p = 30$, alors il faut considérer $2^{30} = 1 073 741 824$ modèles!. Une situation à laquelle nous faisons face chaque jour dans le cadre de notre travail de modélisateur avec l'augmentation de la collecte des données.

Par conséquent, à moins que $p$ ne soit très petit, nous ne pouvons pas considérer tous les modèles $2^p$, et nous avons plutôt besoin d'une approche automatisée et efficace pour choisir un plus petit ensemble de modèles à considérer. Il existe trois approches que nous ddécrivons brièvement ici, car nous verrons dans un prochain chapitre des techniques de sélection de variables plus avancées.

Forward selection

Nous commençons par le modèle nul, soit un modèle qui contient une l'intercept. Nous ajustons ensuite $p$ régressions linéaires simples et ajoutons au modèle nul la variable qui donne le RSS le plus faible. Nous ajoutons ensuite à ce modèle la variable qui donne le RSS le plus faible pour le nouveau modèle à deux variables. Cette approche est poursuivie jusqu'à ce qu'une règle d'arrêt soit satisfaite.

  1. Tout d'abord, l'initialisation : commencer avec aucun prédicteur dans le modèle.

    • Calculer $P_\phi$
  2. Deuxièmement, l'inclusion d'un premier prédicteur :

    • Comparer les performances de tous les modèles avec un seul prédicteur :
      • Calculer $P_j$ pour tout $j = 1,\dots,p,$
      • Define $i_1 := argmax_j P_j$ (Meilleur prédicteur unique)
    • Si $P_{i_1} \leq P_{\phi}$
      • aucun prédicteur supplémentaire n'améliore la performance du modèle,
      • Arrêtez la procédure et sélectionnez $\phi$ comme l'ensemble optimal de prédicteurs.
    • Sinon, le meilleur modèle actuel est défini comme le modèle avec le prédicteur unique $i_1$.
  3. Troisièmement, l'inclusion d'un deuxième prédicteur :

    • Comparer les performances de tous les modèles incluant un prédicteur supplémentaire à $i_i$:
      • Calculer $P_{i_1,j}$ pour tous les $j = 1,\dots,p$,
      • Définir $i_2 := argmax_j P_{i_1,j}$. (meilleur deuxième prédicteur)
    • Si $P_{i_1,i_2} \leq P_{i_1}$,
      • aucun prédicteur supplémentaire n'améliore la performance du modèle,
      • Arrêtez la procédure et sélectionnez $i_1$ comme ensemble optimal de prédicteurs.
    • Sinon, le meilleur modèle actuel est défini comme le modèle avec les prédicteurs $(i_1, i_2)$.

Cette dernière étape de l'inclusion de prédicteurs supplémentaires est répétée jusqu'à ce que

  • La procédure est arrêtée parce qu'aucun prédicteur supplémentaire n'améliore le modèle, ou
  • Tous les prédicteurs sont inclus dans le modèle. Le nombre maximum de modèles pris en compte par la procédure prospective (si tous les prédicteurs sont inclus), à l'exclusion du modèle sans prédicteur, est de
$$ p + (p-1) + \dots + 1 = \frac{p(p+1)}{2} $$

qui est beaucoup plus petit que $2^p$.

Backward selection

Nous commençons par toutes les variables du modèle, puis nous retirons la variable ayant la plus grande valeur $p$, c'est-à-dire la variable la moins significative statistiquement. Le nouveau modèle à $(p - 1)$ variables est ajusté, et la variable ayant la plus grande valeur $p$ est supprimée. Cette procédure se poursuit jusqu'à ce qu'une règle d'arrêt soit atteinte. Par exemple, nous pouvons nous arrêter lorsque toutes les variables restantes ont une valeur $p$ inférieure à un certain seuil.

Hybrid procedures

Il s'agit d'une combinaison de selection en avant (Forward)et en arrière (Backward). Nous commençons sans aucune variable dans le modèle et, comme pour la sélection avant, nous ajoutons la variable qui offre le meilleur ajustement. Nous continuons à ajouter les variables une par une. Bien entendu, comme nous l'avons noté dans l'exemple de la publicité, les valeurs $p$ des variables peuvent augmenter à mesure que de nouveaux prédicteurs sont ajoutés au modèle. Par conséquent, si à un moment donné la valeur $p$ d'une des variables du modèle dépasse un certain seuil, nous retirons cette variable du modèle. Nous continuons à effectuer ces pas en avant et en arrière jusqu'à ce que toutes les variables du modèle aient une valeur $p$ suffisamment faible, et que toutes les variables en dehors du modèle aient une valeur $p$ importante si elles sont ajoutées au modèle.

  1. Commencez sans aucun prédicteur.
  2. Essayer de faire un pas en avant en incluant le prédicteur ayant le plus d'incréments pouvoir prédictif (essayez-les tous). Incluez-la si elle améliore le performance.
  3. Retour en arrière : essayer de supprimer le prédicteur dans le modèle qui a la le pouvoir prédictif le plus faible (essayez-les tous). Supprimez-les si elles améliorent le performance.
  4. Un pas en avant (Forward) . . .
  5. Pas en arrière (Backward) . . .
  6. ... continuer à alterner entre pas en avant et pas en arrière.

La régression linéaire et selection de variables avec scikit-learn

Un des avantages de l'utilisation de la librairie scikit-learn pour la régression en Python est qu'il possède cette méthode particulière pour la sélection des caractéristiques. Cette méthode fonctionne plus ou moins comme la sélection à rebours (pas exactement) et est appelée élimination récursive des prédicteurs ( Recursive Feature Elimination RFE). On peut spécifier le nombre de variables que l'on veut dans le modèle final. Le modèle est d'abord exécuté avec toutes les variables et certaines pondérations sont attribuées à toutes les variables. Dans les itérations suivantes, les variables ayant les plus petits poids sont éliminées de la liste des variables jusqu'à ce qu'il ne reste plus que le nombre de variables souhaité.

from sklearn.feature_selection import RFE 
from sklearn.svm import SVR
feature_cols = ['TV', 'Radio','Newspaper'] 
X = advertising[feature_cols]
Y = advertising['Sales']
estimator = SVR(kernel="linear")
selector = RFE(estimator,2,step=1) 
selector = selector.fit(X, Y)

Pour obtenir la liste des variables sélectionnées, on peut écrire le code suivant :

selector.support_
array([ True,  True, False])

Il en résulte un vecteur mentionnant si les variables de $X$ ont été sélectionnées pour le modèle ou non. True signifie que la variable a été sélectionnée, tandis que False signifie le contraire.

Dans notre cas, $X$ se compose de trois variables : la télévision, la radio et les journaux. Le vecteur précédent suggère que la télévision et la radio ont été sélectionnées pour le modèle, alors que le journal n'a pas été sélectionné. Cela concorde avec la sélection de variables que nous avions faite manuellement. Cette méthode renvoie également un classement, comme décrit dans l'exemple suivant :

selector.ranking_
array([1, 1, 2])

Toutes les variables sélectionnées auront un rang de 1, tandis que les suivantes seront classées par ordre décroissant de leur importance. Une variable de rang 2 sera plus significative pour le modèle que celle de rang 3 et ainsi de suite.

Autres considérations dans le modèle de régression

Les prédicteurs qualitatifs

Jusqu'à présent, nous avons vu que des exemples avec toutes les variables qui sont quantitatives. Mais en pratique, ce n'est pas nécessairement le cas ; souvent, certains prédicteurs sont qualitatifs.

Par exemple, l'ensemble de données sur le crédit présenté qui représente la dette moyenne par carte de crédit pour un certain nombre de personnes. Nous y trouvons plusieurs prédicteurs quantitatifs : âge, cartes (nombre de cartes de crédit), éducation (années d'éducation), revenu (en milliers de dollars), limite (limite de crédit) et cote (cote de crédit). Chaque panneau de la figure 3.6 est un diagramme de dispersion pour une paire de variables dont l'identité est donnée par les étiquettes de ligne et de colonne correspondantes. Par exemple, le nuage de points situé directement à droite du mot "Balance" représente l'équilibre en fonction de l'âge, tandis que le nuage de points situé directement à droite du mot "Age" correspond à l'âge en fonction des cartes. En plus de ces variables quantitatives, nous avons également quatre variables qualitatives : le sexe, l'étudiant (statut d'étudiant), le statut (état civil) et l'appartenance ethnique (caucasien, afro-américain ou asiatique).

credit = pd.read_csv('https://raw.githubusercontent.com/nmeraihi/data/master/islr/Credit.csv')
sns.pairplot(credit[['Balance','Age','Cards','Education','Income','Limit','Rating']]);

Prédicteurs à deux niveaux seulement

Si un prédicteur qualitatif (également appelé facteur) ne comporte que deux niveaux, ou valeurs possibles, il est alors très simple de l'intégrer dans un modèle de régression. Nous créons simplement un indicateur ou une variable fictive qui prend deux valeurs numériques possibles. Par exemple, sur la base de la variable de sexe, nous pouvons créer une nouvelle variable qui prend la forme

\begin{equation} \mathbf{X}_{\text{sexe}}= \left\{ \begin{array}{ll} 1 \quad \text{ si l'assuré est un femme,}\\ 0 \quad \text{ si l'assurée est une homme.} \end{array} \right. \end{equation}

et utiliser cette variable comme un prédicteur dans l'équation de régression. Le résultat est le modèle

\begin{equation} y_{i}= \beta_0 + \beta_1 x_i + \epsilon_i= \left\{ \begin{array}{ll} \beta_0 + \beta_1 + \epsilon_i \quad \text{ si l'assuré est un femme,}\\ \beta_0 + \epsilon_i \quad \quad \quad \text{ si l'assurée est une homme.} \end{array} \right. \end{equation}
est = smf.ols('Balance ~ Gender', credit).fit()
est.summary().tables[1]
coef std err t P>|t| [0.025 0.975]
Intercept 509.8031 33.128 15.389 0.000 444.675 574.931
Gender[T.Female] 19.7331 46.051 0.429 0.669 -70.801 110.267

La dette moyenne des hommes sur les cartes de crédit est estimée à 509,80 , tandis que les femmes ont une dette supplémentaire estimée à 19,73, soit un total de 509,80 + 19,73 = 529,53 . Cependant, nous remarquons que la valeur $p$ de la variable fictive est très élevée. Cela indique qu'il n'y a pas de preuve statistique d'une différence dans le solde moyen des cartes de crédit entre les sexes.

Prédicteurs qualitatifs à plus de deux niveaux

Lorsqu'un prédicteur qualitatif a plus de deux niveaux, une seule variable fictive ne peut pas représenter toutes les valeurs possibles. Dans cette situation, nous pouvons créer des variables fictives supplémentaires. Par exemple, pour la variable de l'ethnicité, nous créons deux variables fictives. La première pourrait être

\begin{equation} \mathbf{x}_{i1}= \left\{ \begin{array}{ll} 1 \quad \text{ si la personne est asiatique,}\\ 0 \quad \text{ si la personne n'est pas asiatique.} \end{array} \right. \end{equation}

et le second pourrait être

\begin{equation} \mathbf{x}_{i2}= \left\{ \begin{array}{ll} 1 \quad \text{ si la personne est de type caucasien,}\\ 0 \quad \text{ si la personne n'est pas de type caucasien.} \end{array} \right. \end{equation}

et utiliser cette variable dans l'équation de régression. On obtient ainsi le modèle

\begin{equation} y_{i}= \beta_0 + \beta_1 x_{i1} + \beta_2 x_{i2}+ \epsilon_i= \left\{ \begin{array}{ll} \beta_0 + \beta_1 + \epsilon_i \quad \text{ si la ième personne est asiatique,}\\ \beta_0 + \beta_2 + \epsilon_i \quad \text{ si la ième personne est caucasien,}\\ \beta_0 + \epsilon_i \quad \quad \quad \text{ si la ième personne est afro-américaine..} \end{array} \right. \end{equation}

Maintenant, $\beta_0$ peut être interprété comme le solde moyen des cartes de crédit des Afro Américains, $\beta_1$ peut être interprété comme la différence du solde moyen entre les catégories asiatique et afro-américaine, et $\beta_2$ peut être interprété comme la différence du solde moyen entre les catégories caucasienne et afro-américaine. Il y aura toujours une variation fictive de moins que le nombre de niveaux. Le niveau sans variable fictive (afro-américain dans cet exemple) est connu sous le nom de niveau de référence.

est = smf.ols('Balance ~ Ethnicity', credit).fit()
est.summary().tables[1]
coef std err t P>|t| [0.025 0.975]
Intercept 531.0000 46.319 11.464 0.000 439.939 622.061
Ethnicity[T.Asian] -18.6863 65.021 -0.287 0.774 -146.515 109.142
Ethnicity[T.Caucasian] -12.5025 56.681 -0.221 0.826 -123.935 98.930

Codification des prédicteurs

La plupart des loficiels statistique font la codification des prédicteurs sans intervention du modélisateur. Mais il existe aussi des fonction qui nous permettent de faire la codification binaire

df_sexe=pd.get_dummies(credit.Gender,prefix='Sexe')
df_sexe.head()
Sexe_ Male Sexe_Female
0 1 0
1 0 1
2 1 0
3 0 1
4 1 0
df_Ethnicity=pd.get_dummies(credit.Ethnicity,prefix='Ethnicité')
df_Ethnicity.head()
Ethnicité_African American Ethnicité_Asian Ethnicité_Caucasian
0 0 0 1
1 0 1 0
2 0 1 0
3 0 1 0
4 0 0 1