来源:数据STUDIO
本文约7300字,建议阅读10+分钟
本文总结有关贝叶斯概率因果模型的概念,并提供演示实践教程。
変数間の因果関係を判断することは難しいステップになる可能性がありますが、モデリング作業にとっては非常に重要です。
この記事では、ベイジアンの確率的因果モデルに関する概念を要約し、ベイジアン構造学習を使用して因果関係を検出する方法を示す実践的なチュートリアルを提供します。
1. 背景
予測、レコメンダー システム、自然言語処理などの多くの分野で、機械学習技術の使用は、有用な観察結果を取得し、予測を行うための標準ツールとなっています。
機械学習技術は優れたパフォーマンスを達成できますが、ターゲット変数との因果関係を抽出することは直感的ではありません。言い換えれば、どの変数がターゲット変数に直接的な因果効果をもたらすのか?
ベイジアン ネットワーク (BN) としても知られるベイジアン確率的グラフィカル モデルと呼ばれる機械学習の分野を使用して、これらの原因要因を特定できます。
因果モデルの技術的な詳細に入る前に、「相関」や「関連」などの用語をいくつか確認してみましょう。
相関関係または関連性は因果関係と同じではないことに注意してください。言い換えれば、2 つの変数間に観察された関係は、必ずしも一方が他方に起因することを意味するわけではありません。
技術的には、相関とは 2 つの変数間の線形関係を指しますが、関連とは 2 つ (またはそれ以上) の変数間のあらゆる関係を指します。一方、因果関係とは、ある変数 (予測変数または独立変数と呼ばれることが多い) が別の変数 (結果または従属変数と呼ばれることが多い) を引き起こすことを意味します。
次に、相関関係と関連性について、例を挙げて簡単に説明します。
1.1. 関連性
ピアソン相関係数 (ピアソン相関係数) は、最も一般的に使用される相関係数です。係数の強度は r で示され、値の範囲は -1 から 1 です。
相関関係を使用すると、次の 3 つの結果が考えられます。
正の相関: 2 つの変数の間には、両方の変数が同時に同じ方向に移動する関係があります。
負の相関: 2 つの変数間には、一方の変数の増加が他方の変数の減少と関連する関係が存在します。
相関なし: 2 つの変数間に関係がない場合。
正の相関関係の例を図 1 に示します。この図は、各国のチョコレート消費量とノーベル賞受賞者数の関係を示しています。
図 1: チョコレートの消費量とノーベル賞受賞者の相関関係
チョコレートの消費は、より多くのノーベル賞受賞者を意味するかもしれない。あるいは逆に、ノーベル賞受賞者の増加がチョコレートの消費量の増加につながる可能性もある。強い相関関係にもかかわらず、社会経済的地位や教育制度の質などの観察されない変数がチョコレート消費量とノーベル賞受賞者数の増加に寄与した可能性の方が高いと考えられます。
つまり、因果関係があるかどうかはまだ分からないということです。しかし、それは相関関係自体が役に立たないという意味ではなく、相関関係が別の目的を果たすだけです。
統計的関係は因果関係を一意に制限しないため、相関関係自体は因果関係を意味しません。
1.1.2. 関連性
関連性について話すときは、ある変数の特定の値が別の変数の特定の値と同時発生する傾向があることを意味します。
統計的な観点から見ると、カイ二乗検定、フィッシャー直接検定、超幾何検定など、多くの関連性測定方法があります。これらは通常、一方または両方の変数が順序または名義である場合に使用されます。
注: 相関関係は専門用語ですが、相関関係は専門用語ではないため、統計における相関関係の意味については必ずしも一致しているわけではありません。つまり、これらの用語を使用する場合は、その意味を明確にすることが常に良い習慣となります。
説明のために、タイタニック号のデータセットを使用して、超幾何テストを使用して 2 つの変数間に関連があるかどうかを実証します。
タイタニック号のデータセットは多くの機械学習の例で使用されており、性別 (女性) は生存率の優れた予測因子であることが知られています。生存と女性であることとの関連性を計算する方法を説明しましょう。
まず、bnlearn ライブラリをインストールし、Titanic データセットのみをロードします。
Q: 女性が生き残る確率はどれくらいですか?
帰無仮説: 生存と性別の間には関係がありません。
超幾何検定では、超幾何分布を使用して、離散確率分布の統計的有意性を測定します。この例では、 は母集団サイズ (891)、 は母集団内の成功した状態の数 (342)、 はサンプル サイズ/サンプル数 (314)、 はサンプル内の成功した状態の数 (233) 。
方程式 1: 超幾何検定を使用した生存と女性の関連性の検定
の有意水準では帰無仮説を棄却できるため、生存と女性らしさの間には統計的に有意な関連があると言えます。
相関関係自体は因果関係を意味するものではないことに注意してください。限界と条件を区別する必要があります。後者は因果推論の重要な構成要素です。
2. 因果関係
因果関係とは何ですか?
因果関係とは、1 つの独立変数が別の従属変数を引き起こすことを意味し、Reichenbach (1956) は次のように述べています。
2 つの確率変数 と が統計的に相関している場合 ( )、(a) が を引き起こすか、(b) が原因であるか、または (c) と の両方を引き起こす 3 番目の変数が存在します。さらに、 が与えられると、 と は独立します。
この定義はベイジアン グラフィカル モデルに組み込まれています。
ベイジアン グラフィカル モデルは、ベイジアン ネットワーク、ベイジアン ビリーフ ネットワーク、ベイズ ネット、因果確率ネットワーク、インフルエンス ダイアグラムとも呼ばれます。同じテクノロジーですが、呼び方が異なります。
因果関係を判断するには、ベイジアン ネットワーク (BN) を使用できます。
まずはグラフを使って、Reichenbach によって記述された 3 つの変数間の統計的依存関係を視覚化しましょう (図 2 を参照)。ノードは変数に対応し、有向エッジ (矢印) は依存関係または条件付き分布を表します。
図 2: 条件付き独立性をエンコードする有向非巡回グラフ (DAG)。(a, b, c) は同値クラスです。(a,b) カスケード、(c) 共通の親、(d) は V 構造の特別なクラスです。4 つのグラフを作成できます: (a,b) カスケード、(c) 共通の親、および (d) V 構造、これらのグラフベイジアン ネットワークの基礎を形成します。
しかし、何が原因なのかをどのように判断すればよいでしょうか? (何が原因なのかをどうやって見分けることができますか?)
因果関係を決定するという概念的な考え方は、ノードを一定に保持し、その影響を観察することによって、因果関係の方向、つまりどのノードがどのノードに影響を与えるかを決定することです。
例として、図 2 の有向非巡回グラフ DAG(a) を見てみましょう。これは、 が原因であることと、 が原因であることを示しています。もし私たちが今も変わらないなら、このモデルが正しいなら、変わらないはずです。すべてのベイジアン ネットワークはこれら 4 つのグラフで説明でき、確率理論 (以下のセクションを参照) を通じてこれらの部分を組み合わせることができます。
ベイジアン ネットワークは有向非巡回グラフ (Directed Acyclic Graph、DAG) であり、DAG は因果関係があることに注意してください。これは、グラフ内のエッジが方向付けられており、(フィードバック) サイクルがない (非周期的) ことを意味します。
2.1. 確率理論
確率理論、より具体的にはベイズの定理またはベイズ則は、ベイジアン ネットワークの基礎を形成します。
ベイジアン ルールはモデル情報を更新するために使用され、数学的には次の方程式として表されます。
方程式は 4 つの部分で構成されます。
事後確率とは、与えられたことが起こる確率のことです。
条件付き確率、または尤度は、仮定が成立した場合に証拠が得られる確率です。これはデータから推測できます。
私たちの事前信念は、証拠が観察される前の仮定された確率です。これは、データまたはドメイン知識から推測することもできます。
最後に、考えられるすべての仮定の下で新しい証拠が発生する確率を表す限界確率を計算する必要があります。ベイジアン ネットワークの (分解された) 確率分布または結合分布について詳しく知りたい場合は、このブログ投稿 [6] を読んでください。
3. DAGを推定するためのベイジアン構造学習
構造学習を使用して、データセット内の変数間の因果関係を最もよく捉えるグラフ構造を特定したいと考えています。
言い換えれば、データにとってどの DAG が最適でしょうか?
素朴なアプローチは、すべての組み合わせがなくなるまで、グラフ構造の可能なすべての組み合わせ、つまり 10、数百、さらには数千の異なる DAG を単純に作成することです。
その後、データの適合性に基づいて各 DAG にスコアを付けることができます。
最後に、最高スコアの DAG が返されます。
変数 X だけを使用すると、X>Z>Y (図 2a) だけでなく Z>X>Y なども存在するため、図 2 に示すようなグラフやその他多くのグラフを作成することができます。変数 X はブール値 (True または False) にすることができ、複数の状態を持つことができます。
DAG の検索空間は、スコアを最大化する変数の数に応じて指数関数的に増加します。これは、ノードの数が多いと網羅的な検索が不可能であることを意味するため、DAG 空間を参照するためにさまざまな貪欲な戦略が提案されています。
最適化ベースの検索アプローチにより、より大きな DAG スペースを参照できます。このアプローチには、スコアリング関数と検索戦略が必要です。
一般的なスコア関数は、BIC や BDeu などのトレーニング データの構造を考慮した事後確率です。
BIC は Bayesian Information Criterion の略称です。これはモデルの選択に使用される統計であり、さまざまなモデルの適合能力を比較するために使用できます。BIC 値が小さいほど、モデルは優れています。ベイジアン ネットワークでは、BIC はよく使用されるスコアリング関数の 1 つで、ベイジアン ネットワークとデータの適合度を評価するために使用されます。
BDeu は、Bayesian-Dirichlet 等価均一事前分布の略称です。これは、ベイジアン ネットワークがデータにどの程度適合しているかを評価するために一般的に使用されるスコアリング関数の 1 つです。BDeu スコアリング関数は、すべての変数のすべての可能な状態が同等であると仮定する事前のベイジアン-ディリクレ等価性コンセンサスに基づいています。
例を始める前に、どのテクニックをいつ使用するかを理解しておくことが常に重要です。DAG 空間全体を検索し、データに最も適合するグラフを見つけるプロセスでは、大きく 2 つのアプローチがあります。
スコアベースの構造化学習
制約ベースの構造学習
3.1. スコアリングベースの構造学習
スコアリングベースのメソッドには、次の 2 つの主要なコンポーネントがあります。
可能なすべての DAG 検索スペースを最適化するために、ExhaustiveSearch、Hillclimbsearch、Chow-Liu などの検索アルゴリズムが使用されます。
スコアリング関数は、ベイジアン ネットワークがデータにどの程度適合しているかを示します。一般的に使用されるスコアリング関数は、BDeu や K2 などのベイジアン ディリクレ スコアと、ベイジアン情報量基準 (BIC、MDL とも呼ばれます) です。
4 つの一般的なスコアリング ベースのアプローチを以下に説明します。
ExhaustiveSearch は、その名前が示すように、考えられる各 DAG にスコアを付け、最高スコアの DAG を返します。この検索方法は非常に小規模なネットワークにのみ適しており、効率的な局所最適化アルゴリズムが常に最適な構造を見つけることができなくなります。したがって、理想的な構造を見つけることができないことがよくあります。ただし、関与するノードの数が少ない場合 (つまり、5 程度未満)、ヒューリスティック検索戦略は通常、良好な結果をもたらします。
Hillclimbsearch は、より多くのノードが使用される場合に使用できるヒューリスティック検索方法です。HillClimbSearch は、DAG の「開始」(デフォルトでは切断された DAG) から開始して、増加するスコアを最大化する片側操作を繰り返し実行する貪欲なローカル検索を実装します。探索は極大値を見つけた後に終了します。
Chow-Liu アルゴリズムは、特定の種類のツリーベースの手法です。Chow-Liu アルゴリズムは、各ノードが最大 1 つの親を持つ最尤ツリー構造を見つけます。ツリー構造に制限することで、複雑さを制限できます。
Tree-augmented Naive Bayes (TAN) アルゴリズムも、多くの不確実性を含む巨大なデータセットのさまざまな相互依存特徴セットをモデル化するために使用できるツリーベースの手法です。
3.2. 制約ベースの構造学習
DAG を構築する別の、しかしかなり直観的な方法は、仮説検定 (カイ二乗検定統計量など) を使用してデータセット内の独立性を特定することです。
このアプローチは、統計的テストと条件付き仮定に依存して、モデル内の変数間の独立性を学習します。
カイ二乗検定の値は、 が与えられた場合に と が独立していると仮定して、カイ二乗統計量を計算する観測確率です。これは、重要度レベルを考慮して独立した判断を行うために使用できます。
制約付きアプローチの例は PC アルゴリズムです。これは、完全に接続されたグラフから開始し、ノードが独立している場合、停止基準に達するまでテストの結果に基づいてエッジを削除します。
4. 実践: bnlearn ライブラリに基づく
Pythonでベイジアンネットワークのグラフ構造を学習するライブラリbnlearnを紹介します。
bnlearn は、次のようないくつかの課題を解決できます。
構造学習: 与えられたデータ: 変数間の依存関係を捉える DAG を推定します。
パラメータ学習: 与えられたデータと DAG: 個々の変数の (条件付き) 確率分布を推定します。
推論: 学習されたモデルが与えられた場合: クエリの正確な確率値を決定します。
他のベイズ分析実装と比較して、bnlearn には次の利点があります。
pgmpyライブラリ上に構築
最も一般的に使用されるベイジアン パイプラインが含まれています
シンプルで直感的
オープンソース
詳細なドキュメント
4.1. スプリンクラー データセットの構造学習
構造学習がどのように機能するかを示す、シンプルで直感的な例から始めましょう。
裏庭にスプリンクラー システムを設置し、過去 1000 日間にわたって、雨 (はいまたはいいえ)、曇り (はいまたはいいえ)、スプリンクラー システム (オンまたはオフ)、および 2 つの状態の 4 つの変数を測定したとします。濡れた草(はいまたはいいえ)。
次に、bnlearn ライブラリをインポートし、スプリンクラー データセットを読み込み、どの DAG がデータに最適であるかを判断します。
bnlearn ライブラリを使用すると、数行のコードで因果関係を判断できます。
図 3: スプリンクラー システムに最適な DAG の例。これは、芝生が濡れている確率はスプリンクラーと雨に依存するというロジックを表しています。スプリンクラーが作動する確率は曇りの状態によって異なります。降水確率は曇りの状態によって異なりますスプリンクラー データセットは、欠損値がなく、すべての値が 1 または 0 になるように処理されていることに注意してください。
したがって、図 3 に示す学習された構造が得られます。検出された DAG はエッジで接続された 4 つのノードで構成され、それぞれが因果関係を表します。
濡れた草の状態は、雨とスプリンクラーという 2 つのノードに依存します。
雨の状態は曇りの状態によって決まります。
スプリンクラーの状態は曇りの状態によっても決まります。
この DAG は、(因数分解された) 確率分布を表します。S はスプリンクラーの確率変数、R は雨の確率変数、G は濡れた草の確率変数、C は曇りの確率変数です。
グラフを調べると、モデル内の唯一の独立変数が C であることがすぐにわかります。他の変数はすべて、曇り、雨、スプリンクラーの確率に依存します。
一般に、ベイジアン ネットワークの同時分布は、親が与えられた各ノードの条件付き確率の積です。
bnlearn の構造学習のデフォルト設定では、hillclimbsearch メソッドと BIC スコアリングを使用します。
さまざまな方法とスコアリングのタイプを指定できることに注意してください。検索とスコアリングのタイプを指定するには、以下の例を参照してください。
# 'hc' or 'hillclimbsearch'
model_hc_bic = bn.structure_learning.fit(df, methodtype='hc', scoretype='bic')
model_hc_k2 = bn.structure_learning.fit(df, methodtype='hc', scoretype='k2')
model_hc_bdeu = bn.structure_learning.fit(df, methodtype='hc', scoretype='bdeu')
# 'ex' or 'exhaustivesearch'
model_ex_bic = bn.structure_learning.fit(df, methodtype='ex', scoretype='bic')
model_ex_k2 = bn.structure_learning.fit(df, methodtype='ex', scoretype='k2')
model_ex_bdeu = bn.structure_learning.fit(df, methodtype='ex', scoretype='bdeu')
# 'cs' or 'constraintsearch'
model_cs_k2 = bn.structure_learning.fit(df, methodtype='cs', scoretype='k2')
model_cs_bdeu = bn.structure_learning.fit(df, methodtype='cs', scoretype='bdeu')
model_cs_bic = bn.structure_learning.fit(df, methodtype='cs', scoretype='bic')
# 'cl' or 'chow-liu' (requires setting root_node parameter)
model_cl = bn.structure_learning.fit(df, methodtype='cl', root_node='Wet_Grass')
スプリンクラー データセットの検出された DAG はデータセット内の変数の因果関係を明らかにし、示していますが、次のようなさまざまな質問をすることはできません。
スプリンクラーを止めた場合に芝生が濡れている確率はどれくらいですか?
スプリンクラーが停止していて曇りの場合、降水確率はどれくらいですか?
スプリンクラー データセットでは、世界に関する知識と論理的思考によっては、結果が明らかになる場合があります。ただし、より大きく複雑なグラフを作成すると、それはそれほど明白ではなくなる可能性があります。
いわゆる推論を通じて、「もしこれを実行したらどうなるか」というタイプの質問に答えることができます。このような質問には通常、回答するために管理された実験と明示的な介入が必要です。
4.2. どのように推論するか?
推論するには、DAG と条件付き確率テーブル (CPT) という 2 つの要素が必要です。
この時点で、データをデータ フレーム (df) に保存し、データの構造を記述する DAG を計算しました。CPT は、各ノードとその親ノード間の統計的関係を定量的に記述するために、パラメーター学習を使用して計算する必要があります。
まずパラメータの学習を行ってから、推論のプロセスに戻りましょう。
4.2.1. パラメータの学習
パラメータ学習は、条件付き確率テーブル (CPT) の値を推定するタスクです。
bnlearn ライブラリは、離散ノードと連続ノードの両方のパラメーター学習をサポートします。
最尤推定は、変数状態の相対的な発生頻度を使用した自然な推定です。データ不足はベイジアン ネットワークのパラメータ推定でよくある問題であり、最尤推定器にはデータの過学習という問題があります。言い換えれば、観察されたデータが基礎となる分布を代表していない (または少なすぎる) 場合、最尤推定値は大幅に乖離する可能性があります。たとえば、変数に 10 個の状態を取ることができる 3 つの親がある場合、状態のカウントは親構成ごとに行われます。このため、ベイジアン ネットワーク パラメーターを学習する場合、最尤推定は非常に脆弱になります。最尤推定における過学習を軽減する 1 つの方法は、ベイジアン パラメーター推定です。
ベイズ推定は、データを観察する前に、変数についての信念を表す既存の CPT から始まります。これらの「事前」は、観察されたデータからの状態カウントで更新されます。事前カウントは、正規化の前に実際のカウントに追加される擬似状態カウントとして考えることができます。非常に単純な事前確率は、いわゆる K2 事前確率であり、個々の状態のカウントに単純に「1」を加算します。より賢明な事前確率の選択は、BDeu (ベイジアン ディリクレ等価均一事前確率) です。
次に、スプリンクラー データセットを使用してそのパラメーターを学習し、条件付き確率テーブル (CPT) を検出しました。
パラメーターを学習するには、有向非巡回グラフ (DAG) と、まったく同じ変数を含むデータセットが必要です。
アイデアは、データセットを DAG に接続することです。前の例では、DAG を計算しました (図 3)。
この時点まで到達すると、最尤推定 (MLE) を使用して DAG と入力データセット df に基づいて CPT を計算したことになります (図 4)。わかりやすくするために、図 4 には CPT が含まれていることに注意してください。
図 4: 最尤推定を使用したパラメータ学習用に導出された CPT
MLE を使用した CPT の計算は非常に簡単です。曇りおよび雨のノードの CPT を手動で計算する例を示します。
# Examples to illustrate how to manually compute MLE for the node Cloudy and Rain:
# Compute CPT for the Cloudy Node:
# This node has no conditional dependencies and can easily be computed as following:
# P(Cloudy=0)
sum(df['Cloudy']==0) / df.shape[0] # 0.488
# P(Cloudy=1)
sum(df['Cloudy']==1) / df.shape[0] # 0.512
# Compute CPT for the Rain Node:
# This node has a conditional dependency from Cloudy and can be computed as following:
# P(Rain=0 | Cloudy=0)
sum( (df['Cloudy']==0) & (df['Rain']==0) ) / sum(df['Cloudy']==0) # 394/488 = 0.807377049
# P(Rain=1 | Cloudy=0)
sum( (df['Cloudy']==0) & (df['Rain']==1) ) / sum(df['Cloudy']==0) # 94/488 = 0.192622950
# P(Rain=0 | Cloudy=1)
sum( (df['Cloudy']==1) & (df['Rain']==0) ) / sum(df['Cloudy']==1) # 91/512 = 0.177734375
# P(Rain=1 | Cloudy=1)
sum( (df['Cloudy']==1) & (df['Rain']==1) ) / sum(df['Cloudy']==1) # 421/512 = 0.822265625
条件付きの依存関係は、限られたデータ ポイントに基づいている場合があることに注意してください。たとえば、91 件の観察に基づいています。Rain により多くの状態や依存関係がある場合、この数値はさらに低くなる可能性があります。データを増やすことが解決策となるでしょうか? 多分そうでないかもしれません。サンプルの合計サイズが非常に大きい場合でも、状態数は各親の構成に依存するため、断片化が発生する可能性があることに注意してください。MLE アプローチと比較した、CPT と の違いを確認してください。
4.2.2. スプリンクラー データセットの推論
推論を実行するには、ベイジアン ネットワークに 2 つの主要コンポーネントが必要です。データ構造を記述する有向非巡回グラフ (DAG) と、各ノードとその親の間の統計的関係を記述する条件付き確率テーブル (CPT) です。ここまでで、データセットを取得し、構造学習を使用して DAG を計算し、パラメーター学習を使用して CPT を推定しました。推論が可能になりました!
推論では、変数排除と呼ばれるプロセスを使用して変数を周辺化します。変数除去は正確な推論アルゴリズムです。また、合計を最大関数に置き換えるだけで、ネットワーク状態を最も高い確率で判断するために使用することもできます。欠点は、大規模なベイジアン ネットワークでは計算的に扱いにくいことです。このような場合、ギブス サンプリングや拒否サンプリングなどのサンプリング ベースの近似推論アルゴリズムを使用できます [7]。
bnlearn を使用すると、次のように推論できます。
これで、私たちの質問に対する答えが得られました。
スプリンクラーシステムが停止した場合、芝生が濡れる可能性はどのくらいですか? P(湿った草=1 | スプリンクラー=0) = 0.51
スプリンクラー システムが停止され、空が曇っている場合、雨が降る可能性はどのくらいですか? P(雨=1 | スプリンクラー=0、曇り=1) = 0.663
4.3. 私の因果モデルが正しいことはどのようにしてわかりますか?
データのみを使用して因果関係図を計算した場合、因果関係図の妥当性と完全性を完全に検証することは困難です。ただし、因果関係グラフの信頼性を高めるのに役立つソリューションがあります。たとえば、変数セット間の特定の条件付き独立性または依存関係を経験的にテストできます。それらがデータに存在しない場合は、因果モデルが正しいことを示します。あるいは、DAG や CPT などの事前の専門知識を追加して、推論時のモデルの信頼性を高めることもできます。
5. ディスカッション
この論文では、なぜ相関関係や関連性が因果関係と等しくないのか、またデータから因果モデルへの移行に構造学習がどのように使用されるのかについて、いくつかの概念に触れています。
ベイジアン手法の利点は次のように要約されます。
事後確率分布の結果またはグラフを使用すると、結果として単一の値を取得するだけでなく、モデルの予測について判断できるようになります。
ドメイン/専門家の知識を DAG に組み込んで、不完全な情報や欠落したデータを使用して推論することができます。これが可能なのは、ベイズの定理が証拠による事前分布の更新に基づいているためです。
モジュラーコンセプトを持っています。
単純な部品を組み合わせて複雑なシステムを構築します。
グラフ理論は、非常にインタラクティブな変数の直観的なセットを提供します。
確率理論は、これらの部分を組み合わせる方法を提供します。
ただし、ベイジアン ネットワークの弱点は、考えられるすべての構造を徹底的に検索する必要があるため、最適な DAG を見つけるには計算コストがかかることです。
網羅的検索のノード制限は約 15 ノードに達する可能性がありますが、状態の数にも依存します。さらに多くのノードがある場合は、スコアリング関数と検索アルゴリズムを備えた代替方法を使用する必要があります。それにもかかわらず、数百、さらには数千の変数に関する問題に対処するには、変数のブラック/ホワイト リストを使用したツリーベースまたは制約ベースのアプローチを使用する必要があります。この方法では、まず次数を決定し、次にその次数に最適な BN 構造を見つけます。これは、ネットワーク構造空間よりもはるかに小さい、可能なランキングの検索空間に取り組むことを意味します。
因果関係を判断することは困難な作業である可能性がありますが、bnlearn ライブラリは、構造学習、パラメーター学習、推論などのこれらの課題のいくつかに対処することを目的としています。また、(全体) グラフのトポロジカルな順序を導出したり、2 つのグラフを比較したりすることもできます。
この記事の引用元: https://towardsdatascience.com/a-step-by-step-guide-in-detecting-causal-relationships-using-bayesian- Structure-learning-in-python-c20c6b31cee5 著者: Erdogan Taskesen