「Python実践データ分析100本ノック」の”ノック47”の退会予測モデルにH2OのAutoMLを使うメモ

データ分析初心者にとって非常に良著である「Python実践データ分析100本ノック」に紹介されている「退会予測モデル」の決定木をH2OのAutoMLを使ってみる。

www.amazon.co.jp


まずはノック47で利用されているデータを確認。

dataset.head()

count_1 routine_flg period is_deleted campaign_name_入会費半額 campaign_name_入会費無料 class_name_オールタイム class_name_デイタイム gender_F
6.0 1.0 24 0.0 0 0 0 0 0
2.0 1.0 34 0.0 0 0 1 0 0
5.0 1.0 33 0.0 0 0 0 0 1
6.0 1.0 13 0.0 0 0 1 0 0
5.0 1.0 38 0.0 0 0 1 0 1

説明変数と被説明変数を格納

ctarget_col = 'is_deleted'
feature_cols = ['count_1', 'routine_flg', 'period', 'campaign_name_入会費半額',
       'campaign_name_入会費無料', 'class_name_オールタイム', 'class_name_デイタイム',
       'gender_F']

決定木(ノック47記載)で決定木適用

exit = dataset.loc[dataset["is_deleted"]==1]
conti = dataset.loc[dataset["is_deleted"]==0].sample(len(exit))

X = pd.concat([exit, conti], ignore_index=True)
y = X["is_deleted"]
del X["is_deleted"]
X_train, X_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y)

DTCmodel = DecisionTreeClassifier(random_state=0)
DTCmodel.fit(X_train, y_train)

AUCを確認

from sklearn.metrics import roc_auc_score

Y_score = DTCmodel.predict_proba(X_test)[:, 1]
print('auc = ', roc_auc_score(y_true=y_test, y_score=Y_score))
  • > auc = 0.9718441265387008

AutoMLのH2Oを適用

H2Oをインストール

!pip install h2o

ライブラリの読み込み

import h2o
from h2o.automl import H2OAutoML

import pandas as pd
from sklearn.model_selection import train_test_split
import warnings
warnings.filterwarnings('ignore')

初期化(公式ドキュメントにはほとんどの場合にシンプルに下記の記載のみで良いとの記載あり。
Starting H2O — H2O 3.32.0.3 documentation

h2o.init()

データ準備

X_train = dataset[feature_cols]
y_train = dataset[target_col]
X_train_f, X_valid_f, y_train_f, y_valid_f = train_test_split(
    X_train, y_train, test_size=0.30, random_state=1)

train = pd.merge(X_train_f, y_train_f, left_index=True, right_index=True)
valid = pd.merge(X_valid_f, y_valid_f, left_index=True, right_index=True)

h2o_train = h2o.H2OFrame(train) 
h2o_valid = h2o.H2OFrame(valid) 

h2o_train[target_col] = h2o_train[target_col].asfactor()
h2o_valid[target_col] = h2o_valid[target_col].asfactor()

AutoMLを走らせる

aml = H2OAutoML(max_models=10, seed = 0, nfolds=5, keep_cross_validation_predictions=True)
aml.train(x=feature_cols, y=target_col,
          training_frame=h2o_train,
          leaderboard_frame=h2o_valid)

Leader Boardを確認

lb = aml.leaderboard
lb.head(rows=lb.nrows)

若干AUCがアップした

model_id auc logloss aucpr mean_per_class_error rmse mse
XGBoost_3_AutoML_20210114_055716 0.976633 0.170123 0.95416 0.0816106 0.222657 0.0495763