Récemment, j'ai étudié ** le raisonnement causal / la recherche causale **, donc Décrit un exemple d'implémentation Python de SAM (Structural Agnostic Modeling) [2018], qui est une méthode de ** recherche causale ** utilisant DeepLearning / GAN. Je vais. Je voudrais publier un exemple d'implémentation du réseau Basin le plus célèbre dans un article séparé à une date ultérieure.
Cet article est pour SAM uniquement. Les données utilisées étaient données Titanic.
Le but est de ** rechercher l'existence et la direction des relations causales ** à partir des données, comme le montre la figure ci-dessous. C'est ce qu'on appelle la ** recherche causale **.
Par contre, l'estimation de l'ampleur de ces relations causales (flèches) est appelée ** inférence causale **.
Tout d'abord, je vais expliquer brièvement ce qu'est une ** relation causale **. S'il y a une tendance selon laquelle "plus la variable X est grande, plus la variable Y est grande" ** Supposons qu'il existe une relation causale entre la variable X et la variable Y **.
Quand vous entendez ce mot, quelle est la différence avec le coefficient de corrélation? Certaines personnes peuvent avoir la question, alors je vais expliquer la différence. Vous avez peut-être entendu la célèbre histoire ** «Plus les gens consomment de chocolat, plus il y a de prix Nobel» **. En regardant la figure, il semble y avoir une corrélation entre ces deux variables. Cependant, l'existence ou non d'une ** relation causale ** entre ces deux variables est une autre question.
En général, le chocolat est un produit de luxe et les pays riches sont susceptibles d'en consommer davantage. De plus, plus le pays est riche, plus il dépensera d’argent pour l’éducation et plus il est probable qu’il produira des prix Nobel. Par conséquent, comme le montre la figure ci-dessous, on considère que des variables telles que le «PIB par habitant», qui est un indice montrant la richesse, sont liées.
Une telle fausse corrélation est appelée ** pseudo-corrélation **, et la variable qui produit la pseudo-corrélation est appelée ** facteur d'intrication **. Les variables pseudo-corrélées ne sont ** pas considérées comme ayant une relation causale **. Cependant, si vous calculez le coefficient de corrélation, ce sera une valeur positive assez grande, donc il y a une ** corrélation **.
Ici, je vais résumer à nouveau les termes.
--Il existe une corrélation: ** Lorsque la valeur de la variable X est grande, la variable Y a également tendance à être grande ** --Il existe une relation causale: ** Plus la valeur de la variable X est élevée, plus la variable Y a tendance à l'être ** --Pseudo-corrélation: les variables X et Y sont corrélées mais non causales
En termes de causalité, le fait est que plus X est grand **, plus ** Y est grand. De plus, dans toute relation, la valeur absolue du coefficient de corrélation prend une valeur élevée, donc Ceux-ci ne peuvent pas être distingués uniquement par le coefficient de corrélation.
Référence: Le nombre de lauréats du prix Nobel augmente-t-il à mesure que la consommation de chocolat augmente?
Sur la base du contenu jusqu'à présent, je vais expliquer la méthode de recherche de l'existence et de la direction de la ** relation causale **. Dans cet article, j'expliquerai très brièvement SAM (Structural Agnostic Modeling) [2018], qui est une méthode de recherche causale utilisant Deep Learning / GAN. Je voudrais expliquer le réseau Basian le plus célèbre dans un autre article.
SAM est une méthode qui réalise une recherche causale en utilisant la technologie GAN (Generative Adversarial Network) de Deep Learning. En général, le GAN est composé à peu près d'un générateur et d'un classificateur, et chacun a les rôles suivants. --Generator: entre du bruit et génère de fausses données proches des données entraînées. --Identifier: identifie si les données d'entrée sont authentiques ou fausses
Dans SAM, ** une matrice représentant la cause et l'effet du nombre de variables explicatives x le nombre de variables explicatives ** est donnée à la fonction avant du générateur, et cette matrice est également apprise lorsque le générateur est entraîné. La matrice a une valeur de 0 à 1 et la partie avec une valeur supérieure au seuil est jugée causale. L'image sera la suivante. (Le seuil est de 0,9)
Ceci est une explication assez approximative, mais si vous souhaitez en savoir plus, veuillez vous référer aux documents suivants.
SAM (Structural Agnostic Modeling) [2018] Un exemple d'implémentation Python est décrit.
Téléchargez ** SAM_titanic.ipynb ** et ** titanic.csv ** à partir du GitHub ci-dessous. https://github.com/yuomori0127/SAM_titanic
Si vous souhaitez voir le code sur Google Colab, cliquez ici [https://colab.research.google.com/drive/1eZmDN48eTV69CZmHzQt_T7KoT_IVj7bC?authuser=2#scrollTo=LdgNruwmJkxj/)
L'environnement utilisé ** Google Colab **. Consultez l'article suivant pour savoir comment l'utiliser. Les frais de serveur sont gratuits. Résumé de l'utilisation de Google Colab
Placez les deux fichiers que vous avez téléchargés précédemment dans n'importe quel dossier de ** GooleDrive **.
Ouvrez ** SAM_titanic.ipynb ** à partir de ** Goole Drive ** dans ** Google Colab **.
Tout d'abord, vous avez besoin d'un resemara GPU.
Exécutez ! Nvidia-smi
en haut (Maj + Entrée) et ressemblez jusqu'à ce que vous voyiez Tesla P100.
Vous pouvez fermer dans les 5 fois.
Vous pouvez le réinitialiser à partir des éléments suivants.
Veuillez remplacer le nom du dossier (partie causal_book) du code ci-dessous par le nom du dossier où .ipynb et csv sont placés sur Google Drive.
import os
os.chdir("./drive/My Drive/causal_book/")
Si vous exécutez Runtime
-> ʻExécuter tous les traitements`, tout sera exécuté.
Voici un résumé des résultats de l'exécution. (Seuil 0,6)
Le résultat était que la variable objective Survived flottait (aucune variable explicative n'a de cause à effet).
J'ai pu effectuer une recherche causale en utilisant Deep Learning / GAN, mais il y a plusieurs problèmes. ・ ** SAM a un caractère aléatoire très élevé et le résultat d'apprentissage n'est pas du tout stable ** L'exemple d'exécution prend la valeur moyenne des résultats de l'exécution 5 fois. Le papier était en moyenne 16 fois. ・ ** Le résultat de sortie ne peut pas être évalué ** Dans l'article, l'évaluation a été faite en utilisant AP et la distance de bourdonnement sur la prémisse qu'il y avait une réponse correcte, mais ce n'est pas possible en fonctionnement réel. J'aurais aimé qu'il y ait quelque chose comme la perprexité. ・ ** Les valeurs discrètes ne peuvent pas être utilisées telles quelles, donc les variables explicatives après get_dummies auront un effet causal ** C'est peut-être mon manque d'étude. Compte tenu du fonctionnement réel comme celui-ci, il y a de nombreux points difficiles. C'est peut-être un domaine qui continuera à se développer à l'avenir.
Recommended Posts