投稿

ラベル(#因果探索)が付いた投稿を表示しています

BSCに基づく因果分析の事例と、解析手法を具体的に紹介します。

Balanced Scorecard ( BSC )のフレームワークは、財務、顧客、内部プロセス、学習と成長という 4 つの視点から組織のパフォーマンスを評価します。この多面的な枠組みを用いると、たとえば「職場研修(学習と成長)」が「業務改善(内部プロセス)」に、そしてそれが「顧客満足」や最終的な「財務成果」へどう影響するかを体系的に検証できます。ここでは、 BSC に基づく因果分析の事例と、解析手法を具体的に紹介します。 1. 分析の流れと目的の明確化 まずは、以下のような具体的な仮説設定を行います。 仮説例 職場研修の充実が業務プロセスの改善を促す 業務プロセスの改善が顧客満足度の向上につながる 顧客満足度が最終的に財務成果に好影響を及ぼす この連鎖的な関係(あるいは別ルートの因果効果)の存在をデータで実証することが目的です。 2. データ収集と前処理 実務においては、各視点の測定可能な指標を用意します。たとえば、 学習と成長  従業員研修の受講回数、研修後のスキル評価、自己開発プログラムの参加率 内部プロセス  業務工程の効率性、品質改善プロジェクトの数、エラー率の低下 顧客  顧客満足度調査、リピート率、クレーム件数の減少 財務  売上高、利益率、株主価値の向上 こうした実績データやアンケートデータを収集し、必要に応じて欠損値処理や正規化を実施することで、因果推論に適したデータセットを整備します。 3. 因果分析のための手法 BSC の各領域を因果的に結びつけるための解析手法として、以下の方法がおすすめです。 3.1 因果探索アルゴリズム DirectLiNGAM: 線形かつ非ガウス性を仮定する手法で、与えられた観測データから因果順序を直接推定します。 利点  シンプルな線形モデルの枠組みで因果方向とエッジの重みを同時に推定できる。 応用例  先ほど示したシミュレーションコードでは、職場研修 → 業務改善 → 顧客満足への影響や、さらに財務指標への影響の検証に利用できます。 PC アルゴリズム / GES (Greedy Equivalence Search)  制約ベースまたはスコアベースの手法で、ネットワーク全体の構造...

因果探索や因果推論の実践でよく用いられる実際のデータセットの例

因果探索や因果推論の実践でよく用いられる実際のデータセットの例です。これらのデータセットはそれぞれのドメインや目的に合わせて、変数間の因果関係の検証に使われるケーススタディとして有用です。 1. Sachs データセット 概要  Sachs データセットは、細胞内タンパク質のシグナル伝達ネットワークに関する実測データです。サンプル数は約 700 件、 11 種類のタンパク質(変数)を持ち、実験的介入により記録されたそれぞれの濃度や活性値が含まれています。 利用例 因果探索アルゴリズム( DirectLiNGAM 、 PC アルゴリズムなど)の評価 バイオインフォマティクス分野で、実際の細胞シグナル伝達経路の因果構造を再現するためのベンチマークデータとして利用される 参考: Sachs et al., 2005 2. Tübingen Cause-Effect Pairs データセット 概要  このデータセットは、多様な領域(経済、気象、医学、エネルギーなど)から抽出された変数ペアの集合です。各ペアについて「どちらが原因でどちらが結果か」が既知の、厳選された実例が多数収録されています。 利用例 1 対の変数間で因果方向の推定精度を検証するタスク シングルペアごとにアルゴリズムの強み・弱みの比較評価に使用される 注: 手法によっては、数百のペアが公開されており、因果推論のベンチマークとして広く利用されています。 3. Job Training / NSW ( National Supported Work )データセット 概要  社会政策の効果検証のために作成されたデータセットで、職業訓練プログラムが参加者の収入や就業状況に与える影響を評価する目的で収集されています。  利用例  介入(訓練プログラム)とそのアウトカム(所得・就労率)との間で、因果推論の手法(例えば、傾向スコアマッチングや差分の差分法)を適用する実証研究 組織内の Balanced Scorecard において、研修の効果からその後の業務改善、顧客満足、最終的な企業業績に至る因果の流れを評価する際の参考例としても考えられます 4. ビジネスパフォーマンスのケーススタディデータ 概要  Balanced Scorecar...

バランススコアカード(BSC)で職場研修→業務改善→顧客満足→財務向上の因果ストーリー例を作成

イメージ
バランススコアカード( BSC )で職場研修 → 業務改善 → 顧客満足 → 財務向上の因果ストーリー例を作成し、因果数値シミュレーションできるようデータを生成し、これを Direct Lingam を使用し因果探索して、データから DAG を描写するコードを考えてみます。 もちろん、Googlecolabで実装しますので、先ずはライブラリのインストールから開始します。 # Reinstall core scientific packages !pip install --upgrade --force-reinstall numpy scipy scikit-learn !pip install lingam   import numpy as np import pandas as pd   # データ生成 np.random.seed(42) n_samples = 500 training = np.random.normal(5, 1, n_samples) improvement = 0.5 * training + np.random.normal(0, 0.5, n_samples) satisfaction = 0.7 * improvement + np.random.normal(0, 0.5, n_samples) financial = 0.6 * satisfaction + np.random.normal(0, 0.5, n_samples)   data = pd.DataFrame({     "Training": training,     "Improvement": improvement,     "Satisfaction": satisfaction,     "Financial": financial }) from lingam.direct_lingam import DirectLiNGAM   # DirectLiNGAM モデル model = DirectLiNGAM() model.f...

制約ベース手法との違い と  関数型因果モデル(FCM)

イメージ
次のコード例では、 データ生成時に依存関係を強めに設定しているので、因果関係が検出されやすいようにしています。 bn.structure_learning.fit で direct-lingam を使って構造学習を行います。 学習結果の隣接行列から、エッジが (from, to) の形で存在するか(値が 0 以外の場合)をチェックしてエッジリストを作成します。 各ノードに対して、その親ノードからの影響(回帰係数)を OLS 回帰で推定し、エッジごとのスコアとして出力します。 以下のコードをご確認ください。 python import numpy as np import pandas as pd import bnlearn as bn import statsmodels.api as sm   # ① データ生成(依存関係を強化) np.random.seed(42) n_samples = 300 temperature = np.random.uniform(20, 40, n_samples) ice_cream_sales = 5 * temperature + np.random.normal(0, 1, n_samples) swimming_accidents = 2 * temperature + np.random.normal(0, 1, n_samples)   data = pd.DataFrame({     'Temperature': temperature,     'IceCreamSales': ice_cream_sales,     'SwimmingAccidents': swimming_accidents })   # ② bnlearn による構造学習( direct-lingam を利用) model = bn.structure_learning.fit(data, methodtype='direct-lingam') # model['adjmat'] ...

bnlearnライブラリを使用して、ベイジアンネットワーク(Bayesian Network)の構造を定義し、DAG(Directed Acyclic Graph:有向非巡回グラフ)を構築して可視化

イメージ
このコード例では、 bnlearn ライブラリ を使用して、ベイジアンネットワーク( Bayesian Network )の構造を定義し、 DAG ( Directed Acyclic Graph :有向非巡回グラフ)を構築して可視化しています。 #!pip install bnlearn networkx matplotlib pandas numpy --upgrade   import numpy as np import pandas as pd import bnlearn as bn import networkx as nx import matplotlib.pyplot as plt   # ベイジアンネットワーク構造を定義 edges = [     ('Temperature', 'IceCreamSales'),     ('Temperature', 'SwimmingAccidents') ]   # DAG を生成 DAG = bn.make_DAG(edges)   # DAG を NetworkX グラフに変換 nx_graph = nx.DiGraph(DAG['adjmat'].values) nx_graph = nx.relabel_nodes(nx_graph, {i: node for i, node in enumerate(DAG['adjmat'].columns)})   # グラフの描画 plt.figure(figsize=(8, 6)) pos = nx.spring_layout(nx_graph, seed=42) nx.draw(nx_graph, pos, with_labels=True, node_color='lightblue', node_size=2000, font_size=10, font_weight='bold', arrowsize=20)   plt.title("Causal DAG using bnlearn") plt.show() 出力結果 [bnlearn]> Auto generate placeholders...

LiNGAMを活用して因果関係を明確に視覚化する非常に実践的な例

イメージ
今回は NetworkX を使って DAG を描画する方法をご紹介します。以下のコードは、 NetworkX を直接利用して因果関係をグラフとして描画する例です。 import numpy as np import pandas as pd import networkx as nx import matplotlib.pyplot as plt   # データ生成 np.random.seed(42) n_samples = 300 temperature = np.random.uniform(20, 40, n_samples) ice_cream_sales = temperature + np.random.normal(0, 2, n_samples) swimming_accidents = temperature + np.random.normal(0, 1, n_samples) data = pd.DataFrame({     'Temperature': temperature,     'IceCreamSales': ice_cream_sales,     'SwimmingAccidents': swimming_accidents })   # DAG のエッジを直接指定 edges = [     ("Temperature", "IceCreamSales"),     ("Temperature", "SwimmingAccidents") ]   # NetworkX グラフの作成 G = nx.DiGraph() G.add_edges_from(edges)   # グラフの描画 plt.figure(figsize=(8, 6)) pos = nx.spring_layout(G, seed=42)  # ノードの位置を決定 nx.draw(G, pos, with_labels=True, node_color='lightblue', node_size=2000, font_size=10, font_weight=...