Introdução à análise de inferência com BootStraps em Python

Jan 07 2023
A análise de inferência de inicialização pode ser para você se você lidar com amostras de dados grandes e representativas. No mês passado, meu chefe perguntou: poderíamos encontrar as verdadeiras exibições de vídeo médias do Instagram Reels para as principais marcas da América do Norte? Eu estaria errado em relatar a ela as exibições médias de vídeo de uma única amostra de Reels.

A análise de inferência de inicialização pode ser para você se você lidar com amostras de dados grandes e representativas .

No mês passado, meu chefe perguntou: poderíamos encontrar as verdadeiras exibições de vídeo médias do Instagram Reels para as principais marcas da América do Norte?

Eu estaria errado em relatar a ela as exibições médias de vídeo de uma única amostra de Reels. Para resolver esses problemas, precisamos pensar probabilisticamente…

Bootstraps para o resgate! Essa técnica cria um número finito de amostras; calcula uma estatística resumida (como a média) para cada amostra; e encontra um intervalo para a solução. No passado, obter 10.000 amostras parecia uma tarefa impossível, mas com o Python podemos abrir caminho.

Além dos intervalos de confiança , podemos usar Bootstraps para executar testes de significância . Este post é sobre como entender bootstraps e gerar intervalos de confiança.

Por que Bootstrapping?

Se seu chefe está perguntando por que o Bootstraps, diga a ele o seguinte:

  • Esta é uma técnica não paramétrica , o que significa que não assume uma distribuição subjacente
  • Não precisamos lidar com a normalidade dos dados ou variância semelhante

O que é um Bootstrap?

“Bootstrapping é o uso de reamostragem — com substituição — dados para realizar inferência estatística”

Um exemplo rápido do Python explicaria melhor o conceito do que eu:

import numpy as np
reel_views = [191, 145]
bootstrapped_video_views = np.random.choice(
    reel_views
    , size=len(reel_views)
)

print(f`the first sample: {bootstrapped_video_views}`)
--> the first sample: [191, 191]
print(f`the second sample: {bootstrapped_video_views}`)
--> the second sample: [145, 145]
print(f`the third sample: {bootstrapped_video_views}`)
--> the third sample: [191, 145]

Como gerar intervalos de confiança com bootstrap?

Podemos estimar a incerteza com Bootstraps usando intervalos de confiança. A ideia é encontrar o intervalo para a estatística de resumo ( a média ) que contém a verdadeira média da população da amostra.

Criamos uma réplica bootstrap reamostrando nossos dados (visualizações de vídeo) e calculando a estatística resumida de interesse (as visualizações médias de vídeo) . O código abaixo fica assim:

  1. Ele cria uma nova amostra selecionando aleatoriamente com substituição de nossos dados
  2. Ele calcula a estatística resumida ( a média ) dessa nova amostra e a armazena. Isso é chamado de replicação de bootstrap
  3. Ele repete as etapas 1 e 2 um número finito de vezes (10.000 é o padrão)
  4. Ele calcula os percentis 2,5 e 97,5 das 10.000 estatísticas resumidas armazenadas
  5. def draw_bs_reps(data: list, func: Callable, size: int = 10000) -> np.array:
        """
        Draw bootstrap replicates. Generate n 1d bootstrap replicates. Typical size = 5 - 10K repetitions
        """
        rng = np.random.default_rng(seed=42)
        bs_sample = rng.choice(data, size=(size, len(data)))
        bs_replicates = np.apply_along_axis(func, arr=bs_sample, axis=1)
        return bs_replicates
    
    
    reel_views = [191, 145, 198, 192, 1022, ...] # Big Representative Sample
    bootstrap_replicates = draw_bs_reps(reel_views, np.mean)
    conf_int = np.percentile(bootstrap_replicates, [2.5, 97.5])
    print(f'95% Confidence Interval: {conf_int}')
    --> `95% Confidence Interval: [137.9, 150.3]`
    

Traçar seus resultados nunca é demais. Ao desenhar réplicas de bootstrap, podemos desenhar ECDFs, gráficos do KDE ou histogramas. Para mim, os gráficos ECDFs e KDE são superiores aos histogramas, pois plotam todos os pontos de dados sem a necessidade de binning. Abaixo está o KDE que plota todas as 10.000 réplicas de bootstrap:

95% das réplicas médias de bootstrap estão dentro das linhas roxas.

Se você acabar com um intervalo amplo, lembre-se de que aumentar o número de réplicas de bootstrap (por exemplo, 20.000) não o reduzirá. Se você deseja um intervalo mais restrito, sua única opção é coletar uma amostra de dados maior.

Bootstraps são incríveis, mas a única maneira de diminuir o efeito de outliers e produzir um intervalo mais estreito é coletar uma amostra de dados maior

Aprendizado

  • Intervalos de confiança de inicialização nos ajudam a estimar a incerteza
  • Para usar esta técnica, precisamos de uma amostra grande e representativa
  • Bootstraps não podem espremer magicamente mais dados em uma amostra
  • Para produzir intervalos mais estreitos, precisamos aumentar nosso tamanho de amostra