与えられたデータについて見ていき、現状把握や、DMへの反応に影響を及ぼす要因を探っていきます。 変数target以外の詳細な説明がないため、より精度の高いモデルを作成するためには、各変数(データ項目)について整理する必要があります。

kaggle data description (データの説明)

  • 匿名化された顧客データを提供
  • 応答変数はバイナリで、 “target”というラベルが付けられている

ここからは、実際にデータを整理していきます(コード部分に興味のない人はコードは読み飛ばして頂いて結構です)。

参考:
https://www.kaggle.com/darraghdog/explore-springleaf

準備

# ライブラリの読み込み
library(data.table)
library(dplyr)
library(ggplot2)

# データの読み込み
train <- fread("./data/case05_train.csv", showProgress = FALSE, data.table = FALSE)

### 前処理
# 数値、文字データ項目の分離
train_num  <- train[, sapply(train, is.numeric)]
train_char <- train[, sapply(train, is.character)]

# 欠損値の処理
train_char[train_char==-1]   <- NA
train_char[train_char==""]   <- NA
train_char[train_char=="[]"] <- NA

# 日付関連の項目の分離
train_date <- select(train_char, grep("JAN1|FEB1|MAR1", train_char))
train_char <- select(train_char, -grep("JAN1|FEB1|MAR1", train_char))

データ概要

paste0("データ件数:",nrow(train), "件")
## [1] "データ件数:145231件"
paste0("項目数:",
  " 数値型:", ncol(train_num),
  " 文字型:", ncol(train_char),
  "  日付型:", ncol(train_date),
  " その他:", ncol(train) - ncol(train_num) - ncol(train_char) - ncol(train_date))
## [1] "項目数: 数値型:1880 文字型:35  日付型:16 その他:3"

ターゲット(DMへの応答)

group_by(train, target) %>%
  summarise(count = n()) %>%
  ggplot(aes(x = as.factor(target), y = count)) +
  geom_bar(stat = "identity")

「反応あり」が約23%

項目ごとのユニーク値

# 数値型
select(train_num, -ID) %>%
sapply(function(x) length(unique(x))) %>%
as.data.frame() %>%
filter(. < 100) %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# 文字型
train_char %>%
sapply(function(x) length(unique(x))) %>%
as.data.frame() %>%
filter(. < 100) %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# 日付型
train_date %>%
sapply(function(x) length(unique(x))) %>%
as.data.frame() %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

項目ごとの欠損値数

# 数値型
select(train_num, -ID) %>%
sapply(function(x) sum(is.na(x))) %>%
as.data.frame() %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# 文字型
train_char %>%
sapply(function(x) sum(is.na(x))) %>%
as.data.frame() %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# 日付型
train_date %>%
sapply(function(x) sum(is.na(x))) %>%
as.data.frame() %>%
  ggplot(aes(x = .)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

まとめ

  • データ件数:145231件
  • 項目数(内容は不明): 数値型:1880 文字型:35 日付型:16 その他:3
  • DMへの「反応あり」が約23%

<< 1.ビジネスの理解 3.モデリング >> 


「データから価値を創造する」一般社団法人データマーケティングラボラトリー

Copyright© DML All Rights Reserved.