【Dataiku】銀行の顧客ターゲティングをノーコードやってみる(機械学習編)

はじめに

SIGNATEの 【練習問題】銀行の顧客ターゲティング をDataikuで実施しました。

本記事では、Dataikuを用いて、ノーコードで二値分類を行う手順について解説します。

前回まで

前回は、データのインポートから、欠損値の確認、相関行列の分析、可視化を通じたデータの理解までを行いました。Dataikuを活用することで、これらの工程をノーコードで効率的に進めることができました。今回は、機械学習モデルの構築に焦点を当て、データの前処理、特徴量エンジニアリング、モデルの学習・評価を行います。

前処理

trainデータとtestデータの統合(ユニオン)

それぞれのデータを別々に前処理すると手間がかかるため、Visual Recipesの「Stack」を使用し、traintestを1つのデータセットに統合します。

  1. trainを選択し、Visual Recipesの「Stack」をクリックします。
  1. 「Inputs」にtraintest を選択して、「CREATE RECIPE」をクリックします。
  1. 「Origin columns」タブをクリックして、ONに設定を変更します。(最終的にtraintestに分割するため)
  1. 「Output」タブをクリックして、出力される列を確認します。問題がなければ「RUN」をクリックして実行します。
  1. 実行結果

特徴量の選択

統合したデータに対して特徴量として使用する列を選択します。

今回は、分析したid, duration, pdays, previous, job, education, marital, default, housing, loanと目的変数であるy、統合データを判別するためのoriginal_datasetを選択します。

  1. train_stackedをクリックして、Visual recipesの「Prepare」をクリックします。
  1. 「CREATE RECIPE」をクリックします。
  1. 「ADD A NEW STEP」をクリックして、Delete/keep columns by nameを選択します。
  1. 特徴量として使用する列を選択します。
    Column multiple:id, duration, pdays, previous, job, education, marital, default, housing, loan, y, original_dataset
    Keep

one-hot encoding(ダミー変数化)

pdaysを「-1」と「それ以外」に分割。previousを「0」と「それ以外」に分割。あとのカテゴリデータはohe-hot encoding(ダミー変数化)を実施。

まずは、pdaysとpreviousをone-hot encoding(ダミー変数化)します。

  1. 「ADD A NEW STEP」をクリックして、Formulaを選択します。
    1. 「Formula for」をpdaysに変更して、pdaysを「-1」と「それ以外」に分割する処理を記載します。その後、「APPLY」をクリックします。
      if(pdays >= 0, 1, 0)
    1. 「Formula for」をpreviousに変更して、previousを「0」と「それ以外」に分割する処理を記載します。その後、「APPLY」をクリックします。
    if(previous == 0, 0, 1)

次に、カテゴリデータをone-hot encoding(ダミー変数化)します。

  1. 「ADD A NEW STEP」をクリックして、Unfoldを選択します。
  1. 各カテゴリデータに対して設定していきます(サンプルとして、jobを選択)
    Columm:job
    Prefix(empty for no prefix):job_

    他の列も同様に行います。

    次は、Unfoldで出力された列の欠損値を0埋めしていきます。

  1. 「ADD A NEW STEP」をクリックして、Fill empty cells with fixed valueを選択します。
  1. one-hot encoding(ダミー変数化)した列に対して値(0)を設定します。
    column multiple:job_blue-collar, job_entreprenuer, job_manegement, job_job_retired, job_services, job_technician, job_admin., job_self-employed, job_housemaid, job_unemployed, job_unknown, job_student,
    								 marital_married, marital_single, marital_divorced,
    								 education_secondary, education_primary, education_tertiary, education_unknown,
    								 default_no, default_yes,
    								 housing_no, housing_yes,
    								 loan_no, loan_yes								 
    value to fill with:0
  1. これで前処理は完了したので、「RUN」を押して出力します。
  1. 実行結果

trainデータとtestデータを分割

モデルを作成する前に、統合したデータをもとの2つのデータセットに分割します。

  1. train_stacked_preparedをクリックして、Visual recipesの「Split」をクリックします。
  1. 「Outputs」にtrain_splittest_splitを作成して、「CREATE RECIPE」を選択します
  1. 「Splitting」タブから、「Map values of a single column」を選択
  1. Split on columnsにoriginal_datasetを選択して、Valueにtrainと記述します。
  1. 「Output」タブをクリックして、出力される列を確認します。問題がなければ「RUN」をクリックして実行します。
  1. 出力結果
    • train_split

    • test_split

機械学習

これから本題の機械学習のハンズオンに移っていきます。

モデルの作成

  1. train_spllitをクリックして、「LAB」をクリックします。
  1. Visual MLから「AutoMLPrediction」を選択します。
  1. select featureから今回の目的変数であるy を選択して、AutoMLの「Quick prototypes」をクリックします。その後、「CREATE」をクリックします。

特徴量の選択

今回のモデルに使用する特徴量の選択を行います。

  1. DESIGNからFEATURESタブのFeatures handlingをクリックします。
  1. 今回のモデルで使用する特徴量の選択を行います。

    one-hot encoding(ダミー変数化)で生成された列とyとの相関が高かったduration、pdays、previous を選択します。(サンプルで、jobを排除します。)

アルゴリズムの設定

アルゴリズムを選択します。

  1. 今回は、デフォルトで設定されている項目をそのまま使用します。

Random Forestとは?

複数の決定木を組み合わせて予測するアルゴリズムです。

仕組み

  1. データをランダムに複数のグループに分割します。
  1. 各グループ毎に異なる決定木を作成します。
  1. すべての決定木の予測結果を集約し、最も多い結果を最終予測とする。

Logistic Regressionとは?

データを2つのクラスに分類するアルゴリズムです。

仕組み

  1. 特徴量の重みを学習し、スコアを計算します。
  1. スコアを0 ~ 1の確率に変換します。
  1. スコアが、0.5以上なら「1」それ以外なら「0」と分類します。

結果確認

  1. 上記の設定が完了したら、Trainを押して学習させます。
  1. スコアが良い方をクリックします。(今回は、Logistic Regressionのほうが良かったのでそちらをクリックします。)
  1. モデルの確認をします。
    1. Summary
    1. Confusion matrix

      Confusion Matrix(混同行列)とは?

      Confusion Matrixは、分類モデルの予測結果と実際の値を比較し、どれくらい正しく分類できたかを示す表です。

      Predicted(Positive) Predicted(Negative)
      Actually(Positive) True Positive (TP) False Negative (FN)
      Actually(Negative) False Positive (FP) True Negative (TN)

      各要素の意味

      • True Positive (TP):真陽性 → 実際にPositiveであり、正しくPositiveと予測
      • False Positive (FP):偽陽性 → 実際はNegativeなのに、誤ってPositiveと予測
      • False Negative (FN):偽陰性 → 実際はPositiveなのに、誤ってNegativeと予測
      • True Negative (TN):真陰性 → 実際にNegativeであり、正しくNegativeと予測

    1. ROC & PR curves
  1. デプロイします。

予測

  1. Predict y(binary)を選択して、Apply model on data to predictの「Score」をクリックします。
  1. Input datasetのInput datasetにtest_splitを選択して、「CREATE PECIPE」をクリックします。
  1. 「RUN」をクリックします。
  1. 出力結果

    列の最後にproba_0, proba_1, predictionが確認できるかと思います。

提出

お疲れさまでした。最後のハンズオンとして、予測したデータをダウンロードして提出します。

  1. test_split_scoredを選択して、「Prepare」をクリックします。
  1. 「CREATE RECIPE」をクリックします。
  1. ADD A NEW STEP」をクリックして、Delete/keep columns by nameを選択します。
  1. 提出する際に必要な列を保持します。
    Column mulutiple:id, prediction
    Keep
  1. 「RUN」をクリックします。
  1. 出力結果
  1. 「Export」を選択して、csv(ヘッダなし形式)でダウンロードします。
  1. SIGNATEの「投稿」をクリックして、投稿します。

評価

評価は、0.76でした。

改善案

  1. 特徴量エンジニアリングの強化
    • 今回使用しなかったtrainデータの列を活用し、新しい特徴量を追加すること
    • 既存の特徴量を組み合わせること
  1. アルゴリズムの多様化
    • 他のモデル(SVM, XGBoost, LightGBM など)を試すこと
  1. データの前処理の工夫
    • 異常値の処理データの正規化・標準化を行うこと
    • 特徴量のスケールが異なる場合は、適切なスケーリング手法を適用する。

感想

Dataikuを使用すると、前処理の状況を常に可視化しながら進められるため、とても分かりやすく感じました。また、アルゴリズムの選択も直感的に行えるので、手軽に試行錯誤できる点が便利でした。今後は特徴量の工夫や別のアルゴリズムの活用にも挑戦し、さらなる精度向上を目指したいと思います。

機械学習の精度向上には、データの工夫やアルゴリズムの選択が重要ですが、Dataikuなら初心者でも直感的に試行錯誤できます。これから二値分類に挑戦する方や、より高度な分析に興味がある方は、ぜひ一緒に学んでいきましょう!

 
ShtockData

お問い合わせフォーム

お問い合わせ項目を選択してください