Amazon Web Services ブログ

Amazon SageMaker Autopilot – 高品質な機械学習モデルをフルコントロールかつ視覚的に自動生成

2019年12月3日、フルコントロールかつ視覚的に最高の分類・回帰モデルを自動生成する Amazon SageMaker Autopilot をリリースしたことを非常にうれしく思います。

1959年、Arthur Samuel は機械学習を、明確にプログラムしなくても学習することができるコンピュータの能力だと定義しました。実際は、すでにあるデータセットからパターンを抽出するアルゴリズムを見つけ、抽出したパターンを使って新しいデータをうまく生成するための予測モデルを作ることを意味します。それからたくさんの機械学習アルゴリズムが発明されて科学者やエンジニアに多くの選択肢が生まれ、彼らが素晴らしいアプリケーションを作る助けとなりました。

しかし、多数のアルゴリズムがあるということは、どのアルゴリズムを使うべきか、自分のビジネス課題に最適なアルゴリズムはどれなのか、を見出す必要があるということです。加えて、機械学習アルゴリズムはたいてい、良い精度を得るために正しい値を設定する必要がある多数の学習パラメータ(ハイパーパラメータとも呼ばれる)を持っています。さらには、アルゴリズムを最適に学習させるために特別な方法(特徴量エンジニアリング)で変換されたデータも必要です。また、最適なインスタンスタイプを選択する必要があります。

ここまでの文章を読んで、たくさんのトライアンドエラーが必要であると思われたなら、それは全くその通りです。機械学習は科学とクッキングレシピの混合物であり、それが非専門家が良い結果を素早く得ることを困難なものにしています。

この問題を解決するためにフルマネージドサービスを使ってはいかがでしょうか? API を叩いてジョブを実行することができたら良いと思いませんか? もしそうなら、Amazon SageMaker Autopilot をお使いください。

Amazon SageMaker Autopilot の紹介

ひとつの API を叩くだけで、もしくは Amazon SageMaker Studio で数クリックするだけで、SageMaker Autopilot はあなたが用意したデータセットを検査し、データ前処理、機械学習アルゴリズム、ハイパーパラメータの最適な組み合わせを見つけるためにたくさんの試行を行います。そして、推論パイプラインを学習するためにこの組み合わせを使用します。このパイプラインは、リアルタイム推論エンドポイントまたはバッチ推論のいずれかに簡単にデプロイできます。Amazon SageMaker と同様に、これらはフルマネージドインフラストラクチャで実行されます。

大事なことを言い忘れていましたが、SageMaker Autopilot は、どのようにデータが前処理されたかを示す Python コードを生成します。これにより、SageMaker Autopilot がどんな処理をしたかだけではなく、あとでマニュアルチューニングしたくなった場合にコードを再利用することができます。

  • 現在のところ、SageMaker Autopilot は以下に対応しています。
  • tabularデータフォーマットに対する自動データクリーニングと前処理
  • 線形回帰、2値分類、多値分類の自動アルゴリズム選択
  • 自動ハイパーパラメータチューニング
  • 分散学習
  • インスタンス、クラスタサイズの自動選択

どれくらい簡単かご説明しましょう。

Amazon SageMaker Autopilot で AutoML を使う方法

まずはこのサンプルノートブックを使ってみましょう。これは、顧客がマーケティング提案を了承するか拒否するかを予測する2値分類モデルのサンプルです。ノートブックをざっと見てみてください。ビジネス課題自体は理解しやすいと思います。データセットは大きくも複雑でもありません。ただ、いくつか直感的でない前処理ステップが必要なのですが、これはアルゴリズムやパラメータを決めるのに重要なものです。こちらは SageMaker Autpilot にお任せください!

まず、データセットをコピーして、初めの数行を見てみましょう。

次に、前処理は何もせずデータを Amazon Simple Storage Service (S3) にコピーします。

sess.upload_data(path="automl-train.csv", key_prefix=prefix + "/input")

's3://sagemaker-us-west-2-123456789012/sagemaker/DEMO-automl-dm/input/automl-train.csv'

続いて、AutoML ジョブの設定をします。

  • データセットの場所の設定
  • モデルに予測させたいターゲット属性の選択。
    このサンプルの場合、yの列が顧客が提案を了承するか拒否するかを示します
  • 学習結果を保存する場所の設定
input_data_config = [{
      'DataSource': {
        'S3DataSource': {
          'S3DataType': 'S3Prefix',
          'S3Uri': 's3://{}/{}/input'.format(bucket,prefix)
        }
      },
      'TargetAttributeName': 'y'
    }
  ]

output_data_config = {
    'S3OutputPath': 's3://{}/{}/output'.format(bucket,prefix)
  }

これだけです! もちろん、SageMaker Autopilot にはデータやモデルについて知る助けになるようなオプションは他にもたくさんあります。例えば、

  • 解きたい問題の種類の設定:線形回帰、2値分類、多値分類から選択しますが、もしどれにすべきかわからなければ SageMaker Autopilot がターゲット属性の値を分析して自動判別します。
  • モデル評価のための特別なメトリクスを使用する
  • 終了条件の定義:最大実行時間など

学習クラスタ数を定義する必要はありません。SageMaker Autopilot がデータサイズやアルゴリズムをヒューリスティックに決めますので!

その他を設定して、CreateAutoMl API を実行してジョブを開始します。

auto_ml_job_name = 'automl-dm-' + timestamp_suffix
print('AutoMLJobName: ' + auto_ml_job_name)

sm.create_auto_ml_job(AutoMLJobName=auto_ml_job_name,
                      InputDataConfig=input_data_config,
                      OutputDataConfig=output_data_config,
                      RoleArn=role)

AutoMLJobName: automl-dm-28-10-17-49

ジョブは以下の4ステップで構成されます。(DescribeAutoMlJob API で確認することができます)

  1. データセットを学習用と検証用に分ける
  2. データセットに対して推奨されるパイプラインの順番でデータを分析する
  3. 特徴量エンジニアリング(ここでデータセットや個別の特徴量が変換されます)
  4. パイプライン選択とハイパーパラメータチューニング(学習アルゴリズムに最適なハイパーパラメータと共に、最適なパイプラインが選択されます)

全ての試行が完了するか停止条件に合致したらジョブが完了します。全ての試行の詳細情報は ListCandidatesForAutoMlJob API か AWS コンソールで確認することが可能です。

candidates = sm.list_candidates_for_auto_ml_job(AutoMLJobName=auto_ml_job_name, SortBy='FinalObjectiveMetricValue')['Candidates']
index = 1
for candidate in candidates:
  print (str(index) + "  " + candidate['CandidateName'] + "  " + str(candidate['FinalAutoMLJobObjectiveMetric']['Value']))
  index += 1

1 automl-dm-28-tuning-job-1-fabb8-001-f3b6dead 0.9186699986457825
2 automl-dm-28-tuning-job-1-fabb8-004-03a1ff8a 0.918304979801178
3 automl-dm-28-tuning-job-1-fabb8-003-c443509a 0.9181839823722839
4 automl-dm-28-tuning-job-1-ed07c-006-96f31fde 0.9158779978752136
5 automl-dm-28-tuning-job-1-ed07c-004-da2d99af 0.9130859971046448
6 automl-dm-28-tuning-job-1-ed07c-005-1e90fd67 0.9130859971046448
7 automl-dm-28-tuning-job-1-ed07c-008-4350b4fa 0.9119930267333984
8 automl-dm-28-tuning-job-1-ed07c-007-dae75982 0.9119930267333984
9 automl-dm-28-tuning-job-1-ed07c-009-c512379e 0.9119930267333984
10 automl-dm-28-tuning-job-1-ed07c-010-d905669f 0.8873512744903564

今回は、最良の結果は validation accuracy が 91.87% でした。このモデルを、どんなモデルでもデプロイできる SageMaker エンドポイントにデプロイします。

model_arn = sm.create_model(Containers=best_candidate['InferenceContainers'],
                            ModelName=model_name,
                            ExecutionRoleArn=role)

ep_config = sm.create_endpoint_config(EndpointConfigName = epc_name,
                                      ProductionVariants=[{'InstanceType':'ml.m5.2xlarge',
                                                           'InitialInstanceCount':1,
                                                           'ModelName':model_name,
                                                           'VariantName':variant_name}])

create_endpoint_response = sm.create_endpoint(EndpointName=ep_name,
                                              EndpointConfigName=epc_name)

数分経って、エンドポイントが起動したら推論を実行してみましょう。いつもの SageMaker の出番です!

モデルがどうやって作られるのか、他の候補が何なのか気になっていることでしょう。ご説明しましょう。

Amazon SageMaker Autopilot で視覚的に制御をする方法

SageMaker Autopilot は2つの自動生成されたノートブックを含む学習結果を S3 に保存します。

job = sm.describe_auto_ml_job(AutoMLJobName=auto_ml_job_name)
job_data_notebook = job['AutoMLJobArtifacts']['DataExplorationNotebookLocation']
job_candidate_notebook = job['AutoMLJobArtifacts']['CandidateDefinitionNotebookLocation']

print(job_data_notebook)
print(job_candidate_notebook)

s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotCandidateDefinitionNotebook.ipynb
s3://<PREFIX_REMOVED>/notebooks/SageMakerAutopilotDataExplorationNotebook.ipynb

1つ目のノートブックには、データセットに関する情報が書かれています。

2つ目のノートブックには、SageMaker Autopilot ジョブの詳細情報(各試行の情報、データ前処理ステップなど)が書かれています。すべてのコードは利用可能な状態なので、さらに実験を重ねる際のとっかかりになるでしょう。

ご覧のように、どのようにモデルが作られたのかをフルコントロールで視覚的に知ることができます。

今からすぐにお使いいただけます!

SageMaker Autopilot にとてもワクワクしています。なぜなら、これは機械学習をより簡単に、より使いやすくするものだからです。あなたが機械学習を始めたばかりか、機械学習に慣れているかによらず、SageMaker Autopilot は以下の方法でより良いモデルを素早く作る手助けをしてくれることでしょう。

  • Amazon SageMaker Studio を使って簡単でコーディング不要の方法
  • SageMaker Autopilot SDK を使って簡単なコードを書く方法
  • 候補生成ノートブックを使ったディープな方法

さあ、あなたの番です。2019年12月3日から SageMaker Autopilot を以下のリージョンでお使いいただけます。

  • US East (N. Virginia), US East (Ohio), US West (N. California), US West (Oregon),
  • Canada (Central), South America (São Paulo),
  • Europe (Ireland), Europe (London), Europe (Paris), Europe (Frankfurt),
  • Middle East (Bahrain),
  • Asia Pacific (Mumbai), Asia Pacific (Seoul), Asia Pacific (Singapore), Asia Pacific (Sydney), Asia Pacific (Tokyo).

SageMaker Autopilot を試したら、ぜひ Amazon SageMaker の AWS forum か AWS サポートにフィードバックをお寄せください。

– Julien

翻訳は Machine Learning SA の大渕が担当しました。原文は、こちら