Que modelo estatístico devo usar para analisar a probabilidade de um único evento influenciar dados longitudinais

19

Estou tentando encontrar uma fórmula, método ou modelo a ser usado para analisar a probabilidade de um evento específico influenciar alguns dados longitudinais. Estou tendo dificuldade em descobrir o que procurar no Google.

Aqui está um exemplo de cenário:

Imagem de sua empresa com uma média de 100 clientes diretos todos os dias. Um dia, você decide aumentar o número de clientes que chegam à sua loja todos os dias, e faz uma loucura fora da loja para chamar a atenção. Na próxima semana, você verá em média 125 clientes por dia.

Nos próximos meses, você decide novamente que deseja obter mais negócios e, talvez, sustentá-lo um pouco mais; tente outras coisas aleatórias para atrair mais clientes para sua loja. Infelizmente, você não é o melhor profissional de marketing, e algumas de suas táticas têm pouco ou nenhum efeito e outras têm até um impacto negativo.

Que metodologia eu poderia usar para determinar a probabilidade de qualquer evento individual impactar positiva ou negativamente o número de clientes que entram? Estou plenamente ciente de que a correlação não é necessariamente igual à causalidade, mas que métodos eu poderia usar para determinar o provável aumento ou diminuição na caminhada diária da sua empresa na jornada do cliente após um evento específico?

Não estou interessado em analisar se existe ou não uma correlação entre suas tentativas de aumentar o número de clientes diretos, mas se algum evento único, independente de todos os outros, teve impacto.

Percebo que este exemplo é bastante artificial e simplista, então também darei uma breve descrição dos dados reais que estou usando:

Estou tentando determinar o impacto de uma agência de marketing específica no site de seus clientes quando elas publicam novos conteúdos, realizam campanhas de mídia social etc. Para qualquer agência específica, elas podem ter de 1 a 500 clientes. Cada cliente possui sites com tamanho variando de 5 páginas a mais de 1 milhão. Nos últimos cinco anos, cada agência anotou todo o seu trabalho para cada cliente, incluindo o tipo de trabalho realizado, o número de páginas da Web em um site que foram influenciadas, o número de horas gastas etc.

Usando os dados acima, reunidos em um data warehouse (colocados em vários esquemas de estrela / floco de neve), preciso determinar a probabilidade de que uma única peça de trabalho (qualquer evento no tempo) tenha impacto sobre o tráfego atingindo uma / todas as páginas influenciadas por um trabalho específico. Criei modelos para 40 tipos diferentes de conteúdo encontrados em um site que descreve o padrão de tráfego típico que uma página com esse tipo de conteúdo pode enfrentar desde a data de lançamento até o presente. Normalizado em relação ao modelo apropriado, preciso determinar o número mais alto e mais baixo de visitantes aumentados ou diminuídos que uma página específica recebeu como resultado de um trabalho específico.

Embora tenha experiência com análise básica de dados (regressão linear e múltipla, correlação, etc.), não sei como abordar a solução desse problema. Enquanto no passado eu tipicamente analisei dados com várias medidas para um determinado eixo (por exemplo, temperatura versus sede versus animal e determinei o impacto na sede que o aumento do clima temperado tem entre os animais), acho que acima, estou tentando analisar o impacto de um único evento em algum momento para um conjunto de dados longitudinal não linear, mas previsível (ou pelo menos passível de modelagem). Estou perplexo :(

Qualquer ajuda, dicas, sugestões, recomendações ou orientações seria extremamente útil e eu ficaria eternamente grato!

Peter Kirby
fonte
Existe toda uma classe de análise estatística dedicada à modelagem de dados longitudinais. Se você repetiu medidas nos mesmos assuntos, os modelos mistos são usados ​​frequentemente como o estado da arte nas ciências sociais para determinar se há impacto de uma intervenção. Se você tem uma série temporal, apenas algo como um Arima pode ser usado.
B_Miner 23/06
Uma abordagem de RDD também pode ser útil para você: austinclemens.com/blog/2014/06/08/436
B_Miner

Respostas:

11

Para o registro, acho que esse é o tipo de pergunta perfeita para o Stack Exchange de ciência de dados. Espero que tenhamos vários exemplos do mundo real de problemas de dados e várias perspectivas sobre a melhor forma de resolvê-los.

Eu o encorajaria a não usar valores-p, pois eles podem ser bastante enganadores ( 1 , 2 ). Minha abordagem depende de você poder resumir o tráfego em uma determinada página antes e depois de alguma intervenção. O que importa é a diferença na taxa antes e depois da intervenção. Ou seja, como o número de ocorrências por dia muda? Abaixo, explico uma primeira abordagem facada com alguns dados de exemplo simulados. Vou então explicar uma possível armadilha (e o que eu faria a respeito).

Primeiro, vamos pensar em uma página antes e depois de uma intervenção. Finja que a intervenção aumenta os hits por dia em aproximadamente 15%:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

def simulate_data(true_diff=0):
    #First choose a number of days between [1, 1000] before the intervention
    num_before = np.random.randint(1, 1001)

    #Next choose a number of days between [1, 1000] after the intervention
    num_after = np.random.randint(1, 1001)

    #Next choose a rate for before the intervention. How many views per day on average?
    rate_before = np.random.randint(50, 151)

    #The intervention causes a `true_diff` increase on average (but is also random)
    rate_after = np.random.normal(1 + true_diff, .1) * rate_before

    #Simulate viewers per day:
    vpd_before = np.random.poisson(rate_before, size=num_before)
    vpd_after = np.random.poisson(rate_after, size=num_after)

    return vpd_before, vpd_after

vpd_before, vpd_after = simulate_data(.15)

plt.hist(vpd_before, histtype="step", bins=20, normed=True, lw=2)
plt.hist(vpd_after, histtype="step", bins=20, normed=True, lw=2)
plt.legend(("before", "after"))
plt.title("Views per day before and after intervention")
plt.xlabel("Views per day")
plt.ylabel("Frequency")
plt.show()

Distribuição de acertos por dia antes e após a intervenção

Podemos ver claramente que a intervenção aumentou o número de ocorrências por dia, em média. Mas, para quantificar a diferença de taxas, devemos usar a intervenção de uma empresa para várias páginas. Como a taxa subjacente será diferente para cada página, devemos calcular a variação percentual da taxa (novamente, a taxa aqui é de acertos por dia).

Agora, vamos fingir que temos dados para n = 100páginas, cada uma das quais recebeu uma intervenção da mesma empresa. Para obter a diferença percentual que usamos (média (ocorrências por dia antes) - média (ocorrências por dia após)) / média (ocorrências por dia antes):

n = 100

pct_diff = np.zeros(n)

for i in xrange(n):
    vpd_before, vpd_after = simulate_data(.15)
    # % difference. Note: this is the thing we want to infer
    pct_diff[i] = (vpd_after.mean() - vpd_before.mean()) / vpd_before.mean()

plt.hist(pct_diff)
plt.title("Distribution of percent change")
plt.xlabel("Percent change")
plt.ylabel("Frequency")
plt.show()

Distribuição da variação percentual

Agora temos a distribuição do nosso parâmetro de interesse! Podemos consultar esse resultado de diferentes maneiras. Por exemplo, podemos querer saber o modo ou (aproximação) do valor mais provável para essa alteração percentual:

def mode_continuous(x, num_bins=None):
    if num_bins is None:
        counts, bins = np.histogram(x)
    else:
        counts, bins = np.histogram(x, bins=num_bins)

    ndx = np.argmax(counts)
    return bins[ndx:(ndx+1)].mean()

mode_continuous(pct_diff, 20)

Quando eu executei isso, obtive 0,126, o que não é ruim, considerando que a verdadeira alteração percentual é 15. Também podemos ver o número de alterações positivas, que se aproxima da probabilidade de que a intervenção de uma determinada empresa melhore os hits por dia:

(pct_diff > 0).mean()

Aqui, meu resultado é 0,93, então podemos dizer que há uma boa chance de que essa empresa seja eficaz.

Finalmente, uma armadilha em potencial: cada página provavelmente tem alguma tendência subjacente que você provavelmente deve considerar. Ou seja, mesmo sem a intervenção, as ocorrências por dia podem aumentar. Para explicar isso, eu estimaria uma regressão linear simples em que a variável de resultado é hits por dia e a variável independente é day (comece no dia = 0 e simplesmente incremente para todos os dias da sua amostra). Subtraia a estimativa, y_hat, de cada número de ocorrências por dia para remover a tendência de seus dados. Em seguida, você pode executar o procedimento acima e ter certeza de que uma diferença percentual positiva não se deve à tendência subjacente. Obviamente, a tendência pode não ser linear, portanto, use discrição! Boa sorte!

Ben
fonte
Muito obrigado por uma explicação tão completa! Eu realmente gostei disso. Entre você e o neone4373 eu consegui resolver o problema! Esta comunidade é demais! Obrigado!
Peter Kirby
10

Nos meus dias de analista de dados, esse tipo de problema era bastante típico. Basicamente, todo mundo em marketing teria uma ideia maluca de que os vendidos para altos eram o único evento que aumentaria os KPIs em 2000%. Os superiores os aprovariam e depois começariam o "teste". Os resultados voltariam e a gerência os despejaria nos analistas de dados para determinar o que funcionava e quem o fazia.

A resposta curta é que você não pode realmente saber se não foi executado como um teste aleatório do estilo A / B em períodos de tempo semelhantes. Mas estou ciente de quão deficiente é essa resposta, especialmente se o fato de uma resposta pura não existir é irrelevante para a urgência de futuras decisões de negócios. Aqui estão algumas das técnicas que eu usaria para salvar a análise nessa situação, tenha em mente que isso é mais uma arte do que uma ciência.

Alças

Um identificador é algo que existe nos dados nos quais você pode se apegar. Pelo que você está me dizendo na sua situação, você tem muitas informações sobre quem é a agência de marketing, quando tentou uma tática e em qual site a aplicou. Este é o seu ponto de partida e informações como essa serão a pedra angular da sua análise.

Metodologia

A metodologia provavelmente terá o maior impacto sobre as agências que recebem crédito por todo e qualquer ganho, portanto você precisará garantir que esteja claramente delineado e que todos os interessados ​​concordem que faz sentido. Se você não puder fazer isso, será difícil para as pessoas confiarem em sua análise.

Um exemplo disso são as conversões. Digamos que o departamento de marketing adquira alguns leads e eles cheguem à nossa página de destino, nós os rastrearemos por 3 dias; se eles fizerem uma compra nesse período, os contaremos como tendo sido convertidos. Por que 3 dias, por que não 5 ou 1? Isso não é importante, desde que todos concordem, agora você tem uma definição da qual pode criar.

Comparações

Em um ideal, você teria um bom teste A / B para provar um relacionamento definitivo, eu vou assumir que você está com pouco, ainda assim, você pode aprender algo com uma simples comparação de dados semelhantes. Quando as empresas estão tentando determinar a eficácia da publicidade no rádio, geralmente veiculam anúncios em meses compensados ​​no mesmo mercado, ou por vários meses em um mercado, e comparam isso com os resultados em um mercado separado, mas semelhante. Não passa pela ciência, mas mesmo com todo esse barulho, resultados fortes quase sempre serão perceptíveis.

Eu os combinaria no seu caso para determinar quanto tempo um evento é dado para registrar um efeito. Depois que os dados desse período forem executados com base na previsão de tráfego modelado, crescimento semana a semana, mês a mês, etc. Isso poderá permitir uma comparação significativa entre as agências e os períodos.

Pragmatismo

A aspiração é poder fornecer um entendimento profundo de causa e efeito, mas provavelmente não é realista. Por causa de como fatores externos confusos fazem sua análise, você constantemente se depara com a questão repetidas vezes: esse evento aumentou o volume / vendas / cliques ou faria qualquer coisa que tivesse o mesmo efeito? O melhor conselho que posso dar para isso é estabelecer metas muito realistas para o que você deseja medir. Um bom ponto de partida é, dentro da metodologia que você possui, qual evento teve o maior impacto. Depois de abrir, abra a abertura a partir daí.

Sumário

Depois de ter esclarecido todos esses aspectos, você poderá criar uma solução geral que poderá ser automatizada. A vantagem de projetar sua solução dessa maneira é que a lógica de negócios já está incorporada. Isso tornará seus resultados muito mais acessíveis e intuitivos para os líderes de negócios não técnicos.

neone4373
fonte
@ 1 para caras malucos de marketing. Trabalhando em pesquisa de mercado e a torção feito com estatísticas pobres me deixa triste ...
Christian Sauer
2

Edit: Warning, deixo minha mensagem, mas minha resposta parece errada, confira o comentário abaixo!

Não sou especialista, mas acho que o principal problema é responder a esta pergunta:

Um evento / algum afetou o número de ocorrências em um determinado dia?

Mas eu não sei como tratar vários eventos, então tentaria responder a esta pergunta:

  • O evento X afetou o número de ocorrências em um determinado dia?

O que pode ser respondido usando o teste de hipóteses com valores-p (o que o cientista faz para avaliar, por exemplo, se um medicamento afeta ou não uma doença).

Usando valores-p, você pode determinar se o número de ocorrências em um determinado dia é mero aleatório e aceitável em circunstâncias normais ou se deve corresponder a uma alteração no seu modelo.

Você pode ler mais sobre valores-p no Open Intro to Statistics Book , na verdade aprendi sobre eles a partir daí.

Em seguida, as outras partes do problema são como identificar seus eventos e calcular os parâmetros necessários para responder à sua pergunta (média / mediana, variação, etc.) e também como mantê-los atualizados e funcionando.

mlespiau
fonte
1

Alguns anos atrás (2015), o Google publicou um trabalho de pesquisa sobre o efeito que um evento específico tem em um modelo de série temporal. Você pode ler mais detalhes aqui Inferindo impacto causal usando modelos de séries temporais estruturais bayesianas .

Nesta página do GitHub , você pode encontrar um exemplo detalhado e uma descrição de como ele funciona. Em resumo,

Este pacote R implementa uma abordagem para estimar o efeito causal de uma intervenção projetada em uma série temporal. Por exemplo, quantos cliques diários adicionais foram gerados por uma campanha publicitária? Responder a uma pergunta como essa pode ser difícil quando um experimento aleatório não estiver disponível.

Você treina seu modelo com dados pré-evento e pós-evento e obtém um gráfico como este

insira a descrição da imagem aqui

O primeiro painel mostra os dados e uma previsão contrafactual para o período pós-tratamento. O segundo painel mostra a diferença entre os dados observados e as previsões contrafactuais. Esse é o efeito causal pontual, conforme estimado pelo modelo. O terceiro painel soma as contribuições pontuais do segundo painel, resultando em um gráfico do efeito cumulativo da intervenção.

Executando o seguinte summary(impact), você obtém um resumo e o impacto estimado que o evento teve em seus dados de séries temporais.

A mesma biblioteca também foi portada para Python. Por exemplo aqui

Tasos
fonte