🎯 Objectifs de la séance

1. Introduction au Machine Learning

📖 Qu'est-ce que le Machine Learning ?

Le Machine Learning (apprentissage automatique) est une branche de l'IA qui permet aux ordinateurs d'apprendre à partir de données sans être explicitement programmés.

🎯 Types d'apprentissage

Apprentissage supervisé

Définition : Apprendre à partir de données étiquetées (avec réponses)

Exemples : Prédire le prix d'une maison, classifier des emails

Algorithmes : Régression linéaire, Random Forest, SVM

Apprentissage non supervisé

Définition : Trouver des patterns dans des données non étiquetées

Exemples : Segmentation clients, détection d'anomalies

Algorithmes : K-means, DBSCAN, PCA

Apprentissage par renforcement

Définition : Apprendre par essai-erreur avec récompenses

Exemples : Jeux vidéo, voitures autonomes

Algorithmes : Q-learning, Deep Q-Network

2. Classification vs Régression

🎯 Classification

Objectif : Prédire une catégorie

Exemples :

  • Client va-t-il partir ? (Oui/Non)
  • Email spam ? (Spam/Non-spam)
  • Maladie : (Malade/Sain)

Algorithmes :

  • Logistic Regression
  • Decision Tree
  • Random Forest
  • SVM, KNN

📈 Régression

Objectif : Prédire une valeur numérique

Exemples :

  • Prix d'une maison
  • Chiffre d'affaires futur
  • Température demain

Algorithmes :

  • Linear Regression
  • Polynomial Regression
  • Ridge/Lasso
  • Random Forest Regressor

3. Préparation des Données pour le ML

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# 1. Charger les données
df = pd.read_csv("data.csv")

# 2. Séparer features (X) et target (y)
X = df.drop("target", axis=1)
y = df["target"]

# 3. Split train/test (80% train, 20% test)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 4. Normalisation
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

⚠️ Erreurs à éviter

  • Data leakage : Ne pas utiliser les données de test pour l'entraînement
  • Ne pas normaliser : Certains algorithmes nécessitent des données normalisées
  • Ignorer les valeurs manquantes : Les traiter avant l'entraînement

4. Modèle de Classification - Random Forest

from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score, classification_report

# Créer le modèle
model = RandomForestClassifier(n_estimators=100, random_state=42)

# Entraîner
model.fit(X_train, y_train)

# Prédire
y_pred = model.predict(X_test)

# Évaluer
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2%}")
print(classification_report(y_test, y_pred))

# Importance des features
importances = pd.DataFrame({
    "feature": X.columns,
    "importance": model.feature_importances_
}).sort_values("importance", ascending=False)

print(importances)

5. Évaluation de Modèles

📊 Métriques de classification

Métrique Description Quand l'utiliser
Accuracy % de prédictions correctes Classes équilibrées
Precision Des prédictions positives, combien sont vraies ? Coût des faux positifs élevé
Recall Des cas positifs réels, combien détectés ? Coût des faux négatifs élevé
F1-Score Moyenne harmonique precision/recall Classes déséquilibrées

📈 Métriques de régression

Métrique Description Interprétation
MAE Mean Absolute Error Erreur moyenne en valeur absolue
RMSE Root Mean Squared Error Pénalise davantage les grosses erreurs
Coefficient de détermination % de variance expliquée (0 à 1)

6. Projet Data Complet : Pipeline End-to-End

1. SQL (DuckDB)
2. Python (Pandas)
3. Machine Learning
4. Streamlit (Interface)
# Exemple complet : Prédiction de Churn
import streamlit as st
import duckdb
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split

st.title("🚀 Prédiction de Churn")

# 1. Extraction SQL
con = duckdb.connect("data/crm.db")
query = """
    SELECT 
        c.customer_id,
        c.age,
        c.tenure,
        c.monthly_charges,
        c.churn
    FROM customers c
"""
df = con.execute(query).fetchdf()

# 2. Préparation ML
X = df[["age", "tenure", "monthly_charges"]]
y = df["churn"]
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

# 3. Entraînement
model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)

# 4. Interface Streamlit
st.subheader("Prédiction en temps réel")
age = st.number_input("Âge", 18, 100, 35)
tenure = st.number_input("Ancienneté (mois)", 0, 100, 12)
monthly = st.number_input("Charges mensuelles", 0, 200, 65)

if st.button("Prédire"):
    prediction = model.predict([[age, tenure, monthly]])[0]
    if prediction == 1:
        st.error("⚠️ Risque de Churn élevé")
    else:
        st.success("✅ Client fidèle")

🎯 Quiz de validation des connaissances

Testez vos connaissances sur le Machine Learning ! 10 questions.

🎓 Points clés à retenir

📚 Ressources complémentaires

📖 Concepts et formations