こんにちは、みっちゃんです。

これまでの記事で、2回にわたって「決定木」について紹介してきました。
- Yes/Noチャートを使ってデータを分類する【決定木】
- データ読み込みから決定木の可視化まで解説【Pythonをつかいます】

今回の記事では、決定木によるデータ分類のための指標である「ジニ係数」、可視化した決定木の見方、などについて解説したいと思います。

目次(まとめ)
- 決定木では、「はい」か「いいえ」を辿りながらデータを分類
- 決定木は、ジニ係数が小さくなるようにデータを分類している
- ジニ係数は、不純度や不平等度を示す指標
- 参考文献

決定木では、「はい」か「いいえ」を辿りながらデータを分類

説明のため、以前の記事で用いた入力データと可視化した決定木を、それぞれ図1図2として示します。

図1 入力データ(150人の生徒の4教科のテストの点数を想定してグループ分けをしている)
図2 Web版のGraphvizを用いて可視化した決定木


ここでは、出席番号1番の生徒さんの点数(国語:5.1点、算数:3.5点、理科:1.4点、社会:0.2点)を考えて、この生徒さんのグループを決定木で分類できるか確認します。

決定木は上から見ていきます。

「Shakai <= 0.8」とは「社会の点数が0.8以下」という意味で、あてはまる(はい)ならば"True"を、あてはならない(いいえ)ならば"False"の矢印を進みます。

「gini = 0.667」とは「ジニ係数が0.667」であることを示していて、「samples = 150」とは「この箱(ノード)に分類される生徒の数が150人」であることを示しています(分類前なので全員です)。

「value = [50, 50, 50]」とは「50人の生徒がグループA、50人の生徒がグループB、50人の生徒がグループC」であることを意味しています([A, B, C]の人数の内訳です)。

「class = A」とは、もし「社会の点数が0.8以下」という条件にあてはまる生徒がいれば「Aに分類する」という意味です。

出席番号1番の生徒さんの社会の点数は0.2点なので、「社会の点数が0.8以下」の条件にあてはまり、オレンジ色のノードに分類されます。

このように決定木を眺めると、以下のことがわかります。

- 緑色のノードには、Bグループとして54人(sample)が分類されたけれど、valueをみると、本当は54人のうち49人はBグループで、残り5人はCグループであることがわかる。つまり、5人は間違ってBグループに分類されてしまった、ということを意味している。

- 紫色のノードには、Cグループとして46人(sample)が分類されたけれど、valueをみると、本当は46人のうち45人はCグループで、残り1人はBグループであることがわかる。つまり、1人は間違ってCグループに分類されてしまった、ということを意味している。


決定木を作るという作業は、データを正しくグループ分けできるように条件(質問内容)を決めるということ対応します。

決定木は、ジニ係数が小さくなるようにデータを分類している

上の決定木にも書いてあるように、決定木は、一般的に、ジニ係数を指標に構築されます。

具体的には、ジニ係数が小さくなるようにデータを決定木を構築します。

上の例では、分類前のすべてのデータに対するジニ係数が「0.667」であり、分類後には、Aグループで「0.0」、Bグループで「0.168」、Cグループで「0.043」というふうに小さい値をとるようになっています。

ジニ係数(Gini index)の求め方は、以下の通りです。
$$({\rm Gini}) = 1 - \sum_{i=1}^c {p_i}^2$$
ここで、\(c\)は「グループの数」、\(p_i\)は「全データ数に対するあるグループのデータ数」を示しています。

ジニ係数は、不純度や不平等度を示す指標

ジニ係数は、決定木においては、ノード内のデータの不純度を評価する指標として用いられています。つまり、同じグループに属するデータのみからなるノードの不純度はゼロとなります。

ジニ係数は、収入などの不平等度を評価する際にも用いられます。

例えば、累積世帯比率を横軸に、累積所得比率を縦軸にとって描いたローレンツ曲線では、図3に示すようにジニ係数を計算することができます。

図3 世帯の所得分布を示すローレンツ曲線から不平等性を解釈するためのジニ係数


このことに関しては、統計検定でも問われることなので、是非覚えておくといいと思います。

参考文献

- 平井有三「はじめてのパターン認識」森北出版
- 久保川達也「現代数理統計学の基礎」共立出版