# Finding outliers in numerical data

[This article was first published on

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

**ExploringDataBlog**, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

One of the topics emphasized in Exploring Data in Engineering, the Sciences and Medicine is the damage outliers can do to traditional data characterizations. Consequently, one of the procedures to be included in the

**ExploringData**package is**FindOutliers**, described in this post. Given a vector of numeric values, this procedure supports four different methods for identifying possible outliers.Before describing these methods, it is important to emphasize two points. First, the

*detection*of outliers in a sequence of numbers can be approached as a mathematical problem, but the*interpretation*of these data observations cannot. That is, mathematical outlier detection procedures implement various rules for identifying points that appear to be anomalous with respect to the nominal behavior of the data, but they cannot explain*why*these points appear to be anomalous. The second point is closely related to the first: one possible source of outliers in a data sequence is gross measurement errors or other data quality problems, but other sources of outliers are also possible so it is important to keep an open mind. The terms “outlier” and “bad data” are*not*synonymous. Chapter 7 of*Exploring Data*briefly describes two examples of outliers whose detection and interpretation led to a Nobel Prize and to a major new industrial product (Teflon, a registered trademark of the DuPont Company).In the case of a single sequence of numbers, the typical approach to outlier detection is to first determine upper and lower limits on the nominal range of data variation, and then declare any point falling outside this range to be an outlier. The

**FindOutliers**procedure implements the following methods of computing the upper and lower limits of the nominal data range:1. The ESD identifier, more commonly known as the “three-sigma edit rule,” well known but unreliable;

2. The Hampel identifier, a more reliable procedure based on the median and the MADM scale estimate;

3. The standard boxplot rule, based on the upper and lower quartiles of the data distribution;

4. An adjusted boxplot rule, based on the upper and lower quartiles, along with a robust skewness estimator called the

*medcouple*.The rest of this post briefly describes these four outlier detection rules and illustrates their application to two real data examples.

Without question, the most popular outlier detection rule is the ESD identifier (an abbreviation for “extreme Studentized deviation”), which declares any point more than

*t*standard deviations from the mean to be an outlier, where the threshold value*t*is most commonly taken to be 3. In other words, the nominal range used by this outlier detection procedure is the closed interval: [mean – t * SD, mean + t * SD]

where SD is the estimated standard deviation of the data sequence. Motivation for the threshold choice t = 3 comes from the fact that for normally-distributed data, the probability of observing a value more than three standard deviations from the mean is only about 0.3%. The problem with this outlier detection procedure is that both the mean and the standard deviation are themselves extremely sensitive to the presence of outliers in the data. As a consequence, this procedure is likely to miss outliers that are present in the data. In fact, it can be shown that for a contamination level greater than 10%, this rule fails completely, detecting no outliers at all, no matter how extreme they are (for details, see the discussion in Sec. 3.2.1 of Mining Imperfect Data).

The default option for the

**FindOutliers**procedure is the Hampel identifier, which replaces the mean with the median and the standard deviation with the MAD (or MADM) scale estimate. The nominal data range for this outlier detection procedure is: [median – t * MAD, median + t * MAD]

As I have discussed in previous posts, the median and the MAD scale are much more resistant to the influence of outliers than the mean and standard deviation. As a consequence, the Hampel identifier is generally more effective than the ESD identifier, although the Hampel identifier can be too aggressive, declaring too many points as outliers. For detailed comparisons of the ESD and Hampel identifiers, refer to Sec. 7.5 of

*Exploring Data*or Sec. 3.3 of*Mining Imperfect Data*.The third method option for the

**FindOutliers**procedure is the standard boxplot rule, based on the following nominal data range: [Q1 – c * IQD, Q3 + c * IQD]

where Q1 and Q3 represent the lower and upper quartiles, respectively, of the data distribution, and IQD = Q3 – Q1 is the interquartile distance, a measure of the spread of the data similar to the standard deviation. The threshold parameter

*c*is analogous to*t*in the first two outlier detection rules, and the value most commonly used in this outlier detection rule is c = 1.5. This outlier detection rule is much less sensitive to the presence of outliers than the ESD identifier, but more sensitive than the Hampel identifier, and, like the Hampel identifier, it can be somewhat too aggressive, declaring nominal data observations to be outliers. An advantage of the boxplot rule over these two alternatives is that, because it does not depend on an estimate of the “center” of the data (e.g., the mean in the ESD identifier or the median in the Hampel identifier), it is better suited to distributions that are moderately asymmetric.The fourth method option is an extension of the standard boxplot rule, developed for data distributions that may be strongly asymmetric. Basically, this procedure modifies the threshold parameter

*c*by an amount that depends on the asymmetry of the distribution, modifying the upper threshold and the lower threshold differently. Because the standard moment-based skewness estimator is*extremely*outlier-sensitive (for an illustration of this point, see the discussion in Sec. 7.1.1 of*Exploring Data*), it is necessary to use an outlier-resistant alternative to assess distributional asymmetry. The asymmetry measure used here is the*medcouple*, a robust skewness measure available in the**robustbase**package in*R*and that I have discussed in a previous post (Boxplots and Beyond – Part II: Asymmetry ). An important point about the medcouple is that it can be either positive or negative, depending on the direction of the distributional asymmetry; positive values arise more frequently in practice, but negative values can occur and the sign of the medcouple influences the definition of the asymmetric boxplot rule. Specifically, for positive values of the medcouple MC, the adjusted boxplot rule’s nominal data range is: [Q1 – c * exp(a * MC) * IQD, Q3 + c * exp(b * MC) * IQD ]

while for negative medcouple values, the nominal data range is:

[Q1 – c * exp(-b * MC) * IQD, Q3 + c * exp(-a * MC) * IQD ]

An important observation here is that for symmetric data distributions, MC should be zero, reducing the adjusted boxplot rule to the standard boxplot rule described above. As in the standard boxplot rule, the threshold parameter is typically taken as c = 1.5, while the other two parameters are typically taken as a = -4 and b = 3. In particular, these are the default values for the procedure

**adjboxStats**in the**robustbase**package.To illustrate how these outlier detection methods compare, the above pair of plots shows the results of applying all four of them to the makeup flow rate dataset discussed in

*Exploring Data*(Sec. 7.1.2) in connection with the failure of the ESD identifier. The points in these plots represent approximately 2,500 regularly sampled flow rate measurements from an industrial manufacturing process. These measurements were taken over a long enough period of time to contain both periods of regular process operation – during which the measurements fluctuate around a value of approximately 400 – and periods when the process was shut down, was being shut down, or was being restarted, during which the measurements exhibit values near zero. If we wish to characterize normal process operation, these shut down episodes represent outliers, and they correspond to about 20% of the data. The left-hand plot shows the outlier detection limits for the ESD identifier (lighter, dashed lines) and the Hampel identifier (darker, dotted lines). As discussed in*Exploring Data*, the ESD limits are wide enough that they do not detect any outliers in this data sequence, while the Hampel identifier nicely separates the data into normal operating data and outliers that correspond to the shut down episodes. The right-hand plot shows the analogous results obtained with the standard boxplot method (lighter, dashed lines) and the adjusted boxplot method (darker, dotted lines). Here, the standard boxplot rule gives results very similar to the Hampel identifier, again nicely separating the dataset into normal operating data and shut down episodes. Unfortunately, the adjusted boxplot rule does not perform very well here, placing its lower nominal data limit in about the middle of the shut down data and its upper nominal data limit in about the middle of the normal operating data. The likely cause of this behavior is that the relatively large fraction of lower tail outliers, which introduces a fairly strong negative skewness (the medcouple value for this example is -0.589).The second example considered here is the industrial pressure data sequence shown in the above figure, in the same format as the previous figure. This data sequence was discussed in

*Exploring Data*(pp. 326-327) as a troublesome case because the two smallest values in this data sequence – near the right-hand end of the plots – appear to be downward outliers in a sequence with generally positive skewness (here, the medcouple value is 0.162). As a consequence, neither the ESD identifier nor the Hampel identifier give fully satisfactory performance, in both cases declaring only one of these points as a downward outlier and arguably detecting too many upward outliers. In fact, because the Hampel identifier is more aggressive here, it actually declares more upward outliers, making its performance worse for this example. The right-hand plot in the above figure shows the outlier detection limits for the standard boxplot rule (lighter, dashed lines) and the adjusted boxplot rule (darker, dotted lines). As in the previous example, the limits for the standard boxplot rule are almost the same as those for the Hampel identifier (the darker, dotted lines in the left-hand plot), but here the adjusted boxplot rule gives much better results, identifying both of the visually evident downward outliers and declaring far fewer points as upward outliers.**FindOutliers**procedure in the forthcoming

**ExploringData**

*R*package. It should be clear from these results that, when it comes to outlier detection, “one size does not fit all” – method matters, and the choice of method requires a comparison of the results obtained by each one. I have not included the code for the

**FindOutliers**procedure here, but that will be the subject of my next post.

To

**leave a comment**for the author, please follow the link and comment on their blog:**ExploringDataBlog**.R-bloggers.com offers

**daily e-mail updates**about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.

Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.