Descubrimiento causal: ¿El canto del gallo hace que salga el sol?

10 líneas de código Python para automatizar el descubrimiento causal que tienes que ver

Foto por Egor Míznik on Unsplash

El foco de mi investigación reciente ha sido inferencia causal impulsado por las crecientes solicitudes que recibo de los clientes para ir más allá de las predicciones del aprendizaje automático y responder "¿qué pasaría si?" Escriba preguntas para impulsar el impacto y los resultados.

Una de las cosas que me intrigó inicialmente fue: "¿Cómo se construyen los diagramas causales?". En muchos de los ejemplos en línea, parecen cobrar vida completamente formados sin explicación de cómo se identificaron los nodos y enlaces.

Esto me llevó a leer "El libro del por qué" de Judea Pearl y Dana Mackenzie (¡varias veces!) y una opinión expresada es que no se puede aplicar ingeniería inversa a un diagrama causal, también conocido como gráfico acíclico dirigido (DAG), a partir de los datos. solo.

Los datos pueden revelar correlación pero no causalidad, entonces, ¿cómo es posible “descubrir” la causalidad?

Nota: todos los conjuntos de datos de este artículo tienen licencia para uso público; consulte la sección de referencias al final del artículo para conocer todas las fuentes y referencias.

Antes de sumergirnos en el descubrimiento causal, considere...

Unirse a Medium con mi enlace de referencia (Recibiré una proporción de las tarifas si te registras usando este enlace).

Suscribirme a un correo electrónico gratuito cada vez que publique una nueva historia..

Echando un vistazo rápido a mis artículos anteriores..

Descargando mi marco de toma de decisiones estratégico basado en datos gratuito.

Visitando mi sitio web de ciencia de datos: El blog de datos.

Considere los recuentos de valores del siguiente conjunto de datos binarios...

Nota: el conjunto de datos de salida del sol/gallo son datos sintéticos creados por el autor; consulte la sección de referencias al final del artículo para obtener la fuente completa y los detalles de referencia.

Imagen del autor

Podemos ver que el gallo canta cuando sale el sol en el 90.25% de las observaciones, pero ¿cómo sabemos si la salida del sol hace que el gallo cante o el canto del gallo hace que el sol salga basándonos únicamente en los datos?

El número de casos en los que el gallo canta cuando el sol no sale o cuando el sol sale pero el gallo permanece en silencio son prácticamente idénticos (50,000 frente a 47,500), por lo que la respuesta causal no se puede encontrar comparando los volúmenes relativos de datos.

Un enfoque podría ser mirar el aspecto temporal. Si el sol sale constantemente antes que el gallo cante, será un buen indicador de causalidad, pero ¿qué pasa si nuestro gallo se levanta temprano?

La respuesta es consultar a los expertos en el campo. Si pudiéramos formar un equipo con un astrólogo, un físico y un avicultor, llegarían a la conclusión de que es el sol el que hace cantar al gallo y no al revés.

Foto por Federico Respini on Unsplash

Sin dejarme intimidar por la salida del sol y el canto de los gallos, partí en busca de algo que ya existía y que pudiera realizar la magia del descubrimiento causal basado en los datos.

Existe un algoritmo llamado "NOTEARS" que afirma ser capaz de implementar el descubrimiento causal, así que intentémoslo y veamos qué puede hacer...

Nota: el conjunto de datos sobre la viruela son datos sintéticos creados por el autor; consulte la sección de referencias al final del artículo para obtener la fuente completa y los detalles de la referencia.

Imagen del autor

Este conjunto de datos modela las relaciones de causa y efecto en las vacunas contra la viruela. Ejecutemos el algoritmo NOTAARS y veamos qué puede hacer...

[('¿Reacción?', '¿Vacunación?'),
('¿Viruela?', '¿Reacción?'),
('¿Muerte?', '¿Reacción?'),
('¿Muerte?', '¿Viruela?')]

Si tuviéramos que visualizar los resultados producidos por NOTAARS se vería así...

Imagen del autor

No se ve muy bien ¿verdad? Según NOTAARS la muerte es la causa de la viruela. El aspecto temporal nos dice que la viruela viene primero por lo que no puede ser causada por la muerte. La viruela tampoco puede causar la reacción (la vacuna causa la reacción) y la reacción ciertamente no puede causar la vacunación.

Utilizando el conocimiento de los expertos en el campo, podemos establecer fácilmente que la vacunación tiene un efecto causal sobre si el paciente tiene una reacción y si continúa desarrollando la enfermedad, y tanto la reacción como la viruela tienen un vínculo causal con la muerte...

Imagen del autor

Así, hemos establecido que incluso en un modelo causal muy simple, el algoritmo de descubrimiento causal de NOTAARS no produce resultados correctos. Además, un lector de uno de mis artículos anteriores señaló que NOTAARS no funciona en Python 3.9 y, como estoy a punto de actualizar, este es otro gran problema.

Si desea leer más sobre la inadecuación de NOTAARS para la causalidad, aquí tiene un excelente artículo académico: https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser y Maksim Sipos).

Antes de renunciar al descubrimiento causal totalmente automatizado, echemos un vistazo a una alternativa a NOTAARS, el algoritmo "Lasso":

Nota: el conjunto de datos de ingresos del censo/ingresos de graduados tiene licencia para uso público; consulte la sección de referencias al final del artículo para obtener la fuente completa y los detalles de referencia.

Imagen del autor
Imagen del autor

¡Dios mío, Lasso es un desastre! ¡Ha predicho que todo está causando todo lo demás y que los nodos también se causan a sí mismos!

Mis últimos intentos fueron probar los algoritmos GES, GIES y LINGAM, pero todos requieren bibliotecas R. No uso R e incluso si lograra lograr la configuración correcta, nunca podría crear código portátil que otros científicos de datos pudieran usar.

Las bibliotecas y algoritmos de descubrimiento causal que están disponibles no funcionan y esto ha reforzado la opinión expresada en “El libro del por qué”, es decir, que la causalidad no se puede aplicar ingeniería inversa a partir de datos únicamente.

Esta conclusión me llevó a desarrollar mi propio enfoque...

Foto por Amanda jones on Unsplash

Cartas sobre la mesa: no he escrito un algoritmo de descubrimiento causal. Más bien, mi algoritmo implementa el descubrimiento correlativo con un giro (¡sin juego de palabras!).

Cuando abandoné las bibliotecas de descubrimiento causal, todavía necesitaba una forma de visualizar la causalidad como punto de partida para la conversación con expertos en el dominio.

Razoné que podía calcular fácilmente las correlaciones entre las características/nodos y que este sería al menos un buen punto de partida.

Desarrollé mi pensamiento de la siguiente manera: en los modelos de descubrimiento causal generalmente identificamos el "efecto", es decir, la característica de los datos que nos interesa (como el "objetivo" en las predicciones del aprendizaje automático). En el ejemplo de la viruela, esto es “¿Muerte?”, y en el ejemplo de los ingresos de los graduados son los ingresos “mayoresGracias50k”.

Por lo tanto, si hay correlaciones entre cualquier característica y el "efecto", la dirección causal debe ser desde las otras características hacia el efecto tal como está al "final de la línea".

Mi siguiente paso fue desarrollar un algoritmo recursivo que se puede visualizar de la siguiente manera...

Imagen del autor

Se deben excluir por la fuerza los enlaces duplicados y bidireccionales. También quería poder incluir o excluir explícitamente conexiones (bordes) y excluir explícitamente funciones (nodos).

Estas son las 10 líneas de código Python recursivo que se me ocurrieron para implementar el descubrimiento causal.

Para mostrar cómo funciona la solución, he seleccionado algunos datos sobre datos de cancelación de reservas de hotel.

Comencemos leyendo los datos y echando un vistazo a las correlaciones...

Nota: el conjunto de datos de reservas de hotel tiene licencia para uso público; consulte la sección de referencias al final del artículo para obtener la fuente completa y los detalles de referencia.

Imagen del autor

La primera ejecución del algoritmo de descubrimiento implica mantener las iteraciones en 1, por lo que solo estamos mirando las correlaciones (que deberían ser causales) con el "efecto", es decir, si la reserva del hotel se cancela o no...

Imagen del autor

Bien, ese no es un mal comienzo, aumentemos el número de iteraciones/recursiones/capas a 3, modifiquemos un poco el umbral de correlación y veamos qué obtenemos...

Imagen del autor

Vale, tampoco está tan mal, pero está un poco “ocupado”, por lo que el siguiente paso es excluir algunos de los nodos que sospechamos que podrían estar causando parte del ruido (nota: en un caso de negocios del mundo real estaríamos hablando con nuestros expertos en el dominio en esta etapa).

Imagen del autor

Esto empieza a verse mejor. Recuerde que mi algoritmo confía en que los enlaces a "IsCancelled" son causales porque es el "efecto", por lo tanto, no viene nada después.

Sin embargo, las otras capas del árbol son simplemente correlativas; la dirección de las flechas se agregó basándose simplemente en el orden en que las encontró el algoritmo.

Trabajando con los expertos en el dominio (¡o con mi propia experiencia en reservas de hotel en este caso!) Noté lo siguiente:

  • El vínculo de "DifferentRoomAssigned" a "LeadTime" está en la dirección incorrecta porque un tiempo de espera de reserva prolongado aumenta la probabilidad de que la reserva de la habitación cambie y no al revés.
  • La correlación entre "BookingChanges" y "DifferentRoomAssigned" está por debajo del umbral, pero puede ser una causalidad significativa, por lo que es necesario incluirla.

El siguiente intento indica al algoritmo que realice estas correcciones:

Imagen del autor

Un "factor de confusión no observado" es un factor que creemos que está impactando nuestro modelo causal al proporcionar un vínculo entre algunos de los nodos, pero que no se ha medido y, por lo tanto, no se ha incluido en el diagrama.

Mi experiencia yendo a hoteles y mi conocimiento del conjunto de datos de los hoteles me hicieron sospechar que existe un "factor de confusión no observado" que afecta los datos de los hoteles.

Hay dos hoteles en los datos: un hotel “urbano” y un hotel “resort”. Esto me lleva a plantear la hipótesis de que el factor de confusión no observado en este modelo causal es el “motivo de la estancia en el hotel”.

Mi hipótesis es que los turistas se alojan principalmente en el hotel resort y la gente de negocios y los viajeros urbanos se alojan principalmente en el hotel urbano.

Además, he planteado la hipótesis de que estos dos grupos tienen comportamientos diferentes y que este es el “factor de confusión no observado” (no observado porque los datos no capturan el “motivo de la estadía”).

NOTAARS y otros algoritmos similares no pueden tener en cuenta los "factores de confusión no observados", pero el algoritmo que he desarrollado puede tenerlos en cuenta al incluirlos explícitamente de la siguiente manera...

Imagen del autor

El resultado de la iteración final es una visualización plausible, legible y comprensible de la causalidad en los datos del hotel que estaría seguro de explorar y perfeccionar con los expertos en el campo. Estos son los puntos clave…

  • Existe un “factor de confusión no observado” que es el motivo principal de la estadía (vacaciones versus negocios/escapada a la ciudad).
  • El “país” tiene un efecto causal sobre el factor de confusión no observado: quienes viajan desde algunos países tienen más probabilidades de estar de vacaciones.
  • Lo mismo se aplica a "TotalGuests". Es más probable que los grupos grandes estén de vacaciones, los solteros en viajes de negocios y los dobles en escapadas a la ciudad.
  • El “motivo de la estancia” no observado tiene un efecto causal en “LeadTime”, “HotelType” y “DepositType”.
  • “LeadTime”, “DifferentRoomAssigned”, “HotelType”, “DepositType” y “Reason for Stay” (U) tienen todos un efecto causal en “IsCanceled”.

Descubrimiento causal es el proceso de ir más allá de los vínculos correlativos para descubrir vínculos causales (es decir, ¿a qué extremo de la línea correlativa pertenece la flecha?). Esto no es posible, o al menos prohibitivamente difícil, de automatizar con algoritmos como NOTAARS porque las respuestas no existen únicamente en los datos.

Sin embargo, todavía existe una necesidad crítica de visualizar la causalidad para que pueda ser explorada con expertos en el campo a fin de construir un diagrama causal (también conocido como gráfico acíclico dirigido o DAG).

En este artículo se ha propuesto un algoritmo basado en el aumento del descubrimiento correlativo utilizando solo 10 líneas de código Python que se puede utilizar con expertos en el dominio para refinar repetidamente la sensibilidad (umbral) y corregir, agregar o eliminar enlaces (flechas) y excluir enlaces irrelevantes. nodos.

En artículos futuros, estos diagramas causales se utilizarán para construir un modelo de aprendizaje automático causal completo que pueda responder al complejo "¿y si?". escriba preguntas de clientes y líderes empresariales.

Si te ha gustado este artículo, considera...

Unirse a Medium con mi enlace de referencia (Recibiré una proporción de las tarifas si te registras usando este enlace).

Suscribirme a un correo electrónico gratuito cada vez que publique una nueva historia..

Echando un vistazo rápido a mis artículos anteriores..

Descargando mi marco de toma de decisiones estratégico basado en datos gratuito.

Visitando mi sitio web de ciencia de datos: El blog de datos.

Datos sobre la salida del sol y el canto del gallo

Datos sobre la viruela

Ingresos de graduados/datos de ingresos del censo

Datos de reservas de hotel

Descubrimiento causal: ¿El canto del gallo hace que salga el sol? Republicado desde la fuente https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 a través de https://towardsdatascience. es/alimentar

<!–

->

Sello de tiempo:

Mas de Consultores Blockchain