<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>「有向非巡回グラフ」タグの記事一覧Python Tech</title>
	<atom:link href="https://tech.nkhn37.net/tag/%E6%9C%89%E5%90%91%E9%9D%9E%E5%B7%A1%E5%9B%9E%E3%82%B0%E3%83%A9%E3%83%95/feed/" rel="self" type="application/rss+xml" />
	<link>https://tech.nkhn37.net</link>
	<description>Python学習サイト</description>
	<lastBuildDate>Sun, 23 Nov 2025 07:01:56 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.4</generator>

<image>
	<url>https://tech.nkhn37.net/wp-content/uploads/2021/01/cropped-lion-normal-clear-1-32x32.png</url>
	<title>「有向非巡回グラフ」タグの記事一覧Python Tech</title>
	<link>https://tech.nkhn37.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【因果推論】因果ダイアグラムの概要</title>
		<link>https://tech.nkhn37.net/causal-diagrams-with-python/</link>
					<comments>https://tech.nkhn37.net/causal-diagrams-with-python/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 31 Jan 2025 20:00:00 +0000</pubDate>
				<category><![CDATA[因果推論]]></category>
		<category><![CDATA[DAG]]></category>
		<category><![CDATA[GML]]></category>
		<category><![CDATA[NetworkX]]></category>
		<category><![CDATA[因果ダイアグラム]]></category>
		<category><![CDATA[有向非巡回グラフ]]></category>
		<category><![CDATA[隣接行列]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=12139</guid>

					<description><![CDATA[因果推論では、因果ダイアグラムという因果関係を用いたモデルが重要になります。因果関係のグラフ構造を理解するための基本的な知識について解説します。 因果ダイアグラムとは 因果ダイアグラムとは、変数間の因果関係を視覚的に表現 [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">因果推論では、<span class="jinr-d--text-color d--marker1 d--bold">因果ダイアグラム</span>という因果関係を用いたモデルが重要になります。因果関係のグラフ構造を理解するための基本的な知識について解説します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">因果ダイアグラムとは</h2>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">因果ダイアグラム</span>とは、変数間の因果関係を視覚的に表現するためのツールであり、因果推論において非常に重要な役割をします。特に、因果関係の構造を理解し、適切な介入や分析を設計する際に役立ちます。例えば、因果ダイアグラムを用いることで、ある要因が結果にどのように影響を与えるかを明確に表現できます。</p>



<p class="wp-block-paragraph">この記事では、因果ダイアグラムを理解するために必要な基本的なグラフの概念と Python を用いた具体的な表現方法について解説します。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">因果推論では、因果のはしごという重要な概念があります。因果のはしごについては「<a href="https://tech.nkhn37.net/ladder-of-causation-basics/" target="_blank" rel="noreferrer noopener">因果のはしごの概要</a>」でまとめているので参考にしてください。</p>
</div>
		</div></section>





<h3 class="wp-block-heading jinr-heading d--bold">因果ダイアグラムの理解に必要なグラフの概念</h3>



<p class="wp-block-paragraph">因果ダイアグラムを正しく理解するためには、まずグラフの基本的な概念について理解を深めておく必要があります。</p>



<p class="wp-block-paragraph">グラフとは、ノード（頂点）とエッジ（辺）を持った構造のことで因果推論などに限らず様々な分野で利用されています。以降では、グラフの特徴として押さえておくべき事項について説明します。</p>



<h4 class="wp-block-heading jinr-heading d--bold">有向グラフと無向グラフ</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>種類</th><th>概要</th></tr></thead><tbody><tr><td>有向グラフ（directed graph）</td><td>ノード間のエッジに方向性があるグラフのことです。例えば、A → B は「A が B に影響を与える」という意味を持ちます。</td></tr><tr><td>無向グラフ（undirected graph）</td><td>ノード間のエッジに方向性がないグラフです。例えば A ー B は「A と B が関連している」という意味を持ちます。</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="751" height="456" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-1.png" alt="有向グラフと無向グラフ" class="wp-image-12153" style="width:496px;height:auto" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-1.png 751w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-1-300x182.png 300w" sizes="(max-width: 751px) 100vw, 751px" /></figure>
</div>


<h4 class="wp-block-heading jinr-heading d--bold">巡回グラフと非巡回グラフ</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>種類</th><th>概要</th></tr></thead><tbody><tr><td>巡回グラフ（cyclic graph）</td><td>ノードをいくつかたどると、元のノードに戻ることができるパスを持つグラフです。</td></tr><tr><td>非巡回グラフ（acyclic graph）</td><td>元のノードに戻ってくることができるパスが存在しないグラフです。</td></tr></tbody></table></figure>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="760" height="456" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-2.png" alt="巡回グラフと非巡回グラフ" class="wp-image-12154" style="width:504px;height:auto" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-2.png 760w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-2-300x180.png 300w" sizes="(max-width: 760px) 100vw, 760px" /></figure>
</div>


<h4 class="wp-block-heading jinr-heading d--bold">有向非巡回グラフ（Directed Acyclic Graph：DAG）</h4>



<p class="wp-block-paragraph">因果ダイアグラムにおいて特に重要なグラフとして<span class="jinr-d--text-color d--marker1 d--bold">有向非巡回グラフ（Directed Acyclic Graph：DAG）</span>があります。このグラフは、有向グラフでありながら、どのノードからも自身に戻る経路を持たないグラフです。</p>



<p class="wp-block-paragraph">この性質により、因果関係を時間準や論理的な順序に従って表現することができます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="641" height="443" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-3.png" alt="有向非巡回グラフ DAG (Directed Acyclic Graph)" class="wp-image-12156" style="width:423px;height:auto" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-3.png 641w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-3-300x207.png 300w" sizes="(max-width: 641px) 100vw, 641px" /></figure>
</div>


<h3 class="wp-block-heading jinr-heading d--bold">因果ダイアグラムにおける構造パターン</h3>



<p class="wp-block-paragraph">因果ダイアグラムでは、変数間の関係性を表すための代表的な構造として以下の構造があります。</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><th>構造パターン</th><th>概要</th></tr></thead><tbody><tr><td>チェーン（Chain）</td><td>A → B → C のように、各変数が順に影響を与えるような構造です。</td></tr><tr><td>フォーク（Fork）</td><td>A ← B → C のように、1 つの変数 (B) が二つの変数 (A, C) に影響を与える構造です。</td></tr><tr><td>コライダー（Collider）</td><td>A → B ← C のように、2 つの変数 (A, C) が 1 つの変数 (B) に影響を与える構造です。</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">これらの構造の詳細や因果推論おける特徴については「<a href="https://tech.nkhn37.net/causal-diagrams-chain-fork-collider/" target="_blank" rel="noreferrer noopener">チェーン、フォーク、コライダーの構造と特徴</a>」を参考にしてください。まずは、因果推論で重要な構造パターンとして「チェーン」「フォーク」「コライダー」があることを理解しておいてください。</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="307" src="https://tech.nkhn37.net/wp-content/uploads/2025/02/image-12-1024x307.png" alt="因果推論 チェーン フォーク コライダー" class="wp-image-12210" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/02/image-12-1024x307.png 1024w, https://tech.nkhn37.net/wp-content/uploads/2025/02/image-12-300x90.png 300w, https://tech.nkhn37.net/wp-content/uploads/2025/02/image-12-768x231.png 768w, https://tech.nkhn37.net/wp-content/uploads/2025/02/image-12.png 1096w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<h3 class="wp-block-heading jinr-heading d--bold">グラフの表現方法</h3>



<p class="wp-block-paragraph">グラフは、コンピューター上で扱いやすいように表現することが多いです。ここでは、代表的な<span class="jinr-d--text-color d--marker1 d--bold">隣接行列</span>と <span class="jinr-d--text-color d--marker1 d--bold">GML（Graph Modelling Language）</span>の 2 つの方法について説明します。また、Python でグラフのデータ構造やアルゴリズムを扱うためのライブラリである <span class="jinr-d--text-color d--marker1 d--bold">NetworkX</span> を使った実例も紹介します。</p>



<h4 class="wp-block-heading jinr-heading d--bold">隣接行列</h4>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">隣接行列</span>は、グラフを行列形式で表現する方法です。ノードが n 個ある場合には、n × n の行列を用意し、行列の (i, j) 要素が 1 である場合には、ノード i からノード j へのエッジがあることを示しています。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="688" height="343" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-4.png" alt="隣接行列の例" class="wp-image-12160" style="width:552px;height:auto" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-4.png 688w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-4-300x150.png 300w" sizes="(max-width: 688px) 100vw, 688px" /></figure>
</div>


<p class="wp-block-paragraph">上記の隣接行列は、A → B、A → C、B → D、C → D といったエッジが存在する有向非巡回グラフの例です。</p>



<h5 class="wp-block-heading jinr-heading d--bold">Pythonでの実装例</h5>



<p class="wp-block-paragraph">隣接行列を使った場合の Python におけるグラフ実装を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import matplotlib.pyplot as plt
import networkx as nx
import numpy as np

# 隣接行列でグラフを表現する
adj_mat = np.array(
    [
        [0, 1, 1, 0],
        [0, 0, 0, 1],
        [0, 0, 0, 1],
        [0, 0, 0, 0],
    ]
)

# 隣接行列からグラフを構築する
graph = nx.DiGraph(adj_mat)

# ノードにラベルを割り当てる
mapping = {0: "A", 1: "B", 2: "C", 3: "D"}
graph = nx.relabel_nodes(graph, mapping)

# 可視化のためのレイアウトを指定
pos = nx.spring_layout(graph, seed=42)

# ノードとエッジを描画する
nx.draw(
    graph,
    pos,
    with_labels=True,
    node_color="skyblue",
    node_size=1000,
    edge_color="gray",
    arrowsize=20,
)

# グラフを描画する
plt.show()
</pre>



<p class="wp-block-paragraph">上記例では、隣接行列は NumPy の <code>ndarray</code> を使用して配列として表現しています。配列を用意したら NetworkX パッケージの <code>DiGraph</code> に作成した行列を渡すことでグラフを簡単に作成できます。なお、無向グラフの場合は <code>nx.Graph</code> を使用します。</p>



<p class="wp-block-paragraph">デフォルトではノードに <code>0</code> からの数字が割り当てられるので、A ～ D に変更する <code>mapping</code> を作成し、<code>relabel_nodes</code> を使ってラベルを変更しています。今回は NetworkX で用意されている <code>spring_layout</code> と Matplotlib を使用して描画しています。細かな描画設定の詳細は省略しますが、以下のようなグラフが生成できます。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="636" height="479" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-6.png" alt="DAG の可視化 隣接行列" class="wp-image-12162" style="width:500px" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-6.png 636w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-6-300x226.png 300w" sizes="(max-width: 636px) 100vw, 636px" /></figure>
</div>


<h4 class="wp-block-heading jinr-heading d--bold">GML（Graph Modeling Language）</h4>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">GML（Graph Modelling Language）</span>は、グラフをテキスト形式で記述するためによく使用されるフォーマットでグラフを扱うパッケージでよく利用されています。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="raw" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="false" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">graph [
  directed 1
  node [
    id 0
    label "A"
  ]
  node [
    id 1
    label "B"
  ]
  node [
    id 2
    label "C"
  ]
  node [
    id 3
    label "D"
  ]
  edge [
    source 0
    target 1
  ]
  edge [
    source 0
    target 2
  ]
  edge [
    source 1
    target 3
  ]
  edge [
    source 2
    target 3
  ]
]</pre>



<p class="wp-block-paragraph">上記において、<code>directed 1</code> の場合は、有向グラフであることを示します。<code>0</code> の場合は、無向グラフとなります。<code>node</code> がグラフにおけるノード（頂点）を、<code>edge</code> がグラフにおけるエッジ（辺）を示しています。</p>



<p class="wp-block-paragraph"><code>node</code> を定義する際には、識別するための <code>id</code> と <code>label</code> を定義します。<code>edge</code> の定義でノード間をつなぐ場合には、<code>source</code> に矢印の元のノードの <code>id</code> を、<code>target</code> に矢印の先のノード <code>id</code> を指定します。</p>



<h5 class="wp-block-heading jinr-heading d--bold">Pythonでの実装例</h5>



<p class="wp-block-paragraph">GML を使った場合の Python におけるグラフ実装を見てみましょう。</p>



<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import matplotlib.pyplot as plt
import networkx as nx

# GMLでグラフを表現する
gml_sample = """graph [
  directed 1
  node [
    id 0
    label "A"
  ]
  node [
    id 1
    label "B"
  ]
  node [
    id 2
    label "C"
  ]
  node [
    id 3
    label "D"
  ]
  edge [
    source 0
    target 1
  ]
  edge [
    source 0
    target 2
  ]
  edge [
    source 1
    target 3
  ]
  edge [
    source 2
    target 3
  ]
]
"""

# GMLをパースしてグラフを構築する
graph = nx.parse_gml(gml_sample)

# ノードにラベルを割り当てる
mapping = {0: "A", 1: "B", 2: "C", 3: "D"}
graph = nx.relabel_nodes(graph, mapping)

# 可視化のためのレイアウトを指定
pos = nx.spring_layout(graph, seed=42)

# ノードとエッジを描画する
nx.draw(
    graph,
    pos,
    with_labels=True,
    node_color="skyblue",
    node_size=1000,
    edge_color="gray",
    arrowsize=20,
)

# グラフを描画する
plt.show()
</pre>



<p class="wp-block-paragraph">GML でグラフを表現した文字列を <code>gml_sample</code> で用意しています。GML を解釈してグラフを構築するには NetworkX の <code>parse_gml</code> を使うことで簡単に実現できます。</p>



<p class="wp-block-paragraph">以降の可視化の部分は隣接行列の場合と同様でグラフを可視化することが可能です。</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img decoding="async" width="627" height="468" src="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-7.png" alt="DAG の可視化 GML" class="wp-image-12163" style="width:500px" srcset="https://tech.nkhn37.net/wp-content/uploads/2025/01/image-7.png 627w, https://tech.nkhn37.net/wp-content/uploads/2025/01/image-7-300x224.png 300w" sizes="(max-width: 627px) 100vw, 627px" /></figure>
</div>


<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">因果ダイアグラム</span>を理解するための基本概念、有向非巡回グラフ（DAG）の重要性や因果ダイアグラムにおける代表的な構造パターン（チェーン、フォーク、コライダー）を紹介しました。また、Python でグラフを表現する方法と実装例を紹介しました。</p>



<p class="wp-block-paragraph">因果ダイアグラムの応用については、今後さらに紹介していく予定です。この記事で紹介した内容をもとに、因果推論の基礎を理解してみてください。</p>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>




<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/causal-diagrams-with-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【因果推論】因果のはしごの概要</title>
		<link>https://tech.nkhn37.net/ladder-of-causation-basics/</link>
					<comments>https://tech.nkhn37.net/ladder-of-causation-basics/#respond</comments>
		
		<dc:creator><![CDATA[naoki-hn]]></dc:creator>
		<pubDate>Fri, 24 Jan 2025 20:00:00 +0000</pubDate>
				<category><![CDATA[因果推論]]></category>
		<category><![CDATA[CausalNex]]></category>
		<category><![CDATA[DAG]]></category>
		<category><![CDATA[DoWhy]]></category>
		<category><![CDATA[EconML]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[介入]]></category>
		<category><![CDATA[反事実]]></category>
		<category><![CDATA[因果のはしご]]></category>
		<category><![CDATA[因果ダイアグラム]]></category>
		<category><![CDATA[有向非巡回グラフ]]></category>
		<category><![CDATA[構造的因果モデル]]></category>
		<guid isPermaLink="false">https://tech.nkhn37.net/?p=12085</guid>

					<description><![CDATA[因果推論（Causal Inference）は、ある出来事や要因が他の出来事にどのように影響を与えるかを明らかにするための分析手法です。因果推論の重要な概念である因果のはしごについて紹介します。 因果推論とは 因果推論（ [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">因果推論（Causal Inference）</span>は、ある出来事や要因が他の出来事にどのように影響を与えるかを明らかにするための分析手法です。因果推論の重要な概念である<span class="jinr-d--text-color d--marker1 d--bold">因果のはしご</span>について紹介します。</p>



<h2 class="wp-block-heading jinr-heading d--bold">因果推論とは</h2>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">因果推論（Causal Inference）</span>とは、データの中に隠された因果関係を特定して「何が何に影響を与えるのか？」を解明するための手法のことを言います。例えば、マーケティングで「新しいプロモーションを導入する」と「売り上げが増加する」という因果関係を見極める際などに使用されます。</p>



<p class="wp-block-paragraph">よくデータ分析では相関関係の有無が議論されますが、相関があることと因果があることは全く異なります。この部分を十分に理解しておかないと誤った分析結果を導き出してしまう可能性があるため注意が必要です。</p>



<p class="wp-block-paragraph">因果推論の核心は、変数への介入がどのように出力に作用するのかや、実際には起こらなかった反事実的なシナリオの出力に対して分析することです。因果関係について理解するための重要な概念として「<span class="jinr-d--text-color d--marker1 d--bold">因果のはしご</span>」という概念があります。</p>



<p class="wp-block-paragraph">この記事では、因果推論で重要な概念である「因果のはしご」の概要を紹介します。</p>



<p class="wp-block-paragraph">※ 因果推論について歴史を含めて学びたい方は以下の「因果推論の科学「なぜ？」の問いにどう答えるか」がおすすめです。ぜひ読んでみてください。</p>





<h2 class="wp-block-heading jinr-heading d--bold">因果のはしご</h2>



<p class="wp-block-paragraph"><span class="jinr-d--text-color d--marker1 d--bold">因果のはしご（Ladder of Causation）</span>は、ジューディア・パールさんが提唱した因果推論の概念モデルです。因果のはしごは、因果推論の中核となる概念で、因果関係を理解する能力を ３ つの段階に分けて分類しています。このモデルは、因果推論の理論的基盤として広く活用されています。</p>



<h3 class="wp-block-heading jinr-heading d--bold">第 1 段目：関連（Association）</h3>



<p class="wp-block-paragraph">因果のはしごの第 1 段目は「<span class="jinr-d--text-color d--marker1 d--bold">関連（association）</span>」です。</p>



<p class="wp-block-paragraph">この段階は「見ること」「観察すること」に該当しており、環境における規則性に気づくことができるようになります。データ分析でよく出てくる相関や回帰といった分析もデータ間の関連を突き止めるための代表例であり、この 1 段目に該当します。</p>



<h3 class="wp-block-heading jinr-heading d--bold">第 2 段目：介入（Intervention）</h3>



<p class="wp-block-paragraph">因果のはしごの第 2 段目は「<span class="jinr-d--text-color d--marker1 d--bold">介入（Intervention）</span>」です。</p>



<p class="wp-block-paragraph">この段階は「行動すること」に該当しており、環境における条件を意図的に変化させた場合にどのような変化が起こるかを予測できるようになります。データ分析では、複数の変数を使って分析をしますが、その中のうちで、とある変数を固定や変化させたときに、分析結果やモデルにどのような変化が起きるかということになります。</p>



<p class="wp-block-paragraph">この段階は、例えば<span class="jinr-d--text-color d--marker1 d--bold">ランダム化比較実験（Randomized Controlled Trial：RCT）</span>のように、特定要因を意図的に変化させ、結果の変化を測定する分析が含まれます。</p>



<h3 class="wp-block-heading jinr-heading d--bold">第 3 段目：反事実（Counterfactual Reasoning）</h3>



<p class="wp-block-paragraph">はしごの最終段階の第 3 段目は「<span class="jinr-d--text-color d--marker1 d--bold">反事実（Counterfactual Reasoning）</span>」です。</p>



<p class="wp-block-paragraph">この段階は「想像すること」に該当しており、環境における条件が実際に起こったものとは異なっていた場合に、結果はどうなっていたかを考える段階です。私たちは「もし〇〇しなかったら、XXとなっていただろう」ということを予想できます。この能力は因果関係を理解するうえで非常に重要かつ難しい段階ですが、私たち人間はこの段階に到達しています。</p>



<h2 class="wp-block-heading jinr-heading d--bold">現在の AI はどこにいるのか？</h2>



<p class="wp-block-paragraph">これまで「因果のはしご」と呼ばれる因果関係を理解するための概念を紹介しましたが、現在の AI はその 1 段目と留まっており、2段目以上には進めていません。</p>



<p class="wp-block-paragraph">現状の AI には、回帰・分類・強化学習、ディープラーニング、大規模言語モデル（LLM）など様々あります。これらの技術はデータから相関関係を学び、応答を生成する能力に長けています。人間のように振舞うように感じるため、既に因果のはしごの 2 段目や 3 段目に到達していると考える方もいるかもしれません。</p>



<p class="wp-block-paragraph">しかし、これらは観察データに基づいて関連性をモデリングしているだけです。例えば、現在生成 AI の代表格ともいえる ChatGPT では、推論をしたような結果を回答してくれますが、これは膨大なデータから得た関連情報をもとに応答しているだけであり、因果のはしごの 2 段目（介入）や 3 段目（反事実）を考慮した因果関係の理解に至っているわけではありません。</p>



<p class="wp-block-paragraph">一方で、因果推論の考え方を機械学習に取り込む試みも研究では始まっています。このような新たなアプローチを発展させることで、因果のはしごの 2 段目や ３ 段目に到達する可能性があると思っています。AI が因果関係を本質的に理解するためには、さらなる技術革新が必要です。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox5 ">
			<i class="jif jin-ifont-v2speaker" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">人工知能 (Artificial Intelligence : AI)、機械学習 (Machine Learning : ML)、ディープラーニングといった言葉は、しばしば混同されがちです。AI は、人間の知能を模倣する幅広い技術全般を指し、機械学習は AI に内包されています。そして、ディープラーニングは、機械学習の 1 分野で、特にニューラルネットワークを深い階層構造で用いる技術です。</p>



<p class="wp-block-paragraph">これらの用語は指す範囲が異なるため、混同しないように注意し、それぞれの特徴を理解した上で適切に使いましょう。</p>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">因果関係を機械に学ばせるためには？</h2>



<p class="wp-block-paragraph">因果関係を機械に学ばせるためには、因果関係を表現するモデルを明示的に与える必要があります。その中心となるのが「<span class="jinr-d--text-color d--marker1 d--bold">因果ダイアグラム（Causal Diagram）</span>」や「<span class="jinr-d--text-color d--marker1 d--bold">構造的因果モデル（Structual Causal Model：SCM）</span>」です。</p>



<p class="wp-block-paragraph">因果ダイアグラムは因果関係を視覚的に表現し、通常は<span class="jinr-d--text-color d--marker1 d--bold">有向非巡回グラフ（Directed Acyclic Graph: DAG）</span>として描かれます。一方、SCM はその因果構造を数式やモデルに具体化したものです。これにより、因果推論を数学的に実行可能にします。</p>



<p class="wp-block-paragraph">因果ダイアグラムを構築するには、データ分析の知識だけではなく、データが存在する領域の「ドメイン知識」が不可欠です。例えば、医療分野では、疾患や治療法、環境要因をよく理解した上で因果ダイアグラムをモデリングする必要があります。</p>



<p class="wp-block-paragraph">ドメイン知識がなければ、統計的相関と因果関係を区別することは困難です。AI に因果関係を学ばせるには、人間が因果構造を定義し、それをモデルとして提供する必要があります。これにより、AI は介入や反事実といった因果推論を行えるようになります。最終的に、AI と人間の知識を補完的に活用することで、より高度な因果推論の実現が期待できます。</p>



<section class="wp-block-jinr-blocks-iconbox b--jinr-block b--jinr-iconbox"><div class="d--simple-iconbox6 ">
			<i class="jif jin-ifont-v2books" aria-hidden="true"></i>
			<div class="a--jinr-iconbox">
<p class="wp-block-paragraph">因果ダイアグラムについては「<a href="https://tech.nkhn37.net/causal-diagrams-with-python/" target="_blank" rel="noreferrer noopener">因果ダイアグラムの概要</a>」でまとめているので参考にしてください。</p>
</div>
		</div></section>



<h2 class="wp-block-heading jinr-heading d--bold">因果推論に役立つ Python パッケージ</h2>



<p class="wp-block-paragraph">因果推論を実践するには適切なツールを使うことが重要です。Python には、因果推論に特化した便利なパッケージがいくつか存在しています。これらを活用することで因果ダイアグラムの構築や介入効果の推定、反事実シナリオのシミュレーションを効率的に行うことができます。</p>



<p class="wp-block-paragraph">代表的なパッケージとして「<span class="jinr-d--text-color d--marker1 d--bold">DoWhy</span>」「<span class="jinr-d--text-color d--marker1 d--bold">EconML</span>」「<span class="jinr-d--text-color d--marker1 d--bold">CausalNex</span>」があります。これらのパッケージの使い方についてもまた別途まとめてみたいと思います。</p>



<h2 class="wp-block-heading jinr-heading d--bold">まとめ</h2>



<p class="wp-block-paragraph">因果推論の重要な概念である「<span class="jinr-d--text-color d--marker1 d--bold">因果のはしご</span>」について紹介しました。</p>



<p class="wp-block-paragraph">因果推論は、データ分析をより深く理解し、より正確な意思決定を行うために非常に重要な技術です。現在の AI 技術を次の段階に進めるには、因果推論の概念を取り入れていくことが必要不可欠だと思っています。</p>



<p class="wp-block-paragraph">今回紹介した因果のはしごは、因果推論の中核となる概念で、因果関係を理解する能力を ３ つの段階に分けて分類したものです。因果推論を学んでいくうえで基盤となる考え方なのでぜひ理解してもらえたらと思います。</p>


<section class="b--jinr-block b--jinr-blogcard d--blogcard-hover-up d--blogcard-style1 d--blogcard-mysite t--round "><div class="a--blogcard-label ef">あわせて読みたい</div><a class="o--blogcard-link t--round" href="https://tech.nkhn37.net/python-tech-summary-page/"><div class="c--blogcard-image"><img decoding="async" class="a--blogcard-img-src" width="128" height="72" src="https://tech.nkhn37.net/wp-content/uploads/2024/08/Python-Tech-Pythonプログラミングガイド_new1-640x360.jpg" alt="【Python Tech】プログラミングガイド" /></div><div class="a--blogcard-title d--bold">【Python Tech】プログラミングガイド</div></a></section>

]]></content:encoded>
					
					<wfw:commentRss>https://tech.nkhn37.net/ladder-of-causation-basics/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Disk: Enhanced  を使用したページ キャッシュ

Served from: tech.nkhn37.net @ 2026-08-13 11:54:58 by W3 Total Cache
-->