やりたいこと
でダウンロードできる銀行マーケティングのサンプルデータセットである「Bank Marketing Data Set」の構造を調べる。
対象
- 機械学習のモデル実装者でマーケティングデータの分析等に関わっている人。
- 金融系のマーケティングデータセットを扱う人。
- モデリングの前にデータの内容をしっかり理解しておきたい人。
データの入手
下記サイトからダウンロードできる。
http://archive.ics.uci.edu/ml/datasets/Bank+Marketing
下記からzipをダウンロードする。
データの構造
下記のzipをダウンロードできる。
- bank-additional.zip
- bank.zip
それぞれの構造は以下の通り。
bank-additional.zip
bank-additional/ フォルダ配下
- bank-additional.csv
- bank-additional-full.csv
- bank-additional-names.txt
bank.zip
bank/ フォルダ配下
- bank.csv
- bank-full.csv
- bank-names.txt
bank.csv
エクセルで開くと、下記の感じ。
bank.csv のカラム構造
bank.csv には下記のカラムが含まれる。
- age
- job
- marital
- education
- default
- balance
- housing
- loan
- contact
- day
- month
- duration
- campaign
- pdays
- previous
- poutcome
- y
各カラムの説明は
bank-names.txt
に記載されている。
カラム詳細
age
顧客の年齢。数値型。
job
顧客の職業。文字列型。
- admin : 管理者
- unknown : わからない
- unemployed : 失業者
- management : マネージャ
- housemaid : メイド
- entrepreneur : 起業家
- student : 学生
- blue-collar : ブルーカラー
- self-employed : 自営業
- retired : 引退
- technician : 技術者
- services : サービス
marital
顧客の婚姻状況。
- married : 既婚
- divorced : 離婚(離婚または未亡人)
- single : 独身
education
顧客の教育レベル。
- primary : 初等教育
- secondary : 中等教育
- tertiary : 高等教育
default
デフォルト(債務不履行)の有無。
yes / no
balance
残高。ユーロ(数値)で表した年間平均残高。
housing
住宅ローンの有無。
yes / no
loan
個人ローンの有無。
yes / no
contact
顧客へ最後に連絡した際の連絡手段。
- telephone : 固定電話
- cellular : 携帯電話
- unknown : 不明
day
顧客へ最後に連絡した日付。
month
顧客へ最後に連絡した月。
duration
顧客への最後の連絡で接触した時間(秒数)。
campaign
現在のマーケティングキャンペーンにおける顧客への連絡回数(最後の連絡を含む)。
pdays
以前のマーケティングキャンペーンにおける顧客への最終連絡日からの経過日数。-1は以前の連絡が無かったことを示す。
previous
以前のマーケティングキャンペーンにおける顧客への連絡回数。
poutcome
以前のマーケティングキャンペーンの結果。
- failure : 失敗
- success : 成功
- unknown : 不明
- other : その他
y
顧客は定期預金を購入したか?
yes / no
データの使い方
たとえば決定木分析の場合、下記のような実装で分類できる。
import pandas as pd
import numpy as np
import pydotplus
from sklearn.tree import export_graphviz
from sklearn.tree import DecisionTreeClassifier as DT
from IPython.display import Image
train = pd.read_csv("bank-full.csv",delimiter=";")
y = train["y"]
trainx = train.iloc[:,0:15]
trainxd = pd.get_dummies(trainx)
clf3 = DT(max_depth=3, min_samples_leaf=500)
clf3.fit(trainxd,y)
export_graphviz(clf3, out_file="tree_clf3.dot", feature_names=trainxd.columns, class_names=["0","1"], filled=True, rounded=True)
graph = pydotplus.graphviz.graph_from_dot_file('tree_clf3.dot')
Image(graph.create_png())