Automl Skill

👤 yejinlei 📦 v1.2.0 ⭐ 4.4 ⬇️ 1.5K 下載
📊 資料分析 免費

📖 技能介紹


name: automl-skill description: > AutoML 自動化機器學習技能 | Automated Machine Learning Skill. 基於 PyCaret 進行低程式碼機器學習建模,支援分類、迴歸、聚類、異常檢測、時間序列預測、自然語言處理和關聯規則挖掘等任務。 未來將整合更多 AutoML 庫(如 AutoGluon、FLAML 等)。 當用戶需要快速構建機器學習模型、自動化模型選擇、超引數調優、模型整合、特徵工程或進行 AutoML 實驗時使用此技能。 適用於資料科學家、公民資料科學家、機器學習工程師和希望快速原型開發的人員。 觸發關鍵詞:AutoML、機器學習自動化、PyCaret、分類模型、迴歸模型、聚類、異常檢測、時間序列、文本分類、模型調優、模型比較、特徵選擇、統計檢驗、顯著性檢驗、A/B測試。 Trigger keywords in English: AutoML, automated machine learning, PyCaret, classification, regression, clustering, anomaly detection, time series forecasting, NLP, text mining, model tuning, model comparison, feature engineering, statistical test, significance testing, A/B testing.


PyCaret AutoML 技能指南 | PyCaret AutoML Skill Guide

本技能幫助使用者使用 PyCaret 快速構建端到端的機器學習工作流。PyCaret 是一個開源的低程式碼機器學習庫,可以將數百行程式碼簡化為幾行。

This skill helps users build end-to-end machine learning workflows using PyCaret, an open-source low-code ML library that simplifies hundreds of lines of code into just a few lines.

核心功能 | Core Capabilities

  • 自動化模型選擇 - 自動比較多個模型並選擇最佳模型
  • 自動化超引數調優 - 使用 Optuna/Hyperopt 自動最佳化模型引數
  • 自動化特徵工程 - 自動進行資料預處理、特徵轉換和特徵選擇
  • 模型整合 - 支援 Bagging、Boosting、Stacking、Blending
  • 模型可解釋性 - 支援 SHAP、Permutation Importance 等解釋方法
  • 模型部署就緒 - 生成可復現的生產級 Pipeline
  • 統計推斷增強 - 支援置信區間、假設檢驗、統計顯著性分析

統計推斷增強 | Statistical Enhancement (statsmodels)

當需要統計推斷、假設檢驗、置信區間時,可以使用 statsmodels 補充 PyCaret:

線性迴歸模型

import statsmodels.api as sm

# OLS 迴歸(帶統計顯著性)
X = sm.add_constant(X)  # 新增截距
model = sm.OLS(y, X).fit()
print(model.summary())  # R², F檢驗, P值, 置信區間

廣義線性模型 (GLM)

# 二項分佈 GLM (Logistic 迴歸)
glm_model = sm.GLM(y, X, family=sm.families.Binomial()).fit()

# 泊松迴歸 (計數資料)
poisson_model = sm.GLM(y, X, family=sm.families.Poisson()).fit()

假設檢驗

from scipy import stats

# t 檢驗
t_stat, p_value = stats.ttest_ind(group1, group2)

# 卡方檢驗
chi2, p_value, dof, expected = stats.chi2_contingency(contingency_table)

# ANOVA
f_stat, p_value = stats.f_oneway(*groups)

時間序列分析

from statsmodels.tsa.arima.model import ARIMA
from statsmodels.tsa.statespace.sarimax import SARIMAX

# ARIMA 模型
arima_model = ARIMA(train_data, order=(1,1,1)).fit()
forecast = arima_model.forecast(steps=12)

# 季節性 SARIMAX
sarimax_model = SARIMAX(data, order=(1,1,1), seasonal_order=(1,1,1,12)).fit()

統計診斷

# 殘差自相關檢驗 (Durbin-Watson)
from statsmodels.stats.stattools import durbin_watson
dw = durbin_watson(model.resid)

# 異方差檢驗
from statsmodels.stats.diagnostic import het_breuschpagan
bp_test = het_breuschpagan(model.resid, model.model.exog)

# 正態性檢驗
from scipy import stats
shapiro_stat, shapiro_p = stats.shapiro(model.resid)

混合效應模型 (隨機效應)

# 混合線性模型 (Panel Data / 多層次資料)
from statsmodels.regression.mixed_linear_model import MixedLM
mixed_model = MixedLM(y, X, groups=group_var).fit()

PyCaret + statsmodels 組合使用

# 1. 用 PyCaret 快速建模和選擇模型
from pycaret.classification import *
clf = setup(data, target='target')
best = compare_models()
tuned = tune_model(best)

# 2. 用 statsmodels 做統計推斷
import statsmodels.api as sm
# 獲取 PyCaret 模型的特徵和預測
X_with_const = sm.add_constant(X_test)
sm_model = sm.Logit(y_test, X_with_const).fit(disp=0)
print(sm_model.summary())  # 係數顯著性 P值

支援的機器學習任務 | Supported ML Tasks

模組 Module 任務型別 Task Type 參考文件
pycaret.classification Classification 二分類、多分類 Binary, Multi-class classification.md
pycaret.regression Regression 迴歸預測 Regression regression.md
pycaret.clustering Clustering 無監督聚類 Unsupervised Clustering clustering.md
pycaret.anomaly Anomaly Detection 異常檢測 Outlier Detection anomaly.md
pycaret.time_series Time Series 時間序列預測 Time Series Forecasting time_series.md
pycaret.nlp NLP 文本分類、主題建模 Text Classification, Topic Modeling nlp.md
pycaret.arules Association Rules 關聯規則挖掘 Market Basket Analysis association_rules.md

快速開始 | Quick Start

1. 選擇您的任務型別

根據您的機器學習任務,選擇相應的模組:

  • 分類問題 → 使用 pycaret.classification
  • 迴歸問題 → 使用 pycaret.regression
  • 客戶分群 → 使用 pycaret.clustering
  • 異常檢測 → 使用 pycaret.anomaly
  • 時間預測 → 使用 pycaret.time_series
  • 文本分析 → 使用 pycaret.nlp
  • 購物籃分析 → 使用 pycaret.arules

2. 標準 AutoML 工作流 | Standard AutoML Workflow

完整的 AutoML 工作流程包含以下步驟:

Step 1: 資料收集與載入 | Data Collection & Loading

# 資料載入
import pandas as pd
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# 或使用 PyCaret 內建資料集
from pycaret.classification import get_data
data = get_data('breast_cancer')

Step 2: 資料理解與探索 | Data Understanding & EDA

# 基本資訊
print(f"資料形狀: {data.shape}")
print(f"資料型別:\n{data.dtypes}")

# 缺失值分析
missing = data.isnull().sum()
missing_pct = (missing / len(data) * 100).round(2)
print(f"缺失值比例:\n{pd.concat([missing, missing_pct], axis=1)}")

# 目標變數分佈
data['target'].value_counts()

# 數值特徵統計
data.describe()

Step 3: 資料預處理 | Data Preprocessing (setup 中自動完成)

# 初始化環境 - 資料預處理配置
clf = setup(
    data,
    target='target',

    # ===== 缺失值處理 =====
    numeric_imputation='mean',       # 數值型: mean/median/mode/knn/iterative
    categorical_imputation='mode',   # 類別型: mode/constant

    # ===== 異常值處理 =====
    remove_outliers=True,           # 移除異常值
    outliers_method='iforest',      # iforest/ee/lof
    outliers_threshold=0.05,        # 異常值比例

    # ===== 類別不平衡處理 =====
    fix_imbalance=True,             # 處理類別不平衡
    fix_imbalance_method='SMOTE',  # SMOTE/ADASYN/RandomOverSampler

    # ===== 資料型別指定 =====
    numeric_features=['age', 'income', 'score'],
    categorical_features=['city', 'gender', 'occupation'],
    date_features=['Date', 'created_at'],

    session_id=42
)

Step 4: 特徵工程 | Feature Engineering (setup 中自動完成)

clf = setup(
    data,
    target='target',

    # ===== 特徵縮放 =====
    normalize=True,                 # 歸一化
    normalize_method='zscore',     # zscore/minmax/maxabs/robust

    # ===== 特徵變換 =====
    transformation=True,            # 變換使資料更接近正態分佈
    transformation_method='yeo-johnson',  # yeo-johnson/quantile

    # ===== 特徵選擇 =====
    feature_selection=True,         # 特徵選擇
    feature_selection_method='classic',      # classic/univariate/sequential
    n_features_to_select=0.2,     # 選擇20%最重要特徵

    # ===== 降維 =====
    pca=True,                      # PCA降維
    pca_method='linear',           # linear/kernel/incremental
    pca_components=0.95,           # 保留95%方差

    # ===== 多重共線性處理 =====
    remove_multicollinearity=True,
    multicollinearity_threshold=0.9,

    # ===== 特徵編碼 =====
    ordinal_features={'education': ['high_school', 'bachelor', 'master', 'phd']},
    high_cardinality_features='frequency',  # 處理高基數類別特徵

    # ===== 特徵互動 =====
    polynomial_features=True,
    polynomial_degree=2,

    # ===== 分箱(離散化) =====
    bin_numeric_features=['age', 'income'],

    session_id=42
)

Step 5: 模型選擇 | Model Selection

# 比較所有模型
best_model = compare_models()

# 指定模型列表比較
best_model = compare_models(include=['lr', 'rf', 'xgboost', 'catboost', 'lightgbm'])

# 快速模式(排除耗時模型)
best_model = compare_models(turbo=True)

# 按特定指標排序
best_model = compare_models(sort='F1')  # 對於不平衡資料

Step 6: 模型訓練 | Model Training

# 建立模型
model = create_model('rf')

# 指定模型引數
model = create_model('xgboost', n_estimators=100, max_depth=5)

Step 7: 超引數調優 | Hyperparameter Tuning

# 自動調優
tuned_model = tune_model(model)

# 自定義調優
tuned_model = tune_model(
    model,
    custom_grid={
        'n_estimators': [100, 200, 300],
        'max_depth': [3, 5, 7, None],
        'learning_rate': [0.01, 0.1, 0.3]
    },
    optimize='Accuracy',           # 分類: Accuracy/AUC/Recall/Precision/F1/MCC
                                  # 迴歸: RMSE/MSE/MAE/R2/RMSLE/MAPE
    choose_better=True,            # 返回更好的模型
    n_iter=50                      # 迭代次數
)

Step 8: 模型評估 | Model Evaluation

# 互動式評估
evaluate_model(tuned_model)

# 各種評估圖表
plot_model(tuned_model, plot='auc')                # ROC曲線
plot_model(tuned_model, plot='confusion_matrix')   # 混淆矩陣
plot_model(tuned_model, plot='classification_report')  # 分類報告
plot_model(tuned_model, plot='learning_curve')    # 學習曲線
plot_model(tuned_model, plot='feature')            # 特徵重要性
plot_model(tuned_model, plot='residuals')          # 殘差圖(迴歸)
plot_model(tuned_model, plot='error')              # 預測誤差

# 交叉驗證結果
results = pull()  # 獲取當前實驗結果

Step 9: 模型解釋 | Model Interpretation

# SHAP 解釋
interpret_model(tuned_model)

# Permutation Importance
interpret_model(tuned_model, plot='correlation')

# 區域性解釋
interpret_model(tuned_model, plot='reason', observation=0)

Step 10: 模型整合 | Model Ensemble

# Bagging
bagged = ensemble_model(tuned_model, method='Bagging')

# Boosting
boosted = ensemble_model(tuned_model, method='Boosting')

# 融合多個模型
blended = blend_models(
    estimator_list=['lr', 'dt', 'rf', 'xgboost'],
    method='soft',                  # soft/hard
    weights=[1, 2, 3, 2]           # 各模型權重
)

# 堆疊
stacked = stack_models(
    estimator_list=['lr', 'dt', 'rf'],
    meta_model='xgboost',
    restack=False                   # 是否允許基礎模型使用原始特徵
)

Step 11: 最終模型訓練與預測 | Final Model Training & Prediction

# 在全部資料上訓練最終模型
final_model = finalize_model(tuned_model)

# 預測
predictions = predict_model(final_model, data=test)

# 預測機率(分類)
predictions = predict_model(
    final_model,
    data=test,
    probability_threshold=0.7       # 自定義閾值
)

小蔥技能站7w4.net發現了升級外掛。

Step 12: 模型儲存與部署 | Model Save & Deployment

# 儲存模型(包含完整Pipeline)
save_model(final_model, 'my_model')

# 儲存實驗配置
save_experiment('my_experiment')

# 載入模型
loaded_model = load_model('my_model')

# 部署到雲平臺
deploy_model(
    final_model,
    platform='aws',                 # aws/gcp/azure
    authentication={
        'bucket': 'my-bucket'
    }
)

# 建立Web應用
create_app(final_model, app_path='app.py')

# 建立REST API
create_api(final_model, api_name='predict', api_file='predict.py')

# 建立Docker
create_docker('my_model', docker_path='Dockerfile')

AutoML 完整流程示例 | Complete AutoML Pipeline Example

from pycaret.classification import *
import pandas as pd

# ========== Step 1: 資料載入 ==========
train = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

# ========== Step 2: 資料探索 ==========
print(f"訓練集: {train.shape}, 測試集: {test.shape}")
print(f"缺失值:\n{train.isnull().sum()}")
print(f"目標分佈:\n{train['target'].value_counts()}")

# ========== Step 3-4: 資料預處理 + 特徵工程 ==========
clf = setup(
    train,
    target='target',

    # 資料預處理
    numeric_imputation='median',
    categorical_imputation='mode',
    remove_outliers=True,
    outliers_method='iforest',
    fix_imbalance=True,
    fix_imbalance_method='SMOTE',

    # 特徵工程
    normalize=True,
    normalize_method='zscore',
    feature_selection=True,
    n_features_to_select=0.3,
    remove_multicollinearity=True,
    polynomial_features=True,
    polynomial_degree=2,

    # 劃分配置
    train_size=0.8,
    fold_strategy='stratifiedkfold',
    fold=5,

    session_id=42
)

# ========== Step 5: 模型選擇 ==========
best = compare_models(sort='AUC')

# ========== Step 6-7: 訓練與調優 ==========
tuned = tune_model(best, optimize='AUC', n_iter=30)

# ========== Step 8-9: 評估與解釋 ==========
evaluate_model(tuned)
interpret_model(tuned)

# ========== Step 10: 整合(可選) ==========
# ensemble = ensemble_model(tuned)

# ========== Step 11: 最終預測 ==========
final = finalize_model(tuned)
predictions = predict_model(final, data=test)

# ========== Step 12: 儲存 ==========
save_model(final, 'best_model')

通用 API 參考 | Common API Reference

詳細內容請參考 utilities.md

資料載入

from pycaret.classification import get_data

# 列出資料集
all_datasets = get_data('index')

# 載入資料集
data = get_data('breast_cancer')

配置管理

from pycaret.classification import get_config, set_config

# 獲取配置
X_train = get_config('X_train')

# 設定配置
set_config('seed', 123)

模型操作

# 比較模型
best = compare_models()

# 建立模型
model = create_model('rf')

# 調優模型
tuned = tune_model(model)

# 整合
ensemble = ensemble_model(model)

# 預測
predictions = predict_model(model, data=new_data)

# 儲存/載入
save_model(model, 'my_model')
loaded = load_model('my_model')

詳細文件索引 | Detailed Documentation Index

模組 包含內容 檔案
引數深度分析 setup引數選擇指南、決策樹、實戰配置 setup_parameters_deep_dive.md
Classification setup 引數、模型列表、評估指標、工作流 classification.md
Regression setup 引數、迴歸模型、評估指標、工作流 regression.md
Time Series 時間序列特有引數、預測、季節性 time_series.md
Clustering 聚類演算法、輪廓係數、分配標籤 clustering.md
Anomaly 異常檢測演算法、視覺化 anomaly.md
NLP 主題模型、文本處理、詞雲 nlp.md
Association Rules 關聯規則、支援度、置信度 association_rules.md
Utilities 通用函式、部署、應用生成 utilities.md

程式碼模板 | Code Templates

分類任務模板

from pycaret.classification import *

data = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

clf = setup(data, target='target', train_size=0.8)
best = compare_models()
tuned = tune_model(best)
ensemble = ensemble_model(tuned)
predictions = predict_model(ensemble, data=test)
save_model(ensemble, 'classifier')

迴歸任務模板

from pycaret.regression import *

data = pd.read_csv('train.csv')
test = pd.read_csv('test.csv')

reg = setup(data, target='price', normalize=True)
best = compare_models()
tuned = tune_model(best, optimize='RMSE')
predictions = predict_model(tuned, data=test)
save_model(tuned, 'regressor')

時間序列模板

from pycaret.time_series import *

data = get_data('airline')
ts = setup(data, fh=12, seasonal_period=12)
best = compare_models()
model = create_model('arima')
predictions = predict_model(model, fh=24)

最佳實踐 | Best Practices

  1. 資料預處理: 使用 normalize=True, remove_outliers=True 等引數
  2. 模型選擇: 用 compare_models(turbo=True) 快速驗證
  3. 超引數調優: 根據時間預算設定 n_iter
  4. 模型整合: 複雜任務使用 ensemble_modelstack_models
  5. 生產部署: 使用 finalize_model() 在全量資料上訓練

🤖 AI 評測

這是一個質量較高的 AutoML 技能,基於成熟的 PyCaret 庫。文件覆蓋全面,從基礎到進階都有涉及,中英雙語友好,工作流示例清晰易懂。優點是功能齊全、案例豐富,缺點是對完全零基礎的使用者有一定難度,且缺少依賴安裝說明,部署時可能需要額外配置環境。

📊 多維度評分

適應性4
規範性4.4
有效性4.5
可靠性4.2
可信度4.7

📁 包含檔案 (13 個)

📄 README.md 8.3 KB
📄 SKILL.md 17.4 KB
📄 _meta.json 131 B
📄 evals/evals.json 9.1 KB
📄 references/anomaly.md 3.3 KB
📄 references/association_rules.md 2.7 KB
📄 references/classification.md 8.7 KB
📄 references/clustering.md 4.2 KB
📄 references/nlp.md 3.7 KB
📄 references/regression.md 5.2 KB
📄 references/setup_parameters_deep_dive.md 12.8 KB
📄 references/time_series.md 5 KB
📄 references/utilities.md 4.6 KB