Pythonで決定木を「見て」「理解する」ためのバオバブ可視化

Pythonで決定木を「見て」「理解する」ためのバオバブ可視化

データ分析の世界では、多様な機械学習モデルが活用されています。

そのなかでも「決定木(Decision Tree)」は、判断過程が可視化しやすく解釈性の高いモデルとして人気です。

しかし、実際に決定木を使う際、「どうやって構造を把握すればよいのか」「各ノードの意味は何か」と迷うこともあるでしょう。

今回は、Pythonライブラリ pybaobabdt を用いてバオバブ可視化と呼ばれる、決定木を直感的に「見て」、その仕組みを「理解する」方法を、簡単に解説します。

pybaobabdtとは?

機械学習において、決定木は特徴量に基づいてデータを一連の条件判定で分割し、最終的な予測や分類を導き出すモデルです。

その構造はまるでフローチャートのように視覚化できるため、どの判断基準でどのようにデータが振り分けられたのかを直感的に理解しやすいのが大きな魅力です。

特にビジネスの現場では、なぜその予測結果に至ったのかを説明可能であることが信頼性や意思決定の後押しにつながります。

しかし、scikit-learn の標準機能や graphviz を用いた可視化は、細かな設定が必要で見た目の調整に手間がかかる場合があります。

そこで登場するのが pybaobabdt です。pybaobabdt は、学習済みの scikit-learn 決定木モデルを入力するだけで、ノード内のサンプル数やクラス分布、gini 不純度などの情報を含んだ美しいグラフを自動生成します。

 

環境構築とインストール

以下では、Python環境は既に整っている前提で、必要なパッケージとGraphvizの導入方法を解説します。

scikit-learn がまだインストールされていない場合は、以下のコマンドで導入してください。決定木モデルの学習に必要です。

pip install scikit-learn

 

決定木の可視化を行う pybaobabdt は別途インストールが必要です。以下のコマンドで導入してください。

pip install pybaobabdt

 

pybaobabdt は内部で Graphviz を呼び出してグラフを描画します。Graphvizのインストールがされていない方は、以下の手順でシステムにインストールし、実行ファイルへのパスを通してください(特にWindows)。

OS インストール方法 PATH設定例
Windows choco install graphviz
さらに、公式サイト(https://graphviz.org/download/)から本体をインストール
環境変数 PATHC:\Program Files\Graphviz\bin を追加
macOS brew install graphviz
pip install pygraphviz
自動で /usr/local/bin に配置(通常PATH済み)
Ubuntu/Linux sudo apt-get install graphviz graphviz-dev
pip install pygraphviz
自動で /usr/bin に配置(通常PATH済み)

 

決定木モデルの作成 〜 Irisデータセットを例に

pybaobabdt は既存の学習済みモデルを可視化するツールのため、まずは scikit-learn で決定木モデルを作成します。

 

 ステップ1:ライブラリとデータセットの読み込み

# Decision Tree Classifier をインポート
from sklearn.tree import DecisionTreeClassifier
# scikit-learn の Iris データセットをインポート
from sklearn.datasets   import load_iris

# Iris データセットの読み込み
iris = load_iris()

# 特徴量データ(X)とターゲット(y)を分割
X = iris.data
y = iris.target

 

 ステップ2:モデルの定義

# 決定木分類器のインスタンスを作成
model = DecisionTreeClassifier(
    max_depth=3,      # 決定木の最大深さ
    random_state=42   # 乱数シード値
)

 

 ステップ3:モデルの学習

# データセットを使用してモデルを学習
# X: 特徴量データ(がく片の長さ、がく片の幅、花弁の長さ、花弁の幅)
# y: ターゲット変数(アヤメの品種)
model.fit(X, y)

 

これで、pybaobabdt で可視化するための学習済みモデル model が準備できました。

 

決定木を「見る」 — 可視化の手順

学習済みの model オブジェクトを用いて、最初は通常の決定木の可視化、次いでバオバブ可視化していきます。

 

 ステップ1:pybaobabdt などのインポート

# 可視化のためのライブラリをインポート
import pybaobabdt
from sklearn.tree import plot_tree
import matplotlib.pyplot as plt

 

 ステップ2:通常の決定木の可視化

# 決定木を可視化
result = plot_tree(
    model, 
    feature_names=iris.feature_names, # 特徴量の名前
    class_names=iris.target_names,   # クラスラベル
    filled=True,                      # ノードを色で塗りつぶす
    rounded=True,                     # ノードを丸くする
    fontsize=10,                      # ノードのフォントサイズ
)

 

以下、実行結果です。

 

 ステップ3:決定木のバオバブ可視化

# クラスラベルをバイト列に変換(文字列の場合のみ)
# pybaobabdtライブラリがバイト列形式を必要とするため
model.classes_ = [
    s.encode() if isinstance(s, str)
    else s 
    for s in iris.target_names
]

# 決定木を可視化(pybaobabdtライブラリを使用)
ax = pybaobabdt.drawTree(
        model,                      # 学習済みの決定木モデル
        size=10,                    # プロットのサイズ
        dpi=100,                    # 解像度(dots per inch)
        maxdepth=3,                 # 表示する決定木の最大深さ
        features=iris.feature_names,# 特徴量の名前リスト
        classes=model.classes_,     # クラスラベル
)

 

以下、実行結果です。

 

まとめ

今回は、Pythonライブラリ pybaobabdt を用いて、決定木モデルの可視化の方法を解説しました。

ぜひ自身のデータセットでも試し、モデルの動作原理などの理解に役立ててみてください。

決定木の可視化は、モデルのデバッグ、改善、結果説明に大いに役立ちます。