因果関係の発見: おんどりの鳴き声が太陽を昇らせるのか?

必ず確認しなければならない因果関係の発見を自動化するための 10 行の Python コード

による写真 エゴール・ミズニック on Unsplash

私の最近の研究の焦点は、 因果推論 機械学習による予測を超えて、「もしもの場合」への答えを求めるお客様からのリクエストが増えていることが原動力となっています。影響と結果を促進するために質問を入力します。

最初に私が興味をそそられたことの 1 つは、「因果関係図はどのように構築されるのか?」ということでした。オンラインの例の多くでは、ノードとリンクがどのように識別されたかについての説明がなく、完全に形成された状態で存在しているように見えます。

これをきっかけに、私はジューデア・パールとダナ・マッケンジーの『The Book of Why』を(何度も!)読みました。そこで表明された見解の 1 つは、有向非巡回グラフ (DAG) としても知られる因果図をデータからリバース エンジニアリングすることはできないというものでした。一人で。

データは相関関係を明らかにすることはできますが、因果関係を明らかにすることはできません。では、因果関係を「発見」するにはどうすればよいでしょうか?

注: この記事のすべてのデータセットは公的使用が許可されています。すべてのソースと参考文献については、記事の最後にある参考文献セクションを参照してください。

因果関係の発見に入る前に、次のことを考慮してください…

紹介リンクを使用して Medium に参加する (このリンクを使用してサインアップした場合、料金の一部を私が受け取ります)。

新しい記事を公開するたびに無料の電子メールを購読する.

過去の記事をざっと振り返ってみると、.

無料の戦略的データ主導型意思決定フレームワークをダウンロードする.

私のデータ サイエンス Web サイトにアクセスする — データブログ.

次のバイナリ データ セットからの値のカウントを考えてみましょう。

注: 日の出 / 雄鶏のデータ セットは著者によって作成された合成データです。完全なソースと参照の詳細については、記事の最後にある参考セクションを参照してください。

著者による画像

観測結果の 90.25% で、日の出とともにおんどりが鳴くことが分かりましたが、データだけから、日の出によっておんどりが鳴くのか、それともおんどりの鳴き声によって太陽が昇るのかをどうやって知ることができるのでしょうか?

太陽が昇っていないときにおんどりが鳴く場合と、太陽が昇ってもおんどりが沈黙している場合の数は実質的に同じであるため (50,000 対 47,500)、データの相対量を比較することによって因果関係の答えを見つけることはできません。

1 つのアプローチは、時間的な側面に注目することです。おんどりが鳴く前に太陽が一貫して昇るなら、それは因果関係を示す良い指標になりますが、おんどりが早起きだったらどうなるでしょうか?

答えは、ドメインの専門家に相談することです。もし私たちが占星術師、物理学者、養鶏業者でチームを結成できたら、彼らは太陽のせいでおんどりが鳴くのではなく、その逆ではないと結論付けるでしょう。

による写真 フェデリコ・レスピーニ on Unsplash

日が昇るのにも、おんどりが鳴くにもひるむことなく、私はデータに基づいて因果関係を発見する魔法を実行できるかもしれない、すでに世の中に存在するものを探しに出発しました。

因果関係の発見を実装できると主張する「NOTEARS」と呼ばれるアルゴリズムがあるので、それを試して何ができるかを見てみましょう...

注: 天然痘データ セットは著者によって作成された合成データです。完全なソースと参照の詳細については、記事の最後にある参考セクションを参照してください。

著者による画像

このデータセットは、天然痘ワクチン接種における因果関係をモデル化しています。それに対してNOTEARSアルゴリズムを実行して、何ができるかを見てみましょう…

[('反応?'、'ワクチン接種?'),
(「天然痘?」、「反応?」)、
(「死?」、「反応?」)、
(「死?」、「天然痘?」)]

NOTEARS によって生成された結果を視覚化すると、次のようになります…

著者による画像

見た目はあまり良くありませんよね? NOTEARSによると、死が天然痘の原因となっているそうです。時間的な側面からは、天然痘が最初に発生するため、死亡によって引き起こされることはあり得ないことがわかります。また、天然痘が反応を引き起こすことはなく(ワクチンが反応を引き起こす)、その反応がワクチン接種を引き起こすことは確かにあり得ません。

専門家の知識を活用すれば、ワクチン接種が患者に反応があるかどうか、また病気を発症し続けるかどうかに因果関係があり、反応と天然痘は両方とも死亡との因果関係があることを簡単に証明できます…

著者による画像

したがって、非常に単純な因果モデルであっても、NOTEARS 因果発見アルゴリズムは正しい結果を生成しないことがわかりました。また、私の以前の記事の読者が、NOTEARS が Python 3.9 では動作しないことを指摘しました。私はこれからアップグレードしようとしているので、これも大きな問題です。

注記が因果関係に適していないことについて詳しく読みたい場合は、ここにある優れた学術論文をご覧ください。 https://arxiv.org/pdf/2104.05441.pdf (マーカス・カイザーとマクシム・シポス)。

完全に自動化された因果関係の発見を諦める前に、NOTEARS の代替となる「なげなわ」アルゴリズムを見てみましょう。

注: 国勢調査の収入/卒業生の収入データセットは公的使用が許可されています。完全な出典と参考情報の詳細については、記事の最後にある参考セクションを参照してください。

著者による画像
著者による画像

ああ、なげなわは大惨事です!すべてが他のすべてを引き起こしており、ノード自体も同様に原因であると予測しました。

私の最後の試みは、GES、GIES、および LINGAM アルゴリズムを試すことでしたが、これらはすべて R ライブラリを必要としました。私は R を使用しません。たとえ正しく構成できたとしても、他のデータ サイエンティストが使用できる移植可能なコードを作成することはできません。

利用可能な因果関係発見ライブラリやアルゴリズムは機能せず、これにより、「The Book of Why」で表現された見解、つまりデータのみから因果関係をリバースエンジニアリングすることはできないという見解が強化されました。

この結論により、私は独自のアプローチを開発することになりました。

による写真 アマンダジョーンズ on Unsplash

テーブルの上のカード、私は因果関係発見アルゴリズムを書いていません。むしろ、私のアルゴリズムは、ひねりを加えた相関発見を実装しています (冗談ではありません!)。

因果関係発見ライブラリを諦めたときでも、分野の専門家との会話の出発点として因果関係を視覚化する方法が必要でした。

私は、特徴/ノード間の相関関係を簡単に計算でき、これが少なくとも良い出発点になるだろうと考えました。

私は次のように考えを発展させました。因果発見モデルでは、通常、「効果」、つまり関心のあるデータの特徴 (機械学習予測における「ターゲット」など) を特定します。天然痘の例では「Death?」、卒業生の収入の例では「greaterThank50k」です。

したがって、何らかの特徴と「効果」の間に相関関係がある場合、因果関係の方向は、「行の終わり」にあるように、他の特徴から効果へ向かうものでなければなりません。

私の次のステップは、次のように視覚化できる再帰的アルゴリズムを開発することでした…

著者による画像

重複リンクと双方向リンクは強制的に除外する必要があります。また、接続 (エッジ) を明示的に含めたり除外したり、フィーチャ (ノード) を明示的に除外したりできるようにしたいと考えていました。

これらは、因果関係の発見を実装するために私が思いついた 10 行の再帰 Python コードです。

ソリューションがどのように機能するかを示すために、ホテルの予約のキャンセルに関するデータをいくつか選択しました。

まずはデータを読み込んで相関関係を覗いてみましょう…

注: ホテル予約データ セットは一般公開が許可されています。完全なソースと参照の詳細については、記事の最後にある参考セクションを参照してください。

著者による画像

検出アルゴリズムの最初の実行では、反復回数を 1 に抑える必要があるため、「効果」、つまりホテルの予約がキャンセルされたかどうかとの相関関係 (因果関係があるはず) だけを調べています。

著者による画像

OK、それは悪いスタートではありません。反復/再帰/レイヤーの数を 3 に増やし、相関しきい値を少し調整して、結果を見てみましょう。

著者による画像

OK、それほど悪くはありませんが、少し「ビジー」なので、次のステップは、ノイズの原因となっている可能性があると思われるノードを除外することです (注: 実際のビジネスケースでは、次のようなノードが考えられます)この段階では当社のドメイン専門家が担当します)。

著者による画像

これで見た目が良くなり始めています。私のアルゴリズムは、「IsCancelled」へのリンクが「効果」であるため因果関係があると確信しており、したがってその後には何も来ないことに注意してください。

ただし、ツリーの他の層は単なる相関関係にあり、矢印の方向はアルゴリズムがそれらを見つけた順序に基づいて追加されただけです。

ドメインの専門家と協力して (この例ではホテル予約に関する私自身の経験もあり)、次のことに気づきました。

  • 「DifferentRoomAssigned」から「LeadTime」へのリンクは間違った方向にあります。これは、予約リードタイムが長いと部屋の予約が変更される可能性が高くなりますが、その逆は当てはまらないためです。
  • 「BookingChanges」と「DifferentRoomAssigned」の間の相関関係はしきい値を下回っていますが、因果関係としては重大である可能性があるため、含める必要があります。

次の試行では、アルゴリズムにこれらの修正を行うように指示します。

著者による画像

「観測されていない交絡因子」は、一部のノード間にリンクを提供することで因果モデルに影響を与えていると考えられる要因ですが、測定されていないため、図には含まれていません。

ホテルに行った経験とホテルのデータセットに関する知識があるため、ホテルのデータに影響を与える「観察されていない交絡因子」が存在するのではないかと疑うようになりました。

データには「シティ」ホテルと「リゾート」ホテルの 2 つのホテルがあります。このことから、この因果モデルにおける観察されていない交絡因子は、 「ホテルに泊まった理由」.

私の仮説はそれです 行楽客は主にリゾートホテルに宿泊、ビジネスマンや都市部の観光客は主にシティホテルに宿泊.

さらに、これら 2 つのグループは異なる行動をしており、これが「観察されていない交絡因子」であると仮説を立てました (データが「滞在の理由」を捉えていないため観察されません)。

NOTEARS や他の同様のアルゴリズムでは「観察されていない交絡因子」を考慮することはできませんが、私が開発したアルゴリズムでは、次のように明示的に含めることでそれらを考慮できます。

著者による画像

最終的な反復の結果は、ホテル データの因果関係をもっともらしく、読みやすく、理解しやすい視覚化したものであり、分野の専門家と自信を持って調査し、改良できると考えています。これらが重要なポイントです…

  • 滞在の主な理由である「目に見えない混乱要因」があります(休暇とビジネス/都会での休暇)。
  • 「国」は観察されていない交絡因子に因果関係をもたらします。一部の国からの旅行者は休暇中である可能性が高くなります。
  • 「TotalGuests」についても同様です。大人数のパーティーは休暇をとり、シングルは出張、ダブルは都市部で休暇をとる可能性が高くなります。
  • 観測されていない「滞在理由」は、「LeadTime」、「HotelType」、「DepositType」に因果関係をもたらします。
  • 「LeadTime」、「DifferentRoomAssigned」、「HotelType」、「DepositType」、「Reason for Stay」(U)はすべて、「IsCanceled」に因果関係があります。

因果関係の発見 相関関係を超えて因果関係を発見するプロセスです (つまり、矢印は相関線のどちらの端に属しますか?)。答えはデータだけでは存在しないため、NOTEARS のようなアルゴリズムでこれを自動化することは不可能、または少なくとも法外に困難です。

ただし、因果関係図 (有向非巡回グラフまたは DAG とも呼ばれます) を構築するために、ドメインの専門家と協力して因果関係を調査できるように、因果関係を視覚化することが依然として重要です。

この記事では、わずか 10 行の Python コードを使用して、相関発見の強化に基づくアルゴリズムが提案されています。このアルゴリズムは、ドメインの専門家と協力して感度 (しきい値) を繰り返し調整し、リンク (矢印) を修正、追加、削除し、無関係なものを除外するために使用できます。ノード。

今後の記事では、これらの因果図を使用して、複雑な「もしも」に答えることができる本格的な因果機械学習モデルを構築する予定です。顧客やビジネスリーダーからの質問を入力します。

この記事を気に入っていただけましたら、ぜひご検討ください…

紹介リンクを使用して Medium に参加する (このリンクを使用してサインアップした場合、料金の一部を私が受け取ります)。

新しい記事を公開するたびに無料の電子メールを購読する.

過去の記事をざっと振り返ってみると、.

無料の戦略的データ主導型意思決定フレームワークをダウンロードする.

私のデータ サイエンス Web サイトにアクセスする — データブログ.

日の出・雄鶏の鳴き声データ

天然痘データ

大学院生の収入/国勢調査の収入データ

ホテル予約データ

因果関係の発見: おんどりの鳴き声が太陽を昇らせるのか?ソース https://towardsdatascience.com/causal-discovery-does-the-cockerel-crowing-cause-the-sun-to-rise-f4308453ecfa?source=rss—-7f60cf5620c9—4 から https://towardsdatascience 経由で再公開されました。 com/フィード

<!–

–>

タイムスタンプ:

より多くの ブロックチェーンコンサルタント