4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

因果推論グラフを表示する(SPSS Modeler データ加工逆引き10-16)

Last updated at Posted at 2024-05-28

因果推論グラフを表示する(Python for Spark拡張ノード)

PythonのCausalNexとpgmpyをつかって因果推論のグラフを書いてみます。

image.png

(この記事は2023年秋のSPSSユーザーイベント「ものづくり領域で活かされる SPSS Modelerの今とこれから」でご紹介したデモの内容を少し深く説明しています。)

1.想定される利用目的

  • フィールド間の因果関係の把握
  • 原因、要因分析

2.サンプルストリームのダウンロード

  • サンプルデータ

  • サンプルストリーム

  • テスト環境
    • Modeler 18.5
    • Windows 11 64bit
    • causalnex-0.12.1
    • pgmpy-0.1.25
    • pyvis-0.3.2

3.サンプルストリームの説明

3.1. データ

鋳造の条件とNG判定の結果の入ったデータになっています。
image.png

3.2. CausalNex

以下の記事のコードを使ってCausalNexの因果推論のグラフを書いてみます。

CausalNexは名義型の変数を使えないので、必要な変数はダミー変数化しています。
「データ型」ノードで「値の読み込み」を行い、フラグ設定ノードで「鋳型条件」を「1」「0」のダミー変数に変換しています。
image.png

カテゴリ型である「鋳型条件」「砂条件」は除外します。また、項目数が多いとグラフ見づらいので、NG判定に効果の大きそうな項目のみを「フィルター」ノードで絞りました。
image.png

「拡張の出力」ノードで「Python for Spark」を選びシンタックスに入力します。

image.png

ほぼ、引用した記事そのままのコードなのでコードの内容はそちらをご覧ください。

ポイントはgetSparkInputDataで取ってきたデータをpandasのDataFrameに変換してfrom_pandasでDAG推定をしているところです。

ascontext = spss.pyspark.runtime.getContext()
indf = ascontext.getSparkInputData()
df=indf.toPandas()

SM = from_pandas(df)

後は最後にグラフをshowしています。

plt.show()

実行して、以下のように「グラフ出力」を開くとDAGのグラフが表示されています。
image.png

「鋳造条件_A」が「温度」や「電圧」に影響を与えています。
ただ、「NG判定」が「電圧」などに影響を与えているグラフになっているので、今回のグラフでは「NG判定」に影響を与える要因を特定することができませんでした。

3.3. pgmpy

以下の記事のコードを使ってpgmpyのBayesian Network(PCアルゴリズム)で因果推論のグラフを書いてみます。

PCアルゴリズムは、逆にカテゴリ型データの利用が基本なので、連続型変数はビニングして離散値化しています。
「データ分割」ノードで「ビンフィールド」に「温度」「圧力」「電圧」「速度」「回転数」の連続型変数をいれて、ここでは「4分位」でビニングしました。
image.png

連続型である「温度」「圧力」「電圧」「速度」「回転数」は除外します。また、項目数が多いとグラフ見づらいので、NG判定に効果の大きそうな項目のみを「フィルター」ノードで絞りました。

image.png

「拡張の出力」ノードで「Python for Spark」を選びシンタックスに入力します。

image.png

ほぼ、引用した記事そのままのコードなのでコードの内容はそちらをご覧ください。

第一のポイントはgetSparkInputDataで取ってきたデータをpandasのDataFrameに変換してfrom_pandasでBayesian Network(PCアルゴリズム)のestimatorにセットをしているところです。

ascontext = spss.pyspark.runtime.getContext()
indf = ascontext.getSparkInputData()
df=indf.toPandas()

pc = PC(df) # 離散値化後のデータセット

次に、Notebookには出力しないので、directed='True'のみを指定しています。

#got_net = net.Network(notebook=True,directed=True)
got_net = net.Network(directed='True')

最後にhtmlで出力しています。"c:/temp2/pgmpy/example.html"というファイル名で出力しています。

#got_net.show('gameofthrones.html')
#HTMLファイルの出力
html_filename="c:/temp2/pgmpy/example.html"
from IPython.display import display, HTML
html =got_net.generate_html()
with open(html_filename, mode='w', encoding='utf-8') as fp:
        fp.write(html)
print("'"+html_filename+"' was output.")

実行してもグラフ自体は表示されませんので、
image.png

フォルダからHTMLファイルをブラウザで開きます。
image.png

以下のように「グラフ出力」を開くとベイジアンネットワークのグラフが表示されます。
image.png

以下のような因果が見えてきます。
「スイッチ2」→「砂条件」→「スイッチ1」→「鋳造条件」→「NG」
「スイッチ2」→「圧力_TILE4」→「鋳造条件」→「NG」
「スイッチ3」→「NG」

注意事項

管理者権限でコマンドプロンプトを立ち上げて、pipでcausalnex、pgmpy、pyvisのパッケージをあらかじめ導入しておく必要があります。

"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install causalnex
"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install pgmpy
"C:\Program Files\IBM\SPSS\Modeler\18.5\python_venv\Scripts\python.exe" -m pip install pyvis

4.参考情報

【構造学習】CausalNexで有向非循環グラフ(DAG)推定 -説明変数(テーブルデータ)の因果推論に挑戦-|はやぶさの技術ノート

pythonで因果分析:pgmpy,causalnex | kiseno-log

ワインのデータを用いて各種ベイジアンネットワークの推論を比較した #Python - Qiita

SPSS Modeler ノードリファレンス目次

SPSS Modeler 逆引きストリーム集(データ加工)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?