
データ分析をしていると、単純に「全体としてどういう傾向があるのか」だけでなく、
といったことを知りたくなることがあります。
こうした問いに対しての答えをデータから探索するときに便利なのが、決定木です。
決定木は、データをいくつかの条件によってグループに分けていきながら、目的となる変数(例えば、解約、満足度、など)における値の違いを説明するための変数を見つけ出したり、そうした関係を使って予測したりする分析手法です。
例えば、あるサービスにおいてどういった利用者が「解約したか」を分析すると、
「利用頻度が月3回未満」、さらに「契約期間が6か月未満」の場合に解約率が高くなる
といったように、結果の違いを条件の組み合わせとして出力してくれます。
このため決定木は、予測モデルとして使えるだけでなく、目的変数における違いをつける特徴的な傾向を理解するための分析手法としても非常に便利です。
この記事では、決定木の代表的なアルゴリズムであるCART(Classification and Regression Tree)を使った決定木について、以下の順番で解説します。
決定木には他にもCHAIDというアルゴリズムがありますが、それについては次の記事で説明します。
決定木では、最初にすべてのデータを1つのグループとして考えます。
これをルートノードと呼びます。
そこから、
年齢が40歳未満か?
あるいは、
利用頻度が月3回未満か?
といった条件を使ってデータを2つのグループに分けます。

さらに、それぞれのグループを別の条件で分けていきます。
例えば、
利用頻度が月3回未満
↓
その中でも契約期間が6か月未満
というように条件を重ねていくことで、特徴の異なるグループを作っていきます。

こうして出来上がる形が、木が枝分かれしていくように見えることから「決定木」と呼ばれます。
最終的に分岐が止まったグループは、リーフノード、または終端ノードと呼ばれたりします。
決定木を見ることで、どの変数が最初に分岐に使われたのか、さらに、どのような条件の組み合わせによって特徴的なグループが作られたのか、といったことを視覚的に理解することができます。

決定木には、大きく分けると3つの使い方があります。
1つ目は、目的変数と関係している変数を見つけることです。
例えば、目的変数が「解約したかどうか」である場合、
などを説明変数として使うと、
どの変数が解約と強く関係しているのか
を見ることができます。
2つ目は、セグメンテーションです。
例えば、
利用頻度が低く、契約期間も短い利用者は解約率が高い
といった、特徴的な顧客グループを見つけることができます。
単に「利用頻度が重要」とわかるだけではなく、
どの条件の組み合わせで結果が変わるのか
を理解できるのが、決定木の大きな特徴です。
3つ目は予測です。
すでに結果がわかっているデータをもとに決定木を作れば、新しいデータについて、
といったことを予測できるようになります。
つまり決定木は、
要因分析、セグメンテーション、予測
という3つの用途に使うことができます。
では、決定木はどうやって、
利用頻度が月3回未満
のような条件を見つけているのでしょうか。
CARTの基本的な考え方は非常にシンプルです。
「どの変数の値を、どうやって分けると、分岐後の各グループ内のデータが最も似たものになるか」
を探します。
例えば、目的変数が「解約した / 解約していない」で、もともと以下のような割合だったとします。
ここで、ある条件で分けた結果、
グループAでは、
グループBでは、
となったとします。

分岐前よりも、分岐後の各グループの中で「解約する人」と「解約してない人」がよりはっきりと分かれています。
CARTは、このように分岐後にできる各グループ内における目的変数の値ができるだけ同じようになるような分け方を探します。
例えば説明変数として、
の3つがあったとします。
CARTはまず、
年齢で分けるなら、どの値で分けるのがよいか?
を試します。
例えば、
年齢 < 30歳
年齢 < 40歳
年齢 < 50歳
といったさまざまな候補を比較します。
次に契約期間についても、
契約期間 < 3か月
契約期間 < 6か月
契約期間 < 12か月
などの候補を試します。
利用頻度についても同じです。
そして最終的に、分岐後のグループが最もきれいに分かれる変数と条件を選びます。
例えば、
利用頻度 < 月3回
が最もきれいに分けられるのであれば、それが最初の分岐になります。
その後、それぞれの子ノードについて再び同じ処理を繰り返します。
こうして、決定木が下に伸びていきます。
CARTという名前は、「Classification(分類)and Regression Tree(回帰)」の略ですが、その名前が示す通り、CARTは分類にも回帰にも使うことができます。
Exploratoryでは、目的変数のデータ型によって、各ノードに表示される情報も変わります。
例えば、以下のようなTRUEかFALSEという2つのうちのどちらかの値を取るロジカル型が目的変数の場合、
CARTはClassification Tree、つまり分類木として動作します。
分岐の目的は、分岐のあとにできる各グループで、TRUEとFALSEができるだけ混ざらないグループを作ることです。
例えば、分岐前には、
だったものが、分岐後には、
左のノード:
右のノード:
となれば、非常に良い分岐です。

この「混ざり具合」を測るために、CARTでは「不純度」などの指標が使われます。
逆に、以下のような数値型の変数が目的変数の場合、
CARTはRegression Tree、つまり回帰木として動作します。
数値型の場合は、分岐後にできる各グループ内の数値のばらつきができるだけ小さくなるように分けることを目的とします。
例えば全体では売上が、10万円から100万円まで広くばらついていたとします。
そこで、ある条件を作って分けると、左のノードでは、
10万円〜30万円程度
右のノードでは、
60万円〜100万円程度
のように分かれれば、それぞれのグループ内の売上がより似たものになります。

つまり、分類ではカテゴリの混ざり具合を減らす、回帰では数値のばらつきを減らす、ということが目的だということです。
作られたそれぞれのノードについても、さらに分岐を作っていきます。
例えば、最初に、
利用頻度 が 月3回より大きいか、小さいか
で分けたあと、そのあとにできる各グループに対して、
契約期間 が6か月より大きいか小さいか
という条件を追加することでさらに解約率の違いがはっきりするのであれば、新しい分岐を作ります。
これを繰り返して木を成長させていきます。
ただし、無限に分岐を続ければよいわけではありません。
木を細かくしすぎると、分析に使ったデータだけには非常によく合うものの、新しいデータに対してはうまく予測できないといった、いわゆる「過学習」と呼ばれる問題が起きやすくなります。
そこで実際の決定木では、
といったパラメーターを使って、木が複雑になり過ぎないようにコントロールします。
それでは、ここからは、実際にExploratoryで決定木を作った結果を見てみましょう。
Exploratoryでは、アナリティクスから「決定木(CART)」を選び、
を指定することで、CARTによる決定木を作ることができます。
例えば、顧客データを使って、
目的変数
説明変数
などを指定し、実行ボタンをクリックすると、決定木のモデルが作られます。

ここで、先ほど説明したCARTの仕組みを、Exploratoryの決定木チャートを使ってもう一度確認してみましょう。
目的変数が「解約を検討した / していない」のようなロジカル型の場合、Exploratoryでは各ノードの中に積み上げバーチャートが表示されます。

ルートノードを見ると、まずデータ全体におけるTRUEとFALSEの割合がわかります。
今回のケースでは、以下の割合が読み取れます。
TRUE(解約を検討した):24.6%
FALSE(解約を検討していない):75.4%
そこから、
このサービスの操作のしやすさを評価して下さい < 2.5
という条件で2つに分かれています。
左側のノード、つまり評価が2.5よりも小さい場合は、TRUEの割合は約50%と以前よりも高くなっています。
逆に右側のノード、つまり評価が2.5以上の場合は、TRUEの割合は約14%と低くなっています。
これはつまり、「このサービスの操作のしやすさを評価して下さい」という変数の値によって、解約を検討するかに大きな違いが出ているということです。
目的変数が売上などの数値型の場合、各ノードにはヒストグラムが表示されます。
例えば、以下は従業員データを使って、目的変数に給料(月あたり、単位ドル)を選んだ場合の決定木です。

ルートノードでは、まずデータ全体の給料の分布が見えます。
例えば給料が低い従業員から高い従業員まで幅広く存在しているのが確認できます。
そこから、以下の条件で分岐します。
左側:職種 = 営業幹部, リサーチサイエンティスト, ラボ技術者, 製造ディレクター, など
右側:職種 = マネージャー, リサーチディレクター
左側のノードでは給料が比較的低い値を中心に分布し、右側では高い値を中心に分布しているのが見えます。
従業員の数(データ量)は左のノードの方が圧倒的に多いのも確認できます。
このままだと右側のノードのヒストグラムの高さが低すぎてデータの分布が見えにくいです。その場合は、右上の「ヒストグラムの高さを同期」のチェックを外すと、ヒストグラムの高さは各ノード内で最適化されたものになり、分布が見やすくなります。

ロジカル型やカテゴリ型の目的変数の場合は積み上げバーチャート、数値型の場合はヒストグラムが表示されますが、それによって、分類ではカテゴリの構成、回帰では数値の分布を見ながら、CARTが何を基準に分岐しているのかを確認できるようになっています。
決定木を見るとき、最初の分岐だけを見るのではなく、ぜひ終端ノード(リーフノード)まで追いかけてみてください。
例えば、
操作のしやすさ < 2.5
解決までにかかった時間 = 翌日、2~3日、4日以上、未解決
という終端ノードのTRUEの確率は65.4%となっています。
これは、
操作のしやすさに対する評価が低く、さらに問題を問い合わせても解決に時間がかかってしまっている場合は、解約される可能性が高くなる
ということを意味します。

ここで重要なのは、「操作のしやすさ」単独でも「解決までの時間」単独でもなく、これら2つの条件の組み合わせによってこのグループが特徴付けられるということです。
決定木の大きなメリットの1つは、こうした変数同士の組み合わせによるパターンを簡単に素早く見つけられることです。
Exploratoryでは、終端ノードの条件というセクションに全ての終端ノードにおける条件とこの条件にマッチするデータの情報がリストされます。

決定木チャートを見ると、「最初に分岐に使われた変数が、一番重要な要因なのでは?」と思うかもしれません。
確かに、上の方に現れる変数は重要であることが多いです。
しかし、モデル全体としてどの変数がどれだけ重要だったかを確認するには、変数重要度を見る方が適しています。

変数重要度を見ることで、
目的変数を予測するうえで、どの説明変数がより大きな役割を果たしていたのか
を比較できます。
ここで注意したいのは、
重要度が高い = 因果関係がある
という意味ではないことです。
例えば利用頻度が解約と強く関係していたとしても、
利用頻度を増やせば必ず解約が減る
とまでは言えません。
決定木でわかるのは、あくまでデータ上の関係です。
変数重要度を見ると、どの変数が重要かということはわかります。
しかし、
その変数の値が変わると、予測結果はどのように変化するのか
まではわかりません。
そこで役に立つのが、各変数の値とモデルの予測値との関係を見るチャートです。

例えば「操作のしやすさ」や「解決までの時間」の変数のチャートを見ると、各値ごとに予測される解約される確率を確認できます。
これらのチャートから、「操作のしやすさ」の評価が3以上であれば解約されにくく、また「解決までの時間」も1時間以内、または当日中であれば解約されにくいということがわかります。
整理すると、
変数重要度では、
どの変数が重要か?
を確認し、そのあと、
変数と予測値の関係を使って
重要な変数がどのように目的変数と関係しているか?
を理解することができます。
決定木は結果を説明するだけでなく、予測モデルでもあります。
そのため、
このモデルを使えば、実際の予測精度はどれくらいなのか?
を確認することも重要です。

例えば目的変数が「解約したかどうか」といったロジカル型の場合、次のような指標を見て判断します。
特定の予測確率のしきい値だけではなく、モデル全体として2つのクラス(TRUEとFALSE)をどれくらいうまく区別できているかを見る指標です。
解約者と継続者の数に大きな偏りがある場合には、単純に正解率だけを見るとモデルを過大評価してしまうことがあります。
例えば顧客の95%が継続している場合、全員を「継続」と予測するだけでも正解率は95%になってしまいます。均衡正解率は、このようなクラスの偏りを考慮して予測性能を見るために便利です。
また、混同行列を見ることで、
を確認できます。

ここで重要なのは、
決定木がわかりやすいからといって、必ずしも予測精度が高いとは限らない
ということです。
逆に、非常に予測精度の高いモデルでも、分岐が複雑すぎると解釈しにくくなることがあります。
分析の目的が、
結果を説明したいのか
新しいデータをより正確に予測したいのか
によって、どの程度モデルの複雑さや予測精度を重視するかも変わってきます。
決定木は非常に直感的ですが、いくつか注意すべき点があります。
分岐を増やせば、手元のデータにどんどん適合(フィット)していきます。
しかし、細かすぎる条件はそのデータだけに存在した偶然のパターンを拾っている可能性があります。
そのため、最大深度や最小ノードサイズなどを使って、適切な複雑さに抑えることが重要です。
例えば、
ある条件では解約率100%
というノードがあったとしても、そこに3人しかいなければ、その結果を一般化するのは危険です。
割合だけでなく、各ノードの行数も合わせて見る必要があります。
重要な変数が見つかっても、
その変数を変えれば結果も変わる
とは限りません。
決定木は関係性を見つける分析であり、因果関係を証明するものではありません。
当然ながら、候補として与えていない変数は決定木には登場しません。
そのため、どの説明変数を分析に含めるのかも重要な点です。
CARTの決定木は、目的変数の値が、分けたあとの各グループ内のデータが似たようになるように、データを分割する条件を繰り返し探索していく分析手法です。
目的変数がロジカル型やカテゴリ型などであれば、カテゴリの混ざり具合が小さくなるように分けます。
目的変数が数値型であれば、各グループ内の数値のばらつきが小さくなるように分けます。
Exploratoryの決定木チャートでは、ロジカル型の目的変数の場合には積み上げバーチャート、数値型の場合にはヒストグラムが各ノードに表示されるため、CARTが実際にどのようにデータを分けているのかを視覚的に確認することができます。
さらに、
を組み合わせて見ることで、
を総合的に理解できます。
ところで、今回解説した決定木はCARTという、決定木の中でも特に代表的なアルゴリズムを使ったものです。
一方、アンケートデータのようにカテゴリ型の説明変数が多い場合には、もう1つ便利な決定木のアルゴリズムがあります。
それがCHAIDの決定木と言われるものです。
CHAIDは、CARTとは異なり統計的な検定を使って分岐を作り、目的変数の傾向が似ているカテゴリをまとめたり、1つのノードから3つ以上のグループに分岐したりすることができます。
次の記事では、CHAID決定木の仕組みと、CARTとの違いについて詳しく見ていきます。
Exploratoryの「データサイエンス・ブートキャンプ」では、決定木を使った分析はもちろん、統計学、機械学習、データ加工、可視化、分析結果の解釈まで、データサイエンスに必要な実践的なスキルを、実際に手を動かしながら、3日間で集中的に学びます。
このブートキャンプでは、以下のようなAI時代に必要なデータサイエンスの力を、参加者の皆様に身につけていただくことをゴールとしています。
単にツールの使い方を学ぶだけでなく、問いを立て、データを準備し、可視化し、分析し、その結果をどう解釈するかまでを一通り体験していただきます。
クラスター分析を含め様々な分析手法を、実務のデータ分析でより自信を持って使えるようになりたい方は、ぜひ以下のページをご覧ください。