iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0

前言

data wranger 官方連結
在機器學習中,資料品質決定了模型的成敗。今天我們來學習如何使用 SageMaker Data Wrangler 進行高效的資料預處理

Garbage In,Garbage Out”。意思是“進來是垃圾,出去也是垃圾”。
信息技術(IT)業界經常使用的這句話意味著“輸入數據不好,輸出數據也會不好”。
即使是利用最尖端的半導體和最高技術制造的AI,只要輸入垃圾,就會產生垃圾。相反,吸收了很多好內容的AI會變得更加強大

(言論來自網路)

什麼是 什麼是 SageMaker Data Wrangler

Amazon SageMaker Data Wrangler 是一個視覺化的資料準備工具

用途

  • 視覺化探索資料:透過內建的圖表和統計分析快速了解資料特性
  • 快速資料轉換:使用 300+ 種預建的轉換功能
  • 無程式碼操作:透過拖拉點選介面進行複雜的資料處理
  • 自動生成程式碼:將視覺化操作轉換為可重複使用的程式碼
  • 整合性強:與 SageMaker 生態系統無縫整合

資料預處理的重要性

缺失值(Missing Values)

感測器故障導致的數據缺失
用戶未填寫的可選欄位
系統錯誤造成的資料遺失

異常值(Outliers)

設備異常產生的極端數值
人為輸入錯誤
測量精度問題

`資料不一致```

不同系統間的格式差異
時間戳記標準不統一
分類標籤不規範

資料分布不平衡

某些類別樣本過少
特徵值範圍差異巨大
時間序列資料的季節性變化

Data Wrangler 核心功能

Data wrangler 支援多種資料來源

├── Amazon S3
├── Amazon Athena
├── Amazon Redshift
├── Snowflake
├── Databricks
└── 本地檔案上傳

視覺化分析

  • 直方圖:了解數值分布
  • 散點圖:探索變數關係
  • 相關性矩陣:識別特徵相關性
  • 缺失值熱圖:快速定位資料問題
  • 目標洩漏檢測:避免資料洩漏問題

資料轉換

(基本)

刪除重複資料
處理缺失值
資料類型轉換
欄位重新命名

(進階)

特徵工程(創建新特徵)
時間序列處理
文字資料處理
編碼轉換(One-hot, Label encoding)

啟動 Data Wrangler

step 1:

[進入 SageMaker Studio -> 選擇 Data Wrangler -> 建立新的 Data Wrangler flow]

cli 操作的話如下

aws sagemaker create-processing-job \
  --processing-job-name "customer-data-wrangling" \
  --processing-inputs '[{
    "InputName": "input-data",
    "S3Input": {
      "S3Uri": "s3://your-bucket/customer-data.csv",
      "LocalPath": "/opt/ml/processing/input",
      "S3DataType": "S3Prefix",
      "S3InputMode": "File"
    }
  }]'

step 2:

匯入資料

客戶資料集:50,000 筆記錄,15 個欄位
- customer_id: 客戶ID
- age: 年齡(包含缺失值和異常值)
- gender: 性別(M/F/其他)
- income: 年收入(部分缺失)
- purchase_amount: 購買金額
- last_purchase_date: 最後購買日期
- category_preference: 偏好類別

<發現問題>

年齡欄位有 3% 缺失值和明顯異常值(如 150 歲)
收入資料有 15% 缺失
日期格式不一致
類別標籤有拼寫錯誤

step 3:

資料清理轉換

處理缺失

# Data Wrangler 會自動生成類似的程式碼
def handle_missing_values(df):
    # 年齡缺失值用中位數填充
    df['age'].fillna(df['age'].median(), inplace=True)
    
    # 收入缺失值用同年齡組平均值填充
    df['income'] = df.groupby('age_group')['income'].transform(
        lambda x: x.fillna(x.mean())
    )
    
    return df

處理異常值

def remove_outliers(df):
    # 移除年齡異常值(使用 IQR 方法)
    Q1 = df['age'].quantile(0.25)
    Q3 = df['age'].quantile(0.75)
    IQR = Q3 - Q1
    
    lower_bound = Q1 - 1.5 * IQR
    upper_bound = Q3 + 1.5 * IQR
    
    df = df[(df['age'] >= lower_bound) & (df['age'] <= upper_bound)]
    
    return df

特徵工程

  1. 年齡分組
def create_age_groups(df):
       df['age_group'] = pd.cut(df['age'], 
                               bins=[0, 25, 35, 50, 65, 100],
                               labels=['Young', 'Adult', 'Middle', 'Senior', 'Elder'])
       return df

  1. 購買頻率計算
def calculate_purchase_frequency(df):
       # 計算每個客戶的購買頻率
       df['days_since_last_purchase'] = (
           pd.Timestamp.now() - pd.to_datetime(df['last_purchase_date'])
       ).dt.days
       
       df['purchase_frequency'] = np.where(
           df['days_since_last_purchase'] <= 30, 'High',
           np.where(df['days_since_last_purchase'] <= 90, 'Medium', 'Low')
       )
       
       return df
  1. 客戶價值分級
def create_customer_segments(df):
       # RFM 分析簡化版
       df['customer_value'] = pd.qcut(df['purchase_amount'], 
                                     q=5, 
                                     labels=['Bronze', 'Silver', 'Gold', 'Platinum', 'Diamond'])
       return df

step 4: 品質驗證

  1. 資料分布檢查
  • 檢查轉換後的資料分布是否合理
  • 確認沒有新的異常值產生
  • 驗證類別分布的平衡性
  1. 目標洩漏檢測

以 python 為例

# 自動檢測可能的目標洩漏
target_leakage_report = data_wrangler.detect_target_leakage(
    df=processed_df,
    target_column='customer_value'
)
  1. 特徵重要性分析
# 快速評估特徵重要性
feature_importance = data_wrangler.analyze_feature_importance(
    df=processed_df,
    target='customer_value'
)

目前先探討到這 ...


上一篇
Bedrock模型比較:Claude vs Llama vs Titan
系列文
從零開始的AWS AI之路:用Bedrock與SageMaker打造智慧應用的30天實戰11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言