Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SapientML_MiracleLinuxMeetup

SapientML
February 28, 2024

 SapientML_MiracleLinuxMeetup

AIモデルを自動生成する自動機械学習技術「SapientML」入門
https://miraclelinux.connpass.com/event/307902/
で発表したスライドです。

SapientML

February 28, 2024
Tweet

Other Decks in Technology

Transcript

  1. AI(機械学習)の基本的な流れ 推論 データ POSデータ 点検データ 学習 モデル テキスト・音声データ 画像データ ①

    ② ③ 人間の意思決定を補助 情報 モデル作成 モデルに新たなデータを入力し、 推論(予測・分類) ⚫ 機械学習における「学習と推論」 ⚫ 学習とは、過去の実績データから法則を見出し、モデルを作成すること ⚫ 推論とは、学習で得たモデルに従い、新たなデータに対して予測・分類を行うこと © 2024 The SapientML Authors
  2. 推論 AutoML(機械学習自動化)とは? データ POSデータ 点検データ 学習 モデル 画像データ ① モデル作成

    モデルに新たなデータを入力し、 推論(予測・分類) ⚫ AutoML(機械学習自動化) ⚫ 通常Data Scientistが行っている機械学習のプロセスを自動化する技術 → 主に(AI)モデルの作成を自動化する技術を指すことが多い © 2024 The SapientML Authors AutoML (機械学習自動化) 一部を 自動化 テキスト・音声データ ②
  3. 機械学習の種類 © 2024 The SapientML Authors 5 ⚫ 未知のデータに対して既知のデータを元に予測する教師あり学習 ⚫

    住宅価格の予測、ホテルの宿泊予約のキャンセル予測など ⚫ 入力したデータからデータの構造を獲得する教師無し学習 ⚫ 似た特徴を持つグループに分割する境界を探す ⚫ 得られる報酬が最大になるよう学習する強化学習 ⚫ 囲碁AI、将棋AIなど x1 x2 agent ¥3,000万 ? 駅: 徒歩15分 広さ: 60m2 ¥2,800万 駅: 徒歩20分 広さ: 63m2 y=0 y=1 駅: 徒歩5分 広さ: 45m2 environment actions rewards observations
  4. AutoMLが扱う機械学習の種類 © 2024 The SapientML Authors 6 ⚫ 未知のデータに対して既知のデータを元に予測する教師あり学習 ⚫

    住宅価格の予測、ホテルの宿泊予約のキャンセル予測など ⚫ 入力したデータからデータの構造を獲得する教師無し学習 ⚫ 似た特徴を持つグループに分割する境界を探す ⚫ 得られる報酬が最大になるよう学習する強化学習 ⚫ 囲碁AI、将棋AIなど x2 agent ¥3,000万 ? 駅: 徒歩15分 広さ: 60m2 ¥2,800万 駅: 徒歩20分 広さ: 63m2 y=0 y=1 駅: 徒歩5分 広さ: 45m2 environment actions rewards observations x1
  5. AutoMLが扱うテーブルデータとは © 2024 The SapientML Authors gender income/year age credit

    credit (prediction) 0 male 500 35 1 - 1 female 600 29 1 - 2 female 350 34 0 - 3 male 400 42 1 - … … … … … N-1 male 400 28 ? 1 N female 400 33 ? 0 説明変数(特徴量) 目的変数(ターゲット) インスタンス (レコード) 目的変数が既知のデータ で学習してMLモデルを作り、 MLモデルで目的変数が未知の データの目的変数を予測する※ ※ 実際のMLモデル開発では、目的変数が既知のデータを 学習データとテストデータに分割し、テストデータでモデルの性能を評価する 7 正解 予測
  6. 機械学習のタスク ⚫ 回帰(Regression) ⚫ 目的変数が連続する数値 ⚫ 需要予測、最適価格予測 ⚫ 例) 中古マンションの一部屋の価格を、周辺情報から推測したい

    8 駅からの距離 駅から徒歩でかかる時間 広さ 築年数 価格 0 500 8 50 20 3000 1 100 2 35 3 4000 2 800 12 55 25 4500 3 1000 15 65 30 5000 … … … … … n-1 1000 20 70 5 ? n 300 5 40 10 ? © 2024 The SapientML Authors
  7. 機械学習のタスク ⚫ 分類(Classification) ⚫ 目的変数が離散値(カテゴリ変数) ⚫ 購買予測、良品・不良品判定、優良顧客推定 ⚫ 例) 顧客の情報から、与信のOKNGを推測したい

    9 gender income/year age credit 0 male 500 35 1 1 female 600 29 1 2 female 350 34 0 3 male 400 42 1 … … … … … n-1 male 400 28 ? n female 400 33 ? © 2024 The SapientML Authors
  8. MLモデルを作成するPythonコード © 2024 The SapientML Authors 10 # LOAD DATA

    train_dataset=pd.read_csv("training.csv", delimiter=",") test_dataset=pd.read_csv("test.csv", delimiter=",") target_col = [‘y’] # PREPROCESSING-1 _STRING_CATG_COLM_HAS_MISSING = ['x1', 'x2', ‘x3’] for _col in _STRING_COLS_WITH_MISSING_VALUES: si = SimpleImputer(missing_values=np.nan, strategy='most_frequent') train_dataset[_col] = si.fit_transform(train_dataset[_col].values.reshape(-1,1))[:,0] test_dataset[_col] = si.transform(test_dataset[_col].astype(train_dataset[_col].dtypes).values.reshape(-1,1))[:,0] # PREPROCESSING-2 _CAT_COLS = ['x4', 'x1', 'x2’, 'x5'] _ohe = OrdinalEncoder(handle_unknown="use_encoded_value", unknown_value=-1) train_dataset[_CAT_COLS] = pd.DataFrame(_ohe.fit_transform(train_dataset[_CAT_COLS]), columns=_CAT_COLS) test_dataset[_CAT_COLS] = pd.DataFrame(_ohe.transform(test_dataset[_CAT_COLS]), columns=_CAT_COLS) feature_train = train_dataset.drop(target_col) target_train = train_dataset[target_col] feature_test = test_dataset.drop(target_col) target_test = test_dataset[target_col] # TRAINIG from catboost import CatBoostClassifier model = CatBoostClassifier() model.fit(feature_train, target_train) y_pred = model.predict(feature_test) # EVALUATION from sklearn import metrics f1 = metrics.f1_score(target_test, y_pred, average='macro') print('RESULT: F1 Score: ' + str(f1)) データの読み込み 学習用データとテスト用データを読み込む。 テストデータがない場合は、学習用データ からテストデータを切り出す。 データの前処理 MLアルゴリズムで学習する前に必要。デー タによって必要な前処理は異なる。 右の例では、欠損値処理 (PREPROCESSING-1)とカテゴリカルデー タのエンコーディング(PREPROESSING-2) を行っている。 学習&テストデータの推測 MLアルゴリズムを学習データで学習し、 MLモデルを作成。作成したモデルでテスト データで予測している。 右の例ではデフォルトのパラメータを使っ ているが、ハイパーパラメータのチューニ ングもここで行う。 推測性能の評価 推測した結果を、適切な指標で評価する。 ここではF1を評価。
  9. MLモデルを作るために最低限やらなきゃいけないこと ⚫ 必要な前処理の選定 ⚫ MLアルゴリズムの選定 ⚫ 作ったMLモデルの評価 © 2024 The

    SapientML Authors 11 データの読み込み 学習用データとテスト用データを読み込む。 テストデータがない場合は、学習用データ からテストデータを切り出す。 データの前処理 MLアルゴリズムで学習する前に必要。デー タによって必要な前処理は異なる。 右の例では、欠損値処理 (PREPROCESSING-1)とカテゴリカルデー タのエンコーディング(PREPROESSING-2) を行っている。 学習&テストデータの推測 MLアルゴリズムを学習データで学習し、 MLモデルを作成。作成したモデルでテスト データで予測している。 右の例ではデフォルトのパラメータを使っ ているが、ハイパーパラメータのチューニ ングもここで行う。 推測性能の評価 推測した結果を、適切な指標で評価する。 ここではF1を評価。
  10. MLモデルを作るために最低限やらなきゃいけないこと ⚫ 必要な前処理の選定 ⚫ MLアルゴリズムの選定 ⚫ 作ったMLモデルの評価 © 2024 The

    SapientML Authors 13 データの読み込み 学習用データとテスト用データを読み込む。 テストデータがない場合は、学習用データ からテストデータを切り出す。 データの前処理 MLアルゴリズムで学習する前に必要。デー タによって必要な前処理は異なる。 右の例では、欠損値処理 (PREPROCESSING-1)とカテゴリカルデー タのエンコーディング(PREPROESSING-2) を行っている。 学習&テストデータの推測 MLアルゴリズムを学習データで学習し、 MLモデルを作成。作成したモデルでテスト データで予測している。 右の例ではデフォルトのパラメータを使っ ているが、ハイパーパラメータのチューニ ングもここで行う。 推測性能の評価 推測した結果を、適切な指標で評価する。 ここではF1を評価。 それ、全部AutoMLでできます
  11. SapientMLの入出力 入力: 表データと予測したい列名 出力: AIモデルとそのソースコード © 2024 The SapientML Authors

    14 例: タイタニック号の乗客の生存可否を予測する AIモデルを構築したい [目的変数] "survived?" (予測対象) [説明変数] 乗客の様々な属性 Execute output program 入力 出力 表データ Exploratory Data Analysis Model Build Data Preprocessing 機械学習のコード
  12. 前処理方法 A B C D MLアルゴリズム a b c d

    SapientMLの特長:スピード © 2023 Fujitsu Limited 15 一般的な探索型AutoML SapientML 様々な前処理・アルゴリズ ムの組合せをすべて試し、 一番性能の良いものを探す 前処理方法 A B C D MLアルゴリズム a b c d データの特徴から、最適な 前処理・アルゴリズムの 目星をつけて、実行する 表データ 表データ 過去のデータとコード から、最適な前処理・ アルゴリズムを学習済 みのAI ・実行速度が速い ・DSの知見を使える
  13. SapientMLの特長:透明性 ソースコード、およびそれが選択された理由を提示 © 2024 The SapientML Authors 16 # PREPROCESSING-3

    # Component: Preprocess:OrdinalEncoder # Efficient Cause: Preprocess:OrdinalEncoder is required in this pipeline since the dataset has ['feature:str_category_presence', 'feature:str_category_small_presence', 'feature:str_category_binary_presence']. The relevant features are: ['sex', 'embarked']. # Purpose: Encode categorical features as an integer array # Form: # Input: list of arrays # Key hyperparameters used: # "handle_unknown: {'error', 'use_encoded_value'}, default='error'" :: When set to ‘error’ an error will be raised in case an unknown categorical feature is present during transform. When set to ‘use_encoded_value’, the encoded value of unknown categories will be set to the value given for the parameter unknown_value. In inverse_transform, an unknown category will be denoted as None. # "unknown_value: int or np.nan, default=None" :: When the parameter handle_unknown is set to ‘use_encoded_value’, this parameter is required and will set the encoded value of unknown categories. It has to be distinct from the values used to encode any of the categories in fit. If set to np.nan, the dtype parameter must be a float dtype. # Alternatives: Although [Preprocess:OneHotEncoder] can also be used for this dataset, Preprocess:OrdinalEncoder is used because it has more feature:str_category_small_presence than feature:str_category_binary_presence. # Order: Preprocess:OrdinalEncoder should be applied from sklearn.preprocessing import OrdinalEncoder CATEGORICAL_COLS = ['embarked', 'sex'] ordinal_encoder = OrdinalEncoder(handle_unknown="use_encoded_value", unknown_value=-1) train_dataset[CATEGORICAL_COLS] = ordinal_encoder.fit_transform(train_dataset[CATEGORICAL_COLS]) test_dataset[CATEGORICAL_COLS] = ordinal_encoder.transform(test_dataset[CATEGORICAL_COLS]) ‘sex’, ‘embarked’は カテゴリ値を含む ↓ OrdinalEncoderを適用
  14. SapientMLの特長:正確さ © 2024 The SapientML Authors 17 # LOAD DATA

    __train_dataset=pd.read_csv("training.csv", delimiter=",") __test_dataset=pd.read_csv("test.csv", delimiter=",") # PREPROCESSING-1 _STRING_CATG_COLM_HAS_MISSING = ['card4', 'card6', 'P_emaildomain’,…] for _col in _STRING_COLS_WITH_MISSING_VALUES: __si = SimpleImputer(missing_values=np.nan, strategy='most_frequent') __train_dataset[_col] = __si.fit_transform(__train_dataset[_col].values.reshape(-1,1))[:,0] __test_dataset[_col] = _si.transform(__test_dataset[_col].astype(__train_dataset[_col].dtypes).values.reshape(-1,1))[:,0] # PREPROCESSING-2 _CAT_COLS = ['ProductCD', 'card4', 'card6’, …,'M9'] _ohe = OrdinalEncoder(handle_unknown="use_encoded_value", unknown_value=-1) __train_dataset[_CAT_COLS] = pd.DataFrame(_ohe.fit_transform(__train_dataset[_CAT_COLS]), columns=_CAT_COLS) __test_dataset[_CAT_COLS] = pd.DataFrame(_ohe.transform(__test_dataset[_CAT_COLS]), columns=_CAT_COLS) # PREPROCESSING-4 from sklearn.preprocessing import StandardScaler __ss= StandardScaler() __feature_train = pd.DataFrame(__ss.fit_transform(__feature_train.values), index=__feature_train.index, columns=__feature_train.columns) __feature_test = pd.DataFrame(__ss.transform(__feature_test.values), index=__feature_test.index, columns=__feature_test.columns) # PREPROCESSING-5 from imblearn.over_sampling import SMOTE smote = SMOTE() __feature_train, __target_train = smote.fit_resample(__feature_train, __target_train) # MODEL from catboost import CatBoostClassifier __model = CatBoostClassifier() __model.fit(__feature_train, __target_train) __y_pred = __model.predict(__feature_test) # EVALUATION from sklearn import metrics __f1 = metrics.f1_score(__target_test, __y_pred, average='macro') print('RESULT: F1 Score: ' + str(__f1)) Load (training, test) data Fill missing values Assign numeric encoding to categorical strings Apply Scaling Apply sampling to balance data Train CatBoostClassifier Evaluate F1 score 高精度にするための前処理・モデルを選択
  15. Generative AutoML for Tabular Data Rapid automation of AI model

    creation is rapidly automated The emergence of AutoML – equal performance to top data scientists Case Study Reduce 50% of stocked items in factories by Improving the accuracy of demand planning for online sales AutoML evolution Effect when applied AutoML tools have not yet been widely adopted. Why not? Time-consuming/ Needs intensive computational resources Blackbox nature of the generated AI models Code synthesis technology using past knowledge • Fast code generation with AI prediction • Give Reason for Code Generation • High accuracy using past knowledge High Speed High Accuracy Transparency 1 2 © 2024 The SapientML Authors 20