Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

Amazon SageMakerDataWranglerを使用したヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング

機械学習(ML)は、前例のないペースで多くの業界を混乱させています。 ヘルスケアおよびライフサイエンス(HCLS)業界は、質の高いケアを提供し、患者の転帰を改善するために、多数のユースケースにわたってMLを採用することで、近年急速な進化を遂げています。

典型的なMLライフサイクルでは、データエンジニアと科学者は、モデルの構築とトレーニングのプロセスを開始する前に、データの準備と特徴エンジニアリングのステップにほとんどの時間を費やします。 データ準備のための参入障壁を下げ、それによって生産性を向上させることができるツールを持つことは、これらのペルソナに非常に望ましい質問です。 AmazonSageMakerデータラングラー はAWSによって構築された目的であり、学習曲線を短縮し、データプラクティショナーがより少ない労力と時間でデータの準備、クリーニング、および特徴エンジニアリングのタスクを実行できるようにします。 多くの組み込み関数と他のAWSサービスとの統合を備えたGUIインターフェースを提供します。 Amazon シンプル ストレージ サービス (Amazon S3)および Amazon SageMaker フィーチャーストア、およびSnowflakeやDatabricksなどのパートナーデータソース。

この投稿では、Data Wranglerを使用して、患者の人口統計、以前の病状、およびラボのテスト結果の履歴を考慮して、心不全を予測するモデルをトレーニングするための医療データを準備する方法を示します。

ソリューションの概要

このソリューションは、次の手順で構成されています。

  1. データラングラーへの入力として医療データセットを取得します。
  2. データラングラーの組み込み変換関数を使用して、データセットを変換します。 これには、列の削除、データ/時間の機能化、データセットの結合、欠落値の代入、カテゴリ変数のエンコード、数値のスケーリング、データセットのバランス調整などが含まれます。
  3. データラングラーのカスタム変換関数(PandasまたはPySparkコード)を使用して、組み込みの変換以外に必要な追加の変換を補足し、データラングラーの拡張性を示します。 これには、行のフィルター処理、データのグループ化、条件に基づく新しいデータフレームの形成などが含まれます。
  4. データラングラーの組み込みの視覚化機能を使用して、視覚的な分析を実行します。 これには、ターゲットリーク、機能相関、クイックモデルなどが含まれます。
  5. Data Wranglerの組み込みのエクスポートオプションを使用して、変換されたデータセットをAmazonS3にエクスポートします。
  6. Jupyterノートブックを起動して、AmazonS3で変換されたデータセットをモデルをトレーニングするための入力として使用します。

データセットを生成する

MLの問題ステートメントが決まったので、まず必要なデータの取得に目を向けます。 などの調査研究 心不全の予測 すでに良好な状態のデータを提供する場合があります。 ただし、データが非常に乱雑であり、MLトレーニングに使用する前に、参加、クレンジング、およびヘルスケアドメインに非常に固有のその他のいくつかの変換が必要なシナリオに遭遇することがよくあります。 十分に乱雑なデータを検索または生成し、データラングラーを使用してデータを準備する手順を説明します。 そのことを念頭に置いて、私たちは目標に合った合成データを生成するためのツールとしてSyntheaを選びました。 シンセア は、合成患者の病歴をモデル化するオープンソースの合成患者ジェネレータです。 データセットを生成するには、次の手順を実行します。

  1. に従って指示に従ってください クイックスタート 作成するドキュメント Amazon SageMakerスタジオ ドメインを作成し、Studioを起動します。
    これは前提条件のステップです。 Studioがアカウントにすでに設定されている場合は、オプションです。
  2. スタジオが起動した後、 ランチャー タブを選択 システム端末.
    これにより、操作するコマンドラインインターフェイスを提供するターミナルセッションが起動します。
  3. Syntheaをインストールし、CSV形式でデータセットを生成するには、起動したターミナルセッションで次のコマンドを実行します。
    $ sudo yum install -y java-1.8.0-openjdk-devel
    $ export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk.x86_64
    $ export PATH=$JAVA_HOME/bin:$PATH
    $ git clone https://github.com/synthetichealth/synthea
    $ git checkout v3.0.0
    $ cd synthea
    $ ./run_synthea --exporter.csv.export=true -p 10000

10,000の母集団サイズのデータ​​セットを生成するためのパラメーターを提供します。 サイズパラメータは、母集団の生きているメンバーの数を示していることに注意してください。 さらに、Syntheaは、母集団の死亡メンバーのデータも生成します。これにより、指定されたサンプルサイズに加えていくつかのデータポイントが追加される可能性があります。

データの生成が完了するまで待ちます。 このステップには通常、約XNUMX時間以内かかります。 Syntheaは、以下を含む複数のデータセットを生成します patients, medications, allergies, conditions、 もっと。 この投稿では、結果のデータセットのうちXNUMXつを使用します。

  • 患者.csv –このデータセットは約3.2 MBで、約11,000行の患者データが含まれています(患者ID、生年月日、性別、住所などを含む25列)
  • condition.csv –このデータセットは約47 MB​​で、約370,000行の病状データ(患者ID、病状開始日、病状コードなどを含むXNUMX列)が含まれています。
  • 観測.csv –このデータセットは約830 MBで、約5万行の観測データ(患者ID、観測日、観測コード、値などを含むXNUMX列)が含まれています。

との間にはXNUMX対多の関係があります patients & conditions データセット。 との間にはXNUMX対多の関係もあります patients & observations データセット。 詳細なデータディクショナリについては、を参照してください。 CSVファイルデータディクショナリ.

  1. 生成されたデータセットをAmazonS3のソースバケットにアップロードするには、ターミナルセッションで次のコマンドを実行します。
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

データラングラーを起動

選択する SageMakerリソース Studioのナビゲーションページと プロジェクト メニュー、選択 データラングラー データラングラーデータフローを作成します。 Studio内からデータラングラーを起動する方法の詳細な手順については、を参照してください。 データラングラーの使用を開始する.

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

インポート日

データをインポートするには、次の手順を実行します。

  1. 選択する アマゾンS3 S3バケットでpatients.csvファイルを見つけます。
  2. 詳細 ペイン、選択 最初のK for サンプリング.
  3. 入力します 1100 for サンプルサイズ.
    プレビューペインで、データラングラーはデータセットから最初の100行をプルし、それらをプレビューとして一覧表示します。
  4. 選択する インポート.
    Data Wranglerは、Syntheaによって生成された合計患者(1,100行)から最初の11,000人の患者を選択し、データをインポートします。 サンプリングアプローチでは、データラングラーはサンプルデータのみを処理します。 これにより、より小さなデータセットでデータフローを開発できるため、処理が高速化され、フィードバックループが短縮されます。 データフローを作成したら、開発したレシピを SageMakerの処理 分散方式で完全またはより大きなデータセットの処理を水平方向にスケールアウトするジョブ。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  5. に対してこのプロセスを繰り返します conditions & observations データセット。
    1.   conditions データセット、入力 37000 for サンプルサイズ、これはSyntheaによって生成された合計1行の10/370,000です。
    2.   observations データセット、入力 500000 for サンプルサイズ、これは、Syntheaによって生成された1万行の合計観測値の10/5です。

次のスクリーンショットに示すように、XNUMXつのデータセットが表示されます。

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

データを変換する

データ変換は、データセット内のXNUMXつ以上の列の構造、値、または形式を変更するプロセスです。 このプロセスは通常、データエンジニアによって開発され、データエンジニアリングのスキルセットが小さい人にとっては、変換のために提案されたロジックを解読するのが難しい場合があります。 データ変換は、より広範な特徴エンジニアリングプロセスの一部であり、ステップの正しいシーケンスは、そのようなレシピを考案する際に留意すべきもうXNUMXつの重要な基準です。

データラングラーは、効果的なデータ準備のための参入障壁を減らすためのローコードツールとして設計されています。 300を超える事前構成されたデータ変換が付属しており、コードをXNUMX行も記述せずに選択できます。 次のセクションでは、インポートされたデータセットをデータラングラーに変換する方法を説明します。

Patients.csvに列をドロップします

まず、からいくつかの列を削除します patients データセット。 冗長な列を削除すると、データセットから関連性のない情報が削除され、データセットの処理とモデルのトレーニングに必要なコンピューティングリソースの量を減らすことができます。 このセクションでは、SSNやパスポート番号などの列には予測値がないという常識に基づいて、これらの列を削除します。 言い換えれば、それらは私たちのモデルが心不全を予測するのを助けません。 私たちの研究は、出生地や医療費が患者の心不全に与える影響などの他の列についても考慮していないため、それらも削除します。 冗長な列は、データラングラーに組み込まれているターゲットリーク、特徴相関、多重共線性などの組み込み分析を実行することによっても識別できます。 サポートされている分析タイプの詳細については、を参照してください。 分析と視覚化。 さらに、あなたは使用することができます データ品質と洞察レポート データセットに対して自動分析を実行して、削除する冗長列のリストに到達します。

  1. 横のプラス記号を選択します データ型 患者.csvデータセットの場合は、 変換を追加.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  2. 選択する ステップを追加 選択して 列を管理する.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  3. 最適化の適用¸選ぶ ドロップカラム.
  4. ドロップする列、次の列を選択します。
    1. SSN
    2. DRIVERS
    3. PASSPORT
    4. PREFIX
    5. FIRST
    6. LAST
    7. SUFFIX
    8. MAIDEN
    9. RACE
    10. ETHNICITY
    11. BIRTHPLACE
    12. ADDRESS
    13. CITY
    14. STATE
    15. COUNTY
    16. ZIP
    17. LAT
    18. LON
    19. HEALTHCARE_EXPENSES
    20. HEALTHCARE_COVERAGE
  5. 選択する プレビュー 変換されたデータセットを確認するには、 Add.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    ステップが表示されます ドロップカラム 変換のリストで。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

日付/時刻をpatients.csvで機能化する

次に、Featurize date/time関数を使用して新しい機能を生成します Year BIRTHDATE 列の patients データセット。 次のステップで新機能を使用して、観察が行われたときの患者の年齢を計算します。

  1. 変換 あなたのペイン ドロップカラム のページ patients データセット、選択 ステップを追加.
  2. 選択する 日付/時刻を機能化する 変換します。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  3. 選択する 列を抽出する.
  4. 入力列、列を追加します BIRTHDATE.
  5. 選択 選択を解除します , 日付, 時間, , 第二。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  6. 選択する プレビュー、を選択します Add.

observations.csvに変換を追加します

Data Wranglerは、Python(ユーザー定義関数)、PySpark、Pandas、またはPySpark(SQL)を使用したカスタム変換をサポートしています。 各オプションと設定に精通していることに基づいて、変換タイプを選択できます。 後者のXNUMXつのオプションでは、データラングラーが変数を公開します df データフレームにアクセスして変換を適用するため。 詳細な説明と例については、を参照してください。 カスタム変換。 このセクションでは、XNUMXつのカスタム変換をに追加します observations データセット。

  1. 変換をobservations.csvに追加し、 DESCRIPTION コラム。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  2. 選択する プレビュー、を選択します Add.
  3. 変換 ペイン、選択 ステップを追加 選択して カスタム変換.
  4. ドロップダウンメニューで、 Python(パンダ).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  5. 次のコードを入力します。
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    これらは、心不全を予測するための機能として使用することに関心のある次の観察結果に対応するLONICコードです。

    heart rate: 8867-4
    systolic blood pressure: 8480-6
    diastolic blood pressure: 8462-4
    body mass index (BMI): 39156-5
    platelets [#/volume] in Blood: 777-3

  6. 選択する プレビュー、を選択します Add.
  7. 抽出する変換を追加します Year & Quarter DATE コラム。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  8. 選択する プレビュー、を選択します Add.
  9. 選択する ステップを追加 選択して カスタム変換.
  10. ドロップダウンメニューで、 Python(PySpark).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    21種類の観測は、必ずしも同じ日に記録されるとは限りません。 たとえば、患者は2月XNUMX日にかかりつけの医師を訪問し、収縮期血圧、拡張期血圧、心拍数、および体重指数を測定して記録することができます。 ただし、血小板を含むラボテストはXNUMX月XNUMX日以降に行われる可能性があります。したがって、観測日までにデータフレームを結合できるとは限りません。 ここでは、四半期ごとに大まかな粒度でデータフレームを結合します。
  11. 次のコードを入力します。
    from pyspark.sql.functions import col
    
    systolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed("value", "systolic")
                       .filter((col("code") == "8480-6"))
      )
    
    diastolic_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'diastolic')
                       .filter((col("code") == "8462-4"))
        )
    
    hr_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'hr')
                       .filter((col("code") == "8867-4"))
        )
    
    bmi_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'bmi')
                       .filter((col("code") == "39156-5"))
        )
    
    platelets_df = (
        df.select("patient", "DATE_year", "DATE_quarter", "value")
                       .withColumnRenamed('value', 'platelets')
                       .filter((col("code") == "777-3"))
        )
    
    df = (
        systolic_df.join(diastolic_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(hr_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(bmi_df, ["patient", "DATE_year", "DATE_quarter"])
                                .join(platelets_df, ["patient", "DATE_year", "DATE_quarter"])
    )

  12. 選択する プレビュー、を選択します Add.
  13. 選択する ステップを追加、を選択します 行を管理する.
  14. 最適化の適用、選択する 重複を削除する.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  15. 選択する プレビュー、を選択します Add.
  16. 選択する ステップを追加 選択して カスタム変換.
  17. ドロップダウンメニューで、 Python(パンダ).
  18. 次のコードを入力して、同じ時間値を共有するデータポイントの平均を取得します。
    import pandas as pd
    df.loc[:, df.columns != 'patient']=df.loc[:, df.columns != 'patient'].apply(pd.to_numeric)
    df = df.groupby(['patient','DATE_year','DATE_quarter']).mean().round(0).reset_index()

  19. 選択する プレビュー、を選択します Add.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

patients.csvとobservations.csvに参加する

このステップでは、Data Wranglerの強力なUIを介してコードを記述せずに、データセットに対して複雑な結合を効果的かつ簡単に実行する方法を紹介します。 サポートされている結合の種類の詳細については、以下を参照してください。 データを変換する.

  1. の右に 変換:patients.csv、横のプラス記号を選択します ステップ 選択して 加入.
    下にリストされている変換されたpatients.csvファイルを見ることができます データセット 左ペインに表示されます。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  2. の右に 変換:observations.csv、をクリックしてください ステップ 結合操作を開始します。
    変換されたobservations.csvファイルが下に表示されます データセット 左ペインに表示されます。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  3. 選択する 構成.
  4. 結合タイプ、選択する Inner(インナー).
  5. 、選択する Id.
  6. 、選択する 患者.
  7. 選択する プレビュー、を選択します Add.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

結合されたデータセットにカスタム変換を追加します

このステップでは、観察時の患者の年齢を計算します。 また、不要になった列も削除します。

  1. 横のプラス記号を選択します 最初の参加 選択して 変換を追加.
  2. パンダにカスタムトランスフォームを追加します。
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. 選択する プレビュー、を選択します Add.

カスタム変換をconditions.csvに追加します

  1. 横のプラス記号を選択します 変換:conditions.csv 選択して 変換を追加.
  2. パンダにカスタムトランスフォームを追加します。
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

注: 前に示したように、カスタムコードを使用するか、DataWranglerが提供する組み込みの変換を使用して列を削除できます。 Data Wrangler内のカスタム変換は、サポートされているフレームワークにコードスニペットの形式で独自の変換ロジックをもたらす柔軟性を提供します。 これらのスニペットは、後で検索して、必要に応じて適用できます。

上記の変換のコードは、以下の条件に対応するSNOMED-CTコードです。 The heart failure or chronic congestive heart failure 状態がラベルになります。 残りの条件を心不全を予測するための機能として使用します。 また、不要になった列をいくつか削除します。

Heart failure: 84114007
Chronic congestive heart failure: 88805009
Hypertension: 59621000
Diabetes: 44054006
Coronary Heart Disease: 53741008
Smokes tobacco daily: 449868002
Atrial Fibrillation: 49436004

  1. 次に、PySparkにカスタム変換を追加しましょう。
    from pyspark.sql.functions import col, when
    
    heartfailure_df = (
        df.select("patient", "start")
                          .withColumnRenamed("start", "heartfailure")
                       .filter((col("code") == "84114007") | (col("code") == "88805009"))
      )
    
    hypertension_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "hypertension")
                       .filter((col("code") == "59621000"))
      )
    
    diabetes_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "diabetes")
                       .filter((col("code") == "44054006"))
      )
    
    coronary_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "coronary")
                       .filter((col("code") == "53741008"))
      )
    
    smoke_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "smoke")
                       .filter((col("code") == "449868002"))
      )
    
    atrial_df = (
        df.select("patient", "start")
                       .withColumnRenamed("start", "atrial")
                       .filter((col("code") == "49436004"))
      )
    
    df = (
        heartfailure_df.join(hypertension_df, ["patient"], "leftouter").withColumn("has_hypertension", when(col("hypertension") < col("heartfailure"), 1).otherwise(0))
        .join(diabetes_df, ["patient"], "leftouter").withColumn("has_diabetes", when(col("diabetes") < col("heartfailure"), 1).otherwise(0))
        .join(coronary_df, ["patient"], "leftouter").withColumn("has_coronary", when(col("coronary") < col("heartfailure"), 1).otherwise(0))
        .join(smoke_df, ["patient"], "leftouter").withColumn("has_smoke", when(col("smoke") < col("heartfailure"), 1).otherwise(0))
        .join(atrial_df, ["patient"], "leftouter").withColumn("has_atrial", when(col("atrial") < col("heartfailure"), 1).otherwise(0))
    )

    心不全データフレームのすべてのエントリを保持するために、左外部結合を実行します。 新しい列 has_xxx 状態の開始日に基づいて、心不全以外の状態ごとに計算されます。 心不全の前に記録された病状にのみ関心があり、心不全を予測するための機能としてそれらを使用します。

  2. ビルトインを追加する 列を管理する 変換して、不要になった冗長列を削除します。
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. エキス Year &  Quarter heartfailure コラム。
    これは、以前の変換で使用した粒度と一致します。 observations データセット。
  4. condition.csvには合計6つのステップが必要です。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

結合されたデータセットにconditions.csvを結合します

ここで、新しい結合を実行して、条件データセットを結合済みに結合します patients & observations データセット。

  1. 選択する 変換:最初の参加.
  2. プラス記号を選択し、 加入.
  3. 選択する ステップ の隣に 変換:conditions.csv.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  4. 選択する 構成.
  5. 結合タイプ、選択する 左アウター.
  6. 、選択する Id.
  7. 、選択する 患者.
  8. 選択する プレビュー、を選択します Add.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

結合されたデータセットに変換を追加します

XNUMXつのデータセットがすべて結合されたので、いくつかの追加の変換を適用してみましょう。

  1. PySparkに次のカスタム変換を追加して has_heartfailure ラベル列になります:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. PySparkに次のカスタム変換を追加します。
    from pyspark.sql.functions import col
    
    df = (
        df.filter(
          (col("has_heartfailure") == 0) | 
          ((col("has_heartfailure") == 1) & ((col("date_year") <= col("heartfailure_year")) | ((col("date_year") == col("heartfailure_year")) & (col("date_quarter") <= col("heartfailure_quarter")))))
        )
    )

    心不全の状態が診断される前に記録された観察にのみ関心があり、心不全を予測するための機能としてそれらを使用します。 心不全と診断された後に行われた観察は、患者が服用する薬の影響を受ける可能性があるため、それらを除外したいと思います。

  3. 不要になった冗長列を削除します。
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. ソフトウェア設定ページで、下図のように 分析 タブ、 分析タイプ¸選ぶ 表の要約.
    要約をざっとスキャンすると、 MARITAL 列に欠測データがあります。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  5. 選択する 且つ タブをクリックしてステップを追加します。
  6. 選択する 不足しているハンドル.
  7. 最適化の適用、選択する 不足している塗りつぶし.
  8. 入力列、選択する マリタル.
  9. 値を入力、 入る S.
    ここでの私たちの戦略は、結婚歴に価値がない場合、患者は独身であると想定することです。 あなたは別の戦略を持つことができます。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  10. 選択する プレビュー、を選択します Add.
  11. 不足している値を0として入力します has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital & Gender カテゴリ変数です。 データラングラーには、カテゴリ変数をエンコードするための組み込み関数があります。

  1. ステップを追加して選択します カテゴリをエンコードする.
  2. 最適化の適用、選択する ワンホットエンコード.
  3. 入力列、選択する マリタル.
  4. 出力スタイル、選択する コラム.
    この出力スタイルは、個別の列にエンコードされた値を生成します。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  5. 選択する プレビュー、を選択します Add.
  6. に対してこれらの手順を繰り返します 性別 コラム。

ワンホットエンコーディングは、Marital列をに分割します Marital_M (既婚)と Marital_S (単一)、および性別列をに分割します Gender_M (男性)と Gender_F (女性)。 なぜなら Marital_M & Marital_S 相互に排他的です( Gender_M & Gender_F)、冗長な機能を回避するためにXNUMXつの列を削除できます。

  1. Drop Marital_S & Gender_F.

収縮期、心拍数、年齢などの数値機能には、異なる単位基準があります。 線形回帰ベースのモデルの場合、最初にこれらの数値特徴を正規化する必要があります。 そうしないと、絶対値が高い一部の機能が、絶対値が低い他の機能よりも不当に有利になり、モデルのパフォーマンスが低下する可能性があります。 Data Wranglerには、データを正規化するための変換Min-maxスケーラーが組み込まれています。 デシジョンツリーベースの分類モデルの場合、正規化は必要ありません。 私たちの研究は分類の問題であるため、正規化を適用する必要はありません。 不均衡なクラスは、分類における一般的な問題です。 トレーニングデータセットにひどく偏ったクラス分布が含まれている場合、不均衡が発生します。 たとえば、データセットに心不全のある患者よりも心不全のない患者が不釣り合いに多い場合、モデルが心不全のない予測に偏り、パフォーマンスが低下する可能性があります。 データラングラーには、問題に取り組むための組み込み関数があります。

  1. パンダにカスタム変換を追加して、列のデータ型を「オブジェクト」型から数値型に変換します。
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. 選択する 分析 タブには何も表示されないことに注意してください。
  3. 分析タイプ¸選ぶ ヒストグラム.
  4. X軸、選択する 心不全あり.
  5. 選択する プレビュー.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    クラスが不均衡であることは明らかです(心不全とラベル付けされたデータポイントよりも心不全とラベル付けされていないデータポイントの方が多い)。
  6. 帰ります 且つ タブ。 選択 ステップを追加 選択して バランスデータ.
  7. ターゲット列、選択する 心不全あり.
  8. 希望比率、 入る 1.
  9. 最適化の適用、選択する スモート.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    SMOTEは、Synthetic MinorityOver-samplingTechniqueの略です。 これは、新しいマイノリティインスタンスを作成し、データセットに追加してクラスのバランスをとる手法です。 詳細については、を参照してください。 SMOTE:合成マイノリティオーバーサンプリングテクニック.
  10. 選択する プレビュー、を選択します Add.
  11. 手順20-23でヒストグラム分析を繰り返します。 結果はバランスの取れたクラスです。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

ターゲットのリークと機能の相関関係を視覚化する

次に、データラングラーの高度なMLサポート分析タイプの豊富なツールセットを使用して、いくつかの視覚的分析を実行します。 まず、ターゲットリークについて見ていきます。 ターゲットリークは、トレーニングデータセット内のデータがターゲットラベルと強く相関している場合に発生しますが、推論時に実際のデータでは利用できません。

  1. ソフトウェア設定ページで、下図のように [分析]タブ、用 分析タイプ¸選ぶ ターゲットリーク.
  2. 問題の種類、選択する 分類.
  3. ターゲット、選択する 心不全あり.
  4. 選択する プレビュー.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    分析に基づいて、 hr ターゲットリークです。 次のステップでドロップします。 age ターゲットリークのフラグが立てられます。 推論時間中に患者の年齢が利用可能になると言うのは合理的であるため、年齢を特徴として保持します。 Systolic & diastolic また、ターゲットリークの可能性があるとしてフラグが立てられます。 推論時間中にXNUMXつの測定値があると予想されるため、それらを特徴として保持します。
  5. 選択する Add 分析を追加します。

次に、特徴の相関関係を調べます。 ターゲットと相関しているが、それらの間では相関していない機能を選択したいと思います。

  1. ソフトウェア設定ページで、下図のように [分析]タブ、用 分析タイプ¸選ぶ 特徴の相関.
  2. Correlation Type¸選ぶ 線形.
  3. 選択する プレビュー.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

係数スコアは、次のペア間の強い相関関係を示しています。

  • systolic & diastolic
  • bmi & age
  • has_hypertension & has_heartfailure (ラベル)

強く相関している特徴の場合、行列は計算上反転が難しく、数値的に不安定な推定につながる可能性があります。 相関関係を緩和するために、ペアからXNUMXつを削除するだけです。 ドロップします diastolic & bmi と保つ systolic & age 次のステップで。

拡張期およびbmi列を削除します

変換ステップを追加して、 hr, diastolic & bmi 組み込みの変換を使用する列。

データ品質と洞察レポートを生成する

最近のAWS 発表の データラングラーの新しいデータ品質とインサイトレポート機能。 このレポートは、データ品質を自動的に検証し、データの異常を検出します。 データサイエンティストとデータエンジニアは、このツールを使用して、ドメイン知識を効率的かつ迅速に適用し、MLモデルトレーニングのデータセットを処理できます。 このステップはオプションです。 データセットに関するこのレポートを生成するには、次の手順を実行します。

  1. ソフトウェア設定ページで、下図のように 分析 タブ、 分析タイプ、選択する データ品質と洞察レポート.
  2. ターゲット列、選択する 心不全あり.
  3. 問題の種類選択 Classification.
  4. 選択する 創造する.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

数分で、要約、ビジュアル、および推奨事項を含むレポートが生成されます。

クイックモデル分析を生成する

データの準備、クリーニング、特徴エンジニアリングが完了しました。 Data Wranglerには、データセット内の機能の予想される予測品質と予測力の概算を提供する組み込み関数があります。

  1. ソフトウェア設定ページで、下図のように 分析 タブ、 分析タイプ¸選ぶ クイックモデル.
  2. ラベル、選択する 心不全あり.
  3. 選択する プレビュー.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

クイックモデル分析によると、機能を確認できます has_hypertension すべての特徴の中で最も高い特徴重要度スコアを持っています。

データをエクスポートしてモデルをトレーニングする

次に、変換されたML対応機能を宛先のS3バケットにエクスポートし、サンプルを使用してこれまでに作成した機能エンジニアリングパイプライン全体を分散方式でデータセット全体にスケーリングします。

  1. データフローの最後のボックスの横にあるプラス記号を選択し、 宛先を追加.
  2. 選択する アマゾンS3.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  3. 入力します データセット名。 のために AmazonS3の場所、S3バケットを選択してから、 目的地を追加.
  4. 選択する ジョブを作成 分散PySpark処理ジョブを起動して変換を実行し、データを宛先S3バケットに出力します。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
    データセットのサイズに応じて、このオプションを使用すると、クラスターを簡単に構成し、ノーコード方式で水平方向にスケーリングできます。 データセットのパーティション分割や、クラスターとSpark内部の管理について心配する必要はありません。 これらはすべて、DataWranglerによって自動的に処理されます。
  5. 左側のペインで、 次に、2。ジョブを構成します。
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  6. それから、 ラン.
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

または、JupyterNotebookを介して変換された出力をS3にエクスポートすることもできます。 このアプローチでは、Data Wranglerは、処理ジョブを開始するために必要なすべてのコードを含むJupyterノートブックを自動的に生成し、より大きな完全なデータセットにデータフローステップ(サンプルを使用して作成)を適用し、変換されたデータセットを機能として使用します。後でトレーニングの仕事をやめます。 ノートブックコードは、変更の有無にかかわらず簡単に実行できます。 次に、DataWranglerのUIを介してこれを実行する方法の手順を見ていきましょう。

  1. データフローの最後のステップの横にあるプラス記号を選択し、 輸出.
  2. 選択する Amazon S3(Jupyter Notebook経由).
    Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  3. Jupyterノートブックで新しいタブが自動的に開きます。
  4. Jupyterノートブックで、セルを (オプション)次のステップ セクションと変更 run_optional_steps から False 〜へ True.
    ノートブックで有効になっているオプションの手順は、次のことを実行します。
    • XGBoostを使用してモデルをトレーニングする
      Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。
  5. ノートブックの上部に戻り、 ラン メニュー、選択 すべてのセルを実行.

生成されたノートブックをそのまま使用すると、SageMaker処理ジョブが起動し、5.4つのm3xlargeインスタンス間で処理をスケールアウトして、SXNUMXバケット上の完全なデータセットを処理します。 ジョブを完了するために必要なデータセットのサイズと時間に基づいて、インスタンスの数とインスタンスの種類を調整できます。

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

最後のセルからのトレーニングジョブが完了するまで待ちます。 SageMakerのデフォルトのS3バケットにモデルを生成します。

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。

トレーニングされたモデルは、リアルタイム推論またはバッチ変換のいずれかで展開する準備ができています。 データラングラーの機能を実証するために合成データを使用し、トレーニングモデルに処理済みデータを使用したことに注意してください。 私たちが使用したデータが合成であることを考えると、訓練されたモデルからの推論結果は、実際の病状の診断または開業医からの判断の代用を意図したものではありません。

を選択して、変換されたデータセットをAmazonS3に直接エクスポートすることもできます 輸出 変換プレビューページの上部にあります。 直接エクスポートオプションは、インポート中にサンプリングが有効になっている場合にのみ、変換されたサンプルをエクスポートします。 このオプションは、小さいデータセットを扱う場合に最適です。 変換されたデータは、機能ストアに直接取り込むこともできます。 詳細については、を参照してください。 Amazon SageMaker フィーチャーストア。 データフローは、要件に応じて調整およびスケジュールできるSageMakerパイプラインとしてエクスポートすることもできます。 詳細については、を参照してください。 AmazonSageMakerパイプライン.

まとめ

この投稿では、Data Wranglerを使用して医療データを処理し、ツール駆動型のローコード方式でスケーラブルな特徴エンジニアリングを実行する方法を示しました。 組み込みの変換と分析を必要に応じて適切に適用する方法を学び、それをカスタム変換と組み合わせて、データ準備ワークフローにさらに柔軟性を追加しました。 また、分散処理ジョブを介してデータフローレシピをスケールアウトするためのさまざまなオプションについても説明しました。 また、変換されたデータを使用して、心不全を予測するモデルをトレーニングする方法も学びました。

データラングラーには、この投稿では取り上げていない他の多くの機能があります。 で何が可能かを探る Amazon SageMaker Data Wrangler で ML データを準備する 次のデータサイエンスまたは機械学習プロジェクトでデータラングラーを活用する方法を学びます。


著者について

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。フォレストサン は、カナダのトロントにあるAWSPublicSectorチームのシニアソリューションアーキテクトです。 彼は過去XNUMX年間、ヘルスケアおよび金融業界で働いてきました。 仕事以外では、家族と一緒にキャンプを楽しんでいます。

Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligenceを使用した、ヘルスケアおよびライフサイエンス向けの大規模な特徴エンジニアリング。 垂直検索。 愛。アルンプラサト・シャンカール は、AW​​Sの人工知能と機械学習(AI / ML)スペシャリストソリューションアーキテクトであり、世界中のお客様がクラウドでAIソリューションを効果的かつ効率的に拡張できるよう支援しています。 余暇には、SF映画を見たり、クラシック音楽を聴いたりしています。

タイムスタンプ:

より多くの AWS機械学習