🌳
CSVから決定木を生成するWEBサイトを開発
概要
CSVから決定木を生成できるWEBサイトを個人開発したので紹介する。
決定木とは
決定木とは、結論として示したい目的変数(分類)があり、説明変数(データの各列の値)の条件と目的変数の対応をツリー形式で示したもの。
下図は天気(雨、晴れ、曇り)の決定木の例。
雨量(rainfall)が0.1以上なら雨。雨量(rainfall)が0の場合、雲量(cloudage)が8.5以上なら晴れ、8.5未満なら曇りとなることを示す。
雲量(cloudage) | 雨量(rainfall) | 天気 |
---|---|---|
5 | 0 | 晴れ(sunny) |
9 | 0 | 曇り(cloudy) |
8 | 0.8 | 雨(rainy) |
サイトの利用方法
- 決定木を作成したいCSVファイルを用意する。
CSVファイルは、一行目はヘッダとし、最右列を目的変数にする。 - 「Import CSV」ボタンから用意したCSVファイルをインポートする。
⇒データの解析が実行され、「Decision Tree」の領域に目的変数を特定する条件が決定木として表示される。
決定木の解析例
サイトを使って決定木を解析した例
例1 売上の要因解析
気温や天気、休日のデータから売上を予想する決定木を作成する。
解析対象データ
データの特徴
- 雨の日は売上1~10万
- 晴れの日で気温26度以上なら売上10万アップ
- 晴れの日で休日なら売上10万アップ
気温 | 天気 | 平日/休日 | 売上 |
---|---|---|---|
20 | 雨 | 平日 | 1~10万 |
20 | 雨 | 休日 | 1~10万 |
20 | 晴れ | 休日 | 20~30万 |
20 | 晴れ | 平日 | 10~20万 |
21 | 雨 | 平日 | 1~10万 |
21 | 雨 | 平日 | 1~10万 |
21 | 晴れ | 平日 | 10~20万 |
(省略) |
売上の要因の決定木
解析を実行したところ、概ね元データの特徴どおりの決定木が作成できた。
例2 動物の特徴
動物の足の数や歯の数のデータから何の動物か予想する決定木を作成する。
解析対象データ
足の数(Number of legs) | 身体のサイズ(Size) | 歯の本数(Number of teeth) | 平均体温(Body temperature) | 動物の種(Species) |
---|---|---|---|---|
4 | small | 16 | 37 | ネズミ(Mouse) |
4 | lerge | 32 | 39 | 牛(Ox) |
4 | lerge | 30 | 37 | 虎(Tiger) |
4 | small | 28 | 38 | ウサギ(Rabbit) |
0 | small | 2 | 29 | ヘビ(Snake) |
4 | lerge | 42 | 37 | 馬(Horse) |
4 | middle | 32 | 39 | 羊(Sheep) |
2 | middle | 32 | 37 | 猿(Monkey) |
2 | middle | 0 | 42 | 酉(Rooster) |
4 | middle | 42 | 38 | 犬(Dog) |
4 | middle | 44 | 39 | 豚(Pig) |
4 | middle | 30 | 39 | 猫(Cat) |
動物の特定の決定木
各動物を特定する決定木が作成できている。ちなみに一番最初の判定条件は、足の数が0ならヘビ。
(長すぎるため省略)
工夫点
値の一致も判定できるように決定木のアルゴリズムを独自拡張
通常の決定木では、しきい値との大小比較でしか分岐条件を判定できないが、「雨の日は売り上げが下がる」といったような、説明変数の値が一致する場合も解析できるようにアルゴルズムを独自拡張している。
これにより「雨の日は1、平日は0とする」のようなデータの数値変換の前処理が不要となっている。
サーバへのデータ送信なし、すべてブラウザ内で処理
「解析対象データを第三者に見られたくない」というユーザも多くいると考え、データ解析はすべてブラウザ内の処理だけで行い、解析対象データがクライアントPCの外に送信されないように配慮した。
そのせいで決定木の解析部分はライブラリを使えず、全部自分で独自実装しなければならなかったが…いい勉強になった。
海外向けサイトとして英語で作成
CSVデータから決定木を手軽に作れるサイトは、海外ユーザの需要もあるだろうと思って、基本的に英語でサイトを作成した。
利用サービス/ライブラリ
項目 | 利用サービス/ライブラリ | 備考 |
---|---|---|
ホスティング | Firebase | 静的サイトのためホスティングのみ利用 |
ライブラリ | tabulator.js | テーブルの表示に使用。オプションが多くて使い易い |
create.js | 決定木の図の表示に使用 | |
semantic-ui | UI | |
プライバシーポリシー | Sample Privacy Policy Template | 海外向けサイトのプライバシーポリシーの作成に利用 |
favicon | favicon.io | ファビコン作成 |
余談
- 正直、作成できる決定木の精度は低く、実用性はあまりない。
ただ、決定木のおおまかなイメージを手軽に確認できるのは意味があると考えている。 - このサイトのアルゴリズムでは、解析対象データが分類ごとにしきい値で値がはっきりと分かれていて、外れ値などがない場合でないと正しく分類できない。
- Firebaseはデプロイしたファイルを取得できないのが地味に不便。
- ライブラリはすべてCDN利用とした。Firebaseが無料プランなので、少しでも通信量を下げるために。
- 海外向けサイト作成で一番苦労したのはプライバシーポリシーの作成…
決定木処理のjavascriptコードよりプライバシーポリシーのほうが量が多い気がする。 - 最初はもっと踏み込んでランダムフォレストまで実装しようかと考えていたけど、1つの決定木がグラフィカルに表示されるの良いなと思って方向転換。
Discussion