🚀 Machine Learning Prédictif - AgenticX5

Déploiement & Validation
Modèles Prédictifs SST

Architecture ML de pointe combinant XGBoost, LightGBM et Graph Neural Networks pour anticiper les accidents et améliorer la prévention en temps réel

🎯 Vue d'Ensemble

SafetyGraph déploie une suite de modèles prédictifs entraînés sur 793,000+ incidents CNESST pour identifier les situations à risque avant qu'elles ne deviennent des accidents. Notre approche combine apprentissage supervisé, exploitation de graphes de connaissances et inférence causale pour une prévention proactive.

80.5%
F1-Score Global
0.87
AUC-ROC
<50ms
Latence Prédiction
793K+
Incidents CNESST

🤖 Modèles ML Déployés

Trois modèles complémentaires travaillent en synergie pour couvrir différents aspects de la prédiction: classification binaire, estimation de gravité et détection d'anomalies.

Classification Binaire

XGBoost Classifier

Prédiction de la probabilité d'incident dans les 7 prochains jours. Entraîné sur 18 features extraites du graphe Neo4j et des données IoT. Optimisé pour minimiser les faux négatifs (incidents manqués).

82%
Précision
79%
Rappel
80.5%
F1-Score
0.87
AUC-ROC
Régression

LightGBM Regressor

Estimation de la gravité potentielle d'un incident sur une échelle 1-10 (alignée sur la classification CNESST). Permet de prioriser les interventions préventives selon le niveau de risque.

1.2
MAE
1.6
RMSE
0.73
<35ms
Latence
Graph Neural Network

GraphSAGE Embeddings

Exploitation de la structure du graphe Neo4j pour générer des embeddings contextuels. Capture les patterns de propagation de risque entre travailleurs, zones et équipements connectés.

128
Dimensions
85%
Link Pred.
+12%
Gain vs Baseline
PyG
Framework

⚙️ Feature Engineering depuis le Graphe

18 features stratégiques extraites du graphe Neo4j et enrichies par les données IoT alimentent les modèles prédictifs. Chaque feature capture une dimension critique du risque SST.

🗺️ Visualisation Graphe Neo4j - Extraction Features

👷
🏭
⚙️
📚
🚨
🧠
💡 Survolez les nœuds pour voir les features extraites

Flux d'Extraction de Features

👷
Travailleur
Neo4j Node
worker_age_tranche
worker_anciennete_mois
worker_nb_incidents_hist
worker_nb_nearmiss_30j
worker_score_risque
worker_formations_valides
🏭
Zone Travail
Neo4j Node
zone_score_risque_dynamique
zone_nb_incidents_30j
zone_type_activite
Événement
Real-time Data
event_risk_score
event_type_encoded
event_hour
event_day_of_week
🕐
Temporel
Time Context
is_peak_hours
days_since_last_incident
heures_consecutives_travail
🧠
Graph ML
Neo4j Algorithms
avg_similarity_score (Vector)
node2vec_embedding_128d (GNN)
👷 Features Travailleur (6)
worker_age_tranche
worker_anciennete_mois
worker_nb_incidents_hist
worker_nb_nearmiss_30j
worker_score_risque
worker_formations_valides
🏭 Features Zone (3)
zone_score_risque_dynamique
zone_nb_incidents_30j
zone_type_activite
Features Événement (4)
event_risk_score
event_type_encoded
event_hour
event_day_of_week
🕐 Features Temporelles (3)
is_peak_hours
days_since_last_incident
heures_consecutives_travail
📊 Features Graphe (2)
avg_similarity_score
node2vec_embedding_128d
Python - Feature Extraction
def extract_features(event_enrichi): features = { # Features Travailleur depuis Neo4j 'worker_age_tranche': encode_category( event_enrichi['contexte']['travailleur']['age_tranche'] ), 'worker_anciennete': event_enrichi['contexte']['travailleur']['anciennete_mois'], 'worker_nb_incidents_hist': event_enrichi['contexte']['travailleur']['nb_incidents_historique'], # Features Zone 'zone_score_risque': event_enrichi['contexte']['zone']['score_risque_dynamique'], # Features Événement 'event_risk_score': event_enrichi['risk_score'], 'event_hour': event_enrichi['timestamp'].hour, # Features Incidents Similaires (Vector Similarity) 'avg_similarity_score': np.mean([ s['similarite_score'] for s in event_enrichi['incidents_similaires'] ]), # Graph Embeddings (Node2Vec depuis Neo4j) 'node2vec_embedding': event_enrichi['worker_embedding_128d'] } return pd.DataFrame([features])

🔄 Pipeline ML de Déploiement

Le pipeline complet, de l'ingestion des événements temps réel à la notification d'alerte, s'exécute en moins de 500ms avec une disponibilité de 99.9%.

01
Capture Événement
Agent A1 (Vision) ou A2 (IoT) détecte un événement à risque (posture anormale, fatigue élevée, zone non sécurisée). L'événement est publié sur Kafka topic agent_a4_prediction_queue.
Apache Kafka Latence: 5-10ms Format: JSON
02
Enrichissement Contexte
Agent A3 (Context Enricher) interroge Neo4j avec requêtes Cypher complexes pour récupérer historique travailleur, incidents similaires (similarité vectorielle), zone de travail, équipements et formations.
Neo4j 5.x 5-8 requêtes Cypher Vector Similarity Search Latence: 50-80ms
03
Feature Engineering
Extraction des 18 features depuis l'événement enrichi. Encoding catégories, normalisation valeurs numériques, intégration embeddings graphe (Node2Vec 128D).
Pandas Scikit-learn Preprocessing Latence: 10-15ms
04
Inférence ML
Prédiction parallèle avec XGBoost (probabilité incident) et LightGBM (gravité estimée). Les modèles pré-chargés en mémoire garantissent latence minimale. Seuil décisionnel: P(incident) > 0.70.
XGBoost 2.0+ LightGBM 4.0+ ONNX Runtime Latence: 20-30ms
05
Décision & Priorisation
Agent Maestro évalue score de risque composite (probabilité × gravité × urgence). Classification en 3 niveaux: CRITIQUE (intervention < 15min), ÉLEVÉ (< 1h), MODÉRÉ (surveillance renforcée).
LangGraph Redis Cache Latence: 5-10ms
06
Notification & Action
Agent A5 (Notifier) envoie alertes multi-canaux (SMS superviseur, push mobile travailleur, mise à jour dashboard temps réel). Enregistrement Near-Miss dans Neo4j pour apprentissage continu.
Twilio SMS Firebase Push WebSocket Dashboard Neo4j Write
<500ms
Latence E2E (P95)
50+
Events/seconde
99.9%
Disponibilité
<10%
Taux Faux Positifs

✅ Validation & Métriques de Performance

Processus rigoureux de validation avec validation croisée spatiale (éviter data leakage géographique), tests A/B en production et monitoring continu du model drift.

Matrice de Confusion - XGBoost (Validation Set)
Prédit: Incident
Prédit: Non-Incident
Réel: Incident
142
True Positives
38
False Negatives
Réel: Non-Incident
31
False Positives
589
True Negatives
82.1%
Précision
78.9%
Rappel (Sensibilité)
80.5%
F1-Score
95.0%
Spécificité
Python - Validation Pipeline
from sklearn.model_selection import StratifiedKFold from sklearn.metrics import classification_report, roc_auc_score # Validation croisée stratifiée (5-fold) skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42) f1_scores = [] for train_idx, val_idx in skf.split(X, y): X_train, X_val = X[train_idx], X[val_idx] y_train, y_val = y[train_idx], y[val_idx] # Entraînement model.fit(X_train, y_train) # Prédiction y_pred = model.predict(X_val) y_pred_proba = model.predict_proba(X_val)[:,1] # Métriques f1 = f1_score(y_val, y_pred) auc = roc_auc_score(y_val, y_pred_proba) f1_scores.append(f1) print(f"Fold F1-Score: {f1:.3f}, AUC-ROC: {auc:.3f}") print(f"
F1-Score Moyen: {np.mean(f1_scores):.3f} ± {np.std(f1_scores):.3f}"
)

🎯 Scénarios Prédictifs Validés

Trois scénarios types démontrant l'efficacité du système de prédiction dans des situations réelles de détection précoce et d'intervention préventive.

🦴
Scénario 1: Lombalgie Manutentionnaire

Prédiction et prévention d'une lésion lombaire L4-L5 chez un préparateur de commandes

Jour J-7
Agent A1 détecte 3 postures à risque (flexion dos > 65°) en Zone B3. REBA score: 9/15 (zone jaune ISO/TR 12295)
Jour J-5
Agent A2 alerte fatigue élevée du travailleur W_1542 (score 7.5/10). HRV réduite de 18% vs baseline
Jour J-3
Agent A3 identifie dans Neo4j: 2 incidents lombaires passés (2023, 2024) pour ce travailleur + formation Gestes & Postures expirée
Jour J-1
Agent A4 ML prédit: Probabilité lombalgie 7j = 72% (XGBoost), Gravité estimée = 6.8/10 (LightGBM)
✅ Intervention Préventive
  • 🚨 Alerte P1 superviseur (SMS + Dashboard)
  • 👤 Notification travailleur: repos obligatoire 24h
  • 📚 Formation ergonomie planifiée J+2
  • 📋 Affectation tâches légères 48h
  • ✓ Résultat: Incident évité, Near-Miss enregistré Neo4j
🚜
Scénario 2: Collision Chariot Élévateur

Détection précoce d'un risque de collision dans une zone à trafic dense

Jour J-14
Équipement CHARIOT_B3_04: maintenance préventive retardée de 3 mois (dernier entretien: 2025-04-15)
Jour J-10
Zone_Manut_A: augmentation trafic piéton +35% (pic production). Score risque zone passe de 5.2 à 6.8
Jour J-7
Agent A1 détecte 5 near-miss piéton-chariot en 3 jours. Pattern: distances de sécurité non respectées
Jour J-2
Agent A4 ML prédit: Probabilité collision = 68%, Gravité potentielle = 7.5/10 (blessure grave probable)
✅ Actions Correctives Déclenchées
  • 🔧 Maintenance urgente CHARIOT_B3_04 (48h max)
  • 🚦 Installation marquage sol temporaire Zone_Manut_A
  • 📢 Sensibilisation équipe circulation sécuritaire
  • 📹 Surveillance caméra renforcée (Agent A1 24/7)
  • ✓ Résultat: 0 collision pendant pic production (14 jours)
💪
Scénario 3: TMS Répétitif - Assembleur

Prévention d'un trouble musculosquelettique par détection de mouvements répétitifs

Jour J-21
Agent A1 analyse vidéo poste assemblage: 428 mouvements répétitifs/heure (OCRA index: 12.3, zone rouge ISO 11228-3)
Jour J-14
Agent A2 détecte via bracelet: inflammation poignet droit (température +1.2°C vs baseline, mobilité réduite)
Jour J-7
Neo4j similarité: 8 cas TMS similaires derniers 18 mois, même poste, gravité moyenne 6.2/10, arrêt moyen 32 jours
Jour J-1
Agent A4 ML prédit: Probabilité TMS poignet = 79%, Délai avant symptômes aigus = 5-8 jours
✅ Plan d'Amélioration Ergonomique
  • 🔧 Refonte poste: ajout support poignet, rotation tâches 2h
  • 🏥 Consultation ergothérapeute + protocole étirements
  • 📊 Monitoring IoT continu inflammation (alertes automatiques)
  • 📚 Formation prévention TMS (10 assembleurs)
  • ✓ Résultat: OCRA index ↓ à 6.8 (zone verte), 0 TMS sur 6 mois
3/3
Incidents Évités
100%
Taux Succès
~105j
Arrêts Travail Évités
52K$
Coûts Évités

🚀 Architecture de Déploiement

Infrastructure cloud-native Kubernetes pour scalabilité, haute disponibilité et déploiement continu des modèles ML.

📥 Couche Ingestion
Apache Kafka Schema Registry Kafka Connect MQTT Broker
🤖 Couche Agents ML
Agent A4 ML (FastAPI) XGBoost Inference LightGBM Inference ONNX Runtime Redis Cache
💾 Couche Données
Neo4j Aura Enterprise PostgreSQL (Metrics) S3 (Model Registry) MLflow Tracking
📊 Couche Monitoring
Prometheus Grafana Dashboards Model Drift Detection Alert Manager
☁️ Infrastructure
Kubernetes (GKE) Docker Containers Terraform IaC CI/CD (GitHub Actions)

🤖 Agent A4 ML - Architecture Visuelle

📥
Événement Enrichi
JSON + Contexte Neo4j
⚙️
Feature Extraction
18 features
🌳
XGBoost
Prob. incident
💡
LightGBM
Gravité
🎯
Scoring
Risk = P × G × U
🚨
Alerte
Si P > 70%
80%
F1-Score
50ms
Latence
99.9%
Uptime
Python - Agent A4 ML Service
from fastapi import FastAPI, BackgroundTasks import xgboost as xgb import lightgbm as lgb app = FastAPI() # Chargement modèles au démarrage (singleton) model_incident = xgb.Booster() model_incident.load_model('models/xgboost_incident_v2.3.json') model_gravity = lgb.Booster(model_file='models/lightgbm_gravity_v2.1.txt') @app.post("/predict") async def predict_incident(event: EventEnrichi, bg_tasks: BackgroundTasks): # Feature extraction features = extract_features(event) X = xgb.DMatrix(features) # Prédictions parallèles proba_incident = model_incident.predict(X)[0] gravite_estimee = model_gravity.predict(features)[0] # Score de risque composite risk_score = proba_incident * gravite_estimee * event.urgence_factor if proba_incident > 0.70: # Enregistrement asynchrone Neo4j bg_tasks.add_task(save_prediction_neo4j, event, risk_score) # Alerte Agent A5 await notify_agent_a5(risk_score, gravite_estimee) return { "proba_incident_7j": float(proba_incident), "gravite_estimee": float(gravite_estimee), "risk_score": float(risk_score), "niveau_alerte": classify_alert_level(risk_score) }

📈 Monitoring & Amélioration Continue

Surveillance en temps réel des performances modèles avec détection automatique du model drift et ré-entraînement périodique sur nouvelles données.

0.02%
Model Drift/Mois
30j
Cycle Ré-entraînement
+2.3%
Amélioration F1 (6 mois)
24/7
Monitoring Actif

Cycle d'Amélioration Continue

🔍
Collecte Feedback
Chaque prédiction génère un feedback: incident réel confirmé (TP/FP) ou absence d'incident après 7 jours (TN/FN). Stockage Neo4j avec timestamp et contexte complet.
📊
Analyse Performance
Dashboard Grafana calcule métriques glissantes 7j, 30j, 90j. Alertes automatiques si F1-Score < 78% ou drift PSI > 0.15.
🔄
Ré-entraînement
Pipeline automatisé MLflow: extraction nouvelles données (30 derniers jours), feature engineering, re-training, validation champion/challenger, A/B test.
🚀
Déploiement Canary
Nouveau modèle déployé progressivement: 5% trafic (24h) → 25% (48h) → 100% (si métriques OK). Rollback automatique si dégradation performance.

Déployez l'IA Prédictive dans votre Organisation

Rejoignez les entreprises qui utilisent SafetyGraph pour réduire drastiquement leurs incidents de travail grâce à la prédiction ML et aux graphes de connaissances.

🚀 Demander une Démo Technique 📄 Consulter Documentation API

✉️ Contact: www.genaisafety.online/contact-8