Cet article a été publié dans le cadre du Blogathon sur la science des données.
introduction
Détection d'anomalies de séries temporelles
Todo el proceso de detección de anomalías para una Séries chronologiquesUne série chronologique est un ensemble de données collectées ou mesurées à des moments successifs, généralement à intervalles réguliers. Ce type d’analyse vous permet d’identifier des modèles, Tendances et cycles des données au fil du temps. Son application est large, couvrant des domaines tels que l’économie, Météorologie et santé publique, faciliter la prédiction et la prise de décision sur la base d’informations historiques.... se lleva a cabo en 3 Pas:
- Décomposer la série chronologique en variables sous-jacentes; Tendance, saisonnalité, résidu.
- Créer des seuils supérieur et inférieur avec une valeur de seuil
- Identifier les points de données qui sont en dehors des seuils en tant qu'anomalies.
Cas d'étude
Téléchargeons l'ensemble de données sur le site Web du gouvernement de Singapour qui est facilement accessible. Consommation totale d'électricité des ménages par type de logement. Le site Web de données du gouvernement de Singapour plante assez facilement. Cet ensemble de données montre la consommation totale d'électricité des ménages par type de logement (et GWh).
Géré par l'Autorité du marché de l'énergie
Fréquence annuelle
La source (s) Autorité du marché de l'énergie
Licence de licence de données ouvertes de Singapour
Installer et charger les packages R
Dans cet exercice, nous travaillerons avec 2 Packages clés pour la détection d'anomalies de séries temporelles dans R: anormal Oui heuretk. Celles-ci nécessitent que l'objet soit créé comme un peu de temps, donc nous allons aussi charger les paquets tibble. Commençons par installer et charger ces bibliothèques.
paquet <- c('tridyverse',« heure des petits pains »,'anormaliser','timetk') install.paquets(paquet) une bibliothèque(bien rangé) une bibliothèque(l'heure du chat) une bibliothèque(anomalie) une bibliothèque(heuretk)
Charger les données
A l'étape précédente, nous avons téléchargé le fichier des consommations totales d'électricité par type de logement (et GWh) du site Web du gouvernement de Singapour. Chargeons le fichier CSV dans une trame de données R.
df <- lire.csv("C:Détection d'anomalies dans Rtotal-household-electricity-consumption.csv") diriger(df,5)
Traitement de l'information
Avant de pouvoir appliquer un algorithme d'anomalie sur les données, nous devons le changer en un format de date.
La columna ‘mes’ est à l'origine au format factoriel avec plusieurs niveaux. Convertissons-le en un type de date et sélectionnons uniquement les colonnes pertinentes dans le bloc de données.
str(df)
# Changer le facteur au format de date df$mois <- pâte(df$mois, "01", sep="-") # Sélectionnez uniquement les colonnes pertinentes dans un nouveau dataframe df$mois <- comme.Date(df$mois,format="%A-%m-%d")
df <- df %>% sélectionner(mois,globalement)
# Convertir df en tibble df <- as_tibble(df) classer(df)
Usando el paquete ‘anomalie’
El paquete R ‘anomalie’ permet à un workflow de détecter les anomalies de données. Les fonctions principales sont time_decompose (), anomalie (), Oui time_recompose ().
df_anormalisé <- df %>% time_decompose(globalement, fusionner = VRAI) %>% anomalie(reste) %>% time_recompose() df_anormalisé %>% aperçu()
Afficher les anomalies
On peut alors visualiser les anomalies à l'aide du plot_anomalies () une fonction.
df_anormalisé %>% plot_anomalies(ncol = 3, alpha_dots = 0.75)
Tendance et ajustement de saisonnalité
Avec anomalie, il est facile de faire des ajustements car tout est fait avec une information de date ou d'horodatage, afin que vous puissiez sélectionner intuitivement des incréments pour des périodes de temps qui ont du sens (par exemple, "5 minutes" ou "1 mois").
Premier, notez qu'une fréquence et une tendance ont été automatiquement sélectionnées pour nous. C'est par conception. La fréquence des arguments = « auto » et tendance = « auto » sont les valeurs par défaut. On peut visualiser cette décomposition en utilisant plot_anomaly_decomposition ().
p1 <- df_anormalisé %>% plot_anomaly_decomposition() + titre("Fréq/Tendance = 'auto'") p1
Quand il est utilisé « auto », get_time_scale_template () utilisé pour déterminer la fréquence logique et les intervalles de tendance en fonction de l'échelle des données. Vous pouvez découvrir la logique:
get_time_scale_template()
Cela implique que si l'échelle est 1 jour (ce qui signifie que la différence entre chaque point de données est 1 jour), alors la fréquence sera 7 jours (O 1 la semaine) et la tendance sera autour 90 jours (O 3 mois). Cette logique peut être facilement ajustée de deux manières: paramétrage local et paramétrage global.
Réglage des paramètres locaux
El ajuste de los paramètresLes "paramètres" sont des variables ou des critères qui sont utilisés pour définir, mesurer ou évaluer un phénomène ou un système. Dans divers domaines tels que les statistiques, Informatique et recherche scientifique, Les paramètres sont essentiels à l’établissement de normes et de standards qui guident l’analyse et l’interprétation des données. Leur sélection et leur manipulation correctes sont cruciales pour obtenir des résultats précis et pertinents dans toute étude ou projet.... locales se realiza ajustando los parámetros en función. Ensuite, on ajuste la tendance = « 2 semaines », ce qui en fait une tendance assez suréquipée.
p2 <- df %>% time_decompose(globalement, fréquence = "auto", tendance = "2 semaines") %>% anomalie(reste) %>% plot_anomaly_decomposition() + titre("Tendance = 2 Semaines (Local)") # Afficher les tracés p1 p2
Paramétrage global
Nous pouvons également ajuster globalement en utilisant set_time_scale_template () pour mettre à jour le modèle par défaut vers celui que nous préférons. Nous allons changer la tendance de « 3 mois » une « 2 semaines » pour l'échelle de temps = « jour ». Utilisation time_scale_template () pour récupérer le modèle de chronologie avec lequel l'anomalie commence, muet () le champ de tendance à l'emplacement souhaité et utilisez set_time_scale_template () pour mettre à jour le modèle dans les options globales. Nous pouvons récupérer le modèle mis à jour en utilisant get_time_scale_template () pour vérifier que le changement a été exécuté correctement.
time_scale_template() %>% subir une mutation(tendance = sinon(échelle_de_temps == "journée", "2 semaines", tendance)) %>% set_time_scale_template() get_time_scale_template()
Finalement, nous pouvons réexécuter le time_decompose () avec les valeurs par défaut, et nous pouvons voir que la tendance est "2 semaines".
p3 <- df %>% time_decompose(globalement) %>% anomalie(reste) %>% plot_anomaly_decomposition() + titre("Tendance = 2 Semaines (Global)") p3
Réinitialisons les valeurs par défaut du modèle de chronologie aux valeurs par défaut d'origine.
time_scale_template() %>% set_time_scale_template() # Vérifier le changement get_time_scale_template()
Extraire les points de données anormaux
À présent, nous pouvons extraire les points de données réels qui sont des anomalies. Pour ça, vous pouvez exécuter le code suivant.
df %>% time_decompose(globalement) %>% anomalie(reste) %>% time_recompose() %>% filtre(anomalie == 'Oui')
Ajustement des Anoms Alpha et Max
Les alfa Oui max_anoms sont les deux paramètres qui contrôlent la anomalie () une fonction. H
Alfa
Nous pouvons ajuster l'alpha, qui est configuré dans 0.05 par défaut. Par défaut, les bandes ne couvrent que l'extérieur de la gamme.
p4 <- df %>% time_decompose(globalement) %>% anomalie(reste, alpha = 0.05, max_anoms = 0.2) %>% time_recompose() %>% plot_anomalies(time_recomposed = VRAI) + titre("alpha = 0.05") #> fréquence = 7 jours #> tendance = 91 jours p4
Si on diminue l'alpha, augmenter les bandes, ce qui rend plus difficile d'être une valeur aberrante. Ici, vous pouvez voir que les groupes sont devenus deux fois plus gros.
p5 <- df %>% time_decompose(globalement) %>% anomalie(reste, alpha = 0.025, max_anoms = 0.2) %>% time_recompose() %>% plot_anomalies(time_recomposed = VRAI) + titre("alpha = 0.05") #> fréquence = 7 jours #> tendance = 91 jours p5
Max d'Anoms
Les max_anoms Le paramètre est utilisé pour contrôler le pourcentage maximum de données pouvant être une anomalie. Posons alpha = 0.3 de sorte qu'à peu près tout est une valeur aberrante. Essayons maintenant une comparaison entre max_anoms = 0.2 (20% anomalies autorisées) y max_anoms = 0.05 (5% anomalies autorisées).
p6 <- df %>% time_decompose(globalement) %>% anomalie(reste, alpha = 0.3, max_anoms = 0.2) %>% time_recompose() %>% plot_anomalies(time_recomposed = VRAI) + titre("20% Anomalies") #> fréquence = 7 jours #> tendance = 91 jours p7 <- df %>% time_decompose(globalement) %>% anomalie(reste, alpha = 0.3, max_anoms = 0.05) %>% time_recompose() %>% plot_anomalies(time_recomposed = VRAI) + titre("5% Anomalies") #> fréquence = 7 jours #> tendance = 91 jours p6 p7
Usando el paquete ‘heuretk’
Il s'agit d'une boîte à outils pour travailler avec des séries chronologiques dans R, tracer, discuter et présenter des données de séries temporelles d'ingénieur pour effectuer des prédictions et des prédictions d'apprentissage automatique.
Visualisation interactive des anomalies
Ici, heuretk’s La fonction plot_anomaly_diagnostics () permet de modifier certains paramètres à la volée.
df %>% heuretk::plot_anomaly_diagnostics(mois,globalement, .facet_ncol = 2)
Détection interactive d'anomalies
Pour trouver les points de données exacts qui sont des anomalies, nous utilisons tk_anomalie_diagnostic () une fonction.
df %>% heuretk::tk_anomalie_diagnostic(mois, globalement) %>% filtre(anomalie=='Oui')
conclusion
Dans cet article, nous avons vu certains des packages populaires dans R qui peuvent être utilisés pour identifier et visualiser des anomalies dans une série temporelle. Pour clarifier les techniques de détection d'anomalies dans R, nous avons réalisé une étude de cas sur un ensemble de données accessibles au public. Il existe d'autres méthodes pour détecter les valeurs aberrantes et peuvent également être explorées.