ジニ不純度とは、決定木のノードに異なるクラスがどの程度混在しているかを表す指標です。分類木は、特徴量の条件でデータを分割し、分割後のノードができるだけ一つのクラスにそろうように学習します。その「そろい具合」を評価する代表的な基準がジニ不純度で、値が小さいほどノード内の分類が純粋であることを意味します。
ジニ不純度は、決定木やランダムフォレストの分割基準を理解するうえで重要ですが、値が小さい特徴量が常に因果的に重要とは限りません。カテゴリの数やクラスの偏り、木の深さ、分割後のサンプル数に影響されます。本記事では、ジニ不純度の式と計算例、エントロピーとの違い、決定木での分割選択、特徴量重要度を読むときの注意点を整理します。
ジニ不純度とは?ノード内のクラス混在を測る指標
ジニ不純度(Gini impurity)は、あるノードからランダムに1件を選び、そのノード内のクラス割合に従ってランダムにラベルを付けたとき、誤分類する確率として説明できます。二クラス分類で一方のクラスが100%なら誤りは起きないため、ジニ不純度は0です。クラスが50%ずつ混ざると、ランダムなラベル付けの誤りが最大になります。
ノード内のクラス k の割合を p_k とすると、ジニ不純度は次の式で計算します。
Gini = 1 - Σ p_k²二クラスで割合が0.7と0.3なら、1-(0.7²+0.3²)=0.42 です。0.5と0.5なら0.50、1.0と0.0なら0になります。多クラスではクラス数が増えるほど最大値が変わるため、異なるカテゴリ数の問題でジニ不純度の絶対値を単純比較しないでください。
決定木でジニ不純度を使う仕組み|分割後の加重平均を小さくする
決定木は、特徴量としきい値の候補を順に試し、分割後の子ノードの不純度が小さくなる条件を選びます。親ノードのサンプル数を N、左と右の子ノードのサンプル数を N_L、N_R、それぞれのジニ不純度を G_L、G_R とすると、分割後の評価値は次の加重平均です。
G_split = (N_L / N) × G_L + (N_R / N) × G_R子ノードの一方が極端に小さい場合、そのノードの不純度が低くても全体への影響は小さくなります。反対に大きな子ノードの不純度が高いと、分割後の値はあまり改善しません。学習アルゴリズムは候補の中でこの値を最小にする分割を選び、親ノードとの差を不純度減少や情報利得として扱います。
簡単な分割例
親ノードにクラスAが6件、クラスBが4件あるとします。親のジニ不純度は 1-(0.6²+0.4²)=0.48 です。ある分割で左ノードがA5件・B0件、右ノードがA1件・B4件になった場合、左は0、右は 1-(0.2²+0.8²)=0.32 です。子ノードの加重平均は 0.5×0+0.5×0.32=0.16 となり、親より混在が減っています。
ジニ不純度とエントロピーの違い|分類木の分割基準を比較する
エントロピーもノード内のクラスの混ざり具合を測る指標で、情報理論に基づきます。クラス割合を p_k とすると、エントロピーは -Σ p_k log(p_k) です。両方とも一つのクラスに集中すると0になり、クラスが均等に混ざるほど大きくなります。決定木では、ジニ不純度を使う実装とエントロピーを使う実装があります。
ジニ不純度は平方計算だけで済むため、計算が比較的単純です。エントロピーは対数を使い、混在の変化を異なる形で評価します。データや候補分割によって最良の分割が入れ替わることはありますが、多くの実務データでは予測性能に大きな差が出ない場合もあります。指標を選ぶときは、検証データでの結果、計算コスト、既存モデルとの比較可能性を確認します。
実装のパラメータで指定する
scikit-learnの DecisionTreeClassifier では、criterion="gini" がジニ不純度、criterion="entropy" や criterion="log_loss" が情報量に基づく基準です。ライブラリのバージョンによって利用できる値が異なる場合があるため、実行環境の公式ドキュメントを確認します。基準を変更したときは、木の深さや乱数、剪定条件など他の設定を固定して比較してください。
ジニ不純度と過学習|木を深くしすぎないための制御
ジニ不純度を下げる分割を繰り返すと、訓練データに対して非常に純粋な小ノードを作れます。しかし、サンプルが少ないノードまで分割すると、偶然のパターンを覚えて未知データで誤る過学習が起きます。max_depth、min_samples_split、min_samples_leaf などの制約を使い、交差検証で深さと汎化性能のバランスを確認します。
クラスが不均衡な場合、単純に不純度を下げるだけでは多数派クラスをよく分ける木になることがあります。class_weight の設定、評価指標の見直し、少数クラスの再現率確認を組み合わせます。学習時に重みを付けると、分割の評価にも影響するため、重みの意味と検証方法を記録してください。
ジニ不純度から特徴量重要度を読むときの注意点
決定木やランダムフォレストでは、各分割による不純度の減少を合計して特徴量重要度を計算できます。これは不純度ベースの重要度、MDIとも呼ばれます。木がどの特徴量を分割に使ったかを要約できる一方、値の種類が多い連続特徴量やカテゴリ数の多い特徴量を過大評価しやすい性質があります。
重要度が高いからといって、その特徴量が原因とは限りません。相関した特徴量があると重要度が分散したり、片方に偏ったりします。モデルを説明する目的なら、検証データの置換によるPermutation Importanceや、必要に応じてSHAPなど別の方法も比較します。評価データを使って重要度を算出する場合も、テストデータを繰り返し見て特徴量を選ばないようにします。
Permutation Importanceとの違い
Permutation Importanceは、検証データのある特徴量をシャッフルし、予測性能がどれだけ悪化するかを測ります。モデルの汎化性能に対する寄与を見やすい反面、相関した特徴量をシャッフルすると、代替の特徴量が残って性能があまり落ちないことがあります。MDIとPermutation Importanceが一致しないときは、相関、特徴量の種類、評価データのサイズを調べます。
ジニ不純度を実務で確認する手順
1. クラス定義と分割単位を固定する
まず、各クラスの意味、判定期限、除外条件を文書化します。同じ顧客や案件のレコードが複数ある場合は、学習とテストにまたがらないようグループ分割を検討します。時系列なら未来のラベル情報が過去の特徴量へ入らないよう、予測時点を先に決めます。分割単位が曖昧なままジニ不純度を下げても、実運用で再現しません。
2. ベースラインと交差検証を用意する
多数派クラスを常に予測するベースラインを作り、決定木がどれだけ改善したかをaccuracyだけでなく、少数クラスの再現率や混同行列で確認します。木の深さや分割基準は訓練データ内の交差検証で比較し、最終テストデータは一度だけ評価します。
3. 木の構造と葉のサンプル数を確認する
学習後は、各ノードの条件、クラス割合、サンプル数、予測クラスを可視化します。深い木で葉のサンプルが数件しかない場合、ジニ不純度が0でも汎化するとは限りません。訓練と検証の指標を並べ、深さを増やしたときに検証性能が低下していないかを確認します。
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(criterion="gini", max_depth=4, random_state=42)
clf.fit(X_train, y_train)
print(clf.feature_importances_)上はジニ不純度を分割基準に指定する最小例です。feature_importances_ は不純度ベースの重要度であり、因果効果や予測の安定性を直接示しません。学習データの再サンプリングや別の時期のデータで重要度が大きく変わるなら、特徴量の採用判断を保留し、Permutation Importanceや外部知識を併せて検討します。
ジニ不純度の限界|数値を単独で解釈しない
ジニ不純度はノード内のラベル分布を要約する値で、特徴量と目的変数の因果関係を表しません。ラベルに誤りがある、学習時に将来情報が混ざる、カテゴリを数値として誤って扱うといった問題があれば、純度の高い木でも実運用で失敗します。データ生成過程と前処理を監査し、テストデータの独立性を守ります。
また、ジニ不純度はクラス数、クラス割合、サンプル重みに依存します。異なるデータセットの「0.2」と「0.2」を同じ意味とみなさず、同じクラス定義と評価条件で比較します。ランダムフォレストでは多数の木の平均的な重要度になるため、単一木の分割理由とアンサンブル全体の重要度を分けて説明してください。
ジニ不純度まとめ|分割の良さとモデル説明を切り分ける
ジニ不純度は、決定木のノードにクラスがどれだけ混在しているかを測る指標です。1-Σp_k² で計算し、分割後の子ノードの加重平均を小さくする条件を決定木が選びます。値が0に近いノードはクラスがそろっていますが、サンプル数が少ない純粋な葉は過学習の可能性もあります。
エントロピーと結果を比較し、木の深さや葉の最小サンプル数を交差検証で調整してください。特徴量重要度を読むときは、不純度ベースの偏り、相関、データリークを確認し、Permutation Importanceや混同行列などを併用します。ジニ不純度を「精度」や「原因」と混同せず、分割基準と説明手法を別々に評価することが重要です。
よくある質問(FAQ)
Q. ジニ不純度とは何ですか?
ジニ不純度とは、決定木のノード内で異なるクラスがどれだけ混在しているかを表す指標です。値が0に近いほど一つのクラスにそろっています。
Q. ジニ不純度が0ならモデルは正しいですか?
いいえ。学習データの小さな葉で不純度が0でも、未知データで正しく分類できるとは限りません。木の深さ、葉のサンプル数、検証データの性能を確認します。
Q. ジニ不純度とエントロピーはどちらが優れていますか?
一律の優劣はありません。両方ともクラスの混在を測りますが計算式が異なります。深さや乱数などをそろえ、検証データの性能と計算コストで選びます。
Q. ジニ不純度による特徴量重要度は因果関係を示しますか?
示しません。不純度ベースの重要度は分割による予測上の寄与を要約する値で、相関やカテゴリ数の影響を受けます。因果効果と解釈せず、Permutation Importanceなども比較します。
Q. クラス不均衡ではジニ不純度に注意が必要ですか?
必要です。多数派クラス中心の分割になりやすいため、クラス別の再現率や混同行列を確認し、必要に応じてclass_weightやサンプリングを検討します。
参考資料
- scikit-learn「DecisionTreeClassifier」
https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html - scikit-learn User Guide「Decision Trees」
https://scikit-learn.org/stable/modules/tree.html - scikit-learn User Guide「Feature importance evaluation」
https://scikit-learn.org/stable/auto_examples/inspection/plot_permutation_importance.html
