SageMaker Autopilotの学習結果をHiPlotで可視化してみる

2020.02.14

昨日の夜にGitHubのトレンドを眺めてたら、HiPlotなるデータ可視化ツールを見つけました。面白そうだったので、SageMaker AutoPilotによって実行された学習ジョブのハイパーパラメータと評価指標の関係をHiPlotを使って可視化してみました。

概要

SageMaker Autopilot

SageMaker Autopilotはデータの前処理の選択からハイパーパラメータチューニングまで自動で行ってくれるAutoMLサービスです。実行した処理を再現するためのノートブックも生成されるため、実行結果を元に改善することができます。

HiPlot

HiPlotは多次元データの理解を容易にする、オープンソースのデータ可視化ツールです。平行座標プロット(Parallel Coordinates)を使ってデータを可視化し、区間を絞り込むなどインタラクティブな操作も可能です。

また、デモサイトが用意されているため、どういった感じかを実際に触ることができます。

やってみる

以下のエントリでAutopilotによって作成された学習ジョブの結果を、HiPlotを使って可視化させます。

インストール

HiPlotと合わせて今回使用するライブラリをインストールします。

pip install -U hiplot sagemaker pandas

データの取得

SageMaker Autopilotの実行時に作成したSageMaker Experimentsの実験の名前を指定して、各ジョブの実行結果を取得します。取得した実行結果はデータフレームとして保持します。

import hiplot
from sagemaker.analytics import ExperimentAnalytics
experiment_name = 'automl-banking-05-07-35-13-aws-auto-ml-job'
trial_component_analytics = ExperimentAnalytics(experiment_name)
analytic_table = trial_component_analytics.dataframe()
analytic_table

実行結果はこのようなデータとなってます。前処理用のジョブやそれぞれ異なるアルゴリズムを使ったジョブが混在しているため、ジョブごとに持つ情報が違い、NaNになっている箇所も多くあります。

可視化

取得したデータをHiPlotを使って、可視化してみます。そのままだと余分なデータが多すぎるので、カラムはハイパーパラメータと評価指標のみに絞ります。また、レコードはXGBoostを使った学習ジョブのみに絞りこみます。

target_images = [
    '354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-xgboost:0.90-1-cpu-py3'
]
target_columns = ['alpha', 'colsample_bytree', 'eta',
       'gamma', 'lambda', 'max_depth', 'min_child_weight', 'num_round', 'subsample', 'ObjectiveMetric - Max']
hiplot.Experiment.from_iterable(
    analytic_table[analytic_table['SageMaker.ImageUri'].isin(target_images) & (analytic_table['ObjectiveMetric - Max'].notna())][target_columns].to_dict(orient='records')
).display()

データテーブル

データも表形式でグラフの下に表示されます。

表のレコードにカーソルを合わせると、そのレコードの線がハイライトされます。

軸の操作

軸の名前部分をドラッグすることで軸を移動させたり、右もしくは左端まで持っていくことで軸を削除することができます。

右クリックで軸に対する設定を表示できます。

Use for coloringでその軸を基準に色をつけることができます。

散布図

Set as X axisSet as Y axisでそれぞれの軸を設定することで、平行座標プロットの下に2次元の散布図を描画できます。

軸でのデータの絞り込み

軸をドラッグして範囲を指定することで、描画するレコードを絞り込むことができます。

軸の範囲を絞り込んだ状態で絞り込んだ状態で上側のメニューのKeepを押すと、対象の軸の選択していない範囲が取り除かれます。 Excludeを押すと、逆に対象の軸の選択した範囲のレコードが取り除かれます。 Restoreを押すことで、グラフの絞り込み状態を元に戻すことができます。

データのエクスポート

上側のメニューのExportを押すことで、データをCSV形式でダウンロードすることができます。この後使うためにダウンロードしておきます。

ウェブサーバとしてのHiPlot

HiPlotはウェブサーバとして利用することも可能です。 ターミナルでhiplotと入力することで、自動的に起動します。

hiplot

http://127.0.0.1:5005/ にアクセスすると、次のような画面が開きます。

入力欄に先ほどダウンロードしたCSVのデータの場所を入力し、Enterキーを押すとグラフが描画されます。

ウェブサーバ版でもノートブック上に描画した場合と同じ操作が可能です。操作によって設定された情報がURLのクエリパラメータに反映されます。そのため、ローカルではなく他の人がアクセスできる場所でホスティングした場合には、そのURLを渡すことで同じグラフを他の人と共有することができ、共有された人もグラフに対して任意の操作が可能となります。 また、他にも複数の実験(グラフ)の比較するといったことも出来るようです。詳細についてはドキュメントをご確認ください。

さいごに

SageMaker Autopilotの学習結果をHiPlotを使って可視化してみました。3次元以上のデータの傾向の把握はかなり難しいですが、平行座標プロットを使い、評価指標を示す軸を色の基準とすることで各パラメータでどういう傾向があるか把握しやすくなります。SageMaker Autopilotをはじめとした、その他のAutoMLやハイパーパラメータチューニング等のツールで数十~数百個の学習ジョブを自動で実行させて、ベストジョブをただ取ってくるのではなく、その実行結果を有効に活用し、今後に活かすというのは簡単ではないと思います。HiPlotでハイパーパラメータに関するインサイトを得るというのは良さそうな手段だなと感じました。