Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menampilkan rekayasa dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler

Pembelajaran mesin (ML) mengganggu banyak industri dengan kecepatan yang belum pernah terjadi sebelumnya. Industri perawatan kesehatan dan ilmu kehidupan (HCLS) telah mengalami evolusi yang cepat dalam beberapa tahun terakhir dengan merangkul ML di banyak kasus penggunaan untuk memberikan perawatan berkualitas dan meningkatkan hasil pasien.

Dalam siklus hidup ML biasa, insinyur dan ilmuwan data menghabiskan sebagian besar waktu mereka untuk persiapan data dan langkah-langkah rekayasa fitur bahkan sebelum memulai proses pembuatan model dan pelatihan. Memiliki alat yang dapat menurunkan hambatan masuk untuk persiapan data, sehingga meningkatkan produktivitas, adalah permintaan yang sangat diinginkan untuk persona ini. Pengatur Data Amazon SageMaker adalah tujuan yang dibangun oleh AWS untuk mengurangi kurva pembelajaran dan memungkinkan praktisi data menyelesaikan tugas persiapan, pembersihan, dan fitur rekayasa data dengan lebih sedikit usaha dan waktu. Ini menawarkan antarmuka GUI dengan banyak fungsi dan integrasi bawaan dengan layanan AWS lainnya seperti Layanan Penyimpanan Sederhana Amazon (Amazon S3) dan Toko Fitur Amazon SageMaker, serta sumber data mitra termasuk Snowflake dan Databricks.

Dalam posting ini, kami mendemonstrasikan cara menggunakan Data Wrangler untuk menyiapkan data perawatan kesehatan untuk melatih model untuk memprediksi gagal jantung, mengingat demografi pasien, kondisi medis sebelumnya, dan riwayat hasil tes lab.

Ikhtisar solusi

Solusinya terdiri dari langkah-langkah berikut:

  1. Dapatkan set data perawatan kesehatan sebagai input ke Data Wrangler.
  2. Gunakan fungsi transformasi bawaan Data Wrangler untuk mengubah kumpulan data. Ini termasuk jatuhkan kolom, tampilkan data/waktu, gabungkan kumpulan data, hitung nilai yang hilang, enkode variabel kategori, skala nilai numerik, seimbangkan kumpulan data, dan banyak lagi.
  3. Gunakan fungsi transformasi kustom Data Wrangler (kode Panda atau PySpark) untuk melengkapi transformasi tambahan yang diperlukan di luar transformasi bawaan dan mendemonstrasikan ekstensibilitas Data Wrangler. Ini termasuk baris filter, data grup, bentuk kerangka data baru berdasarkan kondisi, dan banyak lagi.
  4. Gunakan fungsi visualisasi bawaan Data Wrangler untuk melakukan analisis visual. Ini termasuk kebocoran target, korelasi fitur, model cepat, dan banyak lagi.
  5. Gunakan opsi ekspor bawaan Data Wrangler untuk mengekspor kumpulan data yang diubah ke Amazon S3.
  6. Luncurkan notebook Jupyter untuk menggunakan kumpulan data yang diubah di Amazon S3 sebagai input untuk melatih model.

Buat kumpulan data

Sekarang setelah kami menyelesaikan pernyataan masalah ML, pertama-tama kami mengarahkan pandangan kami untuk memperoleh data yang kami butuhkan. Studi penelitian seperti Prediksi Gagal Jantung dapat memberikan data yang sudah dalam kondisi baik. Namun, kami sering menghadapi skenario di mana datanya cukup berantakan dan memerlukan penggabungan, pembersihan, dan beberapa transformasi lain yang sangat spesifik untuk domain perawatan kesehatan sebelum dapat digunakan untuk pelatihan ML. Kami ingin menemukan atau menghasilkan data yang cukup berantakan dan memandu Anda melalui langkah-langkah mempersiapkannya menggunakan Data Wrangler. Dengan mengingat hal itu, kami memilih Synthea sebagai alat untuk menghasilkan data sintetis yang sesuai dengan tujuan kami. Sintea adalah generator pasien sintetis sumber terbuka yang memodelkan riwayat medis pasien sintetis. Untuk membuat kumpulan data Anda, selesaikan langkah-langkah berikut:

  1. Ikuti instruksi sesuai mulai cepat dokumentasi untuk membuat Studio Amazon SageMaker domain dan meluncurkan Studio.
    Ini adalah langkah prasyarat. Ini opsional jika Studio sudah disiapkan di akun Anda.
  2. Setelah Studio diluncurkan, pada peluncur tab, pilih Terminal sistem.
    Ini meluncurkan sesi terminal yang memberi Anda antarmuka baris perintah untuk digunakan.
  3. Untuk menginstal Synthea dan menghasilkan dataset dalam format CSV, jalankan perintah berikut di sesi terminal yang diluncurkan:
    $ 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

Kami menyediakan parameter untuk menghasilkan kumpulan data dengan ukuran populasi 10,000. Perhatikan parameter ukuran menunjukkan jumlah anggota populasi yang hidup. Selain itu, Synthea juga menghasilkan data untuk anggota populasi yang mati yang mungkin menambahkan beberapa titik data tambahan di atas ukuran sampel yang ditentukan.

Tunggu hingga pembuatan data selesai. Langkah ini biasanya memakan waktu sekitar satu jam atau kurang. Synthea menghasilkan beberapa kumpulan data, termasuk patients, medications, allergies, conditions, dan banyak lagi. Untuk posting ini, kami menggunakan tiga dari kumpulan data yang dihasilkan:

  • pasien.csv โ€“ Dataset ini berukuran sekitar 3.2 MB dan berisi sekitar 11,000 baris data pasien (25 kolom termasuk ID pasien, tanggal lahir, jenis kelamin, alamat, dan lainnya)
  • condition.csv โ€“ Dataset ini berukuran sekitar 47 MB โ€‹โ€‹dan berisi sekitar 370,000 baris data kondisi medis (enam kolom termasuk ID pasien, tanggal mulai kondisi, kode kondisi, dan banyak lagi)
  • observasi.csv โ€“ Dataset ini berukuran sekitar 830 MB dan berisi sekitar 5 juta baris data observasi (delapan kolom termasuk ID pasien, tanggal observasi, kode observasi, nilai, dan banyak lagi)

Ada hubungan satu-ke-banyak antara patients dan conditions kumpulan data. Ada juga hubungan satu-ke-banyak antara patients dan observations kumpulan data. Untuk kamus data terperinci, lihat Kamus Data File CSV.

  1. Untuk mengunggah set data yang dihasilkan ke bucket sumber di Amazon S3, jalankan perintah berikut di sesi terminal:
    $ cd ./output/csv
    $ aws s3 sync . s3://<source bucket name>/

Luncurkan Data Wrangler

Pilih Sumber daya SageMaker di halaman navigasi di Studio dan di Proyek menu, pilih Pengatur Data untuk membuat aliran data Data Wrangler. Untuk langkah-langkah mendetail cara meluncurkan Data Wrangler dari dalam Studio, lihat Memulai dengan Data Wrangler.

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Impor data

Untuk mengimpor data Anda, selesaikan langkah-langkah berikut:

  1. Pilih Amazon S3 dan temukan file patient.csv di bucket S3.
  2. Dalam majalah Rincian panel, pilih K . pertama untuk Sampling.
  3. Enter 1100 untuk Ukuran sampel.
    Di panel pratinjau, Data Wrangler menarik 100 baris pertama dari kumpulan data dan mencantumkannya sebagai pratinjau.
  4. Pilih impor.
    Data Wrangler memilih 1,100 pasien pertama dari total pasien (11,000 baris) yang dihasilkan oleh Synthea dan mengimpor data. Pendekatan sampling memungkinkan Data Wrangler hanya memproses data sampel. Ini memungkinkan kami untuk mengembangkan aliran data kami dengan kumpulan data yang lebih kecil, yang menghasilkan pemrosesan yang lebih cepat dan putaran umpan balik yang lebih pendek. Setelah kami membuat aliran data, kami dapat mengirimkan resep yang dikembangkan ke a Pemrosesan SageMaker pekerjaan untuk menskalakan pemrosesan secara horizontal untuk kumpulan data penuh atau lebih besar secara terdistribusi.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  5. Ulangi proses ini untuk conditions dan observations dataset.
    1. Untuk conditions kumpulan data, masukkan 37000 untuk Ukuran sampel, yang merupakan 1/10 dari total 370,000 baris yang dihasilkan oleh Synthea.
    2. Untuk observations kumpulan data, masukkan 500000 untuk Ukuran sampel, yang merupakan 1/10 dari total pengamatan 5 juta baris yang dihasilkan oleh Synthea.

Anda akan melihat tiga kumpulan data seperti yang ditunjukkan pada tangkapan layar berikut.

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Ubah datanya

Transformasi data adalah proses mengubah struktur, nilai, atau format dari satu atau lebih kolom dalam kumpulan data. Proses ini biasanya dikembangkan oleh seorang insinyur data dan dapat menjadi tantangan bagi orang-orang dengan keahlian teknik data yang lebih kecil untuk menguraikan logika yang diusulkan untuk transformasi. Transformasi data adalah bagian dari proses rekayasa fitur yang lebih luas, dan urutan langkah yang benar adalah kriteria penting lainnya yang perlu diingat saat merancang resep semacam itu.

Data Wrangler dirancang untuk menjadi alat kode rendah untuk mengurangi hambatan masuk untuk persiapan data yang efektif. Muncul dengan lebih dari 300 transformasi data yang telah dikonfigurasikan untuk Anda pilih tanpa menulis satu baris kode pun. Di bagian berikut, kita melihat cara mengubah set data yang diimpor di Data Wrangler.

Jatuhkan kolom di patient.csv

Kami pertama-tama menjatuhkan beberapa kolom dari patients Himpunan data. Menghapus kolom yang berlebihan akan menghapus informasi yang tidak relevan dari kumpulan data dan membantu kami mengurangi jumlah sumber daya komputasi yang diperlukan untuk memproses kumpulan data dan melatih model. Di bagian ini, kami menjatuhkan kolom seperti SSN atau nomor paspor berdasarkan akal sehat bahwa kolom ini tidak memiliki nilai prediksi. Dengan kata lain, mereka tidak membantu model kami memprediksi gagal jantung. Studi kami juga tidak mempermasalahkan kolom lain seperti tempat lahir atau pengaruh biaya perawatan kesehatan terhadap gagal jantung pasien, jadi kami juga menghapusnya. Kolom redundan juga dapat diidentifikasi dengan menjalankan analisis bawaan seperti kebocoran target, korelasi fitur, multikolinearitas, dan banyak lagi, yang dibangun ke dalam Data Wrangler. Untuk detail lebih lanjut tentang jenis analisis yang didukung, lihat Analisis dan Visualisasikan. Selain itu, Anda dapat menggunakan Kualitas Data dan Laporan Wawasan untuk melakukan analisis otomatis pada kumpulan data untuk sampai pada daftar kolom yang berlebihan untuk dihilangkan.

  1. Pilih tanda plus di sebelah Tipe data untuk dataset patient.csv dan pilih Tambahkan transformasi.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  2. Pilih Tambahkan langkah Dan pilihlah Kelola kolom.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  3. Untuk Mengubahยธ pilih Jatuhkan kolom.
  4. Untuk Kolom untuk dijatuhkan, pilih kolom berikut:
    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. Pilih Preview untuk meninjau kumpulan data yang diubah, lalu pilih Add.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    Anda harus melihat langkahnya Jatuhkan kolom dalam daftar transformasi Anda.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Menampilkan tanggal/waktu di patient.csv

Sekarang kami menggunakan fungsi Feature date/time untuk menghasilkan fitur baru Year dari BIRTHDATE kolom di patients Himpunan data. Kami menggunakan fitur baru pada langkah selanjutnya untuk menghitung usia pasien pada saat observasi berlangsung.

  1. Dalam majalah Transformasi panel Anda Jatuhkan kolom halaman untuk patients kumpulan data, pilih Tambahkan langkah.
  2. Pilih Menampilkan tanggal/waktu mengubah.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  3. Pilih Ekstrak kolom.
  4. Untuk Kolom masukan, tambahkan kolom BIRTHDATE.
  5. Pilih Tahun dan hapus pilihan Bulan, Hari, jam, Menit, Kedua.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  6. Pilih Preview, Lalu pilih Add.

Tambahkan transformasi di observasi.csv

Data Wrangler mendukung transformasi kustom menggunakan Python (fungsi yang ditentukan pengguna), PySpark, Pandas, atau PySpark (SQL). Anda dapat memilih jenis transformasi Anda berdasarkan keakraban Anda dengan setiap opsi dan preferensi. Untuk tiga opsi terakhir, Data Wrangler mengekspos variabel df bagi Anda untuk mengakses kerangka data dan menerapkan transformasi di atasnya. Untuk penjelasan rinci dan contoh, lihat Transformasi Kustom. Di bagian ini, kami menambahkan tiga transformasi khusus ke observations Himpunan data.

  1. Tambahkan transformasi ke observasi.csv dan lepaskan DESCRIPTION kolom.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  2. Pilih Preview, Lalu pilih Add.
  3. Dalam majalah Transformasi panel, pilih Tambahkan langkah Dan pilihlah Transformasi kustom.
  4. Di menu drop-down, pilih Python (Panda).
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  5. Masukkan kode berikut:
    df = df[df["CODE"].isin(['8867-4','8480-6','8462-4','39156-5','777-3'])]

    Ini adalah kode LONIC yang sesuai dengan pengamatan berikut yang ingin kami gunakan sebagai fitur untuk memprediksi gagal jantung:

    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. Pilih Preview, Lalu pilih Add.
  7. Tambahkan transformasi untuk mengekstrak Year dan Quarter dari DATE kolom.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  8. Pilih Preview, Lalu pilih Add.
  9. Pilih Tambahkan langkah Dan pilihlah Transformasi kustom.
  10. Di menu drop-down, pilih Piton (PySpark).
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    Lima jenis pengamatan mungkin tidak selalu dicatat pada tanggal yang sama. Misalnya, seorang pasien dapat mengunjungi dokter keluarga mereka pada tanggal 21 Januari dan mengukur dan mencatat tekanan darah sistolik, tekanan darah diastolik, detak jantung, dan indeks massa tubuh. Namun, tes laboratorium yang mencakup trombosit dapat dilakukan di kemudian hari pada 2 Februari. Oleh karena itu, tidak selalu mungkin untuk menggabungkan kerangka data pada tanggal pengamatan. Di sini kami menggabungkan kerangka data dengan perincian kasar pada basis kuartal.
  11. Masukkan kode berikut:
    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. Pilih Preview, Lalu pilih Add.
  13. Pilih Tambahkan langkah, Lalu pilih Kelola baris.
  14. Untuk Mengubah, pilih Jatuhkan duplikat.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  15. Pilih Preview, Lalu pilih Add.
  16. Pilih Tambahkan langkah Dan pilihlah Transformasi kustom.
  17. Di menu drop-down, pilih Python (Panda).
  18. Masukkan kode berikut untuk mengambil rata-rata titik data yang memiliki nilai waktu yang sama:
    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. Pilih Preview, Lalu pilih Add.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Bergabunglah dengan patient.csv dan observasi.csv

Pada langkah ini, kami menunjukkan cara melakukan penggabungan kompleks secara efektif dan mudah pada kumpulan data tanpa menulis kode apa pun melalui UI Data Wrangler yang kuat. Untuk mempelajari lebih lanjut tentang jenis gabungan yang didukung, lihat Transformasi Data.

  1. Di sebelah kanan dari Transform: patient.csv, pilih tanda plus di sebelah Tangga Dan pilihlah Ikuti seminar.
    Anda dapat melihat file patient.csv yang diubah terdaftar di bawah Dataset di sebelah kiri.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  2. Di sebelah kanan dari Transformasi: observasi.csv, Klik pada Tangga untuk memulai operasi gabungan.
    File observasi.csv yang diubah sekarang terdaftar di bawah Dataset di sebelah kiri.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  3. Pilih Konfigurasi.
  4. Untuk Tipe Gabung, pilih Batin.
  5. Untuk kiri, pilih Id.
  6. Untuk Kanan, pilih pasien.
  7. Pilih Preview, Lalu pilih Add.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Tambahkan transformasi khusus ke kumpulan data yang digabungkan

Pada langkah ini, kami menghitung usia pasien pada saat observasi. Kami juga menjatuhkan kolom yang tidak lagi diperlukan.

  1. Pilih tanda plus di sebelah Gabung Pertama Dan pilihlah Tambahkan transformasi.
  2. Tambahkan transformasi khusus di Pandas:
    df['age'] = df['DATE_year'] - df['BIRTHDATE_year']
    df = df.drop(columns=['BIRTHDATE','DEATHDATE','BIRTHDATE_year','patient'])

  3. Pilih Preview, Lalu pilih Add.

Tambahkan transformasi khusus ke conditions.csv

  1. Pilih tanda plus di sebelah Transformasi: condition.csv Dan pilihlah Tambahkan transformasi.
  2. Tambahkan transformasi khusus di Pandas:
    df = df[df["CODE"].isin(['84114007', '88805009', '59621000', '44054006', '53741008', '449868002', '49436004'])]
    df = df.drop(columns=['DESCRIPTION','ENCOUNTER','STOP'])

Catatan: Seperti yang kami tunjukkan sebelumnya, Anda dapat menghapus kolom baik menggunakan kode kustom atau menggunakan transformasi bawaan yang disediakan oleh Data Wrangler. Transformasi khusus dalam Data Wrangler memberikan fleksibilitas untuk menghadirkan logika transformasi Anda sendiri dalam bentuk cuplikan kode dalam kerangka kerja yang didukung. Cuplikan ini nantinya dapat dicari dan diterapkan jika diperlukan.

Kode dalam transformasi sebelumnya adalah kode SNOMED-CT yang sesuai dengan kondisi berikut. Itu heart failure or chronic congestive heart failure kondisi menjadi label. Kami menggunakan kondisi yang tersisa sebagai fitur untuk memprediksi gagal jantung. Kami juga menjatuhkan beberapa kolom yang tidak lagi diperlukan.

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

  1. Selanjutnya, mari tambahkan transformasi khusus di 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))
    )

    Kami melakukan gabungan luar kiri untuk menyimpan semua entri dalam kerangka data gagal jantung. Kolom baru has_xxx dihitung untuk setiap kondisi selain gagal jantung berdasarkan tanggal mulai kondisi tersebut. Kami hanya tertarik pada kondisi medis yang dicatat sebelum gagal jantung dan menggunakannya sebagai fitur untuk memprediksi gagal jantung.

  2. Tambahkan built-in Kelola kolom transform untuk membuang kolom redundan yang tidak lagi diperlukan:
    1. hypertension
    2. diabetes
    3. coronary
    4. smoke
    5. atrial
  3. Ekstrak Year dan  Quarter dari heartfailure kolom.
    Ini cocok dengan perincian yang kami gunakan sebelumnya dalam transformasi observations Himpunan data.
  4. Kita harus memiliki total 6 langkah untuk conditions.csv.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Bergabunglah dengan conditions.csv ke kumpulan data yang digabungkan

Kami sekarang melakukan penggabungan baru untuk menggabungkan kumpulan data kondisi ke yang bergabung patients dan observations Himpunan data.

  1. Pilih Transformasi: Gabung Pertama.
  2. Pilih tanda plus dan pilih Ikuti seminar.
  3. Pilih Tangga sebelah Transformasi: condition.csv.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  4. Pilih Konfigurasi.
  5. Untuk Tipe Gabung, pilih Kiri luar.
  6. Untuk kiri, pilih Id.
  7. Untuk Kanan, pilih pasien.
  8. Pilih Preview, Lalu pilih Add.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Tambahkan transformasi ke kumpulan data yang digabungkan

Sekarang kita telah menggabungkan ketiga kumpulan data, mari kita terapkan beberapa transformasi tambahan.

  1. Tambahkan transformasi khusus berikut di PySpark jadi has_heartfailure menjadi kolom label kami:
    from pyspark.sql.functions import col, when
    df = (
        df.withColumn("has_heartfailure", when(col("heartfailure").isNotNull(), 1).otherwise(0))
    )

  2. Tambahkan transformasi khusus berikut di 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")))))
        )
    )

    Kami hanya tertarik pada pengamatan yang direkam sebelum kondisi gagal jantung didiagnosis dan menggunakannya sebagai fitur untuk memprediksi gagal jantung. Pengamatan yang dilakukan setelah gagal jantung didiagnosis mungkin dipengaruhi oleh obat yang dikonsumsi pasien, jadi kami ingin mengecualikan yang tersebut.

  3. Jatuhkan kolom berlebihan yang tidak lagi diperlukan:
    1. Id
    2. DATE_year
    3. DATE_quarter
    4. patient
    5. heartfailure
    6. heartfailure_year
    7. heartfailure_quarter
  4. pada Analisis tab, untuk Jenis analisisยธ pilih Ringkasan tabel.
    Pemindaian cepat melalui ringkasan menunjukkan bahwa MARITAL kolom memiliki data yang hilang.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  5. Pilih Data tab dan tambahkan satu langkah.
  6. Pilih Menangani Hilang.
  7. Untuk Mengubah, pilih Isi yang hilang.
  8. Untuk Kolom masukan, pilih PERNIKAHAN.
  9. Untuk Isi nilai, Masuk S.
    Strategi kami di sini adalah menganggap pasien lajang jika status perkawinan memiliki nilai yang hilang. Anda dapat memiliki strategi yang berbeda.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  10. Pilih Preview, Lalu pilih Add.
  11. Isi nilai yang hilang sebagai 0 untuk has_hypertension, has_diabetes, has_coronary, has_smoke, has_atrial.

Marital dan Gender adalah variabel kategori. Data Wrangler memiliki fungsi bawaan untuk mengkodekan variabel kategori.

  1. Tambahkan satu langkah dan pilih Enkode kategori.
  2. Untuk Mengubah, pilih Enkode satu-panas.
  3. Untuk Kolom masukan, pilih PERNIKAHAN.
  4. Untuk Gaya keluaran, pilih Kolom.
    Gaya keluaran ini menghasilkan nilai yang disandikan dalam kolom terpisah.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  5. Pilih Preview, Lalu pilih Add.
  6. Ulangi langkah ini untuk Gender kolom.

Pengkodean satu-panas membagi kolom Perkawinan menjadi Marital_M (menikah) dan Marital_S (tunggal), dan membagi kolom Gender menjadi Gender_M (laki-laki) dan Gender_F (Perempuan). Karena Marital_M dan Marital_S saling eksklusif (seperti Gender_M dan Gender_F), kita dapat menjatuhkan satu kolom untuk menghindari fitur yang berlebihan.

  1. Menjatuhkan Marital_S dan Gender_F.

Fitur numerik seperti sistolik, detak jantung, dan usia memiliki standar satuan yang berbeda. Untuk model berbasis regresi linier, kita perlu menormalkan fitur numerik ini terlebih dahulu. Jika tidak, beberapa fitur dengan nilai absolut yang lebih tinggi mungkin memiliki keunggulan yang tidak beralasan dibandingkan fitur lain dengan nilai absolut yang lebih rendah dan menghasilkan kinerja model yang buruk. Data Wrangler memiliki built-in transform min-max scaler untuk menormalkan data. Untuk model klasifikasi berbasis pohon keputusan, normalisasi tidak diperlukan. Studi kami adalah masalah klasifikasi sehingga kami tidak perlu menerapkan normalisasi. Kelas yang tidak seimbang adalah masalah umum dalam klasifikasi. Ketidakseimbangan terjadi ketika dataset pelatihan berisi distribusi kelas yang sangat miring. Misalnya, ketika dataset kami berisi lebih banyak pasien tanpa gagal jantung secara tidak proporsional daripada pasien dengan gagal jantung, ini dapat menyebabkan model menjadi bias dalam memprediksi tidak ada gagal jantung dan berkinerja buruk. Data Wrangler memiliki fungsi bawaan untuk mengatasi masalah tersebut.

  1. Tambahkan transformasi khusus di Pandas untuk mengonversi tipe data kolom dari tipe "objek" ke tipe numerik:
    import pandas as pd
    df=df.apply(pd.to_numeric)

  2. Pilih Analisis Tab.
  3. Untuk Jenis analisisยธ pilih Histogram.
  4. Untuk sumbu X, pilih memiliki_gagal jantung.
  5. Pilih Preview.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    Jelas bahwa kami memiliki kelas yang tidak seimbang (lebih banyak titik data yang diberi label tidak ada gagal jantung daripada titik data yang diberi label gagal jantung).
  6. Kembali ke Data tab. Memilih Tambahkan langkah Dan pilihlah data saldo.
  7. Untuk Kolom sasaran, pilih memiliki_gagal jantung.
  8. Untuk Rasio yang diinginkan, Masuk 1.
  9. Untuk Mengubah, pilih HALUS.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    SMOTE adalah singkatan dari Synthetic Minority Over-sampling Technique. Ini adalah teknik untuk membuat instance minoritas baru dan menambah dataset untuk mencapai keseimbangan kelas. Untuk informasi rinci, lihat SMOTE: Teknik Over-sampling Minoritas Sintetis.
  10. Pilih Preview, Lalu pilih Add.
  11. Ulangi analisis histogram pada langkah 20-23. Hasilnya adalah kelas yang seimbang.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Visualisasikan kebocoran target dan korelasi fitur

Selanjutnya, kita akan melakukan beberapa analisis visual menggunakan perangkat yang kaya dari Data Wrangler untuk jenis analisis yang didukung ML tingkat lanjut. Pertama, kita melihat target kebocoran. Kebocoran target terjadi ketika data dalam set data pelatihan berkorelasi kuat dengan label target, tetapi tidak tersedia dalam data dunia nyata pada waktu inferensi.

  1. pada tab analisis, Untuk Jenis analisisยธ pilih Kebocoran Target.
  2. Untuk Jenis Masalah, pilih klasifikasi.
  3. Untuk target, pilih memiliki_gagal jantung.
  4. Pilih Preview.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    Berdasarkan analisis tersebut, hr adalah kebocoran target. Kami akan menjatuhkannya di langkah berikutnya. age ditandai sebagai kebocoran target. Masuk akal untuk mengatakan bahwa usia pasien akan tersedia selama waktu inferensi, jadi kami menjaga usia sebagai fitur. Systolic dan diastolic juga ditandai sebagai kemungkinan kebocoran target. Kami berharap memiliki dua pengukuran selama waktu inferensi, jadi kami menyimpannya sebagai fitur.
  5. Pilih Add untuk menambahkan analisis.

Kemudian, kita melihat korelasi fitur. Kami ingin memilih fitur yang berkorelasi dengan target tetapi tidak berkorelasi di antara mereka sendiri.

  1. pada tab analisis, Untuk Jenis analisisยธ pilih Korelasi Fitur.
  2. Untuk Jenis Korelasiยธ pilih linear.
  3. Pilih Preview.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Skor koefisien menunjukkan korelasi yang kuat antara pasangan berikut:

  • systolic dan diastolic
  • bmi dan age
  • has_hypertension dan has_heartfailure (label)

Untuk fitur yang berkorelasi kuat, matriks sulit untuk dibalik secara komputasi, yang dapat menyebabkan perkiraan yang tidak stabil secara numerik. Untuk mengurangi korelasi, kita cukup menghapus satu dari pasangan. Kami menjatuhkan diastolic dan bmi dan menjaga systolic dan age dalam langkah selanjutnya.

Jatuhkan kolom diastolik dan bmi

Tambahkan langkah transformasi tambahan untuk menjatuhkan hr, diastolic dan bmi kolom menggunakan transformasi bawaan.

Hasilkan Kualitas Data dan Laporan Wawasan

AWS baru-baru ini mengumumkan fitur Kualitas Data dan Laporan Wawasan baru di Data Wrangler. Laporan ini secara otomatis memverifikasi kualitas data dan mendeteksi kelainan pada data Anda. Ilmuwan data dan insinyur data dapat menggunakan alat ini untuk secara efisien dan cepat menerapkan pengetahuan domain guna memproses set data untuk pelatihan model ML. Langkah ini opsional. Untuk membuat laporan ini pada kumpulan data kami, selesaikan langkah-langkah berikut:

  1. pada Analisis tab, untuk Jenis analisis, pilih Kualitas Data dan Laporan Wawasan.
  2. Untuk Kolom sasaran, pilih memiliki_gagal jantung.
  3. Untuk Jenis masalah, pilih Klasifikasi.
  4. Pilih membuat.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Dalam beberapa menit, ini menghasilkan laporan dengan ringkasan, visual, dan rekomendasi.

Hasilkan analisis Model Cepat

Kami telah menyelesaikan persiapan data, pembersihan, dan rekayasa fitur. Data Wrangler memiliki fungsi bawaan yang memberikan perkiraan kasar tentang kualitas prediksi yang diharapkan dan kekuatan prediksi fitur dalam kumpulan data kami.

  1. pada Analisis tab, untuk Jenis analisisยธ pilih Model Cepat.
  2. Untuk label, pilih memiliki_gagal jantung.
  3. Pilih Preview.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Sesuai analisis Model Cepat kami, kami dapat melihat fitur has_hypertension memiliki skor kepentingan fitur tertinggi di antara semua fitur.

Ekspor data dan latih modelnya

Sekarang mari mengekspor fitur siap-ML yang telah diubah ke bucket S3 tujuan dan menskalakan seluruh alur rekayasa fitur yang telah kita buat sejauh ini menggunakan sampel ke seluruh kumpulan data secara terdistribusi.

  1. Pilih tanda plus di sebelah kotak terakhir dalam aliran data dan pilih Tambahkan tujuan.
  2. Pilih Amazon S3.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  3. Masukkan Nama kumpulan data. Forum Lokasi Amazon S3, pilih ember S3, lalu pilih Tambahkan Tujuan.
  4. Pilih Ciptakan pekerjaan untuk meluncurkan tugas pemrosesan PySpark terdistribusi untuk melakukan transformasi dan mengeluarkan data ke bucket S3 tujuan.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
    Bergantung pada ukuran kumpulan data, opsi ini memungkinkan kita mengonfigurasi cluster dengan mudah dan menskalakan secara horizontal tanpa kode. Kami tidak perlu khawatir tentang mempartisi kumpulan data atau mengelola klaster dan internal Spark. Semua ini secara otomatis diurus oleh kami oleh Data Wrangler.
  5. Di panel kiri, pilih Selanjutnya, 2. Konfigurasi pekerjaan.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  6. Lalu pilih Run.
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Atau, kami juga dapat mengekspor output yang diubah ke S3 melalui Notebook Jupyter. Dengan pendekatan ini, Data Wrangler secara otomatis menghasilkan notebook Jupyter dengan semua kode yang diperlukan untuk memulai pekerjaan pemrosesan untuk menerapkan langkah-langkah aliran data (dibuat menggunakan sampel) pada kumpulan data lengkap yang lebih besar dan menggunakan kumpulan data yang diubah sebagai fitur untuk memulai dari pekerjaan pelatihan nanti. Kode notebook dapat dengan mudah dijalankan dengan atau tanpa membuat perubahan. Sekarang mari kita telusuri langkah-langkah tentang cara menyelesaikannya melalui UI Data Wrangler.

  1. Pilih tanda plus di sebelah langkah terakhir dalam aliran data dan pilih Ekspor ke.
  2. Pilih Amazon S3 (melalui Notebook Jupyter).
    Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  3. Secara otomatis membuka tab baru dengan notebook Jupyter.
  4. Di buku catatan Jupyter, cari sel di (Opsional) Langkah Selanjutnya bagian dan ubah run_optional_steps dari False untuk True.
    Langkah-langkah opsional yang diaktifkan di buku catatan melakukan hal berikut:
    • Latih model menggunakan XGBoost
      Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.
  5. Kembali ke bagian atas buku catatan dan di Run menu, pilih Jalankan Semua Sel.

Jika Anda menggunakan notebook yang dihasilkan apa adanya, ini akan meluncurkan pekerjaan pemrosesan SageMaker yang menskalakan pemrosesan di dua instans m5.4xlarge untuk memproses set data lengkap pada bucket S3. Anda dapat menyesuaikan jumlah instans dan jenis instans berdasarkan ukuran set data dan waktu yang Anda perlukan untuk menyelesaikan pekerjaan.

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Tunggu hingga pekerjaan pelatihan dari sel terakhir selesai. Ini menghasilkan model di bucket S3 default SageMaker.

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.

Model terlatih siap untuk diterapkan baik untuk inferensi real-time atau transformasi batch. Perhatikan bahwa kami menggunakan data sintetis untuk mendemonstrasikan fungsionalitas di Data Wrangler dan menggunakan data yang diproses untuk model pelatihan. Mengingat bahwa data yang kami gunakan adalah sintetis, hasil inferensi dari model terlatih tidak dimaksudkan untuk diagnosis kondisi medis dunia nyata atau substitusi penilaian dari praktisi medis.

Anda juga dapat langsung mengekspor kumpulan data yang telah diubah ke Amazon S3 dengan memilih Ekspor di atas halaman pratinjau transformasi. Opsi ekspor langsung hanya mengekspor sampel yang diubah jika pengambilan sampel diaktifkan selama impor. Opsi ini paling cocok jika Anda berurusan dengan kumpulan data yang lebih kecil. Data yang diubah juga dapat diserap langsung ke penyimpanan fitur. Untuk informasi lebih lanjut, lihat Toko Fitur Amazon SageMaker. Aliran data juga dapat diekspor sebagai saluran SageMaker yang dapat diatur dan dijadwalkan sesuai kebutuhan Anda. Untuk informasi lebih lanjut, lihat Pipa Amazon SageMaker.

Kesimpulan

Dalam posting ini, kami menunjukkan cara menggunakan Data Wrangler untuk memproses data perawatan kesehatan dan melakukan rekayasa fitur yang dapat diskalakan dengan cara yang digerakkan oleh alat dan kode rendah. Kami mempelajari cara menerapkan transformasi dan analisis bawaan dengan tepat di mana pun diperlukan, menggabungkannya dengan transformasi khusus untuk menambahkan lebih banyak fleksibilitas pada alur kerja persiapan data kami. Kami juga menelusuri berbagai opsi untuk menskalakan resep aliran data melalui tugas pemrosesan terdistribusi. Kami juga mempelajari bagaimana data yang diubah dapat dengan mudah digunakan untuk melatih model untuk memprediksi gagal jantung.

Ada banyak fitur lain di Data Wrangler yang belum kami bahas dalam posting ini. Jelajahi apa yang mungkin di Siapkan Data ML dengan Amazon SageMaker Data Wrangler dan pelajari cara memanfaatkan Data Wrangler untuk ilmu data atau proyek pembelajaran mesin Anda berikutnya.


Tentang Penulis

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Matahari Hutan adalah Arsitek Solusi Senior dengan tim Sektor Publik AWS di Toronto, Kanada. Dia telah bekerja di industri kesehatan dan keuangan selama dua dekade terakhir. Di luar pekerjaan, ia menikmati berkemah bersama keluarganya.

Rekayasa fitur dalam skala besar untuk perawatan kesehatan dan ilmu kehidupan dengan Amazon SageMaker Data Wrangler PlatoBlockchain Data Intelligence. Pencarian Vertikal. Ai.Arunprasath Shankar adalah Arsitek Solusi Spesialis Kecerdasan Buatan dan Pembelajaran Mesin (AI / ML) dengan AWS, membantu pelanggan global menskalakan solusi AI mereka secara efektif dan efisien di cloud. Di waktu senggangnya, Arun suka menonton film sci-fi dan mendengarkan musik klasik.

Stempel Waktu:

Lebih dari Pembelajaran Mesin AWS