こんにちは、Deepblue の社員その1です。これから業務で Dataiku を使用したデータ分析・アプリ作成の機会があるので、まずは体験版を使ってみました。

まずDataiku とは何かというと、簡単にいうと「業務担当者からデータエンジニアまで、プロジェクト内のあらゆる役割の人たちがAIを使用し共有することができるプラットフォーム」です。AWSなどの外部データベースからのデータインポートからデータの前処理・視覚化・深層学習含めた機械学習まで、データ分析に必要な大体のことが Dataiku上で難しいコードを書かずとも実行できます。(もちろん、Python や R のコードを使用したデータ分析も Dataiku 上でできます)

本記事では、実際に Dataiku の提供する機械学習ツール (Visual Machine Learning) を使用して、その使い方や使った結果を紹介します。

データベースとの接続や体験日記が Deepblue の兄弟会社である truestar のブログで紹介されているので、興味を持ったらこちらもご覧ください。

データの準備・前処理

今回の機械学習では、 scikit-learn のサンプルデータセットの一つである「乳がんの診断」のデータセット (breast_cancer) を使用して、「各特徴量の値に対して腫瘍の悪性・良性を予測するモデル」を作成します。
その為、まずデータの前準備として、 Dataiku の Python recipe (inputされたデータをPythonコードで直接加工・処理する工程書) を使用して 乳がん診断の DataFrame 型のデータを作成し、Database としてアウトプットします。
更に、機械学習に使用する為に Split recipe (inputされたデータを分割する処理の工程書) を使用して学習データ (train) と 検証データ (eval) に分割します。

この Python recipe 内のコードは以下の様になっています。

 
# -------------------------------------------------------------------------------- NOTEBOOK-CELL: CODE_MAGIC_CELL
# Automatically replaced inline charts by "no-op" charts
# %pylab inline
import matplotlib
matplotlib.use("Agg")

# -------------------------------------------------------------------------------- NOTEBOOK-CELL: CODE
import dataiku
from dataiku import pandasutils as pdu
import pandas as pd

# -------------------------------------------------------------------------------- NOTEBOOK-CELL: CODE
"""
乳がんの診断についてのデータセット
"""
from sklearn import datasets

# データセットの取得
data = datasets.load_breast_cancer().data
feature_names = datasets.load_breast_cancer().feature_names
target_name = datasets.load_breast_cancer().target_names
target = datasets.load_breast_cancer().target

# DataFrame化する
df = pd.DataFrame(data, columns=feature_names)
## Target カラムを追加する (悪性(0), 良性(1))
df['target'] = target 
df['target_name'] = df['target'].replace(dict(zip([0,1],target_name)))

# -------------------------------------------------------------------------------- NOTEBOOK-CELL: CODE
# Recipe outputs
breast_cancer = dataiku.Dataset("breast_cancer")
breast_cancer.write_with_schema(df)

その結果、データの処理工程のフローは以下の様に表示されます。これはワークフローと呼ばれ、どのように加工・処理され、どの様な機械学習をされていったかを記述するフローチャートです。
WorkFlow 1

Visual Machine Learning を使用した機械学習の手順

Visual Machine Learning の立ち上げ

まず、機械学習を行う場合は、まず学習データ (train) の青四角アイコンをクリックします。すると、学習データの表データが表示されます。
表の右側にある + (Actions) をクリックすると、右側にサイドバーが出てきます。
この開いたパネルの上部にある Lab を押して、Visual ML > AutoML Prediction を選択します。
trainの表の表示1
trainの表の表示2

すると、目的変数にしたい変数は何かを聞かれるのでそれを選択し、その後「どの位の自由度でモデルを作成するか」について聞かれるので適当な自由度を選んでください。
機械学習の種類と自由度の選択画面

その後右下のモデル名を適宜変更して「CREATE」を押します。すると、Dataiku の機械学習ツール (Visual ML) が立ち上がり、モデルが生成されます。
今回は Interpretable Models for Bussiness Analysits (ビジネス分析のための解釈可能なモデル) を使用して分析を行いました。

機械学習の各種設定

生成されたモデルのページに飛ぶと、最初は RESULT のタブに飛びます。しかし、まだ学習していない為ここには何も写りません。
共変量やモデルの種類などの学習の設定は、DESIGN タブで設定できます。
学習モデルのページ_未学習

DESIGN タブに飛ぶと様々なモデルの設定をデザインできます。DESIGN タブ内の左側のパネルのそれぞれについて、以下の表に(私がわかる範囲で)内容を纏めます。

パネル名 説明
Target モデルの種類 (回帰・2クラス分類・他クラス分類)・目的変数のカラム名など
Train / Test set データセットの分割の設定(割合・Random seed など)
Metrics モデルの評価・最適化に使用する指標の設定
Debugging モデル・データセットの異常チェックの設定。デフォルトは「全項目のチェック実行」。
Features handling 共変量として使用する変数の設定
Features generation 変数同士を加算・乗算したものを変数として使用するかどうか等の設定。デフォルトで「No (使用しない)」
Feature reduction 特徴量の削減を行うかどうかの設定。共変量同士で相関関係があったりすると回帰分析はうまくいかないので、該当する共変量を削除する処理を行うかどうか… というもの。デフォルトで「No(しない)」
Algorithms モデルの種類の設定。複数選択が可能。この場合は選択した全モデルで学習が行われる。そして、その結果を比較して最終的に出力するモデルを一つに決める形必要がある。
Hyperparameters ハイパーパラメータの探索・最適化の手法の設定など。デフォルトは 「Grid Search」

DESIGN タブ Algorythms パネルの中身

一通りモデルデザインをした後は、右上にある SAVE をクリックことでモデルの設定を保存することができます。
モデルの学習の実行は、同じく右上にある TRAIN をクリックことで始めることができます。この時、この学習の Session NameDescrimination を聞かれますが任意なので記入しなくても、TRAINを押せばそのまま問題なく実行されます。
Training_Model_Start

学習の実行と結果の視覚化・モデルの選択

学習が始まると、先の DESIGN > Algorithms で選んだ各モデルが順番に学習されます。学習データの量やモデルの量や種類によっては時間がかかることもありますが、30列×500行程度であれば数分もかかりません。

そして、DESIGN > Metrics で選んだ指標をもとに最優なモデルを左側に提示してくれます。今回の学習の結果を以下に表示します。最も良い指標のモデルにはトロフィーマークが付きます。
Training_result
この図より、今回の場合は、 Logistic Regression が最も成功したモデルであることがわかります。

更に、下側には、各種モデルの結果と最優のパラメータ等の情報が表示されており、モデル名をクリックするとそのモデルの詳細が表示されます。
Result_Logistic_Reg
更に、左側のサイドバーから変数重要度や混合行列・ROC曲線などの情報を取得できます。
混合行列

その後、採用したい「モデルの詳細」ページ右上のDEPLOY をクリックしてワークフローに反映させることができます。DEPLOY をすることで、フロー上の他データの予測や評価ができる様になります。

DEPLOY 後モデルが反映されていることは、ワークフローから確認できます。緑色菱形のアイコンが学習済みモデルを示しています。
Work Flow2

作成したモデルを使用してデータを予測・評価する

フローの使用したいモデルアイコンをクリックすると右側にレシピが現れます。単なる予測をしたいだけならば Predict/Score を、予測結果の判定と指標による評価をしたい場合は Evaluate をクリックします。この二つの処理の違いは以下の通りです。

  • Predict / Score : 目的変数の値が未知のデータに対して予測したい
  • Evaluate : 目的変数の値は既知で、それを使用してモデルの精度を知りたい
    Work Flow 3

Predict/Score を使用して目的変数の値が未知のデータに対して予測する

Input に評価したいデータセット (今回は検証データ eval) を選択し、出力先のデータセットを作成・設定した後 CREATE RECIPE をクリックします。
その後、Output する Database の設定などをした後 RUN を押すと、予測のデータセットを得ることができます。
Predict/Score process
Work Flow 4

出力先の Database をクリックして中身を閲覧すると、右側にそれぞれの分類(悪性0・良性1)の予測確率、及び予測されたラベルのカラムが追加されていることが確認できます。
Predict/Score Result

Evaluate を使用してモデルの精度を計算する

Input に評価したいデータセット (検証データ eval) を選択し、出力先のデータセットを作成・設定した後 CREATE RECIPE をクリックします。
その後、評価の指標やOutput する Database の設定などをした後 RUN を押すと、評価のデータセットを得ることができます。
Evaluate process
Work Flow 5
Outputs の Outputs datasetmetrics は、それぞれ「検証データの予測評価のデータセット」と「評価の指標一覧を載せたデータセット」を指しています。
それぞれの出力の中身は以下の様になっています。

  • Output dataset
    Outputs datase
    右側に予測されたラベルのカラムと、正解ラベルとの一致・不一致の bool 値のカラムが追加されていることが確認できます。

  • metrics
    metrics
    評価の実行日時と損失(LogLoss)、各種指標(再現率、適合率、正解率、F1値、AUC等)がデータセットに出力されていることが分かります。
    また、この metrics データセットについては、実行する度にその結果が database 下行に追加 されます。

本記事書き手の所感

Dataiku で機械学習を行なって、まず最初に感じたことは「コードを打ち込む必要性が圧倒的に少ない。面倒臭いデータの分割などの処理もアイコンやフローで視覚化されていて分かりやすい」ということです。
直接コーディングして機械学習する場合、コードに書き手毎の個性が出て共有が難しくなる・コーディングに慣れないメンバーは理解しにくい・書く時にどのパッケージがどの機能だったか一々確認する作業が発生するといった問題が発生します。
しかし、Dataiku はそれらの問題を一手に解決できており、社内でプロジェクトを進める時やクライアントに制作したアプリや分析結果を共有する際に非常に有用になると実感しました。
また、従来通りの Python でのコーディングでの機械学習モデル構築も 「Custom Python Model」 という形で可能な為、柔軟にモデリングができてとても良いと感じました。