Anomalias: outliers, novidade, exceção - dados que não se conformam com o “padrão normal” dos dados. Uma definição circular, pois os padrões normais são os dados sem as anomalias!
regiões centrais (não existe nome oficial) - regiões onde os dados são mais frequentes - e provavelmente “mais normais”
se voce tiver que se restringir a poucos pontos, as regiões centrais são uma alternativa.
mode seeking
mean shift
clusterização baseados em Grid - CLIQUE, MAFIA, SHIFT https://www.researchgate.net/publication/267565989_Automating_Discovery_of_Innovative_Design_Principles_through_Optimization/figures?lo=1
não há uma separação clara entre os conceitos de cluster (nao completo) e região central - assim os algoritmos em Grid são normalmente descritos como algoritmos de clusterização (nao completo)
Defina uma bola d-dimensional de raio \epsilon
para os dados dentro da bola, calcule a média, este é o novo centro da bola
o algoritmo termina quando a bola estiver centrada em uma região mais densa que as vizinhas - máximo local (similar ao k-means)
com kernel: não há uma bola. Todos os pontos são usados para computar a nova média, mas a distancia é um kernel RBF
d = e^{\frac{|x - m|^2}{h^2}}
https://scikit-learn.org/stable/modules/generated/sklearn.cluster.MeanShift.html
https://www.rdocumentation.org/packages/meanShiftR/versions/0.50/topics/meanShift
anomalias, outliers, exceções, erros, novidades
Anomalias são dados que “quebram”/ não se conformam com o padrão que descreve os dados “normais,” não anômalos.
Historicamente, anomalias eram erros dos dados, a serem eliminados das análises.
modernamente, detecção de anomalias é considerado como uma “boa” forma de detectar fraudes, ataques e intrusão, mudança de padrão de uso de recursos, surgimento de epidemias, novidades.
Há várias definições de anomalias e portanto varios algoritmos
sao dados que tem baixa probabilidade de sair dado a distribuição geradora dos dados “normais”
são dados “longes” do dados normais (mas talvez próximos um dos outros)
são dados em regiões de baixa densidade em comparação com dados normais
dados que se encontram em sub-espaços diferentes de onde se encontram os dados normais
dados que “estragam” a descrição sucinta dos dados
As definições mais comuns se referem a anomalias globais
mas é possível falar em anomalias locais - um dado é anomalo em relação ao dados “normais” mais perto dele
isso é mais claro para dados em uma serie temporal - um dado é localmente anomalo numa serie temporal se ele representa um salto inesperado tendo em vista os dados locais
https://www.r-bloggers.com/2015/01/twitters-new-r-package-for-anomaly-detection/
Regra velha 1: anomalias são dados a uma distancia > 3 \sigma da média dos dados
1o problema: a regra assume que os dados “normais” estão distribuidos segundo uma gaussiana (P(x>3 \sigma)<0.003)
isso pode ser modificado para usar outras distribuições
Mas outliers “estragam” algumas medidas de agregação (media e desvio padrão)
medias vs medianas
desvio padrao vs IQR ou MAD (median absolute deviation)
medidas windowed
robust: insensível a outliers
Outra técnica tradicional para detectar outliers:
Theorias mais complexas: extreme value theory https://en.wikipedia.org/wiki/Extreme_value_theory
Anomalias estão isoladas:
meça a distancia de cada ponto ao seu vizinho mais proximo - anomalias serão outliers nessa medida 1D!
Problema: anomalias podem destar perto de outras anomalias:
meça a distancia de cada ponto a seu k-esimo vizinho mais proximo (ja usamos isso no DBScan!)
O procedimento trata de casos de anomalias que estão próximas de ate k outras anomalias
https://prital.netlify.app/talks/user2018/user2018#38
Use a distancia ate o k-esimo mais proximo como uma medida 1D e use algum algoritmo de anomalia em 1D
https://en.wikipedia.org/wiki/Local_outlier_factor
distancia-k(A) = distancia ao k-ésimo vizinho mais proximo de A
LOF < 1 - A tem mais densidade que seus vizinhos
LOF = 1 - A tem a mesma densidade que seus vizinhos
LOF < 1 A é um outlier (menos densidade que seus vizinhos)
https://scikit-learn.org/stable/auto_examples/neighbors/plot_lof_outlier_detection.html
https://www.rdocumentation.org/packages/dbscan/versions/1.1-8/topics/lof
isolation trees. Aleatoriamente divida uma dimensão e 2 partes (split aleatorio). Repita recursivamente para cada parte, ate que so sobre dados únicos em cada parte.(isolados)
https://en.wikipedia.org/wiki/Isolation_forest
Segundo a wikipedia
implementacao em python https://scikit-learn.org/stable/auto_examples/ensemble/plot_isolation_forest.html
em R https://www.rdocumentation.org/packages/isotree/versions/0.1.8/topics/isolation.forest
Calcule o PCA, e fique apenas com as dimensões importantes
reconverta os dados projetados para as dimensões originais
compute a distancia (nas dimensões originais) dos dados e de suas projeções reconvertidas.
as anomalias devem ser outliers nessa distribuição de distancias
redes neurais que aprendem a repetir os dados (autoencoders) - equivale a deteção de anomalias por subespaço não linear
Mas para isso voce precisa de uma teoria/noção de “descrição de dados” e de “compacta”
classificadores de uma classe (one class SVM - descobre a menor hiper-bola que inclue a maioria dos dados (miolo: normais, fora: anomalias)
com kernel RBF as fronteiras ficam mais interessantes
https://scikit-learn.org/stable/auto_examples/svm/plot_oneclass.html
aplicação sequencial de vários detetores: 1o algoritmos remove as anomalias mais obvias, 2o só usa os dados que sobraram e busca anomalias menos óbvias, e assim por diante
aplicação paralela de vários detetores: cada detetor retorna um grau de anomalia para cada dado, os graus são combinados.
Change point em series temporais são pontos onde a serie muda de regime