Durée : 7 heures | Niveau : Avancé
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.
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
Définition : Trouver des patterns dans des données non étiquetées
Exemples : Segmentation clients, détection d'anomalies
Algorithmes : K-means, DBSCAN, PCA
Définition : Apprendre par essai-erreur avec récompenses
Exemples : Jeux vidéo, voitures autonomes
Algorithmes : Q-learning, Deep Q-Network
Objectif : Prédire une catégorie
Objectif : Prédire une valeur numérique
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)
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)
| 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étrique | Description | Interprétation |
|---|---|---|
| MAE | Mean Absolute Error | Erreur moyenne en valeur absolue |
| RMSE | Root Mean Squared Error | Pénalise davantage les grosses erreurs |
| R² | Coefficient de détermination | % de variance expliquée (0 à 1) |
# 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")
Testez vos connaissances sur le Machine Learning ! 10 questions.