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