Colaboratoryで実装しながら学ぶ書籍を執筆しました。PyTorchによる発展ディープラーニング」、以来、約1年ぶりの新刊となります。概要について解説します。本書を執筆したモチベーション最近ではDXが流行りの言葉となり、ビジネスのデジタル化、そして、データ駆動型ビジネス実践の重要性がますます向上しています。それにともない、データ駆動型ビジネスの各種施策を実施した結果を分析し、その効果をきちんと検証する必要があります。そこで因果推論が必要になってきます。分析方法を解説してくれている本がない(少ない)と、感じました(あくまで私の主観ですが)。ある程度理解でき、Pythonでの実装・分析まで解析してる入門書がないな~それでは自分で書こう!と思ったのが、本書を執筆したモチベーションとなります。はじめに因果推論が必要となる架空事例を紹介します。あなたは、企業に勤めており、人事部の部長として働いています。部下を持つ社員のうち、参加を希望した社員全員に実施した「上司向け:部下とのキャリア面談のポイント研修」の研修実施効果について報告を受けています。部下社員のキャリア面談に対する満足度が向上することです。Aさんからは具体的に以下のような報告を受けました。部下社員(上司が、上記のキャリア面談のポイント研修を受講)と、部下社員(上司が研修を未受講)の中から、ランダムに100名ずつを抽出し、【キャリア面談の満足度】をアンケート調査しました各100名ずつの【キャリア面談の満足度】の平均を計算した結果、上司が本研修を受講した社員の満足度平均値は、上司が研修を受けていない社員の満足度平均値よりも高い値となりました今回アンケート調査を実施した部下社員100名ずつはランダムに抽出しています。異なる点は上司が研修を受けたか否かのみですよって「上司向け:部下とのキャリア面談のポイント研修」は、部下のキャリア面談の満足度を向上させる効果がありますなお、研修実施による効果の大きさは、今回調査した部下の【キャリア面談の満足度】の平均値の差となります以上が、部下のAさんから受けた報告です。このように報告を受けたあなたは、違和感を覚えるかと思います。次のような会話が続くでしょう。「Aさん、研修の実施、そして効果検証までありがとう。気になることがあるんだ。研修を受講したことによる【当該社員の部下のキャリア面談の満足度】への効果を検証しているんだよね。「う~ん・・・わざわざ、この**「上司向け:部下とのキャリア面談のポイント研修」を自ら希望して受講する上司は、そもそも【部下育成の熱心さ】**が高い上司だと思う。そんな部下育成に熱心な上司を持つ社員なら、“もし仮にその上司が今回の研修を受けていなくても”、その部下の**【キャリア面談の満足度】**は、研修を受講していない上司を持つ部下の満足度より高くなる気がするんだ。・・・おそらく、このような会話が展開されるかと思います。因果推論に向けてそれでは、人事部長であるあなたが疑問に感じた、今回の会話内容を絵にしてみましょう(図1.1.1)。・矢印1:【上司の部下育成の熱心さ】が高いと、上司が【「上司向け:部下とのキャリア面談のポイント研修」を受講】する確率は高くなる・矢印2:【上司が研修を受講する】と、【部下のキャリア面談への満足度】が高くなるという関係性があります。この矢印2が今回検証している研修の実施効果を示します。・矢印3:【上司の部下育成の熱心さ】が高いと、【部下のキャリア面談への満足度】が高くなるという矢印(関係性)も十分に想像できそうです。よって図1.1.1においては、矢印3の存在も考慮しながら、矢印2による効果を推定しないと、研修実施による効果を正確に推定することはできません。このように他の変数(要因)からの因果の効果(矢印の影響)も考慮しながら、求めたい直接的な因果の効果を推定する手法が因果推論です。※なお、現実世界の職場においては、【部下のキャリア面談の満足度】は図1.1.1のような単純な3変数では表現できないと思います。この図1.1.1は、現実世界を単純にモデル化したものです。そのため、図1.1.1に描かれていない様々な要因は、この3つの変数にそれぞれ独自に影響する(すなわち、各変数にノイズとして加わる)という想定となります。因果推論をしたいデータ今回の例に挙げた人事研修のデータを確認してみましょう。こんな感じのデータが続いています。変数Zが研修の受講を示し、1が受講、0が未受講を示します。この変数Zが1の場合、どれだけ、部下社員の面談の満足度は向上しているのでしょうか?続いて、データをグラフで確認してます。部下の面談の満足度も高くなることが分かります。「では、このデータから、研修Zの効果を求めてください。」これが、企業で働くデータサイエンティストに与えられる課題(の一例)になります。因果推論の方法それでは上記のデータを因果推論します。本記事で因果推論の内容をすべて解説することは困難です。実践入門では、第1章から第3章で、因果推論に必要な事前知識を解説しています。相関と因果の違いを理解しよう」**では、人事研修とテレビCMを例に、施策を受けた集団と受けていない集団で単純に平均値の差を計算するだけでは、処置の効果は求められない点を解説します。平均値の差による推定が上手くいかない原因である疑似相関の概念を解説し、疑似相関が生まれる3つのパターンを解説します。Colaboratory上で、疑似相関が生まれる3パターンを実際にプログラム実装して確認します。種々の因果効果(ATEやATTなど)を紹介します。介入操作であるdoオペレータの紹介と、間接的な因果効果で疑似相関が生まれていると因果推論が困難であるが、介入操作で因果の矢印を消せることを解説します。最後にこの介入操作を、doオペレータを使用せずに数式で記述する調整化公式について説明します。グラフ表現とバックドア基準を理解しよう」**では、構造方程式モデル、因果ダイアグラム、そして有向非循環グラフDAGを導入します。続いてDAGにおいて因果推論を実施するために、考慮すべき変数と無視すべき変数を整理しバックドアパスを閉じるd分離を解説します。第1章から第3章で順番に因果推論に必要な知識を解説し、第4章から、具体的に因果推論の分析プログラムを実装・解説します。因果推論を実装しよう」**では、基本的な因果推論手法である回帰分析、傾向スコアを用いたIPTW法、そして回帰分析とIPTW法を組み合わせたDR法について解説、実装を行います。本記事で紹介しているさきほどの人事研修のデータはこの第4章の基本的な因果推論の手法では正確に効果が推定できない問題になっています。上司の部下育成の熱心さによって変化する、という問題に設定しています。0.1×noizeで疑似データを作成しています。部下の面談の満足度が高くなりますZ×t(x)の項があるので、研修を受講(Z=1)の上司は、t(x)の効果が追加されます(これが研修受講による効果です)。・xが0.5以上だと満足度Yは1.0上昇とします。上司の部下育成の熱心さ、によって変化するという、Zとxが絡む交互作用&非線形状態とします。部下育成に熱心な上司ほど、同じ研修を受講してもその効果が大きいという状況は、現実問題としても妥当なシチュエーションかと思います。最後に、そもそも研修を受講するかどうかのZですが、これはZ_prob=sigmoid(5.0x-5.0*noise)という、シグモイド関数で各人の研修受講確率Z_probを求め、確率Z_probで各人が受講するかどうか決まるとしています。上司の部下育成の熱心さ、が高いほど**「上司向け:部下とのキャリア面談のポイント研修」**を受講する確率が高くなる状況です。以上が、疑似データの生成ルールです。上司が研修を受講したかどうかだけです。今回は非線形な現象の因果推論を行いたいので、非線形な回帰モデルを構築する必要があります。ここで機械学習が出てきます。Learningが一般的であり、本書ではこれらの手法を解説・実装しています。その具体的な手続きは本記事では解説しきれないのですが、S-Learner、X-Learnerを使用して研修効果を求めると以下のような結果になります。S-LearnerよりはX-Learnerの方が正確に求まります。上司の部下育成の熱心さ、によって段階的に研修効果が変化している点がきちんと求まっています。「以下のデータから、研修Zの効果を求めてください。」というビジネス課題に対する、解です。この因果推論分析ができる能力を身につけることが、企業で働くデータサイエンティストとしては重要です。ここまでの因果推論の手法について、一歩ずつ解説します。因果推論では因果の関係性、因果の向きを既知としていました。因果探索ではこの因果関係が不明で、その関係性を推定します。多くの項目をアンケート調査などで収集した後に、調査項目間に存在する因果関係を求める手法です。LiNGAMの実装」**では線形で非巡回、そして非ガウスなノイズによる構造方程式モデルを前提としたLiNGAMによる因果探索について、解説、実装します。独立成分分析と密接に関係していること、構造方程式モデルを求めることがLiNGAMのポイントであり、その点を解説しながら、実際に実装しながら、アルゴリズムの流れを解説します。ベイジアンネットワークの実装」**ではベイジアンネットワークの解説として、はじめにスケルトン、PDAG、条件付き確率表CPTを紹介します。ベイジアンネットワークに対する観測データの当てはまりの良さを示すベイジアンスコアとしてBICを取り挙げ、その計算を解説、実装します。続いて2つの変数の独立性を検定する手法について解説、実装し、3種類のネットワーク推定手法を紹介します。おいては機械学習やディープラーニングだけでなく、ベイジアンネットワークも重要ですが、ベイジアンネットワークについて、簡潔に書かれた書籍は少ないように感じます。本書がベイジアンネットワークの入門として、ベイジアンネットワークの世界観を学べる良い入門書になるように心がけました。本章の内容は、以下のようなイメージです。ディープラーニングを用いた因果探索」**では、ディープラーニングのGAN(敵対的生成ネットワーク)の技術をベースとした因果探索をとりあげ、その概要、ネットワーク構造、そして実際の因果探索の実施について、解説、実装を行います。2020年現在、ディープラーニングを様々な領域で利用する研究が増えており、因果探索の分野でもディープラーニングを利用した研究が進んでいます。Networks)を用いた因果探索などが発表されています。ディープラーニングを用いた因果探索手法は、まだまだ研究が始まったばかりの分野であり、今後より洗練された手法が発表されると考えています。そのため本書にてディープラーニングを用いた因果探索を掲載するか迷いましたが、読者の皆様に、今後発展が期待される分野を感じていただきたいと考えて、本書の最後で解説、実装することとしました。Model)**について、解説、実装を行います。以下のようなイメージで、図解でSAMの概念やネットワーク構成を解説したのちに、実際にコードを実装し、因果探索を実施します。ColaboratoryでGPUを使用して実施します。ColaboratoryでGPUを使用する方法も解説します。さいごに以上、Pythonによる因果推論と因果探索(初心者向け)書籍の紹介でした。サービス(ISID)のAI部開発チームではメンバを絶賛募集中です。