Les posteurs les plus actifs de la semaine
Aucun utilisateur |
Sujets les plus vus
Outsider
2 participants
Page 1 sur 1
Outsider
Bonjour
Je possède une série de référence et une série de données à tester. Les éléments de mes séries sont supposées être les résultats d'une variable aléatoire Xref et X. Ma série de référence est caractérisée par sa moyenne et son écart-type.
Je souhaiterais identifier dans ma série à tester les éléments anormalement élevés c'est-à-dire les éléments dont la valeur s'écarte un peu trop de la série de référence en terme de probabilité.
Voici comment je procède. Je considère que les valeurs anormalement élevées de ma série à tester sont celles qui sont situées au-delà d'un seuil q tel que P(Xref > q) <= α où par exemple α = 0.05 (cette valeur est bien-sûr subjective). Voici mon code :
Toutes les valeurs de ma série à tester situées au-dessus de la ligne rouge sont considérées comme anormales compte-tenu de ma définition d'une valeur anormale. Le résultat trouvé pour la série à tester considère les valeurs 4 et 5 comme anormales ce qui était attendu...
Que pensez-vous de cette méthode et du code ?
Je possède une série de référence et une série de données à tester. Les éléments de mes séries sont supposées être les résultats d'une variable aléatoire Xref et X. Ma série de référence est caractérisée par sa moyenne et son écart-type.
Je souhaiterais identifier dans ma série à tester les éléments anormalement élevés c'est-à-dire les éléments dont la valeur s'écarte un peu trop de la série de référence en terme de probabilité.
Voici comment je procède. Je considère que les valeurs anormalement élevées de ma série à tester sont celles qui sont situées au-delà d'un seuil q tel que P(Xref > q) <= α où par exemple α = 0.05 (cette valeur est bien-sûr subjective). Voici mon code :
- Code:
x_ref = c(1, 1, 1, 2, 2, 1, 2, 3, 2, 2, 2, 1, 2, 2 , 3, 3, 2, 1, 2, 3, 1, 2, 3, 2, 1) # Données de référence
x = c(1, 1, 2, 2, 3, 4, 5, 2, 2, 2, 2, 1, 2, 2, 3, 2, 1, 2, 2, 1, 2, 3, 2, 1) # Données à tester
alpha = 0.05
q <- quantile(x_ref,1-alpha, names=FALSE)
#Valeur q telle que F(k) >= 1-alpha <---> P(X <= q) >= 1-alpha <----> P(Xref > q) <= alpha
print(paste0("Valeur seuil = ", Valeur_seuil))
par(mfrow = c(1,2))
plot(x, xlab= "x", ylab= "Occurrences", ylim=c(0, max(x)))
abline(col = 'red', h=Valeur_seuil)
abline(col = 'blue', h=µ)
Toutes les valeurs de ma série à tester situées au-dessus de la ligne rouge sont considérées comme anormales compte-tenu de ma définition d'une valeur anormale. Le résultat trouvé pour la série à tester considère les valeurs 4 et 5 comme anormales ce qui était attendu...
Que pensez-vous de cette méthode et du code ?
Particule- Nombre de messages : 12
Date d'inscription : 11/07/2018
Re: Outsider
Bonjour,
Plusieurs remarques :
Le code est faux. Le lancer renvoi des messages d'erreur. Peut-être faut-il remplacer "q" by "Valeur_seuil" et "µ" by "mean(x)" ?
Sinon, l'idée est a priori ok, mais une valeur qui a moins de 5 chances sur 100 de sortir n'est pas forcément "anormale". Il faudrait que vous précisiez l'objectif de votre approche.
Enfin, une autre approche est, plutôt que de partir sur la distribution empirique de x_ref et x, de partir plutôt sur la distribution (théorique) attendue. Par exemple, les valeurs de x_ref et de x sont des entiers, et de valeurs faibles. Ca ressemble à des comptages, et la loi sous-jacente pourrait être une loi de Poisson. On pourrait donc (facilement) calculer le quantile théorique à 5% de la loi de Poisson correspondante et fonder la décision sur ce seuil, etc.
HTH, Eric.
Plusieurs remarques :
Le code est faux. Le lancer renvoi des messages d'erreur. Peut-être faut-il remplacer "q" by "Valeur_seuil" et "µ" by "mean(x)" ?
Sinon, l'idée est a priori ok, mais une valeur qui a moins de 5 chances sur 100 de sortir n'est pas forcément "anormale". Il faudrait que vous précisiez l'objectif de votre approche.
Enfin, une autre approche est, plutôt que de partir sur la distribution empirique de x_ref et x, de partir plutôt sur la distribution (théorique) attendue. Par exemple, les valeurs de x_ref et de x sont des entiers, et de valeurs faibles. Ca ressemble à des comptages, et la loi sous-jacente pourrait être une loi de Poisson. On pourrait donc (facilement) calculer le quantile théorique à 5% de la loi de Poisson correspondante et fonder la décision sur ce seuil, etc.
HTH, Eric.
Eric Wajnberg- Nombre de messages : 1238
Date d'inscription : 14/09/2012
Re: Outsider
Bonjour Eric,
Merci pour votre réponse. Effectivement le code renvoie une erreur car il manquait la définition de µ. Le code corrigé est plus bas.
L'objectif est de détecter des valeurs anormalement élevées dans une série de données (quelque soit la nature de ces données) compte-tenu d'une série de référence dans laquelle les données sont par définition correctes. Si une valeur de la série à tester s'éloigne "trop" des valeurs de référence, une alerte est lancée à l'utilisateur qui devra vérifier par lui-même si la valeur trouvée est effectivement anormalement élevée ou s'il s'agit juste d'une valeur normale dont la probabilité d'occurrence est très faible.
Il s'agit effectivement de comptage de microplastiques dans l'océan mais les distributions sous-jacentes sont en fait inconnues (ce ne sont pas des lois de Poisson ni des lois normales...). Les valeurs réelles sont de l'ordre de 10 000. Quoi qu'il en soit, la détection doit fonctionner quelque soit la loi qui décrit les séries.
La distribution théorique (ou distribution de référence) dont vous parlez est justement celle qui décrit la série de référence mais cette distribution n'est pas décrite par une loi connue.
Autrement que par cette méthode, je ne vois pas comment détecter des valeurs anormalement élevées dans ma série à tester en se basant sur la série de référence dont les valeurs sont par définition normales.
L'idée serait de détecter dans la série à tester les valeurs qui s'éloignent trop de la valeur moyenne des valeurs de la série de référence. Un seuil pourrait être défini pour préciser "trop".
Merci pour votre réponse. Effectivement le code renvoie une erreur car il manquait la définition de µ. Le code corrigé est plus bas.
L'objectif est de détecter des valeurs anormalement élevées dans une série de données (quelque soit la nature de ces données) compte-tenu d'une série de référence dans laquelle les données sont par définition correctes. Si une valeur de la série à tester s'éloigne "trop" des valeurs de référence, une alerte est lancée à l'utilisateur qui devra vérifier par lui-même si la valeur trouvée est effectivement anormalement élevée ou s'il s'agit juste d'une valeur normale dont la probabilité d'occurrence est très faible.
Il s'agit effectivement de comptage de microplastiques dans l'océan mais les distributions sous-jacentes sont en fait inconnues (ce ne sont pas des lois de Poisson ni des lois normales...). Les valeurs réelles sont de l'ordre de 10 000. Quoi qu'il en soit, la détection doit fonctionner quelque soit la loi qui décrit les séries.
La distribution théorique (ou distribution de référence) dont vous parlez est justement celle qui décrit la série de référence mais cette distribution n'est pas décrite par une loi connue.
Autrement que par cette méthode, je ne vois pas comment détecter des valeurs anormalement élevées dans ma série à tester en se basant sur la série de référence dont les valeurs sont par définition normales.
L'idée serait de détecter dans la série à tester les valeurs qui s'éloignent trop de la valeur moyenne des valeurs de la série de référence. Un seuil pourrait être défini pour préciser "trop".
- Code:
x_ref = c(1, 1, 1, 2, 2, 1, 2, 3, 2, 2, 2, 1, 2, 2 , 3, 3, 2, 1, 2, 3, 1, 2, 3, 2, 1) # Données de référence
x = c(1, 1, 2, 2, 3, 4, 5, 2, 2, 2, 2, 1, 2, 2, 3, 2, 1, 2, 2, 1, 2, 3, 2, 1) # Données à tester
alpha = 0.05
q <- quantile(x_ref,1-alpha, names=FALSE)
Valeur_seuil <- q
print(paste0("Valeur seuil = ", Valeur_seuil))
par(mfrow = c(1,2))
plot(x, xlab= "x", ylab= "y", ylim=c(0, max(x)))
abline(col = 'red', h=Valeur_seuil)
hist(x,col="#F5D0A9",xlab="x",ylab="y",tck=0.01)
box()
Particule- Nombre de messages : 12
Date d'inscription : 11/07/2018
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|