• 15 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 04/06/2019

Analysez une variable quantitative et une qualitative par ANOVA

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Dans les 2 chapitres précédents, nous avons étudié les corrélations entre 2 variables quantitatives. Maintenant, passons à l'étude de deux variables dont l'une est qualitative, l'autre quantitative.

Quelles questions se poser ?

En fonction des couples de variables que nous utiliserons, la méthode d'analyse sera la même, mais nous pourrons répondre à différentes questions intéressantes :

  • Les dépenses que vous faites le week-end sont-elles plus grosses qu'en semaine ? (variables montant et weekend)

  • Les dépenses que vous faites en début de mois sont-elles plus grosses qu'en fin de mois ? (montant et quart_mois)

  • Le montant d'une opération est-il différent d'une catégorie de dépense à l'autre ? (montant et categ)

  • Vos paiements en carte bancaire sont-ils toujours petits et vos virements importants ? (type et montant)

  • Le solde de votre compte est-il plus petit en fin de mois qu'en début de mois ? (solde_avt_operation et quart_mois)

Des graphiques !

Voici le code qui permet de représenter une variable quantitative et une variable qualitative. Tout d'abord, créez le sous-échantillon sur lequel vous souhaitez travailler en adaptant ce code, notamment les variables X et Y selon la question que vous aurez choisie parmi celles ci-dessus.

X = "categ" # qualitative
Y = "montant" # quantitative

# On ne garde que les dépenses
sous_echantillon = data[data["montant"] < 0].copy()
# On remet les dépenses en positif
sous_echantillon["montant"] = -sous_echantillon["montant"]
# On n'étudie pas les loyers car trop gros:
sous_echantillon = sous_echantillon[sous_echantillon["categ"] != "LOYER"] 

Ensuite, ces 6 lignes de code affichent votre graphique !

modalites = sous_echantillon[X].unique()
groupes = []
for m in modalites:
    groupes.append(sous_echantillon[sous_echantillon[X]==m][Y])

# Propriétés graphiques (pas très importantes)    
medianprops = {'color':"black"}
meanprops = {'marker':'o', 'markeredgecolor':'black',
            'markerfacecolor':'firebrick'}
    
plt.boxplot(groupes, labels=modalites, showfliers=False, medianprops=medianprops, 
            vert=False, patch_artist=True, showmeans=True, meanprops=meanprops)
plt.show()

 

On voit ici que les montants sont très différents d'une catégorie à l'autre. Par exemple, les montants des dépenses de transport sont plus élevés et plus dispersés que ceux des factures téléphoniques. Mais vérifions maintenant cette affirmation par les chiffres, grâce à une modélisation.

Modélisons

Revenons sur la démarche que nous avons eue au chapitre précédent. Pour voir s'il existait une corrélation (linéaire) entre 2 variables, nous avons supposé que cette corrélation existait, puis nous avons appliqué un modèle sur cette supposition. Nous avons ensuite estimé les paramètres $\(a\)$ et $\(b\)$ . Enfin, nous avons vérifié la supposition de départ en évaluant la qualité du modèle. Si ce modèle est de bonne qualité, alors c'est qu'il y a une forte corrélation entre X et Y. En bonus, nous avons profité de la formule de la régression linéaire $\(Y = aX + b + \epsilon\)$ pour interpréter $\(a\)$ comme la somme d'argent consommée en 1 jour, et $\(b\)$ comme la somme d'argent de vos stocks et produits non consommables.

Ici, nous utiliserons la même démarche.

On pourrait reprendre la formule de la régression linéaire ci-dessus, sauf qu'elle implique de multiplier $\(X\)$ par $\(a\)$ . Or cette fois-ci, X est qualitative, comme notre variable categ. Multiplier une variable qualitative par un nombre n'a aucun sens (ex: "TRANSPORT" * 3 n'a aucun sens !).

Nous allons faire autrement. Nous allons donc faire la supposition que vos opérations bancaires ont un montant de référence en commun appelé $\(\mu\)$ . Ensuite, on considère que le montant de l'opération s'ajuste en fonction de la catégorie $\(i\)$ de dépense (loyer, transport, courses, etc.). Si une catégorie a des montants qui sont en général inférieurs à $\(\mu\)$ , alors cet ajustement $\(\alpha_i\)$ sera négatif. Dans le cas contraire, il sera positif. On ajoute la contrainte que la somme de tous les $\(\alpha_i\)$ soit égale à 0.

Comme au chapitre précédent, tu commettras toujours une erreur de prédiction, car au sein d'une même catégorie, les montants ne sont pas tous les mêmes !

C'est bien vrai. Comme pour le modèle de la régression linéaire, on aura ici aussi un terme d'erreur $\(\epsilon\)$ :

$\[Y = \alpha_{i} + \mu + \epsilon\]$

Comme dans le chapitre précédent, on peut laisser l'ordinateur estimer tous les $\(\alpha_i\)$ et $\( \mu\)$, sauf qu'ici, les calculs mathématiques qui nous disent quels sont les $\(\alpha_i \)$ et $\(\mu\)$ qui minimisent l'erreur $\(\epsilon \)$ donnent des résultats très intuitifs :

  • Le montant de référence $\( \mu\)$ est estimé par la moyenne de tous les montants. On appelle cette estimation $\(\hat{\mu}\)$

  • Pour une catégorie $\(i\)$ , $\( \alpha_i\)$ est estimé en calculant l'écart entre $\(\hat{\mu}\)$ et la moyenne $\(\overline{y_i}\)$ des montants de la catégorie $\(i\)$ , c'est-à-dire $\(\hat{\alpha_i} = \overline{y_i} - \hat{\mu}\)$

Évaluation du modèle : les variables sont-elles corrélées ?

Notre modèle est-il de qualité ? Prévoit-on correctement les montants des opérations uniquement à partir de leur catégorie ?

Comme au chapitre précédent, on espère que notre modèle parvienne à expliquer un gros pourcentage des variations des données. Si c'est le cas, cela signifie que les variables categ et montant sont fortement corrélées.

Pour évaluer cela, la formule utilisée est exactement la même que celle du chapitre précédent : $\(SCT = SCE + SCR\)$ . Mais ici, comme la variable X est qualitative, on peut donner à SCT, SCE et SCR des expressions équivalentes à celles du chapitre précédent. Elles sont données dans la section Aller plus loin. De plus, cela permet une meilleure interprétation de ces 3 sigles, qui peuvent être renommés respectivement en variation totale, variation interclasse et variation intraclasse (les classes sont les modalités de X).

De la même manière qu'on avait au chapitre précédent $\(R^2 = \frac{SCE}{SCT}\)$ , l'équivalent ici s'appelle le rapport de corrélation, compris entre 0 et 1, donné par :

$\[\eta^2_{Y/X} = \frac{V_{interclasses}}{V_{totale}}\]$

Si $\(\eta^2_{Y/X} = 0\)$ , cela signifie que les moyennes par classes sont toutes égales. Il n’y a donc pas a priori de relation entre les variables Y et X. Au contraire, si $\(\eta^2_{Y/X} = 1\)$ , cela signifie que les moyennes par classes sont très différentes, chacune des classes étant constituée de valeurs identiques : il existe donc a priori une relation entre les variables Y et X.

Voici le code permettant de calculer $\(\eta^2\)$ (eta carré ou eta squared en anglais). Je vous propose ici de faire le calcul à la main ;) :

X = "categ" # qualitative
Y = "montant" # quantitative

sous_echantillon = data[data["montant"] < 0] # On ne garde que les dépenses

def eta_squared(x,y):
    moyenne_y = y.mean()
    classes = []
    for classe in x.unique():
        yi_classe = y[x==classe]
        classes.append({'ni': len(yi_classe),
                        'moyenne_classe': yi_classe.mean()})
    SCT = sum([(yj-moyenne_y)**2 for yj in y])
    SCE = sum([c['ni']*(c['moyenne_classe']-moyenne_y)**2 for c in classes])
    return SCE/SCT
    
eta_squared(sous_echantillon[X],sous_echantillon[Y])

On obtient un résultat proche de 0.4, ce qui laisse penser qu'il y a effectivement une corrélation entre le montant des dépenses et leur catégorie. C'est ce que nous avions observé sur le graphique en haut du chapitre !

Aller plus loin : Les expressions de SCT, SCE et SCR

Les expressions de SCT, SCE et SCR introduisent les effectifs $\(n_i\)$ de chacune des classes $\(i\)$ , qui sont au nombre de $\(k\)$ . Ainsi,

$\[SCT = \sum_{j=1}^{n}(y_j-\overline{y})^2\ \text{ devient }\ \sum_{i=1}^k\sum_{j=1}^{n_i}(y_{ij}-\overline{y})^2\]$

$\[SCE = \sum_{j=1}^n(\hat{y_j}-\overline{y})^2\ \text{ devient }\ \sum_{i=1}^kn_i(\overline{y_i}-\overline{y})^2\]$

 

$\[SCR = \sum_{j=1}^n(y_j-\hat{y_j})^2\ \text{ devient }\ \sum_{i=1}^k\sum_{j=1}^{n_i}(y_{ij}-\hat{y_i})^2 = \sum_{i=1}^kn_is_i^2\]$

Exemple de certificat de réussite
Exemple de certificat de réussite