Técnicas de amostragem com python

Amostragem

Amostragem é um processo estatístico que envolve a seleção de uma porção representativa de uma população maior com a finalidade de fazer inferências ou estimativas de características ou propriedades da população. Em outras palavras, é o processo de selecionar uma amostra (subconjunto da população em estudo) para obter informações e insights sobre o todo.

O principal objetivo da amostragem é reduzir custos, economizar tempo e a probabilidade de obter resultados precisos e confiáveis, desde que a amostra seja bem escolhida e represente fielmente a população em estudo. Para garantir a representatividade, várias técnicas de amostragem podem ser usadas, como amostragem aleatória simples, amostragem estratificada, amostragem por conglomerados, etc.

Amostra X População

Pode haver vantagens em usar uma amostra em vez de estudar toda a população pelas seguintes razões: 

Eficiência

Coletar dados de uma população inteira pode ser impraticável, especialmente quando a população é grande ou geograficamente dispersa. A amostragem permite obter informações úteis com menos esforço e custo. 

Economia de tempo e recursos

Estudar populações inteiras pode ser um processo demorado e caro, exigindo recursos humanos, financeiros e logísticos significativos. Em alguns casos, populações inteiras podem não estar acessíveis devido a restrições logísticas, éticas ou outras. Nesses casos, a amostragem é a única opção viável para a realização de uma pesquisa ou estudo.

Representatividade

Através de uma amostragem adequada, pode-se obter uma representação fiel das características da população em estudo. Isso é fundamental para que as conclusões baseadas na amostra possam ser generalizadas para a população como um todo com maior confiança.

Técnicas de Amostragem com python

➜ Antes precisaremos importar as bibliotecas necessárias:

# Importando as bibliotecas
import pandas as pd
import numpy as np
from math import ceil
from sklearn.model_selection import train_test_split

➜ Visualização dos dados:

dados = pd.read_csv('../Data/population.csv')
dados.head() 

➜ Saída:

        Name	        Age     Weight	State
0	Angelica Stout	79	53.84	New York
1	John Guzman	36	59.56	California
2	Jacob Fisher	69	105.62	New York
3	Emily Nguyen	65	72.62	New York
4	Mary Fitzpatric	67	65.98	Texas


Amostragem Simples

1) Criamos um array aleatório com valores binários do tamanho da nossa população:

# Criando uma amostra aleatória simples com reposição
np.random.seed(42)
amostra = np.random.choice(a = [0, 1], size = 150, replace = True,
                           p = [0.5, 0.5])
amostra

2) Selecionamos os valores que estiverem na mesma posição do valor 1:

# Seleção da base de dados dos valores correspondentes a amostra igual a 1
dados_selecionados = dados.loc[amostra == 1]
dados_selecionados.shape

Saída:

(70, 4)


Amostragem Estratificada

1) Usamos a função train_test_split para criar uma amostra de 50% a partir da coluna(stratify) 'State' :

# Separando a base de dados em estratos a partir da variável 'State'
amostraX, _, amostraY, _ = train_test_split(dados.iloc[:, 0:3], dados.iloc[:, 3],
                              test_size = 0.5, stratify = dados.iloc[:,3])
amostraY.value_counts()

Saída:

State
Texas         25
New York      25
California    25
Name: count, dtype: int64

2) Reunimos os valores que compõe a amostra criada:

# Reunindo as colunas de amostraX e amostraY em um dataframe
amostra_completa = pd.concat([amostraX, amostraY], axis=1)
amostra_completa.head()

Saída:

        Name	        Age	Weight	State
140	Derrick Logan	28	76.61	Texas
128	Amanda Levine	66	74.38	California
72	Kelly Cohen	47	71.90	California
84	Sheila Dennis	48	82.64	California
18	Patricia Floyd	44	101.09	California


Amostragem Sistemática

1) Criamos a constante k, que será usada para incrementar o valor i:

# Criação do valor k, k é o valor usado para incrementar o valor de i.
# n é o tamanho da amostra que queremos coletar.
n = 50
k = ceil( len(dados) / n)
k

2) Criamos o valor i, o valor que será usado como intervalo de seleção para cada elemento da amostra:

# Criação do valor do intervalo de seleção.
# O valor i é o tamanho do passo, ou seja, a cada i elementos, um é selecionado.
i = np.random.randint(low = 1, high = k + 1, size = 1)
i

3) Criação da lista que será usada para definir os selecionados:

# Criação da lista com o index dos selecionados.
passo = i[0]
selecionados = []
for j in range(n):
    selecionados.append(passo)
    passo += k
print(selecionados)

4) Criação da amostra:

# Amostra
dados_selecionados = dados.loc[selecionados]
dados_selecionados

Saída:

	Name	        Age	Weight	State
2	Jacob Fisher	69	105.62	New York
5	Ashley Cooper	80	56.85	New York
8	Ruben Alvarez	66	116.09	New York
11	Christy Kline	72	66.56	New York
14	Joseph Hickman	80	74.47	California


Amostragem por Conglomerado

1) Dividir os dados em partes iguais:

# Dividir os dados em 3 partes
conglomerado1 = dados.iloc[0:50,:]
conglomerado2 = dados.iloc[50:100,:]
conglomerado3 = dados.iloc[100:,:]

2) Sortear os conglomerados:

# Sorteando um conglomerado
sorteado = np.random.choice(['conglomerado1', 'conglomerado2', 'conglomerado3'], 1, replace=False)
sorteado

Saída:

array(['conglomerado3'], dtype='<U13')


Amostragem por Cotas

1) Separando os dados por estados.

# Separar os dados por estratos(Estados)
estado1 = dados[dados['State'] == 'New York']
estado2 = dados[dados['State'] == 'California']
estado3 = dados[dados['State'] == 'Texas']

2) Criação das cotas, valores aleatórios sem cota e a junção de ambos na amostra.

➜ Usaremos a idade como cota.

# A cota usada será a cota de idade.
estado1_cota = estado1[estado1['Age'] <= 60]

# Sortear 15 valores da cota para o estado 1.
estado1_cota = estado1_cota.sample(n=15, random_state=1)

# Separar os valores do estado 1 que não estão na cota
# ~ inverte o resultado da função isin(), retornando a lista de valores que não estão na cota
estado1_sem_cota = estado1[~estado1['Age'].isin(estado1_cota['Age'])]

# Sortear 10 valores do estado 1 que não estão na cota
estado1_sem_cota = estado1_sem_cota.sample(n=10, random_state=1)

# Concatenar os dois dataframes
estado1_amostra = pd.concat([estado1_cota, estado1_sem_cota])

# Amostra
estado1_amostra.shape

Saída:

(25, 4)

3) Repetir o código acima para o restante dos estratos!

4) Concatenar as diferentes amostras de cada estrato:

# Juntar as amostras em um único dataframe sem repetir as colunas
amostra_completa2 = pd.concat([estado1_amostra, estado2_amostra, estado3_amostra])
amostra_completa2.shape

Saída:

(75, 4)


Segue o link para acessar o código na integra: Código

É importante ressaltar que a amostragem só é eficaz quando realizada corretamente, utilizando técnicas de amostragem adequadas e garantindo que a seleção dos elementos da amostra seja feita de forma imparcial e aleatória para que toda a população de interesse seja generalizada. Quando bem executada, a amostragem pode fornecer resultados valiosos e confiáveis para uma ampla variedade de estudos e pesquisas.

Comentários

Formulário de contato

Nome

E-mail *

Mensagem *

Minha foto
Gustavo Câmara
Olá, meu nome é Gustavo e sou Analista de Dados, Desenvolvedor, Estudante de Engenharia de Software e apaixonado por tecnologia.

Postagens mais visitadas