Reconhecimento de distribuição de dados
O reconhecimento da distribuição de seus dados é essencial para a análise de dados, a visualização e a compilação de modelos eficazes.
Se um conjunto de dados tiver uma distribuição distorcida, isso significa que os pontos de dados não estão distribuídos uniformemente e tendem a se inclinar mais para a direita ou para a esquerda. Isso pode fazer com que um modelo preveja de forma inexata pontos de dados de grupos sub-representados ou seja otimizado com base em uma métrica inadequada.
A importância da distribuição de dados
A seguir apresentamos as principais áreas em que o reconhecimento da distribuição dos dados pode aumentar a exatidão dos modelos de aprendizado de máquina.
Etapa | Descrição |
---|---|
Análise Exploratória de Dados (EDA) | O reconhecimento da distribuição de dados facilita a exploração de um novo conjunto de dados e a localização de padrões. |
Pré-processamento de dados | Algumas técnicas de pré-processamento, como normalização ou padronização, são usadas para tornar os dados mais normalmente distribuídos, o que é uma suposição comum em muitos modelos. |
Seleção de modelos | Modelos diferentes fazem suposições diferentes sobre a distribuição dos dados. Por exemplo, alguns modelos presumem que os dados são normalmente distribuídos e podem não ter um bom desempenho se essa suposição for violada. |
Melhorar o desempenho do modelo | Transformar sua variável-alvo para reduzir a assimetria pode linearizar seu alvo, o que é útil para muitos modelos. Isso pode reduzir o intervalo de erro e potencialmente melhorar o desempenho do seu modelo. |
Relevância do modelo | Depois que um modelo é implantado na produção, é importante que ele permaneça relevante no contexto dos dados mais recentes. Se houver uma distorção de dados, ou seja, a distribuição de dados muda na produção em relação ao que foi usado durante o treinamento, o modelo pode sair de contexto. |
O reconhecimento da distribuição de dados pode melhorar seu processo de compilação de modelos. Isso permite que você estabeleça suposições mais exatas, identificando a média, a dispersão e o intervalo de uma variável aleatória em seus recursos e destinos.
Vamos explorar alguns dos tipos de distribuição de dados mais comuns, como distribuições normais, binomiais e uniformes.
Distribuição normal
Uma distribuição normal é representada por dois parâmetros: a média e o desvio padrão. A média indica onde a curva de sino está centrada, e o desvio padrão indica a dispersão da distribuição.
Vamos ver um exemplo de um recurso de distribuição normal. O código abaixo gera os dados para o recurso var
para fins de demonstração.
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt
# Set the mean and standard deviation
mu, sigma = 0, 0.1
# Generate a normally distributed variable
var = np.random.normal(mu, sigma, 1000)
# Create a histogram of the variable using seaborn's histplot
sns.histplot(var, bins=30, kde=True)
# Add title and labels
plt.title('Histogram of Normally Distributed Variable')
plt.xlabel('Value')
plt.ylabel('Frequency')
# Show the plot
plt.show()
Observe que o recurso var
é normalmente distribuído, em que a média e a mediana (percentil 50%) devem ser mais ou menos iguais. Para distribuições distorcidas, a média tende a inclinar para a cauda mais pesada.
No entanto, essas são verificações heurísticas e a determinação real é feita usando testes estatísticos específicos como o teste de Shapiro-Wilko ou o teste de normalidade Kolmogorov-Smirnov.
Distribuição binomial
Suponha que você queira entender o como uma determinada característica está sendo observada em um grupo de pinguins.
Você decide examinar um conjunto de dados de 200 pinguins para ver se eles são da espécie Adelie. Este é um problema de distribuição binomial porque há dois resultados possíveis (Adelie ou não Adelie), um número fixo de tentativas (200 pinguins), e cada tentativa é independente das outras.
Depois de analisar o conjunto de dados, você descobre que 150 pinguins são da espécie Adelie.
Saber que seus dados seguem uma distribuição binomial permite que você faça previsões futuras sobre conjuntos de dados ou grupos de pinguins. Por exemplo, se você estudar outro grupo de 200 pinguins, você pode esperar que cerca de 150 sejam da espécie Adelie.
O código Python a seguir traça um histograma da variável binomial is_adelie
. O argumento discrete=True
em sns.histplot
garante que os compartimentos sejam tratados como intervalos discretos. Isso significa que cada barra no histograma corresponde exatamente a uma categoria ou valor booleano, tornando o gráfico mais fácil de interpretar.
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
# Load the Penguins dataset from seaborn
penguins = sns.load_dataset('penguins')
# Create a binomial variable for 'species'
penguins['is_adelie'] = np.where(penguins['species'] == 'Adelie', 1, 0)
# Plot the distribution of 'is_adelie'
sns.histplot(data=penguins, x='is_adelie', bins=2, discrete=True)
plt.title('Binomial Distribution of Species')
plt.xticks([0, 1], ['Not Adelie', 'Adelie'])
plt.show()
Distribuição uniforme
Uma distribuição uniforme, também conhecida como distribuição retangular, é um tipo de distribuição de probabilidade na qual todos os resultados são igualmente prováveis. Cada intervalo do mesmo comprimento no suporte da distribuição tem a mesma probabilidade.
import numpy as np
import matplotlib.pyplot as plt
# Generate a uniform distribution
uniform_data = np.random.uniform(-1, 1, 1000)
# Plot the distribution
plt.hist(uniform_data, bins=20, density=True)
plt.title('Uniform Distribution')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()
Nesse código, a função np.random.uniform
gera 1000 números aleatórios que são uniformemente distribuídos entre -1 e 1. O argumento bins=30
especifica que os dados devem ser divididos em 30 compartimentos e density=True
garante que o histograma seja normalizado para formar uma densidade de probabilidade. Isso significa que a área sob o histograma se integra a 1, o que é útil na comparação de distribuições.
Observação
Você provavelmente obterá resultados diferentes se executar o código várias vezes. A ideia básica da aleatoriedade é que ela é imprevisível, e a cada amostra, você pode obter resultados diferentes.
Você pode controlar esse processo definindo um valor de propagação com np.random.seed
. Isso é muito útil para testar e depurar na fase de compilação do modelo, pois isso permite reproduzir os mesmos resultados.