Je travaille sur les statistiques des builds de logiciels. J'ai des données pour chaque build sur réussite / échec et le temps écoulé et nous générons ~ 200 de ces / semaine.
Le taux de réussite est facile à agréger, je peux dire que 45% ont réussi une semaine donnée. Mais je voudrais également agréger le temps écoulé et je veux m'assurer de ne pas déformer trop mal les données. Je pensais que je ferais mieux de demander aux pros :-)
Disons que j'ai 10 durées. Ils représentent à la fois les cas de réussite et d'échec. Certaines versions échouent immédiatement, ce qui rend la durée inhabituellement courte. Certains se bloquent pendant les tests et finissent par s'arrêter, provoquant de très longues durées. Nous fabriquons différents produits, donc même les versions réussies varient entre 90 secondes et 4 heures.
Je pourrais obtenir un ensemble comme celui-ci:
[50, 7812, 3014, 13400, 21011, 155, 60, 8993, 8378, 9100]
Ma première approche a été d'obtenir le temps médian en triant l'ensemble et en choisissant la valeur moyenne, dans ce cas 7812 (je ne me suis pas soucié de la moyenne arithmétique pour les ensembles pairs).
Malheureusement, cela semble générer beaucoup de variations, car je ne sélectionne qu'une seule valeur donnée. Donc, si je devais faire évoluer cette valeur, elle rebondirait entre 5000 et 10000 secondes selon la construction à la médiane.
Donc, pour lisser cela, j'ai essayé une autre approche - supprimer les valeurs aberrantes puis calculer une moyenne sur les valeurs restantes. J'ai décidé de le diviser en tertiles et de travailler uniquement sur celui du milieu:
[50, 60, 155, 3014, 7812, 8378, 8993, 9100, 13400, 21011] ->
[50, 60, 155], [3014, 7812, 8378, 8993], [9100, 13400, 21011] ->
[3014, 7812, 8378, 8993]
La raison pour laquelle cela me semble meilleur est double:
- Nous ne voulons aucune action sur les versions plus rapides, elles sont déjà bien
- Les versions les plus longues sont probablement induites par le timeout et seront toujours là. Nous avons d'autres mécanismes pour détecter ces
Il me semble donc que ce sont les données que je recherche, mais je crains d'avoir atteint la régularité en supprimant, enfin, la vérité.
Est-ce controversé? La méthode est-elle sensée?
Merci!
Réponses:
Votre approche a du sens pour moi, en tenant compte de votre objectif. C'est simple, c'est simple, cela fait le travail, et vous ne voudrez probablement pas écrire un article scientifique à ce sujet.
Une chose que l'on devrait toujours faire pour traiter les valeurs aberrantes est de les comprendre , et vous faites déjà un excellent travail à ce sujet. Les moyens d'améliorer votre approche seraient donc les suivants: pouvez-vous utiliser des informations sur les builds suspendus? Vous mentionnez que vous avez «d'autres mécanismes pour les détecter» - pouvez-vous les détecter et ensuite supprimer uniquement ceux de l'échantillon?
Sinon, si vous avez plus de données, vous pourriez penser à supprimer non pas les tertiles, mais les quintiles ... mais à un moment donné, cela ne fera probablement pas beaucoup de différence.
la source
Ce que vous faites est connu comme une moyenne tronquée .
Comme vous l'avez fait, il est courant de couper la même proportion de chaque côté (la proportion de coupe).
Vous pouvez couper n'importe quoi entre 0% (une moyenne ordinaire) jusqu'à (presque) 50% (ce qui donne la médiane). Votre exemple a 30% coupé à chaque extrémité.
Voir cette réponse et l'article Wikipedia pertinent .
[Edit: Voir l' excellente discussion de Nick Cox sur ce sujet.]
C'est un estimateur d'emplacement assez raisonnable et quelque peu robuste. Il est généralement considéré comme plus approprié pour les distributions presque symétriques que celles très asymétriques, mais si cela convient à votre objectif *, il n'y a aucune raison de ne pas l'utiliser. La meilleure quantité à tailler dépend du type de distribution que vous avez et des propriétés que vous recherchez.
* Ce n'est pas tout à fait clair ce que vous voulez estimer ici.
Il existe un grand nombre d'autres approches robustes pour résumer le «centre» des distributions, dont certaines pourraient également vous être utiles. (par exemple, les estimateurs M pourraient vous être utiles, peut-être)
[Si vous avez besoin d'une mesure de variabilité correspondante pour aller avec votre moyenne ajustée, un écart-type Winsored pourrait vous être utile (essentiellement, lors du calcul du sd, remplacez les valeurs que vous couperiez lors de l'ajustement avec les valeurs les plus extrêmes que vous n'a pas coupé).]
la source
Encore une autre méthode consiste à calculer la médiane de toutes les moyennes par paire ou à effectuer un bootstrap.
Mise à jour:
La médiane de toutes les moyennes par paire est appelée l' estimateur de Hodges – Lehmann . Cet estimateur a généralement une efficacité élevée. Cette entrée dans l'encyclopédie de Scott L. Hershberger dit:
L'amorçage peut être moins pertinent et plus intensif en calcul, mais vous pouvez prendre un petit échantillon aléatoire des données avec remplacement et calculer la moyenne de ce sous-échantillon, le faire plusieurs fois et calculer la médiane de tous les moyens.
Dans les deux cas, vous n'avez plus à choisir une valeur parmi les valeurs de vos données (lorsque vous calculez la médiane ordinaire), mais à la place, vous choisissez parmi de nombreuses moyennes à partir de sous-ensembles de données.
la source
Semble raisonnable ce que vous faites: juste pour information j'utilise le processus suivant assez souvent dans un but similaire: mais je ne suis jamais vraiment intéressé par les valeurs aberrantes supérieures.
Calculer le résumé à cinq chiffres: Min, Q1, Médian, Q3, Max. Calculez l'intervalle interquartile: Q3-Q1. Définissez vos `` clôtures '' aberrantes à Q1-IQR * X et Q3 + IQR * X: où une valeur raisonnable de `` X '' est de 1,5.
En utilisant Excel et vos chiffres ci-dessus (en utilisant 1,5 pour 'X' **), vous obtenez une valeur aberrante supérieure: 21011
Donc, la clôture inférieure ici n'est pas utile ou réaliste pour votre exemple en fait: ce qui confirme le point soulevé par l'autre poste concernant l'importance de comprendre la signification de vos données spécifiques.
(** Trouvé une citation pour la règle '1.5': je ne dis pas qu'elle fait autorité, mais cela me semble un point de départ raisonnable: http://statistics.about.com/od/Descriptive-Statistics/a/ What-Is-The-Interquartile-Range-Rule.htm )
Vous pouvez également décider (peut-être) d'utiliser simplement les points de données qui relèvent de l'IQR lui-même: cela semble donner des résultats raisonnables (dans la mesure où l'appartenance à votre méthode est très similaire).
en utilisant les mêmes données, cela placerait les points de données suivants dans la «zone d'intérêt»:
Sur un Boxplot: ces points relèveraient tous de la partie boîte (plutôt que de la partie moustaches) du diagramme.
On peut voir que cette liste comprend des éléments qui ne figurent pas dans votre liste d'origine (les versions les plus longues); Je ne peux pas dire si une liste est plus précise en aucune façon. (encore une fois, revient à comprendre votre ensemble de données).
la source