• 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 la corrélation entre deux variables quantitatives

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

Jusqu'à maintenant, nous avons vu 2 manières de présenter des données en analyse bivariée : le diagramme de dispersion (scatterplot), et le tableau de contingence.

Le premier est adapté quand les 2 variables sont quantitatives, et le second est adapté quand les 2 variables sont qualitatives.

Et quand il y a une variable quantitative et une variable qualitative ?

C'est bien, vous avez trouvé le 3e cas possible ! Il reste 4 chapitres à ce cours, durant lesquels nous parcourrons ces 3 cas : ce chapitre et le suivant seront dédiés à l'étude de 2 variables quantitatives, il y aura ensuite un chapitre pour le cas d'une variable quantitative et l'autre qualitative, et le tout dernier sera dédié à l'étude de deux variables qualitatives. Prêts ? C'est parti !

2 variables quantitatives : graphiques

Posons-nous la question suivante :

Êtes-vous moins dépensier lorsque vous avez peu d'argent sur votre compte ?

Vous l'aurez deviné, les 2 variables à étudier sont : montant et solde_avt_operation. Rechercher une corrélation entre ces variables revient à dire : "Sachant que le solde de votre compte est petit, peut-on s'attendre à ce que le montant de l'opération soit lui aussi petit ?" (ou l'inverse).

A priori sur ce diagramme de dispersion, il ne semble pas que quand le solde est petit, les montants soient particulièrement petits. Il semble ne pas y avoir de corrélation. Mais vous en trouverez peut-être une dans vos propres relevés ! Cependant, les points sont assez dispersés et nombreux. Il est donc difficile d'y voir très clair. Pour remédier à cela, il existe une représentation qui peut être meilleure. Elle est donnée dans la section Aller plus loin, tout en bas ;).

2 variables quantitatives : indicateurs numériques

C'est bien beau les graphiques, mais je sens que vous êtes en manque de calcul ! Il nous faut un indicateur numérique qui puisse nous dire si les variables sont corrélées ou pas.

Ici, on veut savoir si quand on a un solde ( $\(X\)$ ) petit, on a aussi un montant ( $\(Y\)$ ) petit. Mais petit par rapport à quoi ? Ici, quand on dit "petit", c'est par rapport aux autres valeurs, donc on veut dire "plus petit que la moyenne". Prenons une opération bancaire (= un individu) au hasard, et notons $\(x\)$ la valeur du solde avant opération, et $\(y\)$ le montant de l'opération. Pour mesurer si x est plus petit que la moyenne $\(\overline{x}\)$ , on peut calculer

$\[x - \overline{x}\]$

Cette quantité sera négative si x est inférieur à $\(\overline{x}\)$ , et positive dans le cas contraire. De même, on peut calculer $\(y - \overline{y}\)$ pour comparer y à la moyenne $\(\overline{y}\)$ . Maintenant, multiplions-les !

$\[a=(x - \overline{x})(y-\overline{y})\]$

Si $\(x\)$ est plus petit que la moyenne et que  $\(y\)$ est plus petit que la moyenne, alors les deux termes seront négatifs. Quand on multiplie deux nombres négatifs, on obtient un nombre positif. C'est aussi valable dans l'autre sens : si $\(x\)$ est supérieur à la moyenne et $\(y\)$ aussi, alors $\(a\)$ sera aussi un nombre positif.

OK, avec cette multiplication, on obtient la quantité $\(a\)$ pour une seule opération bancaire (un seul individu). Mais si les montants sont vraiment petits quand le solde est petit (et inversement), alors les $\(a\)$ de toutes les opérations seront positifs ! Et si on fait la moyenne de tous ces $\(a\)$ , alors on obtiendra encore un nombre positif. La moyenne de tous ces $\(a\)$ s'écrit comme ceci :

$\[s_{X,Y} = \frac{1}{n}\sum_{i=1}^{n}(x_i-\overline{x})(y_i-\overline{y})\]$

Résumons : Si $\(x\)$ est petit quand $\(y\)$ est petit (et inversement), alors $\(s_{X,Y}\)$ sera positif. Si $\(X\)$ et $\(Y\)$ ne sont au contraire pas corrélés, $\(s_{X,Y}\)$ sera plutôt proche de 0. Pour les motivés, vous pouvez aussi déduire que si $\(x\)$ est grand quand $\(y\)$ est petit (et inversement), alors $\(s_{X,Y}\)$ sera négatif. Dans ce dernier cas, il y a corrélation certes, mais on dit que c'est une corrélation négative.

La covariance empirique et le coefficient de corrélation

Devinez quoi ! L'indicateur que nous venons de construire est très utilisé en statistiques ; il s'appelle la covariance empirique de X et Y. Ce terme vous rappelle la variance empirique ? C'est normal : elles sont similaires. Effectivement, si vous calculez la covariance empirique de X et Y, vous retombez sur la formule de la variance empirique de X, qui s'écrit  $\(s^2_X=\frac{1}{n}\sum_{i=1}^{n}(x-\overline{x})^2\)$ . Magique !

Pour ramener la covariance empirique à une valeur qui soit comprise entre -1 et 1, alors on peut la diviser par le produit des écarts-types. Cette normalisation nous permet de faire des comparaisons. Ce qui nous donne

$\[r_{X,Y}=\frac{s_{X,Y}}{s_Xs_Y}\]$

Ce coefficient r est appelé coefficient de corrélation, ou coefficient de corrélation linéaire, ou encore coefficient de corrélation de Pearson.

Pourquoi "linéaire" ?

Parce que malheureusement, il ne détecte les relations que lorsqu'elles sont linéaires, c'est-à-dire lorsque les points sont plutôt bien alignés sur une ligne droite. Sur le graphique ci-dessous, les deux schémas du haut montrent des points bien alignés : leur $\(r\)$ est donc proche de 1 ou de -1. Sur le 4e graphique en revanche, il n'y a pas vraiment de corrélation (connaître la valeur du $\(x\)$ d'un point ne nous donne aucune indication sur la valeur de $\(y\)$ ) : $\(r\)$ est donc proche de 0. Cependant sur le 3e graphique, il y a une forte corrélation, mais sa forme n'est pas linéaire, et $\(r\)$ est donc malheureusement proche de 0.

 

Du côté du code

Voici le code du diagramme de dispersion du haut de ce chapitre :

import matplotlib.pyplot as plt

depenses = data[data.montant < 0]
plt.plot(depenses["solde_avt_ope"],-depenses["montant"],'o',alpha=0.5)
plt.xlabel("solde avant opération")
plt.ylabel("montant de dépense")
plt.show()

Pour calculer le coefficient de Pearson et la covariance, 2 lignes suffisent !

import scipy.stats as st
import numpy as np

print(st.pearsonr(depenses["solde_avt_ope"],-depenses["montant"])[0])
print(np.cov(depenses["solde_avt_ope"],-depenses["montant"],ddof=0)[1,0])

Le coefficient de corrélation linéaire se calcule grâce à la méthode  st.pearsonr  . On lui donne ensuite les 2 variables à étudier. Remarquez que dans ce chapitre, on préfère ramener les dépenses en montants positifs, d'où le signe  -  devant  depenses["montant"]  . Un couple de valeurs est renvoyé, le coefficient de corrélation est la premier élément de ce couple, d'où le  [0]  à la fin de la ligne 4.

La méthode  np.cov  renvoie la matrice de covariance, que vous n'avez pas à connaître à ce niveau. Cette matrice est en fait un tableau, et dans ce dernier, c'est la valeur située sur la 2e ligne à la 1e colonne, d'où le  [1,0]  .

Aller plus loin : Alternative au diagramme de dispersion

Pour avoir une représentation plus efficace que le scatter plot, il est possible d'agréger la variable X en abscisses (axe horizontal) en différentes classes. Cela équivaut à "découper" au couteau le graphique précédent en tranches verticales. On représente ensuite pour chaque tranche une boîte à moustaches calculée à partir de tous les points présents dans la tranche. Voici donc le nouveau graphique obtenu :

Sur le graphique de gauche, on ne peut pas vraiment dire que plus le solde est petit, plus le montant est petit, même si les boîtes à moustaches des tranches [2000;2500[ et [2500;3000[ semblent légèrement moins dispersées vers le haut. La boîte à moustaches la plus à gauche est très dispersée : cela peut sembler étonnant, mais elle n'est en fait pas très représentative car elle ne représente que 4 individus sur une population qui en contient presque 300. On remarque qu'il est donc important d'afficher les effectifs de chaque classe (n=4, n=14, n=19, etc.)

taille_classe = 500 # taille des classes pour la discrétisation

groupes = [] # va recevoir les données agrégées à afficher

# on calcule des tranches allant de 0 au solde maximum par paliers de taille taille_classe
tranches = np.arange(0, max(depenses["solde_avt_ope"]), taille_classe)
tranches += taille_classe/2 # on décale les tranches d'une demi taille de classe
indices = np.digitize(depenses["solde_avt_ope"], tranches) # associe chaque solde à son numéro de classe

for ind, tr in enumerate(tranches): # pour chaque tranche, ind reçoit le numéro de tranche et tr la tranche en question
    montants = -depenses.loc[indices==ind,"montant"] # sélection des individus de la tranche ind
    if len(montants) > 0:
        g = {
            'valeurs': montants,
            'centre_classe': tr-(taille_classe/2),
            'taille': len(montants),
            'quartiles': [np.percentile(montants,p) for p in [25,50,75]]
        }
        groupes.append(g)

# affichage des boxplots
plt.boxplot([g["valeurs"] for g in groupes],
            positions= [g["centre_classe"] for g in groupes], # abscisses des boxplots
            showfliers= False, # on ne prend pas en compte les outliers
            widths= taille_classe*0.7, # largeur graphique des boxplots
            manage_xticks= False)

# affichage des effectifs de chaque classe
for g in groupes:
    plt.text(g["centre_classe"],0,"(n={})".format(g["taille"]),horizontalalignment='center',verticalalignment='top')     
plt.show()

# affichage des quartiles
for n_quartile in range(3):
    plt.plot([g["centre_classe"] for g in groupes],
             [g["quartiles"][n_quartile] for g in groupes])
plt.show()

Aller plus loin : Propriétés de la covariance empirique

Très rapidement, voici deux propriétés de la covariance empirique :

  •  $\(s_{X,Y} = s_{Y,X}\)$ . C'est la propriété de symétrie.

  • Si on crée une nouvelle variable Z à partir de 2 variables U et V dont on connaît la covariance empirique, et que $\(Z = aU + bV\)$ , alors $\(s_{X,Z} = as_{X,U} + bs_{X,V}\)$ . C'est la propriété de bi-linéarité.

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