Détection d'anomalies + LLM : la rigueur statistique rencontre les informations de l'IA

DEV - 27/01
TL;DR : le score Z avec saisonnalité détecte les anomalies de ventes avec une précision de 90 %. Ajoutez Claude pour les expliquer....

TL;DR : le score Z avec saisonnalité détecte les anomalies de ventes avec une précision de 90 %. Ajoutez Claude pour les expliquer. Même résultat commercial, bien plus exploitable.

Le problème : des chiffres sans contexte

Vous détectez une anomalie. Les ventes dans la région X ont chuté de 70 %. Et maintenant ?

  • Est-ce un problème d'approvisionnement ?
  • Est-ce saisonnier ?
  • Les dirigeants devraient-ils s’en soucier ?
  • Quelle est l’action ?

Sans contexte, les anomalies ne sont que du bruit.

Solution : Détection statistique + Explication LLM

import numpy as np import pandas as pd from datetime import datetime, timedelta import anthropic # Générer des données réalistes sur les ventes de smartphones sur 2 ans np.random.seed(42) mois = pd.date_range(start='2023-01-01', end='2024-12-31', freq='MS') products = ['iPhone Pro', 'iPhone Standard', 'Samsung Galaxy', 'Google Pixel'] régions = ['Amérique du Nord', 'Europe', 'Asie-Pacifique', 'Amérique Latine'] # Facteurs de saisonnalité saisonniers = {1 : 0,8, 2 : 0,75, 3 : 0,85, 4 : 0,95, 5 : 1,0, 6 : 1,05, 7 : 1,1, 8 : 1,15, 9 : 1.2, 10 : 1.3, 11 : 1.5, 12 : 1.8} # Lignes de base du produit = {'iPhone Pro' : 5 000, 'iPhone Standard' : 8 000, 'Samsung Galaxy' : 6 000, 'Google Pixel' : 3 000} # Multiplicateurs régionaux régionaux = {'Amérique du Nord' : 1,2, 'Europe' : 1,0, 'Asie-Pacifique' : 1,5, 'Amérique Latine' : 0,7} lignes = [] pour le mois en mois : pour le produit dans les produits : pour la région dans les régions : attendu = lignes de base[produit] * saisonnier[mois.mois] * régional[région] volume = int(attendu * np.random.normal(1.0, 0.1)) # Injecter les anomalies de manière aléatoire is_anomaly = np.random.random() < 0,15 if is_anomaly : anomaly_type = np.random.choice(['supply_shortage', 'demand_spike']) volume = int(volume * (0,4 if anomaly_type == 'supply_shortage' else 2.0)) rows.append({'month' : mois, 'product' : produit, 'region' : région, 'volume' : volume, 'is_anomaly' : is_anomaly}) df = ...
[Courte citation de 8% de l'article original]
Loading...