サクサク“決定木分析”のポイント

皆さまこんにちは。前回は“問題解決実践編”として、“異次元の少子化対策”を題材に“根本原因分析”について書きました。今回は、データマイニングの定番、今話題の機械学習でもおなじみの“決定木分析”について書いてみたいと思います。

1. “決定木分析”とは?

“決定木分析”とは、複数カラム(列)のあるデータセットの中から、目的変数に対して、一番インパクトの大きい説明変数を抽出する手法です。そして文字通り、分析結果をツリー構造にして、わかりやすく表示してくれます。これが、この手法が古くから人気がある一番の理由ではないかと思われます。決定木分析そのものについては、ググるとたくさん記事が出てくると思いますので、ここでは細かい点は書きません(参考までに、一つだけリンクを貼っておきます)。問題解決する上でのポイントだけ書いてみます。

2. “重回帰分析”と“決定木分析”の違い

以前の投稿でも書きましたが、顧客調査結果等の、カラム(列)がたくさんあるデータを見つけた場合に、重回帰分析(線形回帰ロジスティック回帰)に加えて、この決定木分析は有用です。複数カラムのうち、目的変数に対してインパクトの大きい説明変数を発見することができます。

それでは重回帰分析と決定木分析の違いは何なのでしょうか?どう使いわければよいのでしょうか?主だったポイントをまとめておきます。

表1: 重回帰分析と決定木分析の違い
表1: 重回帰分析と決定木分析の違い

他にも色々ありそうですが、主だったところはこんな感じかと思います。要は、決定木分析の方が制約が少ないので、まずは決定木分析をやってみる方が、諸々準備の手間は少ないかと思います。

これに対して、重回帰分析の良さは予測式が作れるところかと思います。ですので、例えばカラム数が大量にあるようなデータの場合、まず決定木分析で、インパクトのありそうな説明変数をある程度絞り込んでから、重回帰分析をかける、といった複合技もあり得ると思います。

3. “決定木分析”の手順

決定木分析はエクセルではできないので、以前のロジスティック回帰分析の投稿でご紹介した統計ツール“R(無料ツール)”を使ってみます。Rは他にも重回帰分析やクラスター分析等様々なデータマイニング(統計分析)手法を扱うことができるとても便利なツールです。Rそのものについてはググるとたくさん記事が出てくると思いますので、ここでは書きません。

Rを使うには色々なやり方がありますが、以前の投稿同様、今回も“Google Colaboratory(以下、コラボ。これも無料!)”を使ってRを動かすやり方で進めます。まずコラボ上でRを実行する準備を行ってから、分析するファイルを読み込みますが、ここまでの手順はどの分析手法でも共通なので、以前の投稿をご覧ください。

分析するファイルですが、これも以前のロジスティック回帰分析の投稿で使用したものと同じファイルを使ってみます。分析手法に違いによって、結果に違いが出るか楽しみですね。ちなみにファイルの中身(カラム)はこんな感じです。

性別

年齢

年代

未既婚

居住地

知っているプライベートブランド(複数選択)

プライベートブランド別のイメージ(複数選択)

ここ1~2年での、プライベートブランドの購入頻度の変化(増えた・減った・変わらない)

上記の理由(自由回答)

この1年以内に、プライベートブランドに切り替えた食品(複数選択)

この1年以内に、プライベートブランドに切り替えた調味料(複数選択)

この1年以内に、プライベートブランドに切り替えた飲料(複数選択)

この1年以内に、プライベートブランドに切り替えた医薬品(複数選択)、等々

上記データの中で、結果変数となりそうなのが、 “ここ1~2年での、プライベートブランドの購入頻度の変化(増えた・減った・変わらない)”、と“この1年以内に、プライベートブランドに切り替えた食品/調味料/飲料/医薬品”で、これらは選択式の回答結果で、離散変数でした。

それでは上記ファイルを読み込んで、いよいよ決定木分析を実行します。まずR上で、決定木分析のためのライブラリ”rpart”と、分析結果表示用のライブラリ”partykit”を使えるように準備します。

図1:”rpart”と”partykit”の準備
図1:”rpart”と”partykit”の準備

次いで、決定木分析のコマンド。

図2:決定木分析実行
図2:決定木分析実行

右側の”rpart”が決定木分析のコマンドで、ここでは実行結果を、変数“decision_tree_test”に読み込んでいます。rpartの引数ですが、( )内の”Freq”が目的変数で、その横の” ~ .”は、説明変数は残りの全カラムという意味です。

結果を見てみると、”n”はデータの件数で今回697件です。”node), split, n, deviance, yval”とありますが、この順に以下の数値が表示されています。splitはデータを分類するカラム名で、nはその分類に入ったデータ件数、yvalがその分類の中での“目的変数 = プライベートブランドの購入頻度の変化があった人”の割合を示しています(devianceは一旦無視して大丈夫です)。

上記に従って結果を読み解いてみると、目的変数の“ここ1~2年での、プライベートブランドの購入頻度の変化(1=増えた、0=変わらない・減った)”に最もインパクトが大きいのは、“この1年以内に、プライベートブランドに切り替えた食品数”。食品数が1.5未満だと、次にインパクトがあるのが“この1年以内に、プライベートブランドに切り替えた調味料数”となり、調味料数が1.5以上だと購入頻度の変化があった人が多く、この分類に属する20人のうち45%(=9人)となっています。

数値だけだとちょっと見づらいので、分析結果表示用ライブラリの”partykit”を使ってみます。

図3:決定木分析の結果表示
図3:決定木分析の結果表示

こちらの方が位置関係が見やすいですね。まさに決定“木”の形になっています。ただこのpartykitを使っても、字が潰れてしまったりして調整がやや面倒なので、私が実際にプレゼンに使うとき等は、パワーポイントで自分でツリー図を作ったりもしています。この辺は好みの問題もありますが。

さて、この結果を前回のロジスティック回帰分析の結果と比較するとどうでしょうか?ロジスティック回帰分析では、”Price(プライベートブランドを購入する際に重視すること -【価格】)“、”Foods(この1年以内に、メーカー品からプライベートブランド商品に切り替えた食品数)“の順にインパクトが大きく、“Spices(この1年以内に、プライベートブランドに切り替えた調味料数)”が3番目でした。

今回の決定木分析では、”Price “がなくなり、”Foods“、”Spices“のインパクトが大きくなっています。分析ロジックが違うので、同じデータで、同じように目的変数に対する説明変数のインパクトを調べても、当然結果が異なる場合があります。

ですので、まず決定木分析でざっと分析して、ある程度説明変数を絞ってから重回帰分析をするという組み合わせ例を先ほど書きましたが、このように思わぬ発見が出てくる可能性がありますので、決定木分析だけで終わらせず、手間を惜しまずに笑、両方やってみるのがお勧めです。

今回は、決定木分析の手順と、重回帰分析との違い・組み合わせ方について書いてみました。多少なりとも参考になれば幸いです。

今回はこのくらいにさせていただき、また次回以降、続けていきたいと思います。 最後まで読んでいただき、ありがとうございました。

Sponsored Link