Découverte causale : le chant du coq fait-il lever le soleil ?

10 lignes de code Python pour automatiser la découverte causale que vous devez voir

Photo par Egor Myznik on Unsplash

L'objet de mes récentes recherches a été inférence causale motivé par les demandes croissantes que je reçois de la part des clients pour aller au-delà des prédictions de l'apprentissage automatique et répondre aux questions « et si ? » tapez des questions pour générer l’impact et les résultats.

L’une des choses qui m’a intrigué au départ était : « Comment les diagrammes de causalité sont-ils construits ? Dans de nombreux exemples en ligne, ils semblent prendre vie pleinement formés sans aucune explication sur la façon dont les nœuds et les liens ont été identifiés.

Cela m'a amené à lire « The Book of Why » de Judea Pearl et Dana Mackenzie (plusieurs fois !) et un point de vue exprimé est qu'il est impossible de procéder à une ingénierie inverse d'un diagramme de causalité, également connu sous le nom de graphe acyclique dirigé (DAG), à partir des données. seul.

Les données peuvent révéler une corrélation mais pas une causalité, alors comment est-il possible de « découvrir » une causalité ?

Remarque : tous les ensembles de données de cet article sont sous licence pour un usage public, veuillez consulter la section références à la fin de l'article pour toutes les sources et références.

Avant de nous lancer dans la découverte causale, veuillez considérer…

Rejoindre Medium avec mon lien de parrainage (Je recevrai une partie des frais si vous vous inscrivez via ce lien).

S'abonner à un e-mail gratuit chaque fois que je publie une nouvelle histoire.

Un rapide coup d'oeil à mes articles précédents.

Téléchargement gratuit de mon cadre de prise de décision stratégique basé sur les données.

Visiter mon site Web de science des données – Le blog des données.

Considérez le nombre de valeurs de l’ensemble de données binaires suivant…

Remarque : l'ensemble de données sur le lever du soleil et le coq est constitué de données synthétiques créées par l'auteur. Veuillez consulter la section références à la fin de l'article pour connaître les détails complets de la source et des références.

Image par auteur

Nous pouvons voir que le coq chante lorsque le soleil se lève dans 90.25 % des observations, mais comment savoir si le lever du soleil fait chanter le coq ou si le chant du coq fait lever le soleil en se basant uniquement sur les données ?

Le nombre de cas où le coq chante lorsque le soleil ne se lève pas ou lorsque le soleil se lève mais le coq reste silencieux est pratiquement identique (50,000 47,500 contre XNUMX XNUMX), de sorte que la réponse causale ne peut pas être trouvée en comparant les volumes relatifs de données.

Une approche pourrait consister à examiner l’aspect temporel. Si le soleil se lève régulièrement avant le chant du coq, ce sera un bon indicateur de causalité, mais que se passe-t-il si notre coq se lève tôt ?

La réponse est de consulter les experts du domaine. Si nous pouvions constituer une équipe composée d'un astrologue, d'un physicien et d'un éleveur de volailles, ils concluraient que c'est le soleil qui fait chanter le coq et non l'inverse !

Photo par Federico Respini on Unsplash

Sans me laisser décourager par le lever du soleil et le chant des coqs, je suis parti à la recherche de quelque chose qui existait déjà et qui pourrait être capable d'effectuer la magie de la découverte causale basée sur les données.

Il existe un algorithme appelé « NOTEARS » qui prétend être capable de mettre en œuvre la découverte causale, alors essayons-le et voyons ce qu'il peut faire…

Remarque : l'ensemble de données sur la variole est constitué de données synthétiques créées par l'auteur. Veuillez consulter la section références à la fin de l'article pour connaître les détails complets de la source et des références.

Image par auteur

Cet ensemble de données modélise les relations de cause à effet dans les vaccinations contre la variole. Exécutons l'algorithme NOTEARS et voyons ce qu'il peut faire…

[('Réaction ?', 'Vaccination ?'),
(« Variole ? », « Réaction ? »),
(« Mort ? », « Réaction ? »),
(« Mort ? », « Variole ? »)]

Si nous devions visualiser les résultats produits par NOTEARS, cela ressemblerait à ceci…

Image par auteur

Ça n'a pas l'air très bien, n'est-ce pas ? Selon NOTEARS, la mort est à l'origine de la variole. L’aspect temporel nous dit que la variole vient en premier et ne peut donc pas être causée par la mort. La variole ne peut pas non plus provoquer la réaction (le vaccin provoque la réaction) et la réaction ne peut certainement pas provoquer la vaccination.

En utilisant les connaissances des experts du domaine, nous pouvons facilement établir que la vaccination a un effet causal sur le fait que le patient ait une réaction et qu’il développe ou non la maladie, et que la réaction et la variole ont toutes deux un lien de causalité avec la mort…

Image par auteur

Ainsi, nous avons établi que même dans un modèle causal très simple, l’algorithme de découverte causale NOTEARS ne produit pas de résultats corrects. De plus, un lecteur de l'un de mes articles précédents a souligné que NOTEARS ne fonctionne pas dans Python 3.9 et que comme je suis sur le point de mettre à niveau, c'est un autre gros problème.

Si vous souhaitez en savoir plus sur l'inadéquation de NOTEARS pour la causalité, voici un excellent article académique — https://arxiv.org/pdf/2104.05441.pdf (Marcus Kaiser et Maksim Sipos).

Avant d'abandonner la découverte causale entièrement automatisée, examinons une alternative à NOTEARS, l'algorithme « Lasso » –

Remarque : l'ensemble de données sur les revenus du recensement et les gains des diplômés est sous licence pour un usage public. Veuillez consulter la section références à la fin de l'article pour connaître les détails complets de la source et des références.

Image par auteur
Image par auteur

Oh mon Dieu, Lasso est un désastre ! Il a prédit que tout provoque tout le reste et que les nœuds se provoquent également !

Mes dernières tentatives ont consisté à essayer les algorithmes GES, GIES et LINGAM, mais ceux-ci nécessitent tous des bibliothèques R. Je n'utilise pas R et même si je parvenais à obtenir la bonne configuration, je ne serais jamais en mesure de créer du code portable que d'autres data scientists pourraient utiliser.

Les bibliothèques et algorithmes de découverte causale disponibles ne fonctionnent pas, ce qui a renforcé le point de vue exprimé dans « Le Livre du Pourquoi », à savoir que la causalité ne peut pas être rétro-conçue à partir des seules données.

Cette conclusion m’a amené à développer ma propre approche…

Photo par Amanda Jones on Unsplash

Cartes sur table, je n’ai pas écrit d’algorithme de découverte causale. Mon algorithme implémente plutôt la découverte corrélative avec une touche d'originalité (sans jeu de mots !).

Après avoir abandonné les bibliothèques de découverte causale, j'avais encore besoin d'un moyen de visualiser la causalité comme point de départ de la conversation avec les experts du domaine.

J'ai pensé que je pourrais facilement calculer les corrélations entre les caractéristiques/nœuds et que ce serait au moins un bon point de départ.

J'ai développé ma réflexion comme suit : dans les modèles de découverte causale, nous identifions généralement « l'effet », c'est-à-dire la caractéristique des données qui nous intéresse (comme la « cible » dans les prédictions d'apprentissage automatique). Dans l'exemple de la variole, il s'agit de « Décès ? » et dans l'exemple des revenus des diplômés, il s'agit de revenus « supérieurs, merci 50 XNUMX ».

Par conséquent, s'il existe des corrélations entre une caractéristique et « l'effet », la direction causale doit aller des autres caractéristiques vers l'effet, car il se situe à la « fin de la ligne ».

Ma prochaine étape a été de développer un algorithme récursif qui peut être visualisé comme suit…

Image par auteur

Les doublons et les liens bidirectionnels doivent être exclus de force. Je voulais également pouvoir inclure ou exclure explicitement des connexions (bords) et exclure explicitement des fonctionnalités (nœuds).

Ce sont les 10 lignes de code Python récursif que j'ai proposées pour implémenter la découverte causale

Pour montrer le fonctionnement de la solution, j'ai sélectionné quelques données sur les données d'annulation des réservations d'hôtel.

Commençons par lire les données et jeter un coup d’œil aux corrélations…

Remarque : l'ensemble de données sur les réservations d'hôtels est sous licence pour un usage public. Veuillez consulter la section références à la fin de l'article pour connaître les détails complets de la source et des références.

Image par auteur

La première exécution de l'algorithme de découverte consiste à maintenir les itérations à 1, nous examinons donc simplement les corrélations (qui devraient être causales) avec « l'effet », c'est-à-dire si la réservation d'hôtel est annulée ou non…

Image par auteur

OK, ce n'est pas un mauvais début, augmentons le nombre d'itérations/récursions/couches à 3, ajustons un peu le seuil de corrélation et voyons ce que nous obtenons…

Image par auteur

OK, pas trop mal non plus, mais c'est un peu « occupé », donc l'étape suivante consiste à exclure certains des nœuds que nous soupçonnons d'être à l'origine d'une partie du bruit (remarque : dans une analyse de rentabilisation réelle, nous parlerions à nos experts du domaine à ce stade).

Image par auteur

Cela commence à paraître mieux. N'oubliez pas que mon algorithme est convaincu que les liens vers « IsCancelled » sont causals car il s'agit de « l'effet », donc rien ne vient après.

Les autres couches de l'arborescence ne sont cependant que corrélatives, la direction des flèches a été ajoutée simplement en fonction de l'ordre dans lequel l'algorithme les a trouvées.

En travaillant avec les experts du domaine (ou ma propre expérience en matière de réservation d'hôtel dans ce cas !), J'ai remarqué ce qui suit :

  • Le lien entre « DifferentRoomAssigned » et « LeadTime » va dans la mauvaise direction, car un délai de réservation long augmente la probabilité que la réservation de la chambre change et non l'inverse.
  • La corrélation entre « BookingChanges » et « DifferentRoomAssigned » est inférieure au seuil, mais elle peut avoir un lien de causalité significatif et doit donc être incluse.

La tentative suivante demande à l'algorithme d'effectuer ces corrections :

Image par auteur

Un « facteur de confusion inobservé » est un facteur qui, selon nous, a un impact sur notre modèle causal en fournissant un lien entre certains nœuds, mais qui n'a pas été mesuré et n'a donc pas été inclus dans le diagramme.

Mon expérience d'aller dans les hôtels et ma connaissance de l'ensemble de données sur les hôtels m'ont fait soupçonner qu'il existe un « facteur de confusion inobservé » affectant les données des hôtels.

Il y a deux hôtels dans les données : un hôtel « de ville » et un hôtel « de villégiature ». Cela m'amène à émettre l'hypothèse que le facteur de confusion non observé dans ce modèle causal est le « raison du séjour à l'hôtel ».

Mon hypothèse est que les vacanciers séjournent principalement dans l'hôtel de villégiature et les hommes d'affaires et les citadins séjournent principalement dans l'hôtel urbain..

De plus, j'ai émis l'hypothèse que ces deux groupes ont des comportements différents et qu'il s'agit là du « facteur de confusion inobservé » (inobservé car les données ne capturent pas la « raison du séjour »).

NOTEARS et d'autres algorithmes similaires ne peuvent pas prendre en compte les « facteurs de confusion non observés », mais l'algorithme que j'ai développé peut les prendre en compte en les incluant explicitement comme suit…

Image par auteur

Le résultat de l'itération finale est une visualisation plausible, lisible et compréhensible de la causalité dans les données hôtelières que je serais sûr d'explorer et d'affiner avec les experts du domaine. Ce sont les points clés…

  • Il existe un « facteur de confusion inobservé » qui est la principale raison du séjour (vacances vs affaires/séjour en ville).
  • Le « pays » a un effet causal sur le facteur de confusion non observé : les personnes voyageant en provenance de certains pays sont plus susceptibles d'être en vacances.
  • Il en va de même pour « TotalGuests ». Les grands groupes sont plus susceptibles d'être en vacances, les célibataires en voyage d'affaires et les doubles en escapade en ville.
  • La « raison du séjour » non observée a un effet causal sur « LeadTime », « HotelType » et « DepositType ».
  • « LeadTime », « DifferentRoomAssigned », « HotelType », « DepositType » et « Reason for Stay » (U) ont tous un effet causal sur « IsCanceled ».

Découverte causale est le processus consistant à aller au-delà des liens corrélatifs pour découvrir des liens causals (c'est-à-dire à quelle extrémité de la ligne corrélative appartient la flèche ?). Ceci n'est pas possible, ou du moins extrêmement difficile, à automatiser avec des algorithmes comme NOTEARS car les réponses n'existent pas dans les seules données.

Cependant, il existe toujours un besoin crucial de visualiser la causalité afin qu'elle puisse être explorée avec des experts du domaine afin de construire un diagramme de causalité (également appelé graphique acyclique dirigé ou DAG).

Dans cet article, un algorithme basé sur la découverte corrélative croissante a été proposé en utilisant seulement 10 lignes de code Python qui peuvent être utilisées avec des experts du domaine pour affiner à plusieurs reprises la sensibilité (seuil) et pour corriger, ajouter ou supprimer les liens (flèches) et exclure les liens non pertinents. nœuds.

Dans les prochains articles, ces diagrammes de causalité seront utilisés pour construire un modèle d’apprentissage automatique causal complet capable de répondre à des questions complexes : « et si ? saisir les questions des clients et des chefs d’entreprise.

Si vous avez apprécié cet article, pensez à…

Rejoindre Medium avec mon lien de parrainage (Je recevrai une partie des frais si vous vous inscrivez via ce lien).

S'abonner à un e-mail gratuit chaque fois que je publie une nouvelle histoire.

Un rapide coup d'oeil à mes articles précédents.

Téléchargement gratuit de mon cadre de prise de décision stratégique basé sur les données.

Visiter mon site Web de science des données – Le blog des données.

Données sur le lever du soleil et le chant du coq

Données sur la variole

Revenus des diplômés/Données sur le revenu du recensement

Données de réservation d’hôtel

Découverte causale : le chant du coq fait-il lever le soleil ? Republié à partir de la source https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 via https://towardsdatascience. com/flux

<!–

->

Horodatage:

Plus de Consultants en blockchain