LoginSignup
2
0

More than 1 year has passed since last update.

SageMaker Autopilot のアルゴリズム選択方法

Posted at

はじめに

SageMaker Autopilot は、データに基づいて最適なモデルを自動で構築してくれるAutoML 機能です。
Autopilot は非常にアップデートが多くされており、AWSとしても力を入れている機能なのかなと思います。(※本記事の末尾参照)

つい先日のアップデートで、Autopilot で実験を作成する際に、利用するアルゴリズムを選択できるようになりました。

SageMaker Autopilot で機械学習トレーニングの実験開始時にアルゴリズムの選択が可能に

これまでは、トレーニングモードとして、以下3パターンを選択できましたが、各パターンの中でチューニングするアルゴリズムの指定まですることはできませんでした。

トレーニングモード 利用アルゴリズム
アンサンブル ● LightGBM
● CatBoost
● XGBoost
● Random Forest
● Extra Trees
● Linear Models
● Neural network torch
● Neural network fast.ai
ハイパーパラメーター最適化 (HPO) ● Linear learner
● XGBoost
● Deep learning algorithm
Auto ● アンサンブル or ハイパーパラメーター最適化 (HPO)
※トレーニングモードを自動で選択してくれるモード

チューニングしたい対象のアルゴリズムを絞ることができ、よりユースケースにマッチするアルゴリズムのチューニングに時間をかけることができるようになります。
アルゴリズムには特にこだわりはなく、単純に精度の高いモデルを早く作りたいということであれば、デフォルト設定を利用すればいいと思いますが、実際の利用シーンでは「GBDT系(XGBoost, LightGBM, CatBoost)を利用したい」といったようにある程度ターゲットとなるアルゴリズムにめどがついていることの方が多いと思います。実プロジェクトで Autopilot によるモデル構築を取り入れやすくなったのではないでしょうか。

Autopilot のアルゴリズム選択方法

Autopilot のアルゴリズムの選択を実際にやってみます。Autopilot は「SageMaker Studio コンソールを利用する方法」と「API を利用する方法」の2つの方法で利用できるのでどちらも試したいと思います。

1.SageMaker Studio コンソールを利用する方法

SageMaker Studio コンソールでの利用方法です。簡単に操作できるので、SageMaker Studio が使えるならこちらの方法がおすすめです。

まずは、SageMaker Studio コンソールの左側のナビゲーション画面にある「AutoML」を選択して、Autopilot ダッシュボードを開き、「Create AutoML experiment」を選択し、Autopilot ジョブの設定画面に移動します。

「Experiment and data details」ステップで、入力となる学習データと、AutopilotJob の Artifact 出力場所となる S3 の格納先を指定します。
image.png

次に、「Target and Features」ステップで、目的変数と説明変数のデータ型を指定します。
image.png

ここまでの手順はアップデートで前と特に変わりはありません。

そして、「Traning method and algorithms」ステップで、トレーニングモードを選択できるのですが、各トレーニングモードごとに利用するアルゴリズムの一覧が表示されるようにアップデートされています。各チェックボックスを選択することによって、利用するアルゴリズムを指定できるようになっています。
image.png

今回は、「アンサンブルモード(Ensembling)」で、 LightGBM, CatBoost, XGBoost を選択します。
image.png

「Deployment and advanced settings」ステップで、各詳細設定(IAMロール、KMSキー、VPC設定など)を入力します。
image.png

各設定を確認して、「Create experiment」を実行します。Autopilotジョブが完了すると、以下のようにトレーニングされたモデルの一覧が表示されます。
image.png

モデル名(Trial name)を見ると「アンサンブルモード(Ensembling)」で選択した、CatBoost モデルと、各モデルを加重平均した WeightedEnsemble モデルが作成されているように見えます。ここまで数ステップの操作で非常に簡単にアルゴリズムの選択をしモデル構築ができ便利だなと感じます。

それでは、実際に作成されたモデルの中身を少し詳しく確認したいと思います。
Autopilot は、自動実行した試行錯誤の結果を可視化するノートブックを自動生成してくれるのですが、「アンサンブルモード(Ensembling)」には、対応していないようでモデルの詳細な構成をすぐに確認できませんでした。

しょうがないので、各モデルのArtifact を直接確認してみます。作成されたモデル名を選択し、「Artifacts > Algorithm Model」のURLからモデルのArtifact格納先のS3を確認します。image.png

モデルファイル(model.tar.gz)をS3 からダウンロードして解凍すると、AutoGluon によって作成されたモデルがpickle 形式で保存されています。
以下のようにpickle を開き、WeightedEnsemble モデルの構成が記載されている base_model_names を確認すると、CatBoost モデルと xgboost モデルにより構成されており、たしかに選択したアルゴリズムのみが利用されていることが分かります。

import pickle

with open('models/WeightedEnsemble_L2_FULL/model.pkl', 'rb') as f:
    model = pickle.load(f)
'base_model_names': ['CatBoost_BAG_L1',
  'XGBoost_BAG_L1',
  'CatBoost_BAG_L1_FULL',
  'XGBoost_BAG_L1_FULL'],

AutoGluon に渡したパラメータ(num_bag_setsnum_stack_levels)については、モデルの詳細情報(Model explainability)から確認することができましたが、実際にチューニングされたモデルの中身(ハイパーパラメータやスタッキング構成など)を可視化することは簡単に確認できなかったので、今後の機能改善に期待したいです。

2.API を利用する方法

CreateAutoMLJob API を実行する方法で、何個かやり方がありますが、ここでは boto3 のcreate_auto_ml_job を利用してみたいと思います。

利用方法は非常にシンプルで、create_auto_ml_jobAutoMLAlgorithmsに利用したいアルゴリズムを指定するのみです。API でも非常に簡単にアルゴリズムの選択をすることができます。

import boto3

client = boto3.client('sagemaker')

response = client.create_auto_ml_job(
    AutoMLJobName='<Autopilot ジョブ名>',
    InputDataConfig=[
        {
            'DataSource': {
                'S3DataSource': {
                    'S3DataType': 'S3Prefix',
                    'S3Uri': '<学習データの格納場所>'
                }
            },
            'TargetAttributeName': 'Churn?'
        },
    ],
    OutputDataConfig={
        'S3OutputPath': '<Artifact の出力場所>'
    },
    ProblemType='BinaryClassification',
    AutoMLJobObjective={
        'MetricName': 'F1'
    },
    AutoMLJobConfig={
        'CompletionCriteria': {
            'MaxCandidates': 5
        },
        'CandidateGenerationConfig': {
            'AlgorithmsConfig': [
                {
                    'AutoMLAlgorithms': [ # アルゴリズムの指定
                        'xgboost',
                        'lightgbm',
                        'catboost'
                    ]
                },
            ]
        },
        'Mode': 'ENSEMBLING' # トレーニングモードの指定
    },
    RoleArn='<IAMロールのARN>'
)

実行結果はdescribe_auto_ml_jobにより確認することができます。

client.describe_auto_ml_job(AutoMLJobName='<Autopilot ジョブ名>')

出力のAutoMLJobStatusCompletedになったら Autopilot ジョブが完了となります。

'AutoMLJobStatus': 'Completed',

また、list_candidates_for_auto_ml_jobにより、トレーニングされたモデルの一覧を確認することもできます。

client.list_candidates_for_auto_ml_job(AutoMLJobName='<Autopilot ジョブ名>')

ただ残念ながら、「1.SageMaker Studio コンソールを利用する方法」と同様に、実際にチューニングされたモデルの中身(ハイパーパラメータやスタッキング構成など)は出力されたartifact(model.tar.gz) を確認する必要があります。また、AutoGluon に渡したパラメータ(num_bag_setsnum_stack_levels)もlist_candidates_for_auto_ml_jobでは出力できなかったので可視化機能は少し物足りないと思います。

まとめ

SageMaker Autopilot で機械学習トレーニングのアルゴリズムの選択を試してみました。アルゴリズムの選択方法は非常に簡単で、よりモデルチューニングにかかる時間を短縮することができ、便利な機能だと思います。ただ、モデルの可視化機能は少し物足りなかったので今後の機能改善に期待したいです。

【参考】re:Invent 2022までの直近1年間で発表されたAutopilotのアップデート

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0