難易度:★☆☆☆☆
マーケティング活動においてターゲティングとは重要な戦略の1つです。これは小売から金融業界まで共通の課題であり、売上を最大化する為に見込客や優良顧客に対してアプローチをするといった行動をとることができるようになります。本クエストでは銀行を主人公とし、定期預金キャンペーンに対する顧客の申込率(反応率)を予測するモデルを作成して、マーケティング活動の効率化に活用します。 クエストを通じ、データ分析の基本的な流れや、決定木による可視化、そして機械学習の精度向上の為に重要となるパラメータチューニングの方法論を学びます。
SIGNATE銀行は創業以来、一貫した地域密着経営により業績も右肩上がりでしたが、昨今の不況の煽りを受け、次第に業績も悪化。先日の役員会議では、業務の効率化が最優先課題として挙げられ、全部署に対して対策の立案が命じられました。SINGATE銀行では、毎年定期預金キャンペーンを実施し、顧客に対して電話によるダイレクトマーケティングを行っており、今回は機械学習によって定期預金の申込みを行ってくれそうな顧客を事前に予測するプロジェクトが立案されました。顧客ごとに申込率を予測できれば、申込率の高い顧客に優先的にアタックすることで、マーケティング活動を効率化でき、費用対効果を最大化できるはずです。お硬い上層部への説明も義務付けられているので、説明のしやすさという点も考慮する必要もありそうです。
Mission 1
システム部から過去データを取り寄せた為、早速データの内容の確認が必要になりました。データを確認する為には、プログラムへの読み込みやデータ量の確認等がまず最初にすべき作業です。本ミッションではライブラリを使ったデータの読み込み方やデータ量やカラム情報など確認方法を学び、データの概要の確認方法を学びます。
データ分析を始めるにあたって、まずはPython上で扱えるようにデータを取り込まなくてはなりません。
このTaskでは、ライブラリのimport方法と、データ分析のための様々なツールが用意されているライブラリpandasを使ったcsvデータの読み込み方法を学びます。
データを読み込むことができたので、今度はデータが正しく読み込まれているのかを確認する方法論について学びます。具体的には、データ内容の表示方法や、データ量、カラム情報の確認方法について学びます。
Mission 2
データの確認が一通り完了した為、モデルを作成する前の事前分析として、優良顧客の特徴をデータから洗い出すことになりました。優良顧客の特徴を発見する為には、データを多角的に眺めることが重要です。本ミッションでは、データを俯瞰して見ることや、データの示唆する情報を多面的に捉える方法(探索的分析やEDAと呼ぶ)を学びます。
このTaskでは、データに含まれる各変数について、基本統計量を確認したりヒストグラムを描画することで、その分布の特徴を知る方法を学びます。 良い分析を行うにあたって、データの特徴を知ることは不可欠です。このTaskを通してその基本的な方法を学び、未知のデータに対しても活用できるようになりましょう。
ここまでは1つの変数について、その特徴を見てきました。次は複数の変数の関係性について見ていきましょう。
データ分析においては、変数間の関係性を明らかにすることはとても大切です。なぜなら、変数間の関係性は、データの解釈や仮説作りを検討する上で、重要な情報を提供してくれるからです。
Mission 3
優良顧客の特徴を捉えることができた為、いよいよモデル作成の前の準備作業を実施することになりました。モデルを作成する為には、モデルに投入できるようデータ処理が必要です。本ミッションでは、特にダミー変数化と呼ばれるデータ前処理方法を学びます。
前回のTaskで学んだように、データには質的データと量的データの2種類がありました。機械学習でモデルにデータを渡す際には、データの全てを量的データにする必要があります。ここでは、ダミー変数化という前処理の方法を学んでいきます。
Mission 4
それでは本プロジェクトにおける具体的な解決手段である優良顧客をターゲティングする予測モデルを作成することになりました。今回は顧客の属性情報を入力とし、優良顧客か否かの判定結果を出力として得られるモデルを作成します。本ミッションでは前処理を行ったデータを使い、機械学習モデルの作成から、作成したモデルの精度を評価するまでの一連の流れを学びます。
モデル作成をする前準備として、モデルを作成するために使う学習用データと、作成したモデルの精度を評価するために使う評価用データにデータを分割する必要があります。
評価関数とは、モデルの精度の良し悪しを定量的に測る指標として使用されるもので、問題の内容に応じて適切に設定する必要があります。今回の目的変数は、定期預金申込有無(1:有, 0:無)で、集合を 1 か 0 かにグループ分けする分類作業にあたるため、このような問題を2値分類問題あるいは2クラス分類問題と呼びます。
分類問題で使用される代表的な評価関数は次のようなものがあります。
正解率 (Accuracy)
再現率 (Recall)
LogLoss
AUC
今回は、評価関数としてAUCを利用することにします。
それでは、前処理を行ったデータを使ってモデルの学習を行っていきましょう。 分類問題で使われる機械学習の手法としては以下のようなものがあります。
ロジスティック回帰
決定木
NeuralNet
SVM
KNN
Naïve Bayes
前回のOperationで算出した予測結果を評価してみましょう。またグラフを使って可視化の練習も行いましょう。
Mission 5
作成したモデルではある一定の成果は得られたものの、より精度の高いモデルが必要と判断がされた為、モデルを改善することになりました。説明のしやすさという観点からモデル自体は変更せずに予測精度を改善することが求められています。本ミッションでは、パラメータチューニングと呼ばれる手法を利用するモデルの改善方法を学びます。
最初のモデリングでは、パラメータの1つ、max_depthの値を2としてモデルの学習を行いました。次はこのmax_depthの値を増やしてモデルを学習してみましょう。木構造の深さが深くなるため、より多くの質問を表現でき、複雑なモデルを作ることができるようになります。
これまでmax_depthが2の場合と10の場合とでモデルの学習を行い精度の評価を行ってきましたが、決定木の木構造の深さ(層の数)は、浅くし過ぎると複雑な表現ができないため予測精度が上がらず、かといって深くし過ぎると過学習に陥ってしまい未知のデータに対する予測精度が低くなってしまいます。それでは、最も精度が高くなる値は何でしょうか?これまでのように、パラメータの値を変えながら1つ1つのモデルを作成・評価していくのは大変な作業です。しかし、python には、パラメータの範囲を指定しその範囲をしらみつぶしに調べることで最適なパラメータを探索する、グリッドサーチという便利な方法が用意されています。ここでは、このグリッドサーチを試してみます。
このミッションの目的は、ダイレクトマーケティングの効率化のために、定期預金の申込みに応じてくれる可能性が高い顧客を抽出することでした。
このTaskでは、これまでの分析の成果物として、潜在的な顧客をまとめたアタックリストを作成します。
今回のプロジェクトでは、マーケティング活動の効率化を目的に優良顧客かどうかを判断するターゲティングモデル作成をし、優良顧客のアタックリストを作成することがゴールでした。今回のプロジェクトの成果とクエストを通じて学んだことをおさらいしましょう。
Competition
これまで学習したことを元に、SIGNATEの練習問題に挑戦しましょう。このコンペではある銀行の顧客属性データおよび、過去のキャンペーンでの接触情報、などで、これらのデータを元に、当該のキャンペーンの結果、口座を開設したかどうかを予測するモデル作成にチャレンジします。
Competitionに挑戦する