AI&数理最適化技術を用いたサプライチェーン最適化 - ログ・オプト -
研究者および技術者のプロフェッショナル集団です.
  • Home
  • Products
    • SCMOPT デモ&トライアル
    • サプライチェーン最適化システムSCMOPT
      • サプライ・チェイン基本分析
      • サプライ・チェインリスク分析
      • 需要予測
      • 需要予測+動的発注方策
      • 安全在庫最適化
      • 配送最適化
      • 幹線輸送ネットワーク最適化
      • ロジスティクス・ネットワーク最適化
      • 生産ロット最適化
      • 生産スケジューリング最適化システム
      • 人員配置(シフト)最適化
      • ダイナミックプライシング/収益最適化
    • 最適化ソルバー
      • 制約最適化ソルバーSCOP
      • スケジューリング最適化ソルバーOptSeq
      • 数理最適化ソルバーGurobi Optimizer
      • 配送最適化ソルバーMETRO
      • 集合被覆最適化ソルバーOptCover
  • Solutions
    • 分野別ソリューション
      • サプライ・チェイン
      • マーケティング
      • その他分野
    • コンサルティング
  • News/Blog
  • Resource
  • About us
    • 会社概要
    • プライバシーポリシー
    • 情報セキュリティポリシー
    • SCMOPTセキュリティー
    • 商品・サービス利用規約
  • Contact Us
    • お問い合わせ
    • 無料書籍申し込みフォーム
研究者および技術者のプロフェッショナル集団です
   

CHINESE ENGLISH

  • ENGLISH
  • CHINESE
pycaret 1
2020-12-30

PyCaretによる自動機械学習(AutoML)

AI, Python, SCMOPT, サプライ・チェイン, 実務

PyCaretとは,数行のコードで自動化された機械学習(AutoML)ができるPythonのライブラリです.PyCaretはメジャーな機械学習ライブラリ(scikit-learn, XGBoost, LightGBMなど)をPythonでラッパーしたもので,分類,回帰,クラスタリング,異常検知,自然言語処理,時系列データの予測ができます.機械学習の面倒な前処理やモデルの比較も自動ででき,可視化のバリエーションも豊富で,SHAPなどを使えば説明可能な機械学習も可能で,GPU対応のモデルもたくさんあります.

公式ページはこちら.

PyCaretの説明動画(日本語)

 

判定問題

まずは,毒キノコの判定をしてみました.

インストールはpipインストールで簡単にできますので省略します.

mashroom = pd.read_csv("http://logopt.com/data/mashroom.csv")
mashroom.head() 

このデータは,すべてのデータがカテゴリカルですので,scikit-learnとかですと前処理が必要ですが,PyCaretはsetupするだけで膨大な量の前処理を自動的にしてくれます.

from pycaret.classification import *
clf = setup(data = mashroom, target = 'target', session_id=123)
Description	Value
0	session_id	123
1	Target	target
2	Target Type	Binary
3	Label Encoded	edible: 0, poisonous: 1
4	Original Data	(8123, 4)
5	Missing Values	False
6	Numeric Features	0
7	Categorical Features	3
8	Ordinal Features	False
9	High Cardinality Features	False
10	High Cardinality Method	None
11	Transformed Train Set	(5686, 20)
12	Transformed Test Set	(2437, 20)
13	Shuffle Train-Test	True
14	Stratify Train-Test	False
15	Fold Generator	StratifiedKFold
16	Fold Number	10
17	CPU Jobs	-1
18	Use GPU	False
19	Log Experiment	False
20	Experiment Name	clf-default-name
21	USI	e908
22	Imputation Type	simple
23	Iterative Imputation Iteration	None
24	Numeric Imputer	mean
25	Iterative Imputation Numeric Model	None
26	Categorical Imputer	constant
27	Iterative Imputation Categorical Model	None
28	Unknown Categoricals Handling	least_frequent
29	Normalize	False
30	Normalize Method	None
31	Transformation	False
32	Transformation Method	None
33	PCA	False
34	PCA Method	None
35	PCA Components	None
36	Ignore Low Variance	False
37	Combine Rare Levels	False
38	Rare Level Threshold	None
39	Numeric Binning	False
40	Remove Outliers	False
41	Outliers Threshold	None
42	Remove Multicollinearity	False
43	Multicollinearity Threshold	None
44	Clustering	False
45	Clustering Iteration	None
46	Polynomial Features	False
47	Polynomial Degree	None
48	Trignometry Features	False
49	Polynomial Threshold	None
50	Group Features	False
51	Feature Selection	False
52	Features Selection Threshold	None
53	Feature Interaction	False
54	Feature Ratio	False
55	Interaction Threshold	None
56	Fix Imbalance	False
57	Fix Imbalance Method	SMOTE

モデルの比較は,下記の1行でできます.

best_model = compare_models()

色々な方法から最良の方法を探索してくれます.


Model	Accuracy	AUC	Recall	Prec.	F1	Kappa	MCC	TT (Sec)
gbc	Gradient Boosting Classifier	0.6993	0.8015	0.7196	0.6777	0.6977	0.3991	0.4002	0.0310
lightgbm	Light Gradient Boosting Machine	0.6973	0.8062	0.6515	0.7013	0.6744	0.3925	0.3943	0.0160
catboost	CatBoost Classifier	0.6954	0.8054	0.6460	0.7001	0.6711	0.3884	0.3902	7.9400
dt	Decision Tree Classifier	0.6952	0.8050	0.6456	0.7000	0.6708	0.3880	0.3898	0.0070
et	Extra Trees Classifier	0.6952	0.8052	0.6456	0.7000	0.6708	0.3880	0.3898	0.0480
xgboost	Extreme Gradient Boosting	0.6952	0.8057	0.6460	0.6998	0.6710	0.3881	0.3898	0.0910
rf	Random Forest Classifier	0.6943	0.8050	0.6507	0.6967	0.6723	0.3866	0.3879	0.0560
knn	K Neighbors Classifier	0.6774	0.7534	0.6803	0.6699	0.6676	0.3547	0.3610	0.1320
lr	Logistic Regression	0.6627	0.7183	0.6657	0.6461	0.6557	0.3252	0.3255	0.1190
ridge	Ridge Classifier	0.6623	0.0000	0.6650	0.6459	0.6552	0.3245	0.3247	0.0050
lda	Linear Discriminant Analysis	0.6623	0.7155	0.6650	0.6459	0.6552	0.3245	0.3247	0.0070
ada	Ada Boost Classifier	0.6590	0.7140	0.6522	0.6453	0.6485	0.3174	0.3176	0.0220
svm	SVM - Linear Kernel	0.6490	0.0000	0.5614	0.6770	0.5946	0.2930	0.3084	0.0070
nb	Naive Bayes	0.5405	0.7039	0.9880	0.5123	0.6747	0.1079	0.2179	0.0060
qda	Quadratic Discriminant Analysis	0.4824	0.0000	1.0000	0.4824	0.6508	0.0000	0.0000	0.0060

今回はGradient Boosting Classifierが最良で,正解率は0.6993と出てきました.この問題は難しいのでまずまずの答えだと思います.ちなみに,最適な深さ3の決定木で解釈可能な木(弊社で開発した解釈可能なAIの手法)を作ると正解率は0.70257で,これよりちょっと良くなるようです.

時系列データの予測

バージョン2.2から時系列データも扱えるようになりましたので試してみました.以下のようにfold_strategyで時系列を指定し,shuffleをFalseに設定します.また,どこから検証データにするかはtrain_sizeで指定します.

from pycaret.regression import *   #回帰関連の関数のインポート
reg = setup(df, target = 'demand', session_id=123, 
data_split_shuffle=False, fold_strategy= 'timeseries', 
fold=2, train_size=ratio)

単純な時系列データではまずまずの結果がでました.日付をfast.aiを用いてカテゴリーデータに展開して,深層学習と比較したところ,顧客・製品を切り出した(プロモーションデータだけの)時系列データの場合,深層学習よりも良い結果を出す場合もあるようでした.一例しか試していませんが,深層学習でMSE(自乗平均誤差)が8程度のところ,最良の手法は3程度まで落ちました.

深層学習は,顧客や製品のデータも埋め込みを使って利用できます.同じデータで試すと,深層学習のMSEは5程度,最良の手法(Gradient Boosting Regressor)は360と全然ダメでした.埋め込みではなく,週や曜日や月のデータを整数データでやっているのが原因だと思われます.一般に,データ量が増えると深層学習系がよくなり,データ量が少ないと機械学習系が(気軽に使えるという点もあわせて)よいかと思います.

PyCaretで埋め込みを使う方法は不明ですが,曜日や月をカテゴリー変数にするだけで(時間はかかるが)改善すると考えられます.


弊社で提供している需要予測システムBD-Forecast詳細

BD-Forecast無料トライアル

    

     

シフト最適化(ケーススタディ7) 巡回セールスマン問題の最先端

Related Posts

News, Python, その他, 実務, 最適化

「書籍」Pythonによる実務で役立つ最適化問題100+

News, Python, その他

「書籍」Python言語によるプログラミングイントロダクション 第3版

AI, SCMOPT, サプライ・チェイン, 実務, 最適化

サプライチェーンリスク解析の最先端

カテゴリー

  • AI
  • News
  • Python
  • SCMOPT
  • サプライ・チェイン
  • その他
  • 可視化
  • 実務
  • 最適化
AI&数理最適化技術を用いたサプライチェーン最適化 - ログ・オプト -
Copyright © 2019 Log Opt Co., Ltd.