Những phát hiện ngoại lệ nào có thể phát hiện các ngoại lệ này?


7

Tôi có một vectơ và muốn phát hiện các ngoại lệ trong đó.

Hình dưới đây cho thấy sự phân bố của vectơ. Điểm đỏ là ngoại lệ. Điểm màu xanh là điểm bình thường. Điểm vàng cũng bình thường.

Tôi cần một phương pháp phát hiện ngoại lệ (một phương pháp không tham số) có thể chỉ phát hiện các điểm đỏ là ngoại lệ. Tôi đã thử nghiệm một số phương pháp như IQR, độ lệch chuẩn nhưng chúng cũng phát hiện các điểm vàng là ngoại lệ.

Tôi biết thật khó để phát hiện ra điểm đỏ nhưng tôi nghĩ nên có một cách (thậm chí kết hợp các phương pháp) để giải quyết vấn đề này.

nhập mô tả hình ảnh ở đây

Điểm là bài đọc của một cảm biến trong một ngày. Nhưng các giá trị của cảm biến thay đổi do cấu hình lại hệ thống (môi trường không tĩnh). Thời gian của các cấu hình lại là không rõ. Điểm màu xanh là cho giai đoạn trước khi cấu hình lại. Điểm vàng là sau khi cấu hình lại gây ra sự sai lệch trong phân phối các bài đọc (nhưng là bình thường). Điểm đỏ là kết quả của việc sửa đổi bất hợp pháp các điểm vàng. Nói cách khác, chúng là những dị thường cần được phát hiện.

Tôi đang tự hỏi liệu ước tính hàm làm mịn Kernel ('pdf', 'người sống sót', 'cdf', v.v.) có thể giúp ích hay không. Bất cứ ai sẽ giúp về chức năng chính của họ (hoặc các phương pháp làm mịn khác) và biện minh để sử dụng trong bối cảnh để giải quyết vấn đề?


3
Điều gì làm cho các ngoại lệ và không phải là màu vàng? Bạn có ví dụ về các ngoại lệ hoặc bạn chỉ nhận được một bộ? Nó trông giống như cái này? Có bao nhiêu chiều?
Jan van der Vegt

Cảm ơn. Điểm là bài đọc của một cảm biến trong một ngày. Nhưng giá trị của cảm biến thay đổi do cấu hình lại hệ thống (môi trường không tĩnh). Điểm màu xanh là cho giai đoạn trước khi cấu hình lại. Điểm vàng là sau khi cấu hình lại gây ra sự sai lệch trong phân phối các bài đọc (nhưng là bình thường). Điểm đỏ là kết quả của điểm vàng sửa đổi bất hợp pháp. Đó là một chiều.
Arkan

1
Làm thế nào thường làm những cấu hình lại xảy ra? Những điểm đỏ này luôn xảy ra? Bạn có thể xem xét một số phương pháp làm mịn chuỗi thời gian.
Jan van der Vegt

Đó là năng động và không có gì là xác định. Không. Điểm đỏ là sự bất thường được tạo ra bởi các sửa đổi bất hợp pháp và không xảy ra luôn. Tôi sẽ yêu cầu bạn đặt tên cho một số phương pháp nổi tiếng (phương pháp làm mịn)? Chức năng chính của họ là gì?
Arkan

Khi bạn tìm kiếm sự thay đổi cấp độ, bạn có thể tìm thấy những thay đổi trong đánh chặn. Đăng dữ liệu của bạn Xem bài viết của Balke Phát hiện sự thay đổi cấp độ trong chuỗi thời gian Nathan S. Balke Tạp chí Thống kê Kinh doanh & Kinh tế Tập. 11, Số 1 (tháng 1 năm 1993), trang 81-92
Tom Reilly

Câu trả lời:


3

Bạn có thể xem dữ liệu của mình dưới dạng chuỗi thời gian trong đó phép đo thông thường tạo ra giá trị rất gần với giá trị trước đó và hiệu chuẩn lại tạo ra giá trị có chênh lệch lớn so với giá trị trước.

Dưới đây là dữ liệu mẫu mô phỏng dựa trên phân phối bình thường với ba phương tiện khác nhau tương tự như ví dụ của bạn. nhập mô tả hình ảnh ở đây

Bằng cách tính chênh lệch với giá trị trước đó (một loại đạo hàm), bạn sẽ có được dữ liệu sau:

nhập mô tả hình ảnh ở đây

Giải thích của tôi về mô tả của bạn là, bạn chấp nhận hiệu chuẩn lại (nghĩa là các điểm trên khoảng cách lớn hơn từ 0, đỏ trong sơ đồ), nhưng chúng phải trao đổi giữa các giá trị dương và âm (nghĩa là tương ứng với việc chuyển từ trạng thái màu xanh sang trạng thái màu vàng và trở lại).

Điều này có nghĩa là bạn có thể thiết lập báo thức khi thấy điểm đỏ thứ hai ở phía tiêu cực hoặc tích cực .


Tôi thực sự đánh giá cao phản ứng của bạn. Vâng, chúng ta có thể nói nó giống như hiệu chuẩn lại và đây là một sự tương tự tốt. Cách tiếp cận của bạn là tốt. Tôi đã thử nó. Kết quả giống hệt như kết quả mà bạn đã vẽ. Điểm đỏ đầu tiên là điểm đầu tiên của điểm vàng. Điểm thứ hai là điểm đầu tiên của các điểm đỏ. Điểm đỏ thứ ba là điểm cuối cùng của điểm đỏ. Do đó, thật khó để khám phá kiến ​​thức từ dữ liệu này. Điều này là do chúng ta không thể thảo luận về các điểm đỏ sau điểm đỏ đầu tiên. Chúng ta có thể cần phải hình dung dữ liệu chính để kết luận nhưng đây là sự can thiệp của con người.
Arkan

@Marmite Bomber Sẽ thật tuyệt nếu bạn chia sẻ đoạn mã để nắm bắt ý tưởng từ quan điểm lập trình.
Mario

@Mario ý tưởng hay - hãy để tôi xem nếu tôi có thể tìm thấy nó sau hơn hai năm;)
Máy bay ném bom Marmite

@Mario xem câu trả lời khác của tôi;)
Máy bay ném bom Marmite

@MarmiteBomber cảm ơn bạn đã phản hồi nhưng người đàn ông tôi quan tâm đến mã Python!
Mario

0

Nếu bạn sử dụng đăng nhập, bạn có thể sử dụng mức trung bình đang chạy nếu cấu hình thay đổi. Tuy nhiên, điều này sẽ có điểm yếu là bạn cần ít nhất một số dữ liệu trước khi bạn có thể phát hiện ra một ngoại lệ như vậy.

Dữ liệu của bạn trông khá "đẹp" (không quá nhiều tiếng ồn). Tôi sẽ khuyên bạn nên lấy trung bình trên 10-20 điểm cuối cùng trong cùng cấu hình. Nếu các giá trị này là một số lượng được tính, bạn có thể nhận lỗi poisson cho các điểm dữ liệu riêng lẻ và tính trung bình lỗi.

Bạn có bao nhiêu dữ liệu lịch sử? Nếu bạn có nhiều, bạn có thể sử dụng nó để tinh chỉnh tốc độ báo động của mình theo cách bạn có được tỷ lệ chấp nhận được của tất cả các ngoại lệ thực trong khi nhận được một số cảnh báo giả mạo tối thiểu. Những gì được chấp nhận phụ thuộc vào vấn đề cụ thể. (Chi phí tích cực sai hoặc không phát hiện ra các ngoại lệ và sự phong phú của chúng).


Cảm ơn. Thật không may, các cấu hình lại là khác nhau và điều này không cho phép chúng tôi điều chỉnh tốc độ báo động. Bạn có thể giải thích thêm một chút về việc tính trung bình các điểm gần đây không?
Arkan

Tôi theo giả định rằng các điểm dữ liệu này theo thứ tự thời gian - đúng không? Sau đó, bạn có thể cho mọi điểm sử dụng thông tin trục y (Dữ liệu trong âm mưu của bạn) của các điểm XX cuối cùng. Hãy nói 10 nhưng điều này rõ ràng phụ thuộc một chút vào dữ liệu của bạn trông như thế nào. Đối với 10 điểm này, sau đó bạn tính trung bình hoặc tốt hơn nếu bạn có ước tính lỗi trên các phép đo riêng lẻ, sai số có trọng số.
El Burro

Bạn vẫn có thể điều chỉnh tốc độ báo động vì bạn không xác định cảnh báo là độ lệch so với giá trị cố định lớn hơn X nhưng là độ lệch so với trung bình di động.
El Burro

Cảm ơn. Vâng. Họ theo thứ tự thời gian. Tôi đang tự hỏi rằng liệu ước tính hàm làm mịn Kernel có giúp ích hay không.
Arkan

Tôi sẽ đề nghị bắt đầu với một trung bình di chuyển đơn giản đặt lại cho mỗi thay đổi cấu hình và xem liệu nó có hoàn thành công việc không. Nếu bạn không có sẵn thông tin khi thay đổi cấu hình xảy ra dựa trên giao diện bằng mắt, tôi không thấy tùy chọn đáng tin cậy nào khác để tách màu vàng khỏi màu đỏ. Ít nhất trong ví dụ đã cho, nó không giống như hình dạng rất khác nhau giữa cả hai.
El Burro

0

Hãy minh họa cách tiếp cận được đề xuất trong câu trả lời khác bằng một ví dụ đơn giản

Lấy dữ liệu

Chúng tôi sẽ mô phỏng dữ liệu tha với bảy khối được sản xuất với phân phối bình thường với các phương tiện khác nhau.

Điều này rất quan trọng vì nó cho phép chúng tôi phân biệt rõ ràng giữa các nhóm và đơn giản phát hiện các điểm phá vỡ. Câu trả lời này sử dụng phương pháp ngưỡng cơ bản, một số cách nâng cao hơn có thể được yêu cầu cho dữ liệu thực của bạn.

dt <- rbind(
data.frame(color=1, x =  round(runif(50, min = 0, max = 50)), y = rnorm (50,mean=3.9, sd=.03)), 
data.frame(color=2, x =  round(runif(15, min = 50, max = 65)), y = rnorm (15,mean=4.5, sd=.03)),
data.frame(color=2, x =  round(runif(15, min = 65, max = 80)), y = rnorm (15,mean=3.3, sd=.03)),
data.frame(color=1, x =  round(runif(70, min = 80, max = 150)), y = rnorm (70,mean=3.9, sd=.03)), 
data.frame(color=2, x =  round(runif(15, min = 150, max = 165)), y = rnorm (15,mean=3.3, sd=.03)), 
data.frame(color=3, x =  round(runif(15, min = 165, max = 180)), y = rnorm (15,mean=2.9, sd=.03)), 
data.frame(color=1, x =  round(runif(120, min = 180, max = 300)), y = rnorm (120,mean=3.9, sd=.03))
)
dt$color <- as.factor(dt$color)
dt <- as_tibble(dt)

nhập mô tả hình ảnh ở đây

Xuất phát điểm phá vỡ

Với một sự khác biệt đơn giản đến điểm đặt trước, lag(y) chúng ta có được các ngoại lệ. Chúng được phân loại bằng cách sử dụng một ngưỡng.

nhập mô tả hình ảnh ở đây

Thay đổi phân loại hành vi

Dựa trên các quy tắc bạn mô tả, các điểm phá vỡ được phân loại là OKproblem.

Quy tắc nói rằng không có hai thay đổi theo cùng một hướng được cho phép. Động thái thứ hai theo hướng phổ biến được coi là một vấn đề.

Bạn có thể cần điều chỉnh cách hiểu đơn giản này nếu logik của bạn nâng cao hơn.

## extract outliers and get previous value
dt2 <- filter(dt2, diff != 0) %>%
   mutate(cs = cumsum(diff),
          prev = lag(diff),
          cls = case_when(
                      diff * prev >  0 ~ "problem",
                      TRUE ~ "OK"))
## show 
dt2 %>% select(x,y,diff,prev,cls)                       
## # A tibble: 6 x 5
##       x     y  diff  prev cls    
##   <dbl> <dbl> <dbl> <dbl> <chr>  
## 1    50  4.53     1    NA OK     
## 2    66  3.32    -1     1 OK     
## 3    80  3.87     1    -1 OK     
## 4   151  3.32    -1     1 OK     
## 5   167  2.91    -1    -1 problem
## 6   180  3.87     1    -1 OK

Trình bày

Cuối cùng, bạn chiếu các ngoại lệ được công nhận vào dữ liệu gốc

## project in the original data
ggplot(data=dt, mapping = aes(x=x, y=y) )  +
  geom_point(mapping = aes(color = color) )  +
  scale_color_manual(values=c("blue", "yellow", "red","green","red")) +
  theme(legend.position="none") +
  geom_vline(data=dt2, aes(xintercept=x, color=cls),
             linetype="dashed", size = 2)

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.