Analysis/docs/CORRELATION_GUIDE.md
2026-01-11 22:56:02 +01:00

553 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Guide Complet de la Corrélation
📊 **Comprendre et maîtriser l'analyse de corrélation** pour identifier les relations entre variables et construire des modèles robustes.
---
## Table des Matières
1. [Qu'est-ce que la Corrélation ?](#quest-ce-que-la-corrélation)
2. [Les Trois Méthodes](#les-trois-méthodes)
3. [Interpréter la Matrice](#interpréter-la-matrice)
4. [Multicolinéarité](#multicolinéarité)
5. [P-Values et Significativité](#p-values-et-significativité)
6. [Bonnes Pratiques](#bonnes-pratiques)
7. [Exemples Concrets](#exemples-concrets)
---
## Qu'est-ce que la Corrélation ?
### Définition
La **corrélation** mesure la **force** et la **direction** de la relation linéaire entre deux variables quantitatives.
### Coefficient de Corrélation
Le coefficient de corrélation **r** varie entre **-1 et +1** :
```
-1 ←----------|----------|----------|----------→ +1
négatif positif
fort fort
```
### Interprétation Générale
| Valeur r | Force | Direction | Signification |
|----------|-------|-----------|---------------|
| **0.9 à 1.0** | Très forte | Positive | X↑ ⇒ Y↑ fortement |
| **0.7 à 0.9** | Forte | Positive | X↑ ⇒ Y↑ |
| **0.5 à 0.7** | Modérée | Positive | X↑ ⇒ Y↑ modérément |
| **0.3 à 0.5** | Faible | Positive | X↑ ⇒ Y↑ légèrement |
| **0.0 à 0.3** | Très faible | Positive | Relation quasi nulle |
| **0.0** | Aucune | - | Indépendance linéaire |
| **-0.3 à 0.0** | Très faible | Négative | X↑ ⇒ Y↓ légèrement |
| **-0.5 à -0.3** | Faible | Négative | X↑ ⇒ Y↓ |
| **-0.7 à -0.5** | Modérée | Négative | X↑ ⇒ Y↓ modérément |
| **-0.9 à -0.7** | Forte | Négative | X↑ ⇒ Y↓ |
| **-1.0 à -0.9** | Très forte | Négative | X↑ ⇒ Y↓ fortement |
### Exemples Visuels
#### Corrélation Positive Forte (r = 0.95)
```
┌─────┐
│ Y │ •
│ │ •
│ │ •
│ │ •
│ │•
└─────┴─────→ X
```
**Exemple** : Taille vs Poids (plus grand = plus lourd)
#### Corrélation Négative Forte (r = -0.90)
```
┌─────┐
│ Y │•
│ │ •
│ │ •
│ │ •
│ │ •
└─────┴─────→ X
```
**Exemple** : Vitesse vs Temps (plus vite = moins de temps)
#### Corrélation Nulle (r = 0.02)
```
┌─────┐
│ Y │ • • •
│ │• •
│ │ • •
│ │ • •
│ │• •
└─────┴─────→ X
```
**Exemple** : Taille vs Note en mathématiques
---
## Les Trois Méthodes
L'application propose **3 méthodes** de calcul de corrélation :
### 1. Pearson (Défaut)
**Quand l'utiliser ?**
- ✅ Données **normalement distribuées**
- ✅ Relation **linéaire**
- ✅ Variables **continues**
**Hypothèses** :
- Distribution normale (pas trop asymétrique)
- Pas d'outliers extrêmes
- Relation linéaire
**Formule** :
```
Σ[(Xi - X̄)(Yi - Ȳ)]
r = ----------------------------
√[Σ(Xi - X̄)²] √[Σ(Yi - Ȳ)²]
```
**Exemple** :
```python
# Température vs Vent (relation linéaire, normale)
# Corrélation de Pearson : r = 0.85 (forte positive)
```
---
### 2. Spearman
**Quand l'utiliser ?**
- ✅ Données **non-paramétriques** (pas normales)
- ✅ Relation **monotone** (pas forcément linéaire)
- ✅ Présence d'**outliers**
- ✅ Variables **ordinales** (rangs)
**Hypothèses** :
- Relation monotone (toujours dans le même sens)
- Moins sensible aux outliers
**Principe** :
Convertit les données en **rangs** avant calcul.
**Exemple** :
```python
# Revenu vs Satisfaction (relation monotone mais non linéaire)
# Revenu: [1000, 2000, 5000, 10000, 50000]
# Rangs: [1, 2, 3, 4, 5]
# Corrélation de Spearman : r = 0.90
```
**Différence Pearson vs Spearman** :
```
Pearson (linéaire) :
Spearman (monotone) :
```
---
### 3. Kendall (Tau)
**Quand l'utiliser ?**
-**Petits échantillons** (n < 30)
- Beaucoup de **valeurs identiques** (ex-aequo)
- Données **ordinales**
**Hypothèses** :
- Mesure la concordance des paires
**Principe** :
Compte les paires **concordantes** vs **discordantes**.
**Exemple** :
```python
# Classement vs Préférence (10 étudiants)
# Kendall Tau = 0.67 (modéré)
```
---
## Interpréter la Matrice
### Structure de la Heatmap
```
Var1 Var2 Var3 Var4
┌───────┬───────┬───────┬───────┐
Var1 │ 1.00 │ 0.85 │ -0.30 │ 0.15 │
├───────┼───────┼───────┼───────┤
Var2 │ 0.85 │ 1.00 │ -0.20 │ 0.45 │
├───────┼───────┼───────┼───────┤
Var3 │ -0.30 │ -0.20 │ 1.00 │ 0.92 │ ← Multicolinéarité
├───────┼───────┼───────┼───────┤
Var4 │ 0.15 │ 0.45 │ 0.92 │ 1.00 │
└───────┴───────┴───────┴───────┘
```
### Lecture de la Heatmap
#### Couleurs
- **Rouge foncé** (r > 0.7) : Forte corrélation positive
- **Rouge clair** (0.3 < r < 0.7) : Corrélation modérée/positive
- **Gris/Blanc** (|r| < 0.3) : Corrélation faible/nulle
- **Bleu clair** (-0.7 < r < -0.3) : Corrélation modérée/négative
- **Bleu foncé** (r < -0.7) : Forte corrélation négative
#### Bordure Rouge ⚠️
- Indique une **multicolinéarité problématique** (|r| 0.7)
- Entre deux **prédicteurs** (variables X)
- À éviter dans la régression
### Diagonale
- Toujours égale à **1.00** (corrélation de la variable avec elle-même)
- Non pertinente pour l'analyse
---
## Multicolinéarité
### Définition
La **multicolinéarité** se produit lorsque deux ou plusieurs prédicteurs sont **fortement corrélés** entre eux (|r| 0.7).
### Pourquoi c'est Problématique ?
**Effets sur la Régression** :
- Coefficients **instables** (varient beaucoup)
- **p-values** peu fiables
- Difficulté d'interpréter l'effet isolé de chaque variable
- **R²** artificiellement élevé
### Exemple de Multicolinéarité
```python
# Dataset : Prix immobiliers
# Variables :
# - Surface_m²
# - Surface_pieds² (même variable, unité différente)
# - Prix
# Corrélation Surface_m² vs Surface_pieds² : r = 1.0
# ⚠️ BORDURE ROUGE sur la heatmap
# Problème dans la régression :
# Prix = 50000 + 1000*Surface_m² - 200*Surface_pieds²
# ^^^^^ coefficient positif ^^^^^^^^ coefficient négatif ???
# absurde ! (les deux expliquent la même chose)
```
### Détection
Dans l'application :
1. **Ouvrez** la matrice de corrélation
2. **Recherchez** les bordures rouges entre prédicteurs
3. **Notez** les variables concernées
### Solution
**Option 1 : Supprimer une variable**
```python
# Avant : Surface_m² (r=1.0) vs Surface_pieds²
# Solution : Garder Surface_m², supprimer Surface_pieds²
```
**Option 2 : Combiner les variables**
```python
# Avant : Note_Maths, Note_Physique, Note_Chimie (toutes corrélées)
# Solution : Créer "Note_Scientifique" = moyenne des trois
```
**Option 3 : Analyse de corrélation partielle**
Utiliser des techniques avancées (hors scope du guide)
### Checklist Avant Régression
Avant de lancer votre régression, vérifiez :
**Aucune bordure rouge** entre les prédicteurs potentiels
**Si bordure rouge** : choisissez la variable la plus corrélée avec la cible
**Documentez** votre choix de retrait de variable
---
## P-Values et Significativité
### Qu'est-ce que la P-Value ?
La **p-value** mesure la **probabilité** que la corrélation observée soit due au hasard.
- **p-value < 0.05** : Corrélation **statistiquement significative** (fiable)
- **p-value 0.05** : Corrélation **non significative** (pourrait être due au hasard)
### Interprétation
| Corrélation (r) | P-Value | Interprétation |
|-----------------|---------|----------------|
| 0.85 | p < 0.001 | Forte et significative |
| 0.60 | p = 0.040 | Modérée et significative |
| 0.75 | p = 0.080 | Forte mais NON significative (échantillon trop petit) |
| 0.30 | p = 0.200 | Faible et non significative |
### Impact de la Taille d'Échantillon
```
Pour r = 0.30 :
n = 10 → p = 0.40 (non significatif)
n = 50 → p = 0.03 (significatif)
n = 100 → p = 0.002 (très significatif)
```
**Règle** : Plus l'échantillon est grand, plus les petites corrélations deviennent significatives.
### Filtre "Significatif Seulement"
Dans l'application :
- **Cochez** "Significatif seulement (p < 0.05)"
- La heatmap n'affiche que les corrélations **statistiquement fiables**
- Utile pour filtrer le bruit
---
## Bonnes Pratiques
### 1. Vérifier les Hypothèses
**Pour Pearson** :
```python
# Test de normalité (Shapiro-Wilk)
from scipy.stats import shapiro
stat, p = shapiro(data['variable'])
if p > 0.05:
print("Distribution normale → Pearson OK")
else:
print("Distribution non normale → Utiliser Spearman")
```
**Vérification visuelle** :
```python
import matplotlib.pyplot as plt
plt.hist(data['variable'])
plt.show()
# Forme de cloche = normale
```
### 2. Traiter les Outliers
Les outliers faussent **fortement** la corrélation Pearson :
```python
# Sans outlier : r = 0.95
X = [1, 2, 3, 4, 5]
Y = [2, 4, 6, 8, 10]
# Avec outlier : r = 0.40
X = [1, 2, 3, 4, 100] # 100 est outlier
Y = [2, 4, 6, 8, 10]
# Solution : utiliser Spearman (robuste aux outliers)
# Ou supprimer l'outlier
```
### 3. Corrélation ≠ Causalité
**Attention** : Une corrélation forte n'implique PAS que X cause Y.
**Exemples classiques** :
- 🍦 Ventes de glace vs 🦈 Attaques de requins
- Corrélation : r = 0.90
- Cause commune : 🌞 Été (chaleur)
- Solution : Pas de causalité directe
- Café vs 💰 Revenu
- Corrélation : r = 0.75
- Explication : Les riches boivent plus de café (ou l'inverse ?)
- Nécessite une expérience contrôlée
### 4. Corrélation de Spearman pour les Relations Non-Linéaires
```python
# Relation exponentielle
X = [1, 2, 3, 4, 5]
Y = [1, 4, 9, 16, 25] # Y = X²
# Pearson : r = 0.97 (mais PAS linéaire !)
# Spearman : r = 1.00 (monotone parfaite)
```
### 5. Matrice de Corrélation Avant Régression
**Workflow recommandé** :
```
1. Charger les données
2. Matrice de corrélation
3. Identifier les variables fortement corrélées avec la cible (|r| > 0.5)
4. Repérer la multicolinéarité entre prédicteurs (bordure rouge)
5. Sélectionner les prédicteurs finaux (pas de multicolinéarité)
6. Régression
```
---
## Exemples Concrets
### Exemple 1 : Immobilier
**Dataset** : Prix, Surface, Chambres, Jardin, Garage, Distance_Centre
**Matrice de corrélation** :
```
Prix Surface Chambres Jardin Garage Distance
Prix 1.00 0.85 0.65 0.70 0.55 -0.75
Surface 0.85 1.00 0.72 0.60 0.50 -0.40
Chambres 0.65 0.72 1.00 0.45 0.35 -0.25
Jardin 0.70 0.60 0.45 1.00 0.30 -0.50
Garage 0.55 0.50 0.35 0.30 1.00 -0.20
Distance -0.75 -0.40 -0.25 -0.50 -0.20 1.00
```
**Analyse** :
1. **Variables corrélées avec le Prix** :
- Surface : r = 0.85 (très forte)
- Distance : r = -0.75 (forte négative)
- Jardin : r = 0.70 (forte)
- Chambres : r = 0.65 (modérée)
2. **Multicolinéarité** :
- Surface vs Chambres : r = 0.72 (proche du seuil)
- Si r > 0.7 : choisir une seule variable
3. **Sélection finale** :
- X = Surface, Distance, Jardin
- Éviter Chambres (multicolinéarité avec Surface)
---
### Exemple 2 : Santé
**Dataset** : IMC, Tension, Cholestérol, Âge, Sport, Calories
**Matrice (Spearman)** :
```
IMC Tension Cholestérol Âge Sport Calories
IMC 1.00 0.55 0.48 0.30 -0.60 0.70
Tension 0.55 1.00 0.65 0.45 -0.40 0.50
Cholestérol 0.48 0.65 1.00 0.60 -0.35 0.45
Âge 0.30 0.45 0.60 1.00 -0.25 0.20
Sport -0.60 -0.40 -0.35 -0.25 1.00 -0.50
Calories 0.70 0.50 0.45 0.20 -0.50 1.00
```
**Analyse** :
- **Prédicteurs du Tension** : Cholestérol (0.65), IMC (0.55)
- **Multicolinéarité** : IMC vs Calories (0.70) ⚠️
- **Action** : Garder IMC (plus corrélé avec Tension), exclure Calories
---
### Exemple 3 : Marketing
**Dataset** : Ventes, Budget_TV, Budget_Radio, Budget_Online, Prix, Concurrence
**Matrice** :
```
Ventes Budget_TV Budget_Radio Budget_Online Prix Concurrence
Ventes 1.00 0.80 0.45 0.72 -0.60 -0.40
Budget_TV 0.80 1.00 0.30 0.55 -0.20 -0.10
Budget_Radio 0.45 0.30 1.00 0.35 -0.15 -0.05
Budget_Online 0.72 0.55 0.35 1.00 -0.25 -0.15
Prix -0.60 -0.20 -0.15 -0.25 1.00 0.20
Concurrence -0.40 -0.10 -0.05 -0.15 0.20 1.00
```
**Décisions** :
1. **Meilleur canal** : TV (r = 0.80)
2. **Deuxième** : Online (r = 0.72)
3. **Radio** : Moins efficace (r = 0.45)
4. **Pas de multicolinéarité** sévère entre canaux
5. **Sélection** : Budget_TV, Budget_Online, Prix, Concurrence
---
## 📊 Fonctionnalités de l'Application
### Contrôles
1. **Sélection de la méthode**
- Menu déroulant : Pearson / Spearman / Kendall
- Défaut : Pearson
2. **Seuil minimum**
- Filtre les corrélations faibles
- Exemple : 0.5 n'affiche que |r| ≥ 0.5
3. **Filtre de significativité**
- Cochez "Significatif seulement"
- Garantit p < 0.05
4. **Export CSV**
- Téléchargez la matrice complète
- Inclut corrélations et p-values
### Composants Visuels
#### Cartes de Résumé
- **Corrélations les plus fortes** : Top 5 par |r|
- **Corrélations les plus faibles** : Bottom 5 non nulles
#### Tooltip (Survol)
Cliquez sur une case pour voir :
- Noms des variables
- Coefficient de corrélation
- P-value
- Significativité (✅/❌)
- Interprétation (Fort/Moyen/Faible)
---
## 🎯 Checklist d'Analyse
Avant de passer à la régression :
- [ ] **Méthode choisie** selon la distribution des données
- [ ] **Corrélations avec la cible** identifiées (|r| > 0.5 souhaité)
- [ ] **Multicolinéarité** vérifiée (pas de bordure rouge entre prédicteurs)
- [ ] **P-values** significatives (p < 0.05)
- [ ] **Outliers** traités (si Pearson)
- [ ] **Variables sélectionnées** documentées
- [ ] **Résultats exportés** pour référence future
---
**Version** : 1.0
**Projet** : Application d'Analyse de Données
**Auteur** : Documentation Utilisateur
🔗 **Voir aussi** : [Guide Régression](REGRESSION_GUIDE.md) | [Guide Outliers](OUTLIER_GUIDE.md)