機械学習の自動化ライブラリ「PyCaret」を使ってみた

データサイエンス
★☆★ データサイエンティストを目指す人向け ★☆★

 

こんにちわ!都内のベンチャー企業でデータ分析しているやじろべえです。
今回はこちらの記事を見かけて何やら楽しそうなライブラリだったので早速使ってみたのでその忘備録になります。

PyCaretとは

機械学習モデル開発に必須なデータの前処理や結果のビジュアライズをたった数行のプログラミングで出来てしまう自動化ライブラリです。
イメージ的にはDataRobotのような感じですね。詳細は公式ホームページを見てみてください。

使ってみた

インストールはこれだけ。
pip install pycaret

今回はタイタニックのデータを使って試してみます。PyCaretはPandasのデータフレームにも対応しているので、Pandasで読み込んでPyCaretに放り込んでみます。

df = pd.read_csv("./train.csv")
print(df.shape)
df.head()

はい、kaggleのタイタニックやったことある方であれば見慣れたテーブルデータが出ました。
機械学習モデルを一から作ろうと思うと通常はここから各特徴量の前処理やったり統計値見てみたりといったことが続くのですが、この工程はPyCaretに任せてみます。
  • データ前処理
タイタニックデータはSurvivedカラムが目的変数でバイナリ値になっている分類問題なので、PyCaretのclassification関数をインポートします。
もちろん回帰問題にも対応していますので、興味ある方はそちらも試してみてください。
データ前処理はsetup関数のたった一行。これまで一生懸命前処理やってきたのがコマンド一発だなんて。。。
ちなみに、どんな前処理をやってくれるかというと下図のように一通り基本的な処理はやってくれるようです。
setup関数の引数にはタイタニックのデータと目的変数がどのカラムかを指定してあげます。また、無視するカラムがある場合はignore_featuresでリストにして渡します。
今回はPassengerIDが特徴量に加えないので、このカラムを無視します。
from pycaret.classification import *
exp1 = setup(df, target = 'Survived', ignore_features = ['PassengerId'])
すると次のような画面が出てきます。各カラムのデータ型が自動的に認識されたようです。
青い枠にカーソルを移して空欄のまま”Enter”を押します。
すると、自動的に前処理をPyCaretがやってくれて、無事に終了するとこんな感じの結果が表示されます。
  • モデル作成と結果
ではいよいよモデル作成して各モデルの結果を見てみます。と言ってもこちらもたった一行ですが。
compare_models()
デフォルトでは10分割の交差検証で精度評価してくれてるようです。しばらくして無事に終わると各モデルにおけるそれぞれの評価指標の結果が自動的に表示されます。
これはめちゃくちゃ楽だ。。。
それぞれの評価指標で一番精度が良いモデルの結果に黄色マークまでつけてくれています。
今回の実験ではAccuracyはCatBoostが一番精度が高く、次にLightGBMのようです。全部で15種類のアルゴリズムがサポートされています。
モデルを指定してチューニングすることも出来ます。
create_model関数にアルゴリズム名を指定して、tune_model関数を呼ぶだけです。
ちなみに、入力するアルゴリズム名は公式ドキュメントに記載されているので、こちらを参照すればOK。
catboost = create_model('catboost')
tuned_catboost = tune_model('catboost')

チューニング前

チューニング後

Accuracyは残念ながらチューニングしても精度向上は出来ませんでした。
コンペでは必須となる技術であるアンサンブルやスタッキングも簡単に出来ます。
まずはアンサンブルです。アンサンブルはblend_models関数を使います。
ridge = create_model('ridge')
lda = create_model('lda')
gbc = create_model('gbc')
xgboost = create_model('xgboost')
lgbm = create_model('lightgbm')

ensemble_clf = blend_models( [ ridge, lda, gbc, xgboost, lgbm] )
また、アルゴリズムの引数指定しなければ全てのアルゴリズムをアンサンブルすることになります。
ensemble_all = blend_models()

 

次にスタッキングです。スタッキングはstack_models関数を使います。
stack_models関数では複数の学習器とメタモデル用の学習器をセットするだけです。
stacker = stack_models(estimator_list = [ridge,lda,xgboost], meta_model = lgbm)

 

  • ビジュアライズ
PyCaretは結果を簡単にビジュアライズ化してくれる機能も備わっています。
以下はタイタニックデータを使った結果の一例です。他にもたくさんあるので公式ページをみて見てください。
AUC:plot_model(model, plot = ‘auc’)
Decision Boundary:plot_model(model, plot = ‘boundary’)

気付いた点

タイタニックデータよりももう少しデータサイズが大きいこちらのデータセットでも試してみましたが、compare_models()でSVDエラーが発生してしまいました。
LinAlgError: SVD did not converge
原因の詳細が何かは調べきれていませんが、少し動作に不安を感じました。
<2020/4/20 追記>
上記について、エラーが発生した原因がわかりました。
TotalChargesカラムにおいて、スペースがある値があり、どうやらそれが悪さをしていたようです。
df['TotalCharges'] = df['TotalCharges'].replace(' ', np.nan)
df['TotalCharges'] = df['TotalCharges'].astype(float)
このような前処理を施してからPyCaretに放り込んだところしっかり走ってくれました。
結果はこちら。
前処理を適当にやってしまった私のせいにも関わらずPyCaretのせいにしようとしてすみませんでした。。。

おわりに

DataRobotやAutoMLといった機械学習の自動化ツールがまた便利なものが一つ増えました。
PyCaretを使って見た感じとしてはコーディングは最小限になるのでかなり使いやすいと感じました。
また、ローカル環境でサクッと自動化環境が作れるのも良い点だと思います。
一方でまだ動作に若干不安なところがあるので(私の環境だけ?)、ここら辺がどんどん改善されるとより使いやすくなっていきそうです。
今後の更なる使いやすいさや機能面の強化に期待です!

コメント

タイトルとURLをコピーしました