Descoberta causal : O canto do galo faz com que o sol nasça?

10 linhas de código Python para automatizar a descoberta causal que você precisa ver

Foto por Yegor Myznik on Unsplash

O foco da minha pesquisa recente tem sido inferência causal impulsionado pelas crescentes solicitações que recebo de clientes para ir além das previsões de aprendizado de máquina e responder “e se?” digite perguntas para gerar impacto e resultados.

Uma das coisas que me intrigou inicialmente foi - “Como são construídos os diagramas causais?”. Em muitos dos exemplos online, eles parecem ganhar vida totalmente formados, sem nenhuma explicação de como os nós e links foram identificados.

Isso me levou a ler “The Book of Why”, de Judea Pearl e Dana Mackenzie (várias vezes!) E uma visão expressa é que você não pode fazer engenharia reversa de um diagrama causal, também conhecido como Gráfico Acíclico Direcionado (DAG), a partir dos dados. sozinho.

Os dados podem revelar correlação, mas não causalidade, então como é possível “descobrir” a causalidade?

Nota: todos os conjuntos de dados neste artigo são licenciados para uso público, consulte a seção de referências no final do artigo para todas as fontes e referências.

Antes de mergulharmos na descoberta causal, considere…

Entrando no Medium com meu link de indicação (Receberei uma proporção das taxas se você se inscrever usando este link).

Assinar um e-mail gratuito sempre que eu publicar uma nova história.

Dando uma olhada rápida em meus artigos anteriores.

Baixando minha estrutura gratuita de tomada de decisão estratégica baseada em dados.

Visitando meu site de ciência de dados - O blog de dados.

Considere as contagens de valores do seguinte conjunto de dados binários…

Nota: o conjunto de dados do nascer do sol/galo são dados sintéticos criados pelo autor, consulte a seção de referências no final do artigo para obter a fonte completa e detalhes de referência.

Imagem do autor

Podemos ver que o galo canta quando o sol nasce em 90.25% das observações, mas como sabemos se o nascer do sol faz o galo cantar ou se o galo canta faz o sol nascer com base apenas nos dados?

O número de casos em que o galo canta quando o sol não está nascendo ou quando o sol nasce, mas o galo permanece em silêncio é virtualmente idêntico (50,000 vs. 47,500), portanto a resposta causal não pode ser encontrada comparando os volumes relativos de dados.

Uma abordagem poderia ser olhar para o aspecto temporal. Se o sol nascer consistentemente antes do galo cantar, isso será um bom indicador de causalidade, mas e se o nosso galo acordar cedo?

A resposta é consultar os especialistas do domínio. Se pudéssemos montar uma equipe com um astrólogo, um físico e um avicultor, eles concluiriam que é o sol que faz o galo cantar e não o contrário!

Foto por Federico Respini on Unsplash

Sem me deixar intimidar pelo nascer do sol e pelo canto dos galos, parti em busca de algo que já existia e que pudesse ser capaz de realizar a magia da descoberta causal com base nos dados.

Existe um algoritmo chamado “NOTEARS” que afirma ser capaz de implementar a descoberta causal, então vamos tentar e ver o que ele pode fazer…

Nota: o conjunto de dados sobre varíola são dados sintéticos criados pelo autor. Consulte a seção de referências no final do artigo para obter a fonte completa e detalhes de referência.

Imagem do autor

Este conjunto de dados modela as relações de causa e efeito nas vacinações contra a varíola. Vamos executar o algoritmo NOTEARS nele e ver o que ele pode fazer…

[('Reação?', 'Vacinação?'),
('Varíola?', 'Reação?'),
('Morte?', 'Reação?'),
('Morte?', 'Varíola?')]

Se fôssemos visualizar os resultados produzidos pelo NOTEARS ficaria assim…

Imagem do autor

Não parece muito bom, não é? De acordo com o NOTEARS, a morte está causando a varíola. O aspecto temporal nos diz que a varíola vem em primeiro lugar, portanto não pode ser causada pela morte. Nem a varíola pode causar a reacção (a vacina causa a reacção) e a reacção certamente não pode causar a vacinação.

Usando o conhecimento de especialistas na área, podemos facilmente estabelecer que a vacinação tem um efeito causal sobre se o paciente tem uma reação e se ele desenvolve a doença e a reação e a varíola têm uma ligação causal com a morte…

Imagem do autor

Assim, estabelecemos que mesmo num modelo causal muito simples o algoritmo de descoberta causal NOTEARS não produz resultados corretos. Além disso, um leitor de um dos meus artigos anteriores apontou que o NOTEARS não funciona no Python 3.9 e como estou prestes a atualizar, este é outro grande problema.

Se você quiser ler mais sobre a inadequação do NOTEARS para causalidade, aqui está um excelente artigo acadêmico - https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser e Maksim Sipos).

Antes de desistirmos da descoberta causal totalmente automatizada, vamos dar uma olhada em uma alternativa ao NOTEARS, o algoritmo “Lasso” –

Nota: o conjunto de dados de renda do censo / rendimentos de pós-graduação é licenciado para uso público. Consulte a seção de referências no final do artigo para obter a fonte completa e detalhes de referência.

Imagem do autor
Imagem do autor

Nossa, Lasso é um desastre! Previu que tudo está causando todo o resto e que os nós também causam a si mesmos!

Minhas tentativas finais foram testar os algoritmos GES, GIES e LINGAM, mas todos exigem bibliotecas R. Eu não uso R e mesmo que conseguisse acertar a configuração, nunca seria capaz de criar código portátil que outros cientistas de dados pudessem usar.

As bibliotecas e algoritmos de descoberta causal disponíveis não funcionam e isto reforçou a visão expressa no “Livro do Porquê”, ou seja, que a causalidade não pode ser submetida a engenharia reversa apenas a partir de dados.

Esta conclusão me levou a desenvolver minha própria abordagem…

Foto por Amanda Jones on Unsplash

Cartas na mesa, não escrevi um algoritmo de descoberta causal. Em vez disso, meu algoritmo implementa a descoberta correlativa com uma variação (sem trocadilhos!).

Quando desisti das bibliotecas de descoberta causal, ainda precisava de uma forma de visualizar a causalidade como ponto de partida para a conversa com especialistas no domínio.

Raciocinei que poderia calcular facilmente as correlações entre os recursos/nós e que isso seria pelo menos um bom ponto de partida.

Desenvolvi meu pensamento da seguinte maneira: em modelos de descoberta causal, geralmente identificamos o “efeito”, ou seja, o recurso de dados em que estamos interessados ​​(como o “alvo” nas previsões de aprendizado de máquina). No exemplo da varíola, isso é “Morte?”, e no exemplo dos rendimentos dos graduados, é o rendimento “maior, Obrigado50 mil”.

Portanto, se houver correlações entre qualquer característica e o “efeito”, a direção causal deve ser das outras características para o efeito, pois está no “fim da linha”.

Meu próximo passo foi desenvolver um algoritmo recursivo que pode ser visualizado da seguinte forma…

Imagem do autor

Duplicados e links bidirecionais devem ser excluídos à força. Eu também queria poder incluir ou excluir explicitamente conexões (arestas) e excluir explicitamente recursos (nós).

Estas são as 10 linhas de código Python recursivo que criei para implementar a descoberta causal

Para mostrar como funciona a solução selecionei alguns dados de cancelamento de reservas de hotéis.

Vamos começar lendo os dados e dando uma olhada nas correlações…

Observação: o conjunto de dados de reservas de hotéis é licenciado para uso público. Consulte a seção de referências no final do artigo para obter a fonte completa e detalhes de referência.

Imagem do autor

A primeira execução do algoritmo de descoberta envolve manter as iterações em 1, de modo que estamos apenas observando as correlações (que devem ser causais) com o “efeito”, ou seja, se a reserva do hotel foi cancelada ou não…

Imagem do autor

OK, não é um mau começo, vamos aumentar o número de iterações/recursões/camadas para 3, ajustar um pouco o limite de correlação e ver o que obtemos…

Imagem do autor

OK, também não é tão ruim, mas está um pouco “ocupado”, então o próximo passo é excluir alguns dos nós que suspeitamos que possam estar causando algum ruído (nota: em um caso de negócios do mundo real, estaríamos conversando com nossos especialistas de domínio nesta fase).

Imagem do autor

Isso está começando a parecer melhor. Lembre-se de que meu algoritmo está confiante de que os links para “IsCancelled” são causais porque é o “efeito”, portanto, nada vem depois dele.

As outras camadas da árvore são apenas correlativas, porém, a direção das setas foi adicionada com base simplesmente na ordem em que o algoritmo as encontrou.

Trabalhando com especialistas do domínio (ou com minha própria experiência em reservas de hotéis, neste caso!) Percebi o seguinte –

  • O link de “DifferentRoomAssigned” para “LeadTime” está na direção errada porque um longo prazo de reserva aumenta a probabilidade de a reserva do quarto mudar e não vice-versa.
  • A correlação entre “BookingChanges” e “DifferentRoomAssigned” está abaixo do limite, mas pode ser uma causalidade significativa, por isso precisa ser incluída.

A próxima tentativa instrui o algoritmo a fazer essas correções –

Imagem do autor

Um “confundidor não observado” é um fator que acreditamos estar impactando nosso modelo causal ao fornecer uma ligação entre alguns dos nós, mas que não foi medido e, portanto, não foi incluído no diagrama.

Minha experiência em ir a hotéis e meu conhecimento do conjunto de dados de hotéis me fizeram suspeitar que havia um “confundidor não observado” afetando os dados dos hotéis.

Existem dois hotéis nos dados – um hotel “urbano” e um hotel “resort”. Isso me levou a levantar a hipótese de que o fator de confusão não observado neste modelo causal é o “motivo da estadia no hotel”.

Minha hipótese é que os turistas ficam principalmente no hotel resort e os empresários e turistas ficam principalmente no hotel urbano.

Além disso, levantei a hipótese de que estes dois grupos têm comportamentos diferentes e que este é o “confundidor não observado” (não observado porque os dados não captam o “motivo da estadia”).

NOTEARS e outros algoritmos semelhantes não podem explicar “fatores de confusão não observados”, mas o algoritmo que desenvolvi pode levá-los em consideração, incluindo-os explicitamente como segue…

Imagem do autor

O resultado da iteração final é uma visualização plausível, legível e compreensível para a causalidade nos dados do hotel que eu teria confiança para explorar e refinar com os especialistas do domínio. Esses são os pontos-chave…

  • Existe um “confundidor não observado” que é o principal motivo da estadia (férias vs. negócios / férias na cidade).
  • O “País” tem um efeito causal no fator de confusão não observado – aqueles que viajam de alguns países têm maior probabilidade de estar de férias.
  • O mesmo se aplica a “TotalGuests”. As grandes festas têm maior probabilidade de ser férias, os solteiros em viagens de negócios e os duplos em férias na cidade.
  • O “motivo da estadia” não observado tem efeito causal no “LeadTime”, “HotelType” e “DepositType”.
  • “LeadTime”, “DifferentRoomAssigned”, “HotelType”, “DepositType” e “Motivo da estadia” (U) têm todos um efeito causal em “IsCanceled”.

Descoberta Causal é o processo de ir além das ligações correlativas para descobrir ligações causais (ou seja, a que extremidade da linha correlativa a seta pertence?). Isso não é possível, ou pelo menos proibitivamente difícil, de automatizar com algoritmos como o NOTEARS porque as respostas não existem apenas nos dados.

No entanto, ainda existe uma necessidade crítica de visualizar a causalidade para que ela possa ser explorada com especialistas no domínio, a fim de construir um diagrama causal (também conhecido como Gráfico Acíclico Direcionado ou DAG).

Neste artigo, um algoritmo baseado no aumento da descoberta correlativa foi proposto usando apenas 10 linhas de código Python que pode ser usado com especialistas do domínio para refinar repetidamente a sensibilidade (limiar) e para corrigir, adicionar ou remover os links (setas) e excluir irrelevantes. nós.

Em artigos futuros, esses diagramas causais serão usados ​​para construir um modelo causal completo de aprendizado de máquina que possa responder aos complexos “e se?” digite perguntas de clientes e líderes empresariais.

Se você gostou deste artigo, considere…

Entrando no Medium com meu link de indicação (Receberei uma proporção das taxas se você se inscrever usando este link).

Assinar um e-mail gratuito sempre que eu publicar uma nova história.

Dando uma olhada rápida em meus artigos anteriores.

Baixando minha estrutura gratuita de tomada de decisão estratégica baseada em dados.

Visitando meu site de ciência de dados - O blog de dados.

Dados do Nascente do Sol / Canto do Galo

Dados sobre varíola

Ganhos de pós-graduação/dados de renda do censo

Dados de reservas de hotéis

Descoberta causal: o canto do galo faz com que o sol nasça? Republicado da fonte https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 via https://towardsdatascience. com/feed

<!–

->

Carimbo de hora:

Mais de Consultores Blockchain