PyCaret 2.2 : チュートリアル : 分類 – 二値分類 (初級) (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 12/15/2020 (2.2.2)
* 本ページは、PyCaret 2.2 ドキュメントの以下のページを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
- Windows PC のブラウザからご参加が可能です。スマートデバイスもご利用可能です。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション |
E-Mail:sales-info@classcat.com ; WebSite: https://www.classcat.com/ |
Facebook: https://www.facebook.com/ClassCatJP/ |
チュートリアル : 分類 – 二値分類 (初級)
1.0 チュートリアルの目的
このチュートリアルは貴方が PyCaret の経験は初めてで pycaret.classification モジュールを使用して二値分類から始めることに関心があることを仮定しています。
このチュートリアルで以下を学習します :
- データを得る : PyCaret レポジトリからどのようにデータをインポートするか
- 環境をセットアップする : PyCaret でどのように実験をセットアップして分類モデルの構築を始めるか。
- モデルを作成する : モデルをどのように作成するか、階層化された交差検証を遂行するか、そして分類メトリクスを評価するか
- モデルを調整する : 分類モデルのハイパーパラメータをどのように調整するか
- モデルをプロットする : 様々なプロットを使用してモデル性能をどのように分析するか
- モデルを完成させる (= finalize) : 実験の最後に最善のモデルをどのように完成させるか
- モデルの予測 : 新しい / 未知のデータ上で予測をどのように行なうか
- モデルをセーブ / ロードする : 将来的な利用のためにモデルをどのようにセーブ / ロードするか
2.0 二値分類とは何か?
二値分類は教師あり機械学習テクニックで、そこでの目標は、合格/不合格, 正/負, デフォルト/非-デフォルト等のような離散で順序付けられていないカテゴリ型のクラスラベルを予測することです。分類のための 2, 3 の現実世界のユースケースは下でリストされます :
- 患者がある疾病を持っているか否かを決定する医療テスト – 分類プロパティは疾病の存在です。
- 工場での「合格か不合格」テスト法または品質コントロール、i.e. 仕様が満たされたか否かを決定する – 通り/止まり (go/no-go) 分類。
- 情報検索、つまり検索の結果セットにページか記事があるはずか否かを決定する – 分類プロパティは記事の関連性、またはユーザへの有用性。
3.0 PyCaret の分類モジュールの概要
PyCaret の分類モジュール (pycaret.classification) は教師あり機械学習モジュールで、これは様々なテクニックとアルゴリズムに基づいて要素を二値グループに分類するために利用されます。分類問題の幾つかの一般的なユースケースはカスタマー・デフォルト (yes or no)、カスタマー churn (カスタマーが離れるか留まるか)、病気が見つかるか (ポジティブ or ネガティブ) の予測を含みます。
PyCaret 分類モジュールは二値や多クラス分類問題のために利用できます。それはモデルの性能を分析するために 18 アルゴリズムと 14 プロット以上を持ちます。ハイパパラメータ調整、アンサンブルや stacking のような上級テクニックについても、PyCaret 分類モジュールはそれら総てを持ちます。
4.0 チュートリアルのためのデータセット
このチュートリアルのために UCI からの クレジットカード・クライアントのデフォルト データセットと呼ばれるデータセットを利用します。このデータセットは 2005年 4月から 2005年 9月までの台湾のクレジットカード・クライアントのデフォルト支払い、人口統計学因子、クレジットデータ、支払い履歴、そして請求書状態の情報を含みます。24,000 サンプルと 25 特徴があります。各カラムの短い説明は以下のようなものです :
- ID: 各クライアントの ID
- LIMIT_BAL: NT ドルで与えられた与信枠の総量 (個人と家族/補完する人 (= supplementary) の信用を含む)
- SEX: 性別 (1=male, 2=female)
- EDUCATION: (1=大学院, 2=大学, 3=高校, 4=その他, 5=不明, 6=不明)
- MARRIAGE: 結婚歴 (1=既婚, 2=独身, 3=その他)
- AGE: 年齢
- PAY_0 to PAY_6: n ヶ月前の返済状態 (PAY_0 = 先月 … PAY_6 = 6 ヶ月前) (Labels: -1=正しく支払う, 1=1ヶ月間の返済遅延, 2=2ヶ月間の返済遅延, … 8=8 ヶ月間の返済遅延, 9=9 ヶ月以上の返済遅延)
- BILL_AMT1 to BILL_AMT6: n ヶ月前の請求書明細の総量 (BILL_AMT1 = 先月 .. BILL_AMT6 = 6 ヶ月前)
- PAY_AMT1 to PAY_AMT6: n ヶ月前の支払いの総量 ( BILL_AMT1 = 先月 .. BILL_AMT6 = 6 ヶ月前)
- default: デフォルト支払い (= payment) (1=yes, 0=no) ターゲット・カラム
データセット謝辞:
- Lichman, M. (2013). UCI Machine Learning Repository. Irvine, CA: University of California, School of Information and Computer Science.
元のデータセットとデータ辞書は ここ で見つかります。
5.0 データを得る
データは ここで見つかる 元のソースからダウンロードして pandas (Learn How) を使用してそれをロードするか、get_data() 関数を使用してデータをロードするために PyCaret のデータ・レポジトリを利用できます (これはインターネット接続を要求します)。
from pycaret.datasets import get_data from pycaret.datasets import get_data dataset = get_data('credit')
#check the shape of data dataset.shape
(24000, 24)
未見データ上で predict_model() 関数を実演するため、予測に使用されるために 1200 レコードのサンプルが元データセットから取り置かれます。この特定の分割は実生活のシナリオをシミュレートするために遂行されますので、これは訓練/テスト分割と混同されるべきではありません。これについて考えるもう一つの方法はこれらの 1200 レコードは機械学習実験が遂行されたときには利用可能ではないことです。
data = dataset.sample(frac=0.95, random_state=786) data_unseen = dataset.drop(data.index) data.reset_index(inplace=True, drop=True) data_unseen.reset_index(inplace=True, drop=True) print('Data for Modeling: ' + str(data.shape)) print('Unseen Data For Predictions: ' + str(data_unseen.shape))
Data for Modeling: (22800, 24) Unseen Data For Predictions: (1200, 24)
6.0 PyCaret で環境をセットアップする
setup() 関数は pycaret の環境を初期化してモデリングと配備のためのデータを準備するために transformation パイプラインを作成します。setup() は pycaret で任意の他の関数を実行する前に呼び出されなければなりません。それは 2 つの強制パラメータを取ります : pandas データフレームとターゲット・カラムの名前です。総ての他のパラメータはオプションで前処理パイプラインをカスタマイズするために使用されます (それらを後のチュートリアルで見ます)。
setup() が実行されるとき、PyCaret の推論アルゴリズムは特定のプロパティに基づいて総ての特徴のためにデータ型を自動的に推論します。データ型は正しく推論されるべきですが常に当てはまるとは限りません。これを説明するため、setup() が実行された後 PyCaret は特徴とそれらの推論されたデータ型を含むテーブルを表示します。データ型の総てが正しく識別される場合、続けるためにエンターを押すか、実験を終了するために quit がタイプできます。データ型が正しいことを確実にすることは PyCaret で基本的に重要なものです、何故ならばそれは 2, 3 の前処理タスクを自動的に遂行するからです、これはどのような機械学習実験に対しても絶対に必要なものです。これらのタスクは各データ型について様々に遂行されて、これは正しく configure されることがそれらのために非常に重要であることを意味します。
後のチュートリアルで、PyCaret の推論データ型を setup() の numeric_features と categorical_features パラメータを使用してどのように上書きするかを学びます。
from pycaret.classification import *
exp_clf101 = setup(data = data, target = 'default', session_id=123)
ひとたびセットアップが成功的に実行されればそれは情報の幾つかの重要なピースを含む情報グリッドをプリントします。情報の殆どは setup() が実行されるときに構築される前処理パイプラインに関係します。これらの特徴の大部分はこのチュートリアルの目的の範囲外ですがこの段階で注意すべき幾つかの重要なことは以下を含みます :
- session_id : 後の再現性のために総ての関数のシードとして分配される擬似乱数。session_id が渡されない場合、総ての関数に分配される乱数が自動的に生成されます。この実験では、後の再現性のために session_id は 123 として設定されます。
- Target Type : Binary (二値) or Multiclass (多クラス)。 Target type は自動的に検知されて表示されます。二値あるいは多クラス問題のために実験がどのように遂行されるかで違いはありません。総ての機能は同一です。
- Label Encoded : Target 変数が 1 or 0 の代わりに、type 文字列 (i.e. ‘Yes’ or ‘No’) であるとき、それは自動的にラベルを 1 と 0 にエンコードして参照のためにマッピング (0 : No, 1 : Yes) を表示します。この実験ではターゲット変数が型 numeric なのでラベルエンコーディングは必要とされません。
- Original Data : データセットの元の shape を表示します。この実験では (22800, 24) は 22,800 サンプルとターゲットカラムを含む 24 特徴を意味しています。
- Missing Values : 元のデータに欠損値があるときこれは True として示されます。この実験についてはデータセットに欠損値はありません。
- Numeric Features : numeric として推論される特徴の数。このデータセットでは 24 内から 14 が numeric として推論されます。
- Categorical Features : categorical として推論される特徴の数。このデータセットでは 24 内から 9 が categorical として推論されます。
- Transformed Train Set : 変換された訓練セットの shape を表示します。(22800, 24) の元の shape は変換された訓練セットのための (15959, 91) に変換され、そして特徴の数は categorical エンコーディングのために 24 から 91 に増加したことに注意してください。
- Transformed Test Set : 変換されたテスト/hold-out セットの shape を表示します。テスト/hold-out セットに 6841 サンプルがあります。この分割は 70/30 のデフォルト値に基づいていて、これはセットアップの train_size パラメータを使用して変更可能です。
欠損値補完 (= imputation) (このケースでは訓練データに欠損値はありませんが、依然として未見データについては imputer が必要です)、categorical エンコーディング等のような、モデリングを遂行するために必須の 2, 3 のタスクが自動的に処理されることに気付いてください。setup() の殆どのパラメータはオプションで前処理パイプラインをカスタマイズするために使用されます。これらのパラメータはこのチュートリアルのためには範囲外ですが、中間あるいは専門家レベルに進むときそれらを遥かに詳細にカバーします。
7.0 総てのモデルを比較する
セットアップがひとたび完了すればパフォーマンスを評価するために総てのモデルを比較することはモデリングのために推奨される開始点です (どのような種類のモデルを貴方が必要とするかを正確に知らない限りは、それはしばしば当てはまらないでしょう)。この関数はモデルライブラリの総てのモデルを訓練して metric 評価のための階層化された交差検証を使用してそれらにスコアをつけます。出力は、モデルライブラリの利用可能な総てのモデルの folds (10 by default) に渡る平均 Accuracy, Recall, Precision, F1 と Kappa を示します。
compare_models()
コードの 2 つの単純な単語 (行でさえありません) は交差検証を使用して 15 モデルに渡り訓練して評価します。上でプリントされるスコアグリッドは比較目的だけのために最も高い性能のメトリックをハイライトします。デフォルトではグリッドは ‘Accuracy’ (最高から最低へ) を使用してソートされます、これは sort パラメータを渡すことにより変更可能です。例えば compare_models(sort = ‘Recall’) は Accuracy の代わりに Recall によりグリッドをソートします。fold パラメータを 10 のデフォルト値から異なる値に変更することを望む場合には fold パラメータを利用できます。例えば compare_models(fold = 5) は総てのモデルを 5 fold 交差検証上で比較します。fold の数を減じれば訓練時間を改良します。デフォルトでは、compare_models はデフォルトのソート順序に基づいて最善の性能のモデルを返しますが、n_select パラメータを使用して top N モデルのリストを返すために利用できます。
print(best_model)
RidgeClassifier(alpha=1.0, class_weight=None, copy_X=True, fit_intercept=True, max_iter=None, normalize=False, random_state=123, solver='auto', tol=0.001)
8.0 モデルを作成する
create_model は PyCaret の最も極め細かい (= granular) 関数で殆どの PyCaret 機能の背後でしばしば基礎となります。名前が示すようにこの関数は fold パラメータで設定できる交差検証を使用してモデルを訓練して評価します。出力は fold による Accuracy, AUC, Recall, Precision, F1, Kappa と MCC を示すスコアグリッドをプリントします。
このチュートリアルの残りのパートについては、候補モデルとして下のモデルで作業します。この選択は例示目的のためのみでそれらがこのタイプのデータに対してトップの性能であるとか理想的であることを必ずしも意味しません。
- 決定木分類器 (‘dt’)
- K 近傍法分類器 (‘knn’)
- ランダムフォレスト分類器 (‘rf’)
PyCaret のモデルライブラリには利用可能な 18 の分類器があります。総ての分類器のリストを見るには docstring を確認するかライブラリを見るために models 関数を使用します。
models()
8.1 決定木分類器
dt = create_model('dt')
print(dt)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini', max_depth=None, max_features=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, min_samples_leaf=1, min_samples_split=2, min_weight_fraction_leaf=0.0, presort='deprecated', random_state=123, splitter='best')
K 近傍法分類器
knn = create_model('knn')
8.3 ランダムフォレスト分類器
rf = create_model('rf')
総てのモデルの平均スコアは compare_models() でプリントされたスコアに一致することに注意してください。これは compare_models() スコアグリッドでプリントされたメトリクスは総ての CV fold に渡る平均スコアであるためです。compare_models() と同様に、fold パラメータを 10 のデフォルト値から異なる値に変更することを望む場合、fold パラメータを使用できます。例えば: create_model(‘dt’, fold = 5) は 5 fold stratified CV を使用して決定木分類器を作成できます。
9.0 モデルを調整する
モデルが create_model() 関数を使用して作成されるときそれはモデルを訓練するためにデフォルトのハイパーパラメータを使用します。ハイパーパラメータを調整するためには、tune_model() 関数が利用されます。この関数は事前定義された探索空間上でランダム・グリッドサーチを使用してモデルのハイパーパラメータを自動的に調整します。出力はスコアグリッドをプリントし、これは最善なモデルのための fold による Accuracy, AUC, Recall, Precision, F1, Kappa と MCC を示します。カスタム・サーチグリッドを使用するために、tune_model 関数で custom_grid パラメータを渡すことができます (下の 9.2 KNN tuning 参照)。
9.1 決定木分類器
tuned_dt = tune_model(dt)
#tuned model object is stored in the variable 'tuned_dt'. print(tuned_dt)
DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='entropy', max_depth=6, max_features=1.0, max_leaf_nodes=None, min_impurity_decrease=0.002, min_impurity_split=None, min_samples_leaf=5, min_samples_split=5, min_weight_fraction_leaf=0.0, presort='deprecated', random_state=123, splitter='best')
9.2 K 近傍法分類器
import numpy as np tuned_knn = tune_model(knn, custom_grid = {'n_neighbors' : np.arange(0,50,1)})
print(tuned_knn)
KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski', metric_params=None, n_jobs=-1, n_neighbors=42, p=2, weights='uniform')
9.3 ランダム・フォレスト分類器
tuned_rf = tune_model(rf)
デフォルトでは、tune_model は Accuracy を最適化しますがこれは optimize パラメータを使用して変更できます。例えば: tune_model(dt, optimize = ‘AUC’) は決定木分類器のハイパーパラメータを探索します、これは Accuracy の代わりに最高の AUC という結果になります。このサンプルの目的のため、単純化の目的のためだけにデフォルトのメトリック Accracy を使用しました。一般に、(私達が作業しているクレジット・データセットのような) データセットが不均衡であるとき検討するために Accracy は良いメトリックではありません。分類器を評価するために妥当なメトリックを選択する背後の方法論はこのチュートリアルの範囲を越えますが、それについて更に学習したい場合には、妥当な評価メトリックをどのように選択するかについての記事を読むために ここをクリック できます。
プロダクションのための最善なモデルを finalize するときメトリクスだけが考慮すべき基準ではありません。考慮すべき他の因子は訓練時間、kfolds の標準偏差 etc. を含みます。チュートリアルのシリーズを通して進むにつれ、中間と専門家レベルでこれらの因子を詳細に議論します。当面は、このチュートリアルの残りのための最善なモデルとして、調整されたランダムフォレスト分類器 tuned_rf を考えて進みます。
10.0 モデルをプロットする
モデルを finalize する前に、 AUC, confusion_matrix (混同行列), 決定境界等のような異なる様相に渡りパフォーマンスを分析するために plot_model() 関数が利用できます。この関数は訓練されたモデルオブジェクトを取りテスト / hold-out セットに基づいてプロットを返します。
利用可能な 15 の異なるプロットがあります、利用可能なプロットのリストのためには plot_model() docstring を見てください。
10.1 AUC プロット
plot_model(tuned_rf, plot = 'auc')
10.2 Precision-Recall カーブ
plot_model(tuned_rf, plot = 'pr')
10.3 Feature Importance プロット
plot_model(tuned_rf, plot='feature')
10.4 混同行列
plot_model(tuned_rf, plot = 'confusion_matrix')
モデルのパフォーマンスを分析するもう一つの方法は evaluate_model() 関数を使用することです、これは与えられたモデルのために利用可能なプロットの総てのためのユーザインターフェイスを表示します。それは内部的には plot_model() 関数を使用しています。
evaluate_model(tuned_rf)
interactive(children=(ToggleButtons(description='Plot Type:', icons=('',), options=(('Hyperparameters', 'param…
11.0 テスト / hold-out サンプル上で予測する
モデルを finalize する前に、テスト/hold-out セットを予測して評価メトリクスをレビューすることにより一つの最終確認を遂行することが賢明です。上のセクション 6 の情報グリッドを見れば、データの 30% (6,841 サンプル) がテスト/hold-out サンプルとして分割されたことを見るでしょう。上で見た評価メトリクスの総ては訓練セット (70%) だけに基づいて交差検証された結果です。今は、tuned_rf 変数にストアされた最終的な訓練モデルを使用して hold-out サンプルに対して予測してそれらが CV 結果と実質的に異なるかを見るためにメトリクスを評価します。
predict_model(tuned_rf);
テスト/hold-out セット上の精度は tuned_rf CV 結果 (上のセクション 9.3) 上で達成された 0.8203 に比較して 0.8116 です。これは本質的な差異ではありません。もしテスト/hold-out と CV 結果の間で大きな変動があれば、これは通常は over-fitting を示しますが幾つかの他の要因に依る可能性もあり更なる調査を必要とするでしょう。このケースでは、モデルを finalize して未見データ (最初に分離された 5% で PyCaret に決して公開していません) を予測することに進みます。
(TIP : create_model() を使用するとき CV 結果の標準偏差を見ることは常に良いです。)
配備のためにモデルを finalize する
モデル finalization は実験の最後のステップです。PyCaret の通常の機械学習ワークフローは setup() で始まり、続いて compare_models() を使用して総てのモデルを比較してそしてハイパーパラメータ調整、アンサンブリング、スタッキング等のような幾つかのモデリングテクニックを遂行するために 2, 3 の候補モデルをショートリストします (関心のあるメトリックに基づいて)。このワークフローは新しい未見のデータ上で予測する点で使用するに最善のモデルに最終的に導きます。finalize_model() 関数はモデルをテスト/hold-out サンプル (この場合 30%) を含む完全なデータセットに fit します。この関数の目的はそれがプロダクションで配備される前に完全なデータセット上でモデルを訓練することです。
final_rf = finalize_model(tuned_rf)
#Final Random Forest model parameters for deployment print(final_rf)
RandomForestClassifier(bootstrap=False, ccp_alpha=0.0, class_weight={}, criterion='entropy', max_depth=5, max_features=1.0, max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0002, min_impurity_split=None, min_samples_leaf=5, min_samples_split=10, min_weight_fraction_leaf=0.0, n_estimators=150, n_jobs=-1, oob_score=False, random_state=123, verbose=0, warm_start=False)
Caution: One final word of caution. モデルが finalize_model() を使用してひとたび finalize されれば、テスト/hold-out セットを含むデータセット全体が訓練のために使用されます。そのようなものとして、もし finalize_model が使用された後にモデルが hold-out セット上で予測のために使用されれば、プリントされる情報グリッドは誤解されやすいです、何故ならばモデリングのために使用された同じデータ上で予測しようとしているからです。この点だけを実演するため、情報グリッドを上のセクション 11 のものと比較するため predict_model() のもとに final_rf を使用します。
predict_model(final_rf);
final_rf の AUC が 0.7538 から 0.8189 に増加したことに気付いてください、モデルは同じですが。これは final_rf 変数がテスト/hold-out セットを含む完全なデータセット上で訓練されたからです。
13.0 未見のデータ上で予測する
predict_model() 関数もまた未見のデータセット上で予測するために使用されます。上のセクション 11 との唯一の違いは今回は data_unseen パラメータを渡すことです。data_unseen はチュートリアルの最初で作成される変数で元のデータセットの 5% (1200 サンプル) を含みます、これは PyCaret に決して公開されていません。(説明のためにはセクション 5 参照)
unseen_predictions = predict_model(final_rf, data=data_unseen) unseen_predictions.head()
Label と Score カラムが data_unseen セットに追加されます。Label は予測で score は予測の確率です。予測された結果は元のデータセットに連結される一方で総ての変換はバックグラウンドで自動的に遂行されることに注意してください。この上でメトリクスを確認することもできます、何故ならば利用可能な実際のターゲットカラム default を持つからです。それを行なうために pycaret.utils モジュールを使用します。下のサンプルを見てください :
from pycaret.utils import check_metric check_metric(unseen_predictions['default'], unseen_predictions['Label'], metric = 'Accuracy')
0.8167
14.0 モデルをセーブする
今では final_rf 変数にストアされた tuned_rf モデルを finalize することにより実験を終了しました。data_unseen を予測するために final_rf にストアされたモデルも使用しました。これは私達に実験の終わりをもたらしますが、依然として一つの質問が問われるべきです : 予測するためのより多くの新しいデータを持つとき何が起きるでしょう?実験全体を再度通り抜けなければなりませんか?答えはノーです、PyCaret の組込み関数 save_model() は後で使用するために変換パイプライン全体と一緒にモデルをセーブすることを可能にします。
save_model(final_rf,'Final RF Model 11Nov2020')
Transformation Pipeline and Model Succesfully Saved (Pipeline(memory=None, steps=[('dtypes', DataTypes_Auto_infer(categorical_features=[], display_types=True, features_todrop=[], id_columns=[], ml_usecase='classification', numerical_features=[], target='default', time_features=[])), ('imputer', Simple_Imputer(categorical_strategy='not_available', fill_value_categorical=None, fill_value_numerical=None, numeric_stra... RandomForestClassifier(bootstrap=False, ccp_alpha=0.0, class_weight={}, criterion='entropy', max_depth=5, max_features=1.0, max_leaf_nodes=None, max_samples=None, min_impurity_decrease=0.0002, min_impurity_split=None, min_samples_leaf=5, min_samples_split=10, min_weight_fraction_leaf=0.0, n_estimators=150, n_jobs=-1, oob_score=False, random_state=123, verbose=0, warm_start=False)]], verbose=False), 'Final RF Model 11Nov2020.pkl')
(TIP : It’s always good to use date in the filename when saving models, it’s good for version control.)
15.0 セーブされたモデルをロードします
同じまたは代替の環境で将来的にセーブされたモデルをロードするためには、PyCaret の load_model() 関数を使用してから予測のために新しい未見のデータ上でセーブされたモデルを容易に適用します。
saved_final_rf = load_model('Final RF Model 11Nov2020')
Transformation Pipeline and Model Successfully Loaded
ひとたびモデルが環境にロードされれば、同じ predict_model() 関数を使用して任意の新しいデータ上で予測するためにそれを利用できます。上のセクション 13 で使用した同じ data_unseen を予測するために下でロードされたモデルを適用しました。
new_prediction = predict_model(saved_final_rf, data=data_unseen)
new_prediction.head()
unseen_predictions と new_prediction の結果が同一であることに注意してください。
from pycaret.utils import check_metric check_metric(new_prediction['default'], new_prediction['Label'], metric = 'Accuracy')
0.8167
以上