チュートリアル: 線形学習によるリグレッションモデルの構築 - Amazon Redshift

チュートリアル: 線形学習によるリグレッションモデルの構築

このチュートリアルでは、Amazon S3 のデータを使用して線形学習モデルを作成し、Amazon Redshift ML を使用してそのモデルで予測クエリを実行します。SageMaker 線形学習アルゴリズムは、リグレッション問題または複数クラス分類問題のいずれかを解決します。リグレッション問題と多クラス分類問題の詳細については、「Amazon SageMaker デベロッパーガイド」の「機械学習パラダイムの問題タイプ」を参照してください。このチュートリアルでは、リグレッション問題を解決します。線形学習アルゴリズムは、多数のモデルを並列でトレーニングし、最も最適化されたモデルを自動的に決定します。Amazon Redshift で CREATE MODEL オペレーションを使用し、SageMaker で線形学習モデルを作成して、予測関数を Amazon Redshift に送信します。線形学習アルゴリズムの詳細については、「Amazon SageMaker デベロッパーガイド」の「線形学習アルゴリズム」を参照してください。

CREATE MODEL コマンドを使用して、トレーニングデータのエクスポート、モデルのトレーニング、モデルのインポート、Amazon Redshift 予測関数の準備を行うことができます。トレーニングデータをテーブルまたは SELECT ステートメントとして指定するには、CREATE MODEL オペレーションを使用します。

線形学習モデルは、連続的な目標または離散的な目標のいずれかを最適化します。連続的な目標はリグレッションに使用され、離散変数は分類に使用されます。リグレッション法など、一部の方法は、連続的な目標のみに対する解を提供します。線形学習アルゴリズムは、Naive Bayes 手法などの単純なハイパーパラメータ最適化手法より高速です。単純な最適化手法では、各入力変数は独立していると仮定します。線形学習アルゴリズムを使用するには、入力の次元を表す列を指定し、観測値を表す行を指定する必要があります。線形学習アルゴリズムの詳細については「Amazon SageMaker デベロッパーガイド」の「線形学習アルゴリズム」を参照してください。

このチュートリアルでは、アワビの年齢を予測する線形学習モデルを作成します。アワビのデータセットに対してCREATE MODEL コマンドを使用し、アワビの物理的測定値の関係を決定します。次に、モデルを使用してアワビの年齢を判断します。

ユースケースの例

家の価格を予測するなど、線形学習と Amazon Redshift ML を使用して他のリグレッション問題を解決することもできます。また、Redshift ML を使用して、都市の自転車レンタルサービスを利用する人数を予測することもできます。

タスク

  • 前提条件

  • ステップ 1: Amazon S3 から Amazon Redshift にデータをロードする

  • ステップ 2: 機械学習モデルを作成する

  • ステップ 3: モデルを検証する

前提条件

このチュートリアルを完了するには、Amazon Redshift ML の「管理の設定」を完了している必要があります。

ステップ 1: Amazon S3 から Amazon Redshift にデータをロードする

Amazon Redshift クエリエディタv2 を使用する次のクエリを実行します。これらのクエリは、Redshift にサンプルデータをロードし、データをトレーニングセットと検証セットに分割します。

  1. 次のクエリは、abalone_dataset テーブルを作成します。

    CREATE TABLE abalone_dataset ( id INT IDENTITY(1, 1), Sex CHAR(1), Length float, Diameter float, Height float, Whole float, Shucked float, Viscera float, Shell float, Rings integer );
  2. 次のクエリは、サンプルデータを Amazon S3 の アワビのデータセットから Amazon Redshift で以前に作成した abalone_dataset テーブルにコピーします。

    COPY abalone_dataset FROM 's3://redshift-ml-multiclass/abalone.csv' REGION 'us-east-1' IAM_ROLE default CSV IGNOREHEADER 1 NULL AS 'NULL';
  3. データを手動で分割することにより、追加の予測セットを割り当てることでモデルの精度を検証できます。次のクエリは、データを 2 つのセットに分割します。abalone_training テーブルはトレーニング用で、abalone_validation テーブルは検証用です。

    CREATE TABLE abalone_training as SELECT * FROM abalone_dataset WHERE mod(id, 10) < 8; CREATE TABLE abalone_validation as SELECT * FROM abalone_dataset WHERE mod(id, 10) >= 8;

ステップ 2: 機械学習モデルを作成する

このステップでは、CREATE MODEL ステートメントを使用して、線形学習アルゴリズムでの機械学習モデルを作成します。

次のクエリは、S3 バケットを使用して CREATE MODEL オペレーションで線形学習モデルを作成します。DOC-EXAMPLE-BUCKET は、ユーザーの S3 バケットに置き換えます。

CREATE MODEL model_abalone_ring_prediction FROM ( SELECT Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell, Rings AS target_label FROM abalone_training ) TARGET target_label FUNCTION f_abalone_ring_prediction IAM_ROLE default MODEL_TYPE LINEAR_LEARNER PROBLEM_TYPE REGRESSION OBJECTIVE 'MSE' SETTINGS ( S3_BUCKET 'DOC-EXAMPLE-BUCKET', MAX_RUNTIME 15000 );

モデルトレーニングのステータスを表示する (オプション)

SHOW MODEL コマンドを使用して、モデルの準備が完了したことを知ることができます。

次のクエリを使用して、モデルトレーニングの進行状況を監視します。

SHOW MODEL model_abalone_ring_prediction;

モデルの準備が整うと、先ほどのオペレーションの出力は、次の例のようになります。出力には、平均二乗誤差である validation:mse メトリクスを使用します。平均二乗誤差を使用して、次のステップでモデルの精度を検証します。

+--------------------------+----------------------------------------------------------------------------------------------------+ | Model Name | model_abalone_ring_prediction | +--------------------------+----------------------------------------------------------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Thu, 30.06.2022 18:00:10 | | Model State | READY | | validation:mse | 4.168633 | | Estimated Cost | 4.291608 | | | | | TRAINING DATA: | | | Query | SELECT SEX , LENGTH , DIAMETER , HEIGHT , WHOLE , SHUCKED , VISCERA , SHELL, RINGS AS TARGET_LABEL | | | FROM ABALONE_TRAINING | | Target Column | TARGET_LABEL | | | | | PARAMETERS: | | | Model Type | linear_learner | | Problem Type | Regression | | Objective | MSE | | AutoML Job Name | redshiftml-20220630180010947843 | | Function Name | f_abalone_ring_prediction | | Function Parameters | sex length diameter height whole shucked viscera shell | | Function Parameter Types | bpchar float8 float8 float8 float8 float8 float8 float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | DOC-EXAMPLE-BUCKET | | Max Runtime | 15000 | +--------------------------+----------------------------------------------------------------------------------------------------+

ステップ 3: モデルを検証する

  1. 次の予測クエリは、平均二乗誤差と二乗平均平方根誤差を計算して abalone_validation データセットでモデルの精度を検証します。

    SELECT ROUND(AVG(POWER((tgt_label - predicted), 2)), 2) mse, ROUND(SQRT(AVG(POWER((tgt_label - predicted), 2))), 2) rmse FROM ( SELECT Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell, Rings AS tgt_label, f_abalone_ring_prediction( Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell ) AS predicted, CASE WHEN tgt_label = predicted then 1 ELSE 0 END AS match, CASE WHEN tgt_label <> predicted then 1 ELSE 0 END AS nonmatch FROM abalone_validation ) t1;

    前のクエリの出力は次の例のようになります。平均二乗誤差メトリクスの値は、SHOW MODEL オペレーションの出力によって示される validation:mse メトリクスに似ています。

    +-----+--------------------+ | mse | rmse | +-----+--------------------+ | 5.1 | 2.2600000000000002 | +-----+--------------------+
  2. 次のクエリを使用して、予測関数で EXPLAIN_MODEL オペレーションを実行します。このオペレーションにより、モデルの説明可能性レポートが返されます。EXPLAIN_MODEL オペレーションの詳細については「Amazon Redshift データベースデベロッパーガイド」の「EXPLAIN_MODEL関数」を参照してください。

    SELECT EXPLAIN_MODEL ('model_abalone_ring_prediction');

    次の情報は、前の EXPLAIN_MODEL オペレーションによって生成されたモデルの説明可能性レポートの例です。各入力の値は Shapley 値です。Shapley 値は、各入力がモデルの予測に与える影響を表し、値の高い入力ほど予測に大きな影響を与えます。この例では、値の高い入力は、アワビの年齢の予測により大きな影響を与えます。

    { "explanations": { "kernel_shap": { "label0": { "expected_value" :10.290688514709473, "global_shap_values": { "diameter" :0.6856910187882492, "height" :0.4415323937124035, "length" :0.21507476107609084, "sex" :0.448611774505744, "shell" :1.70426496893776, "shucked" :2.1181392924386994, "viscera" :0.342220754059912, "whole" :0.6711906974084011 } } } }, "version" :"1.0" };
  3. 次のクエリを使用して、まだ成熟していないアワビについて、モデルが行う正しい予測のパーセンテージを計算します。未熟なアワビは輪が 10 個以下で、正確な予測では、実際の輪の数が 1 輪以内で高精度となります。

    SELECT TRUNC( SUM( CASE WHEN ROUND( f_abalone_ring_prediction( Sex, Length, Diameter, Height, Whole, Shucked, Viscera, Shell ), 0 ) BETWEEN Rings - 1 AND Rings + 1 THEN 1 ELSE 0 END ) / CAST(COUNT(SHELL) AS FLOAT), 4 ) AS prediction_pct FROM abalone_validation WHERE Rings <= 10;

Amazon Redshift ML の詳細については、次のドキュメントを参照してください。

機械学習の詳細については、以下のドキュメントを参照してください。