PyCaret2 から PyCaret3 への移行対応のメモ

モジュールのバージョンアップをしたら、なんかエラーを吐くようになったとのことで、いろいろメモ

予測値ラベルの変更

モデルの評価を行い、最終的に予測値を算出する場合の処理はこんな感じ

prediction = predict_model(final_model, data=forecast1)

ここで、データフレーム"prediction"に予測値が追加されるわけですが、PyCaret2の時は"Label"だったのが、PyCaret3では"prediction_label"に変更されています。つまり予測値を参照する場合には prediction['prediction_label’] にしないといけない。

PyCaret3に完全移行するなら、ラベル名を変更してしまえばいいわけですが、どちらでも動かす可能性がある場合には呼びわけが必要。例えばこんな感じ

    is_pycaret3 = version.parse(pycaret.__version__) >= version.parse('3.0.0')
    if is_pycaret3:
        logging.debug("main: PyCaretのバージョンは3.0.0以上です。")
        fcst_label = "prediction_label"
    else:
        logging.debug("main: PyCaretのバージョンが3.0.0未満です。")
        fcst_label = 'Label'
...
    # 予測値
    fcst = prediction[fcst_label]

setup() で silentが使えない

setup()関数で、silent=Trueが無効になってました。これは各種アルゴリズムを評価した後、最終候補を提示してこれで行くぞとリターンキー入力を要求するところをスキップするためでした。

Regression — pycaret 3.0.4 documentation

Jupyter notebookなどで結果を確認しながら計算を進める場合には特に問題にならないところですが、これを運用でバッチ計算などで使う場合には、途中で入力待ちで止まってしまうわけです。これはよろしくない。

このスイッチがPyCaret3では不要になっているようです。試したところ、単純に silent =True を削除しただけで計算は継続できたので、これはこれで良いのかもしれません。

時系列モジュールが追加されている

時系列データの予測では、Pycaret2ではregressionを使っていたわけですが、PyCaret3では時系列が追加されています。なので、定番の書き方としては

from pycaret.regression import *

として、setup()などのPycaretの関数を書いていったわけですが、Pycaret3からは

from pycaret.time_series import *

が使えるようになっている模様。一応、従来通りの回帰でも計算は出来るようなので、time_series として扱った方が良い面などは、今後調べて試してみます。
categorical_features などはtime_seriesでは無くなっているので、互換性は考慮されているとはいえ、単純にimport文を変えるだけではダメっぽいですな。

pycaret/tutorials/Tutorial – Time Series Forecasting.ipynb at master · pycaret/pycaret (github.com)

perplexityに問い合わせしてみたら、自動検出する、またはpandasのastype('category’)で指定すればOKとか返してきたけど本当??

未分類

Posted by tomi