Python para a ciência de dados: desenvolvimento de uma abordagem multivariada para encontrar valores discrepantes

Python é amigo de um cientista de dados. Trabalhando em variáveis ​​individuais permite identificar um grande número de observações remotas. No entanto, os outliers não necessariamente exibir valores muito longe da norma. Às vezes, os outliers são feitos de combinações inusitadas de valores em mais variáveis. Eles são raros, mas influente, combinações que podem especialmente enganar os algoritmos de aprendizado de máquina.

Nesses casos, a inspeção precisa de cada única variável não será suficiente para descartar casos anômalos de seu conjunto de dados. Apenas algumas técnicas selecionadas, levando em consideração as mais variáveis ​​de cada vez, irá gerir a revelar problemas em seus dados.

As técnicas apresentadas abordar o problema de diferentes pontos
de vista:

  • redução de dimensionalidade

  • agrupamento densidade

  • modelagem de distribuição não linear

Usando estas técnicas permite comparar os seus resultados, tomando conhecimento dos sinais recorrentes em casos particulares - às vezes já localizados pela exploração univariada, às vezes ainda desconhecido.

Video: Aprendendo programação utilizando Python

Usando análise de componentes principais

Análise de componentes principais pode reestruturar completamente os dados, eliminando redundâncias e encomendar componentes recém-obtidos de acordo com a quantidade da variância original que eles expressam. Este tipo de análise oferece uma vista sintético e completa sobre a distribuição dos dados, fazendo os outliers multivariados particularmente evidente.

Os dois primeiros componentes, sendo o mais informativo em termos de variância, pode descrever a distribuição geral dos dados se visualizado. A saída fornece uma boa dica para possíveis valores atípicos evidentes.

Os dois últimos componentes, sendo o mais residual, retratam toda a informação que não poderia ser de outra forma montado pelo PCA método. Eles também podem fornecer uma sugestão sobre possíveis, mas menos evidentes valores discrepantes.

de sklearn.decomposition PCAfrom importação sklearn.preprocessing importação scalefrom pandas.tools.plotting importação scatter_matrixdim_reduction = PCA impressão `variância explicada pelos primeiros 2 componentes:% 0.1f %%` () Xc = dim_reduction.fit_transform (escala (X))% (soma (dim_reduction.explained_variance_ratio _ [: 2] * 100)) print `variância explicada pelos últimos 2 componentes:% 0.1f %%` % (soma (dim_reduction.explained_variance_ratio _ [- 2:] * 100)) df = PD. trama de dados (Xc, colunas = [ `comp _` + str (j + 1) para j no intervalo (10)]) first_two = df.plot (tipo = `dispersão`, x = `Comp_1`, y `= comp_2`, c = `darkgray`, s = 50) last_two = df.plot (tipo = `dispersão`, x = `comp_9`, y `= comp_10`, c = `darkgray`, s = 50)

Olhe para estes dois gráficos de dispersão dos primeiros e últimos componentes. Prestar especial atenção para os pontos de dados ao longo do eixo (onde o eixo x define a variável independente e o eixo dos y define a variável dependente). Você pode ver um possível limite para usar para separar os dados regulares a partir de dados suspeito.

Video: Mineração de Dados de Aplicação Internet parte 1/2

Os primeiros dois e últimos dois componentes da análise de componentes principais.
Os primeiros dois e últimos dois componentes da análise de componentes principais.


Usando os dois últimos componentes, você pode localizar alguns pontos para investigar usando o limite de -0.3 para o décimo de componentes e de -1,0 para a nona. Todos os casos abaixo estes valores são possíveis valores discrepantes.

= Periféricas (Xc [:, - 1] lt; -0.3) | (Xc [:, - 2] lt; -1.0) df impressão [periféricas]

Utilizando análise de agrupamento

Outliers são pontos isolados no espaço de variáveis, e DBScan é um algoritmo de agrupamento que liga as partes de dados densos em conjunto e marca as partes demasiado esparsas. DBScan é, portanto, uma ferramenta ideal para uma exploração automática de seus dados para possíveis valores atípicos para verificar.

de DBSCANDB sklearn.cluster import = DBSCAN (eps = 2,5, min_samples = 25, random_state = 101) DB.fit (Xc) de coleções importar Counterprint Counter (DB.labels _), `n`print df [DB.labels _ == - 1] Contador ({0: 414, 1: 28}) 0 1 2 3 4 5 6 7 8 915 -0,05 0,05 -0,02 0,08 0,09 -0,04 0,11 0,11 0,04 -0,0423 0,05 0,05 0,06 0,03 0,03 -0,05 -0,05 0,07 0,13 0,05 -0,01 0,07 0,1429 0,06 -0,04 -0,08 -0.10 0.05 0.06 0.05 ... (resultados parcialmente omitido) [28 linhas x 10 colunas]

Contudo, DBSCAN requer dois parâmetros, eps e min_samples. Estes dois parâmetros exigir várias tentativas para localizar os valores corretos, tornando utilizando os parâmetros um pouco complicado.

Comece com um valor baixo de min_samples e tentar crescer os valores da eps de 0,1 para cima. Depois de cada ensaio com os parâmetros modificados, verificar a situação através da contagem do número de observações na classe -1 dentro do atributo etiquetas, e parar quando o número de outliers parece razoável para uma inspeção visual.

Sempre haverá pontos à margem da distribuição dos peças densas, por isso é difícil para lhe fornecer um limite para o número de casos que podem ser classificados na classe 1. Normalmente, os outliers não deve ser superior a 5 por cento dos casos, então use essa indicação como uma regra genérica do polegar.

Automatizando a detecção de valores extremos com SVM

Support Vector Machines (SVM) é uma técnica de aprendizado de máquina poderosa. OneClassSVM é um algoritmo que se especialize em aprender as distribuições habituais num conjunto de dados. OneClassSVM é especialmente útil como um método detector novidade se você pode primeiro fornecer dados limpos de outliers- caso contrário, é eficaz como um detector de outliers multivariados. Para ter OneClassSVM funcionar corretamente, você tem dois parâmetros-chave para corrigir:

  • gama, dizendo o algoritmo se deve seguir ou aproximar as distribuições de conjuntos de dados. Para a detecção da novidade, ele é preferível ter um valor de 0 ou superior, (seguem a distribuição) - para valores de detecção dos valores aberrantes, menor do que 0 s preferidos valores (aproximar a distribuição).

  • nu, o qual pode ser calculado pela seguinte fórmula: nu_estimate = 0,95 * f + 0,05, onde f é a percentagem de valores extremos esperados (um número de 1 a 0). Se o seu objetivo é a detecção de novidade, f será 0.

Executar o script a seguir, você vai ter um OneClassSVM trabalhar como um sistema de detecção de outlier:

de sklearn svmoutliers_fraction importação = 0,01 #nu_estimate = 0,95 * + outliers_fraction 0.05auto_detection = svm.OneClassSVM (kernel = “FSR”, gama = 0,01, grau = 3, 
Nu = nu_estimate) auto_detection.fit (Xc) de avaliação = auto_detection.predict (Xc) df impressão [avaliação == - 1] 0 1 2 3 4 5 6 7 8 910 -0,10 -0,04 -0,08 0,01 -0,10 -0,09 -0,01 -0,0323 -0,06 0,05 -0,08 0,05 0,06 0,03 0,03 -0,05 -0,05 0,07 0,13 0,05 0,13 0.1432 0,03 0,03 -0,05 -0,01 -0,10 0,11 0,00 0,03 ... (resultados parcialmente omitido) [25 linhas x 10 colunas]

OneClassSVM, como toda a família da SVM, funciona melhor se você redimensionar suas variáveis ​​usando o sklearn.preprocessing função escala ou a classe StandardScaler.


Publicações relacionadas