##やること
顧客情報から顧客が定期預金を申し込む確率を予測。
ロジスティック回帰を使用。
他のモデルの利用は次回に。
実装コードはこちらのbank1.py
#目的
sckit-learnを用いて自分で実装してみる。
##データ収集
UCIのBank Marketingを利用。
bank-additional.csv をダウンロード。
このままでは使えないのでこちらを参考にデータを列ごとに格納。
bank-01.csv と名前をつけて保存。
#####パッケージのインポート
import numpy as np
import pandas as pd
from sklearn.model_selection import *
from sklearn.pipeline import Pipeline
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
import warnings
import mglearn
#####データの読み込み
df = pd.read_csv("data/bank_01.csv")
#ワンホットエンコーディング
data_dummies = pd.get_dummies(df)
features = data_dummies.loc[:, 'age':'poutcome_success']
X = features.values
y = data_dummies['y_no'].values
#データ確認
print("X.shape: {} y.shape: {}".format(X.shape, y.shape))
print(data_dummies.y_no.value_counts())
X.shape: (4119, 63) y.shape: (4119,)
1 3668
0 451
データに偏りがあるのでAUCスコアを使用する。
#####GridSearchCVを使って最適な正則化強度Cを探索
pipe = Pipeline([('scaler', StandardScaler()), ('classifier', LogisticRegression())])
param_grid = {'classifier__C':[0.001, 0.01, 0.1, 1, 10]}
X_train, X_test, y_train, y_test = train_test_split(
X, y, random_state=0)
grid = GridSearchCV(pipe, param_grid=param_grid, cv=3, return_train_score=False, scoring="roc_auc")
grid.fit(X_train, y_train)
print("Best parameters: ", grid.best_params_)
print("grid best score, ", grid.best_score_)
print("Test set AUC: {:.2f}".format(grid.score(X_test, y_test)))
結果
Best parameters: {'classifier__C': 0.01}
grid best score, 0.9383648126404396
Test set AUC: 0.91
grid.cv_results_で調べると、Cの値ではそこまで結果は変わらなかった。
次回はロジスティック回帰以外で探索しよう。