DeepAnalyticsの問題から読み解く機械学習

つい最近までキスモの木のロゴがキスモの頭文字”キ”も由来になっていると思っていたインターン生の内山です!

どうもそれは全く関係ないようです。。笑

 今回で2回目の登場となります。よろしくお願いします!

 

さて、キスモでのインターンでお仕事をさせてもらう中で、ビジネスの場で、

AIがすごいのはわかるけど、実際にどんなデータが使えるのかイメージがつかない」「どういう手順で機械学習は行えるの?」

といった疑問の声をよく耳にします。

 

なので、今回はオプト社が運営しているDeepAnalyticsの”銀行の顧客ターゲティング”問題に挑戦し、人工知能分野の一種である機械学習についてお話させてもらおうと思います!

 

今回取り組む問題の概要

今回の問題は、ある銀行の顧客の属性データを元に、当該のキャンペーンの結果によって口座を開設したかどうかを予測するというものです。

説明変数は下記の16項目が用意されており、27128人分のデータから口座開設の予測モデルを作り、18083人分のテストデータでの予測の精度で順位を競っていきます。

 

f:id:kodamayu:20171201102342p:plain

(画像:Deep Analyticsサイトより引用)

 

今回の予測結果の評価には、AUC(Area under an ROC curve)を用います。

この評価指標によって、実際は口座開設していないのにしたと判定する割合(偽陽性率)を小さくして、なおかつ、実際に口座開設したをしたと判断する割合(真陽性率)を大きくするモデルの価値が高く判断されます。

AUC1に近いほど性能が高いモデルとなり、完全にランダムに予測される場合、AUC0.5となります。

もっと詳しく知りたいという方は、こちらのページがとてもわかりやすいのでご参考にしてください。

www.randpy.tokyo

 

そもそも機械学習の手順って?

機械学習モデル作成の流れは、

  1. 要件定義
  2. データの収集・整形
  3. 学習・推論

の3工程に大きく分けられます。

 

1 要件定義は、どのようなデータを用いて、何をどのくらいの精度で予測するのか、そしてその結果をどう活用していくのかを詰めていく作業です。

最初に要件をしっかり詰めておかないと、せっかく完成した機械学習モデルが求められているものと実は全く違うなんてこともありえます。

大学の授業でも少しこのことを学びましたが、実際にビジネスの場に出ると、この部分がいかに重要かということをひしひしと感じます。

今回の問題では使用データ、モデルの評価方法はあらかじめ決まっているため、要件定義の部分はすでに済んでいると言えます。

 

2 データ収集・整形は、要件定義に沿って必要なデータを集め、それを機械学習モデルに入力できる形に変換する作業です。

基本的にコンピュータは文字を文字のまま読み込んで計算することはできないので、職業や未婚/既婚/離婚などカテゴリに分けて単語で表されているデータは、数値化を行う必要があります。

 

3 学習・推論は、2までの工程で得られたデータを用いて、モデルに学習させ、未知のデータに対して、予測を行う作業になります。

AIは万能でなんでも予測できるというイメージを持たれている方もいるかもしれませんが、

基本的に事前に読み込んだ情報からでないとAIは判断ができないので、この学習というフェーズは必要不可欠な部分となります。

 

機械学習モデルを作る際には、

要件定義:データ収集・整形:学習・推論 =4:4:2

の重要度を占めているというお話を聞いたことがありますが、

まさにそのくらい前半部分の工程は大事になります。

 

データ整形あれこれ

今回はデータはすでに収集されているので、データの整形から入っていきます。

説明変数16項目のうち、カテゴリ分けされているものをone-hotベクトルに変えていきます。

one-hotベクトルとは、単語をベクトル表現する時に用いる方法です。

例えば、職業のカテゴリが「教師、芸能人、パン職人」の3つだった場合、下の図のように3次元のベクトルに表すことで職業を表現できます。

 

f:id:kodamayu:20171201102359p:plain

(one-hotベクトル イメージ図)

 

このone-hotベクトル化をカテゴリで与えられている全ての項目に対して行います。

また、yesnoの2択で与えられているバイナリの項目に関しては、yesなら1noなら0というように数値化して使用します。

 

いよいよ学習・推論へ

一旦全てのデータを数値化したので、ここから学習のフェーズへ入っていきます。

既存手法を用いたいくつかモデルを作成し、比較検討していきます。

今回は、重回帰分析、ランダムフォレストの2手法でモデルを作成していきます。

学習により各変数に対する重みが決まり、その重みを引き継いで、テストデータに対して口座開設するかどうかの予測を行うことができます。

 

推論したデータの評価結果は、

重回帰分析…0.89680

ランダムフォレスト…0.90909

となり、この時点で204位(上位45%)となりました。

 

モデルをさらにより良いものへ

ランダムフォレストの方が良い精度が出たため、ここからはランダムフォレストに特化して、モデルを調整していきます。

手法により数は異なりますが、学習器にはハイパーパラメータと呼ばれる変数が存在します。

これを微調整することで、さらなる精度向上を目指します。

 

今回はグリッドサーチという方法を用いて、ハイパーパラメータを自動調整していきます。(他にも、ランダムサーチやベイズ最適化などなど、様々な方法があります。)

 

グリッドサーチを行い、最適化したモデルで推論をかけると、

評価結果は

0.93560

となり、90位(上位20%)まで向上しました!

 

ここからさらにPDCAサイクルを回していく

一連の流れを経て、目標の上位20%までは到達しました!

今回この問題はここまでしか取り組めませんでしたが、ここからやることとしては、

  • データ整形の方法を見直す
  • 外れ値に当たる学習データを抜き出す
  • 交差検定を行う

などがパッと思いつく限りでも挙げられます。

 

自分の中で仮説を立て、それに基づき修正を加え、再び学習・推論を行うというサイクルを回し続けていきます。

 

最後に

以上が機械学習モデル作成の一連の流れとなります。

ざっくりとではありますが、冒頭ご紹介した疑問の解消の一助となれば幸いです!

これからももっともっと機械学習技術への理解を深め、より有益な情報発信ができればと思いますので、

今後とも弊社技術ブログをよろしくお願いします!!

 

株式会社キスモ

インターン生 内山敦史

www.facebook.com