アクセスカウンター

pv数

現在の記事
総閲覧数
4,920
166,573

よく読まれている記事

学びのアウトプット 機械学習 プログラミング

【機械学習】【R】Rでのデータ分析(1) ー銀行の顧客ターゲティング【SIGNATE】ー

2020-04-16

昨年、データサイエンティスト協会主催のデータサイエンティスト養成講座を受講し、その中でRを使ったデータ分析手法を学んだのでその復習兼ねてまとめておきます。

(参考:データサイエンティスト養成講座)
https://www.datascientist.or.jp/news/ds-training-program201909/




目次

    1. 概要
    2. データセット
    3. データ分析
    4. 前処理(※別記事)
    5. モデル構築※別記事
    6. 改善※別記事
    7. 評価※別記事




1.概要

データ分析コンテストで有名なKaggleの日本版とも呼ばれるSIGNATEのデータ分析問題を扱います。

 

  • 銀行の定期預金申込キャンペーンについてキャンペーンデータから結果(定期預金のために口座開設したか)を予測する

 

 

 

 

<背景と目的>

銀行の定期預金申込キャンペーンについて、その効果を測定したい。

具体的には、どのような顧客にどのようなアプローチでキャンペーンを打つとより効果的に定期預金申込に繋がるのかを分析したい。

そのためにキャンペーンデータから実際に定期預金申込に至るかどうかを予測するモデルを構築する。




2.データセット

 

使用するデータは、27,128名の顧客データとキャンペーンの結果(定期預金申込の有無)データ。

最終的にコンペで予測するのは、18,083名のキャンペーンに対する反応(結果)。

 

 

カラム 説明
id int id
age varchar 年齢
job varchar 職種
martial varchar 未婚/既婚(divorced / married / single)
education varchar 教育水準(primary / secondary / tertiary)
default varchar 債務不履行の有無(yes / no)
balance int 保有資産
housing varchar 住宅ローン(yes / no)
loan varchar 個人ローン(yes / no)
contact varchar 連絡方法(cellular / telephone)
day int 最終接触日
month char 最終接触月
duration int 最終接触時間(秒)
campaign int 現在のキャンペーン中の接触回数
pdays int 前回のキャンペーン接触日からの経過日数
previous int 前回のキャンペーンまでの接触実績
poutcome varchar 前回のキャンペーンの実績(success / failure / other)
y boolean 定期預金の申込結果(1:成約、0:非成約)

 

 

 

使ったコマンド

nrow
使用目的:行数カウント
使用方法:nrow(dataframe)

 

nrow(train_data))

[1] 27128



3.データ分析

まず、学習データ全体での成約率(陽性率)を確認する。

 

train_data &lt;- dplyr::group_by(train_data,y)
dplyr::summarise(train_data,n=n())
dplyr::ungroup(train_data)

27128件中、成約に至った(y:1)のは3174件で、全体の11.7%

 

次に説明変数の確認のため、離散変数についてその値ごとに成約率(陽性率)を確認する。

・job( 職種)ごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,job)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉成約率(mean)が高いのは、student(学生)、retired(退職者)、management(経営者)、admin(管理職)で、学生、高齢者、失業者、富裕者となった。
👉成約率が低いのは、blue-color(肉体労働者)、services(サービス業)、entrepreneur(企業家)、housemaid(家政婦)で低所得層となった。

並び替えると以下の通り。

 

使ったコマンド

group_by
使用目的:データフレームを指定した変数でグループ化する
使用方法:dplyr::group_by(dataframe,column)

summarise
使用目的:表の集計
使用方法:dplyr::summarise(dataframe,任意の集計処理)

 

同様にして、

・matiral(未婚/既婚)ごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,marital)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉大きな差は見られないが、single(独身)がやや高めの傾向。

 

・education(教育水準)ごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,education)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉primary(初等教育)ほど成約率は低く、secondary(中等教育)、teritary(三次教育、高等教育)と高度になるほど成約率が高くなる傾向。
👉unknownは欠損値のため削除するか補充するか処理が必要となる。

 

・defaulごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,default)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉no(債務不履行なし)の方が、yes(債務不履行あり)よりも成約率は高い

 

・housing(住宅ローン)ごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,housing)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉no(住宅ローンなし)の方が、yes(住宅ローンあり)よりも成約率が高い傾向

 

・loanごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,loan)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉no(個人ローンなし)の方が、yes(個人ローンあり)よりも成約率が高い傾向

 

・contactごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,contact)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉cellular(携帯)の方が絶対数が多いが、成約率とはあまり相関はなさそう

 

・poutcome(前回実績)ごとの成約率

train_g1 &lt;- train_data
train_g1 &lt;- dplyr::group_by(train_g1,poutcome)
dplyr::summarise(train_g1,n=n(),mean=mean(y))

👉圧倒的にsuccess(前回実績も成功)の場合に成約率が高いが、unknownのデータが多いのでそのままでは利用し難い

 

さらに、変数間の相関を確認する。

cor(train_data)

使ったコマンド

cor
使用目的:相関係数の確認
使用方法:cor(dataframe) ※表全体、cor(x,y,z)※変数指定

👉ただし、今のままだと文字型の変数が含まれているためエラーになるのでいったん数値型変数に絞って実施してみる

👉まず数値型の変数のみ抽出した別のデータフレームを作成してから相関行列を作成する

str(train_data)
list &lt;- c("age","balance","day","duration","campaign","pdays","previous","y")
train_1 &lt;- train_data[,list]
train_1
cor1 &lt;- cor(train_1)
cor1

👉balance(資産)とage、campaign(接触回数)とday(最終接触日)、previous(接触実績)とpdays(接触日からの経過日数)、y(成約に至ったか)とduration(接触時間)には正の相関が見られる

👉pdays(接触日からの経過日数)とday(最終接触日)には弱い負の相関が見られる

 

 

 

この後、前処理(変数加工)してアルゴリズム構築して実際の分析と評価になりますが、少し長くなったので別記事で。

 

 

 

以上

 

 

続きは以下

 

【機械学習】【R】Rでのデータ分析(2) ー銀行の顧客ターゲティング【SIGNATE】ー

 

 

 






  • この記事を書いた人
  • 最新記事

solobochi

国内大手IT企業中堅社員。
プログラミングやセミナーのアウトプットがしたいと思い2018年にブログを開設。

プロジェクトマネジメント関連の資格やAWS、ディープラーニング、機械学習系の資格取得ノウハウについても発信。

激務により体調を崩して3年間の休職を経験。闘病を経て復職。


(Like)
・最適化することが好き
・PDCAを回すのが好き


(当サイト)
日々思うことを徒然と発信
└(例)
・学びのアウトプット
・投資・資産運用
・プログラミング
・資格試験の対策
・セミナーのレビュー
・書評
etc...


詳しくは自己紹介記事にて。
自己紹介①
自己紹介②
自己紹介③
自己紹介④

-学びのアウトプット, 機械学習, プログラミング
-, ,

Copyright© そろボチ , 2024 All Rights Reserved Powered by AFFINGER5.