2019.10.12この記事は約9分で読めます。TweetPocketこの記事では、統計解析ソフトのRで決定木分析を実践する方法について解説します。私が業務で分類問題に直面したら、まず決定木分析を実施します。私がこれまで経験から学んだことを皆さんに共有します。これから決定木に挑戦される方にとって役に立つ情報満載です。最後までお読みいただければと思います。決定木とは決定木とは目的変数を分類するルールを木構造で表したものです。これは製造業のデータを想定した例です。ある製品の品質検査結果(OK/NG)を分類する決定木です。圧力が0.3Mpa以上、且つ加熱温度が800°C未満の条件下で製造された製品はNGとなる確率(24/25)が高いことが分かります。※上記データは架空のものです。課題解決のための意思決定スピードが早くなる分析の目的は分析結果に基づき、課題を解決するための意思決定を行うことです。分類ルールが木構造で可視化される決定木は分析結果をそのまま意思決定に活用しやすい分析手法と言えます。決定木の代表的なメリットとデメリットを下に記載します。メリット分析結果の可読性が高い説明変数にカテゴリカル変数と数値変数が混在してもOKスケーリングが必要ないデメリット線形性のあるデータに弱い過学習しやすい過学習になりやすいということは未知のデータに対する予測能力(汎化性能)が低いということです。汎化性能を上げる工夫の1つに木の剪定があります。これは後程説明します。Rでの実装Rにはさまざまな決定木のライブラリが存在しますが、今回は代表的なrpartををご紹介します。データはタイタニック号の乗客属性データを使用します。データは下のボタンからダウンロードできます。Data.csvダウンロード今回はビジネス的な側面は無視し、タイタニック沈没事故で生存できたのはどんな属性を持った乗客かを分析していきます。決定木分析に必要なライブラリを準備します。「rpart」はCARTという分類アルゴリズムが実装されたライブラリです。ついては、「rpart.plot」と「partykit」の2種類をご紹介します。データの準備ローカルに保存したタイタニックのデータをRにインポートします。T)head(df)head関数で上のような結果が返ってきたらOKです。「age」は乗客の年齢ですが、2行目に0.9167という値が入っています。これはおかしなデータなので本来であれば、代表値で置き換えるか行ごと削除した方が良さそうですが、今回は無視して進みます。データの定義は以下の通りです。「survived」を目的変数とし、分析していきます。データの確認まずはsummary関数でデータの要約統計量を確認します。内訳は死亡者数が809、生存者数が500ということが分かります。「age」に注目すると、NA’sが263となっています。NA’sは欠損値の数を意味しています。予測のための分析であれば、欠損値を補完するなどの特徴量エンジニアリングを実施すべきですが、今回は予測することが目的ではないので実施しません。決定木の作成rpartで決定木を作成するコード例は以下の通りです。目的変数とし、そのほか全てのカラムを説明変数に設定しています。」オプションにはデータセット名を指定します。」には目的変数が変数型に応じて設定します。分析結果のサマリを確認summary関数で分析結果のサマリを確認します。importance(変数の重要度)です。sex(性別)が1番重要度が高いことが分かります。変数の重要度が高いほど、クラスを効率よく分類させる変数と思ってください。分類ルールは決定木をプロットした方が分かりやすいです。分析結果のプロット2種類の決定木プロットをご紹介します。お好みで使い分けてください。rpart.plotrpart.plotライブラリを有効化すれば使えます。#決定木のプロット(1)rpart.plot(tree)各ノードがどのクラスに分類されているかが色で判断できるのがrpart.plotの良い点です。プロットから、女性に比べて男性は生存率が低いことが分かります。「体力のある男性が救助役を担い、救助の際に亡くなってしまった」という仮説が立てられます。as.partypartykitライブラリが提供するプロットです。#決定木のプロット(2)plot(as.party(tree))葉ノードに分類されたデータのクラスの比率がグラフで表現され、分類の良さを確認しやすいのが良い点です。葉ノードとは、下にノードを持たないノードのことです。ここで、サマリで変数の重要度が1番高かったのは変数sex(性別)だったことを思い出してください。プロットから、変数sexが根ノード(1番上のノード)の分類ルールに使われているのが分かります。重要度が高い変数ほど、序盤の分類ルールに使われやすいです。決定木モデルは、木の枝を成長させながらデータの分類精度を向上させます。そのモデル作成に使用していない未知のデータについて精度が良い保証はありません。決定木モデルでデータを当てはめるときには、成長しすぎた枝を刈り取る必要があり、これを剪定といいます。上で見た木はやや複雑です。調整することで剪定ができます。cpの確認にはplotcpが便利です。cpと木の深さの関係をグラフで示します。#cp(決定木の複雑度)の確認plotcp(tree)cp選択基準の1つが下記です。示しており、これを初めて下回るcpは0.013であることが分かります。サマリで出力されたcp一覧からも計算することができます。cpで木の剪定を実施します。#剪定した木をプロット剪定した結果、すっきりした木になり、可読性も上がりました。右端の葉ノードから、チケットクラスが高い女性客が多く生き残ったことが分かります。決定木モデルの作成に使用したデータに対する分類精度を確認します。分類精度を評価する際は、混同行列を作成しましょう。混同行列から、diedを正しく分類できた件数は697、survivedは360であることが分かります。分類精度は、(正しく分類できた件数)÷(サンプル数)=0.8074866です。データの約80%が正しく分類できました。分析の目的によって着目すべき評価指標が異なります。これに関しては今後の記事で取り上げたいと思います。【注意】未知のデータを予測するモデルを評価する場合は、モデル作成に使用していないデータに対する分類精度を評価しましょう。まとめ最後までお読みいただき、ありがとうございます。分析結果の説明性が高い決定木は、ビジネス課題の解決に使いやすいツールです。本記事に関するご指摘、ご質問がございましたら、Twitterにてお気軽にメッセージをください。【DataMix】データサイエンティスト育成コースこの講座は、未経験の方であってもデータサイエンティストのエントリー職として仕事に就けるレベルにまで引き上げることを目的とした講座です。データサイエンティストに必要な知識やスキル、考え方を実践的に学ぶことができる約6か月間のプログラムです。Nava(ナバ)関連記事Python【初心者でも簡単】Pythonのscikit-learnで重回帰分析Pythonのscikit-learnライブラリを使って重回帰モデルを作成する方法をご紹介します。モデルによる予測の考え方についても触れています。R決定木の分類ルールセットを編集して予測する方法|Rこの記事では、決定木モデルの分類ルールセットを編集する方法をご紹介します。決定木でテストデータの予測を行う前に、訓練データから派生した分類ルールセットを編集したい場合に役立ちます。Meetupに初めて参加してみたら、現役スポーツアナリストの生々しいおもしろ話が聴けて最高でした。スポーツ業界に限らず、自身の業界にも通じる、データ分析における大切な視点が学べました。RMTシステムにおけるマハラノビス距離をわかりすく解説マハラノビス距離とは、複数の変数間に相関がある場合に相関関係を考慮した上で注目しているデータが中心点からどのくらい離れているかを表す距離です。PDPとICEは特徴量の値の変化による予測値の変動幅、寄与方向の参考になります。ICEは、pdpパッケージの関数partialとplotPartialを利用することで簡単に描けます。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。ホームデータ分析Rプロフィールこの記事を書いた人ナバIT企業にてデータ分析をやってます。統計学ブログ運営ホーム検索トップサイドバープロフィールこの記事を書いた人ナバIT企業にてデータ分析をやってます。Meetup#5~スポーツ好きに悪い人はいない~2019.11.032019.11.20PDPとICEを利用したEDA(探索的データ解析)|R2019.12.14【初心者でも簡単】Pythonのscikit-learnで重回帰分析2019.10.022020.01.16Rで繰り返し処理するなら、forではなくsapply2020.02.15ロジスティック回帰分析の基礎をわかりやすく解説2019.10.222020.01.16タイトルとURLをコピーしました。