18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PyCaret完全入門 ― Pythonでローコード機械学習を極める

Posted at

はじめに

PyCaret は、ローコードで機械学習の一連の流れ(前処理・学習・評価・チューニング・保存・簡易デプロイ)を自動化する Python ライブラリです。複雑な前処理やアルゴリズムごとの細かな実装をすべて自分で書かなくても、数行のコードでモデル比較やチューニングまで行えるのが特徴です。初心者にとっては「まず動く機械学習パイプライン」を素早く作る入口となり、上級者にとってはアイデア検証やプロトタイピングを高速化するための強力なツールになります。


第1章 PyCaretとは ― ローコード機械学習の全体像

PyCaret は「オープンソースのローコード機械学習ライブラリ」で、機械学習実験のサイクル(仮説 → データ前処理 → モデル構築 → 評価 → チューニング → デプロイ準備)を一気に短縮することを目的としています。モジュールは用途ごとに分かれており、分類タスク用の pycaret.classification、回帰タスク用の pycaret.regression、クラスタリング用の pycaret.clustering、異常検知用の pycaret.anomaly、テキスト用の pycaret.nlp、時系列予測用の pycaret.time_series などがあります。どのモジュールも共通の API パターンを持っており、setup → compare_models → create_model → tune_model → predict_model → save_model という流れがほぼ共通の「型」になっています。

# インストール(フル版の例)
# pip install "pycaret[full]"

from pycaret.classification import *
from pycaret.datasets import get_data

# サンプルデータ読み込み
data = get_data("diabetes")
print(data.head())

第2章 モジュールとタスクの対応関係

PyCaret のモジュールは「どの種類の機械学習タスクを解くか」に応じて選びます。分類(classification)は、目的変数がカテゴリデータ(例:購入する/しない、0/1 など)であるタスクです。回帰(regression)は、予測対象が数値(売上、価格、温度など)のタスク、クラスタリング(clustering)はラベルのないデータを似たグループに分ける教師なしタスクです。異常検知(anomaly)は通常パターンから逸脱したデータポイントを見つけるタスクで、NLP モジュールは文書群からトピック構造を抽出したりテキストを数値ベクトルに変換したりします。時系列モジュールは時間を軸とした連続データの将来値を予測するための機能を提供します。

# 分類タスク
from pycaret.classification import *

# 回帰タスク
from pycaret.regression import *

# クラスタリング
from pycaret.clustering import *

# 異常検知
from pycaret.anomaly import *

# テキスト関連
from pycaret.nlp import *

# 時系列予測
from pycaret.time_series import *

第3章 setup() ― 前処理と環境初期化の自動化

PyCaret で最初に呼ぶべき中核関数が setup() です。これは「データ前処理と学習環境の初期化」をひとまとめに行うための関数で、欠損値補完、カテゴリ変数のエンコード、標準化・正規化、訓練/テスト分割、特徴量エンジニアリングなどを内部で自動設定します。setup(data, target=...) と書くと、指定したターゲット列を目的変数として認識し、それ以外を特徴量として処理します。対話的環境では、setup() 実行時にデータ型や前処理内容が一覧表で表示されるので、設定が意図どおりかをそこで確認してから次のステップに進むのが安全です。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")

clf_setup = setup(
    data=data,
    target="Class variable",  # 目的変数の列名に合わせて変更
    session_id=42,            # 乱数シード(再現性のため)
    normalize=True,           # 特徴量のスケーリング
    handle_unknown_categorical=True,  # 未知カテゴリへの対応
    silent=True               # 対話プロンプトの自動スキップ
)

第4章 compare_models() ― 自動モデル比較で当たりを探す

compare_models() は、複数の学習アルゴリズムを一括で学習・評価し、指定した評価指標に基づいてランキングを返してくれる関数です。内部ではロジスティック回帰、決定木、ランダムフォレスト、勾配ブースティング、XGBoost、LightGBM など多くの候補が交差検証によって評価されます。これにより、アルゴリズムごとに手作業でコードを書くことなく、「このデータではどのモデルが良さそうか」の目星を短時間で付けることができます。引数 n_select を使えば、上位 N 個のモデルをまとめて受け取って、後で個別にチューニングすることも可能です。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")
setup(data=data, target="Class variable", session_id=42, silent=True)

# ベストモデルを1つ返す
best_model = compare_models()
print(best_model)

# 上位3モデルを取得
top3_models = compare_models(n_select=3)
for m in top3_models:
    print("Selected model:", m)

第5章 create_model() と tune_model() ― 個別モデルの作成とチューニング

特定のアルゴリズムを使いたい場合は create_model() を使います。第1引数には 'rf'(RandomForest)、'xgboost''lightgbm''catboost' など、短いコードでモデル種別を指定します。作成されたモデルはすでに交差検証済みで、評価指標の概要も一緒に返されます。さらに tune_model() を使うとハイパーパラメータの自動探索が行われ、指定した指標(AUC、F1、精度、R2 など)を最大化する設定を探してくれます。これにより、細かいパラメータグリッドを自分で用意しなくても、それなりに良い性能のモデルを素早く得ることができます。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")
setup(data=data, target="Class variable", session_id=42, silent=True)

# ランダムフォレスト
rf = create_model("rf")
print("Base RF model:", rf)

# AUC を最大化するように自動チューニング
tuned_rf = tune_model(rf, optimize="AUC")
print("Tuned RF model:", tuned_rf)

# XGBoost の例
xgb = create_model("xgboost")
tuned_xgb = tune_model(xgb, optimize="F1")

第6章 evaluate_model() と plot_model() ― 評価と可視化

モデルの性能を直感的に理解するために、PyCaret には evaluate_model()plot_model() という可視化系の関数があります。evaluate_model(model) はインタラクティブなダッシュボードを開き、ROC 曲線、精度・再現率の関係、混同行列、学習曲線など、代表的な評価プロットをまとめて確認できるようになっています。plot_model(model, plot="auc") のように、特定の種類のプロットだけを出すこともできます。これらを使うと、数値指標だけでは気づきにくいクラス不均衡や過学習の傾向、特徴量の寄与度などを視覚的に把握しやすくなります。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")
setup(data=data, target="Class variable", session_id=42, silent=True)

best_model = compare_models()

# 対話的評価(Jupyter Notebook や JupyterLab が向いている)
evaluate_model(best_model)

# 個別の図をプロット
plot_model(best_model, plot="auc")
plot_model(best_model, plot="confusion_matrix")
plot_model(best_model, plot="feature")

第7章 predict_model() ― テストセットと未知データへの予測

predict_model() は学習済みモデルを用いてデータに予測を適用するための関数です。data 引数を指定しなかった場合、setup() で自動的に分割されたテストセットに対する予測と評価が行われ、その結果を含む DataFrame が返されます。返される DataFrame には、元の特徴量に加えて、予測ラベル(Label)や予測確率(Score)などが列として追加されます。未知の本番データに対する予測を行う場合には、predict_model(model, data=new_data) のように渡すだけで、学習時と同じ前処理パイプラインが適用されたうえで予測値が得られます。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")
setup(data=data, target="Class variable", session_id=42, silent=True)
best_model = compare_models()

# テストデータに対する予測と評価
test_predictions = predict_model(best_model)
print(test_predictions.head())

# 未知データへの予測
new_data = data.sample(5, random_state=1).drop(columns=["Class variable"])
unseen_predictions = predict_model(best_model, data=new_data)
print(unseen_predictions[["Label", "Score"]])

第8章 save_model()/load_model() と deploy_model() ― モデルの保存とデプロイ

実用では、学習したモデルをファイルとして保存し、別の環境やプロセス、API サーバーなどから再利用することが重要です。PyCaret の save_model() は、前処理やモデル本体を含むパイプラインを 1 つのオブジェクトとしてシリアライズして保存します。load_model() はそのファイルを再読み込みして、同じように predict_model() などで利用できる状態に戻します。さらに、deploy_model() を利用すると、クラウドストレージへのアップロードや、簡易デプロイ用のラッパーを自動生成する機能もあり、MLOps の初期段階をローコードで始めやすくなっています。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")
setup(data=data, target="Class variable", session_id=42, silent=True)
best_model = compare_models()

# モデル保存(自動的に拡張子付きのファイルが作成される)
save_model(best_model, "diabetes_cls_model")

# 別ノートブックや別プロセスで読み込み
loaded_model = load_model("diabetes_cls_model")

new_data = data.sample(3, random_state=0).drop(columns=["Class variable"])
pred = predict_model(loaded_model, data=new_data)
print(pred)

# デプロイ機能の呼び出し例(環境設定によりパラメータは変える)
# deploy_model(loaded_model, model_name="diabetes_cls_model", platform="aws", authentication={"bucket": "my-bucket"})

第9章 分類タスク実践 ― 数行でエンドツーエンド

PyCaret を使うと、分類タスクのエンドツーエンドフロー(前処理 → モデル比較 → チューニング → 評価 → 保存)を十数行で書けます。まずは setup() で環境を初期化し、compare_models() でベースラインとして最も良さそうなモデルを選びます。その後 create_model()tune_model() で特定モデルを強化し、predict_model() で性能を確認してから save_model() で保存する、という流れが定番です。これをひととおり体験することで、PyCaret の API や機械学習の流れそのものに慣れることができます。

from pycaret.classification import *
from pycaret.datasets import get_data

# 1. データ読み込み
data = get_data("diabetes")

# 2. セットアップ
setup(data=data, target="Class variable", session_id=42, silent=True)

# 3. 自動モデル比較
best = compare_models()

# 4. ランダムフォレストを作成・チューニング
rf = create_model("rf")
tuned_rf = tune_model(rf, optimize="AUC")

# 5. テストデータで性能を確認
predict_model(tuned_rf)

# 6. モデルを保存
save_model(tuned_rf, "diabetes_rf_tuned")

第10章 回帰タスク ― 連続値予測のテンプレート

回帰タスクでは、目的変数が連続値(例:住宅価格、月次売上、顧客生涯価値など)になり、pycaret.regression モジュールを使います。基本的な流れは分類とほとんど同じで、setup() でターゲット列を数値列として指定し、compare_models() で複数モデルを RMSE・MAE・R2 といった指標で比較します。そして create_model()tune_model() による個別モデルの強化、predict_model() による残差の確認、plot_model() による誤差分布や残差プロットのチェックを通じて、過学習の有無や予測精度を評価できます。

from pycaret.regression import *
from pycaret.datasets import get_data

# 例として住宅価格データを想定
data = get_data("boston")  # 実際のデータ名は環境に合わせて変更

setup(
    data=data,
    target="medv",          # 予測したい価格列
    session_id=123,
    normalize=True,
    transform_target=True,  # 目的変数の変換で正規性を高める
    silent=True
)

# ベースライン比較
best_reg = compare_models()

# 勾配ブースティング回帰の例
gbr = create_model("gbr")
tuned_gbr = tune_model(gbr, optimize="R2")

# テストデータで性能評価
predict_model(tuned_gbr)

# 保存
save_model(tuned_gbr, "house_price_gbr")

第11章 クラスタリングと異常検知 ― ラベルなしデータへの応用

クラスタリングは、ラベルが付いていないデータを似た性質ごとのグループに分ける手法で、pycaret.clustering モジュールでローコードに扱えます。setup(data=...) した後、create_model("kmeans") などでクラスタリングモデルを作成し、assign_model() で元のデータにクラスタラベルを追加した DataFrame を得ることができます。一方、異常検知は pycaret.anomaly モジュールが担当し、IsolationForest や LOF などを使って異常スコアを計算し、その結果を用いて外れ値や不正なパターンを見つけることができます。

from pycaret.clustering import *
from pycaret.anomaly import *
from pycaret.datasets import get_data

# クラスタリング例
data = get_data("jewellery")
setup(data=data, session_id=42, silent=True)

kmeans = create_model("kmeans")
clustered = assign_model(kmeans)
print(clustered.head())

# 異常検知例
data_anom = get_data("anomaly")
from pycaret.anomaly import *

setup(data=data_anom, session_id=42, silent=True)
if_model = create_model("iforest")
if_result = assign_model(if_model)
print(if_result[["Anomaly", "Anomaly_Score"]].head())

第12章 NLP モジュール ― トピックモデリング入門

テキストデータを扱う場合、pycaret.nlp モジュールを用いると、文書群からトピック構造を抽出するトピックモデリングをローコードで実装できます。トピックモデリングとは、ニュース記事やレビューなど大量の文章を「いくつかの隠れた話題」に分解し、各文書がどのトピックにどの程度属しているかを推定する手法です。setup(data, target="text列名") の後、create_model("lda") で LDA モデルを構築し、assign_model() で各文書の支配的トピックやキーワードを知ることができます。可視化機能を使えば、トピックごとの代表語やトピック分布を直感的に把握することが可能です。

from pycaret.nlp import *
from pycaret.datasets import get_data

# テキストデータセットの例
data = get_data("kiva")  # 実際のデータ名は環境に応じて変更

setup(data=data, target="en", session_id=42, silent=True)

lda_model = create_model("lda", num_topics=5)
topics = assign_model(lda_model)

print(topics[["Dominant_Topic", "Topic_Keywords"]].head())

plot_model(lda_model, plot="topic_distribution")

第13章 時系列モジュール ― 将来予測のワークフロー

時系列予測では、売上やアクセス数のように時間順に並んだデータから将来値を予測します。pycaret.time_series モジュールでは、時間を考慮したクロスバリデーションやバックテストなどの仕組みを含めたうえで、複数のモデルを共通 API で比較できます。基本的な流れは他のモジュールと同様に、セットアップ、モデル作成、チューニング、予測です。時系列特有の評価指標(MAPE など)や予測区間の可視化も提供されるため、ビジネスの需要予測や在庫計画などの用途にすぐ応用できます。

from pycaret.time_series import *
from pycaret.datasets import get_data

data = get_data("airline")

setup(
    data=data,
    target="Passengers",
    session_id=42,
    fh=12,        # 先の 12 期間を予測するなど
    silent=True
)

naive = create_model("naive")
arima = create_model("arima")

tuned_arima = tune_model(arima)

forecast = predict_model(tuned_arima)
print(forecast.tail())

第14章 エコシステムとの連携 ― scikit-learn / XGBoost / MLflow など

PyCaret は、自前でアルゴリズムを実装するのではなく、scikit‑learn、XGBoost、LightGBM、CatBoost など既存の強力なライブラリを共通インターフェースでラップする役割を持っています。そのため、複数ライブラリを跨いだモデル比較やチューニングを、ほぼ同じ書き方で行えるのが大きな利点です。また、log_experiment=True などのオプションを使えば、MLflow に実験結果を自動記録することもでき、指標やハイパーパラメータの管理が楽になります。最終的に finalize_model() で確定したモデルを取り出せば、純粋な scikit‑learn 互換オブジェクトとして他のパイプラインにも組み込めます。

from pycaret.regression import *
from pycaret.datasets import get_data

data = get_data("boston")

setup(
    data=data,
    target="medv",
    session_id=42,
    log_experiment=True,
    experiment_name="boston_reg",
    silent=True
)

xgb = create_model("xgboost")
tuned_xgb = tune_model(xgb)

final_xgb = finalize_model(tuned_xgb)
print(type(final_xgb))

# MLflow の UI で結果を確認することもできる(環境による)
# !mlflow ui

第15章 実務への導入戦略 ― PyCaretをうまく使いこなす

PyCaret は「完全自動の魔法」ではなく、機械学習の基本概念を理解したうえで実験サイクルを高速化するための道具と考えると、非常に強力な味方になります。現場での定番パターンは、まず PyCaret で素早くモデル比較とチューニングを行い、どのアルゴリズムが有望かを把握したあと、必要に応じて scikit‑learn や各ライブラリの低レベル API で細かな設計を詰める、という二段構えです。また、モデル保存や MLflow 連携を使えば、Notebook 上の試行錯誤から本番の MLOps パイプラインへの橋渡しもスムーズになります。まずはサンプルデータで一連の流れを体験し、その後自分の業務データに適用していくと、PyCaret の価値をより実感しやすくなるはずです。

from pycaret.classification import *
from pycaret.datasets import get_data

data = get_data("diabetes")

# 1. PyCaret で高速プロトタイピング
setup(
    data=data,
    target="Class variable",
    session_id=42,
    log_experiment=True,
    experiment_name="diabetes_cls",
    silent=True
)

best = compare_models()
tuned_best = tune_model(best)
final_best = finalize_model(tuned_best)

# 2. モデル保存 → 別のサービスで読み込み
save_model(final_best, "diabetes_cls_final")

必要であれば、この記事をさらに「分類だけ」「回帰だけ」「時系列だけ」といったテーマ別に分割して、Jupyter ノートブック形式の教材用に整えることもできます。

18
20
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
20

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?