合成オーバーサンプリング

Rで学ぶ不正検知

Sebastiaan Höppner

PhD researcher in Data Science at KU Leuven

SMOTE によるオーバーサンプリング

  • SMOTE: Synthetic Minority Oversampling TEchnique (Chawla ほか, 2002)
  • 少数クラス(= 不正)を合成データでオーバーサンプリングする
Rで学ぶ不正検知
dim(transfer_data)
1000    4
head(transfer_data)
  isFraud    amount   balance     ratio
1   false  528.6840 1529.4732 0.3456641
2   false  184.0193  836.3509 0.2200265
3   false 1885.8024 2984.0684 0.6319568
4   false  732.0286 1248.7217 0.5862224
prop.table(table(transfer_data$isFraud))
 false  true
  0.99  0.01
Rで学ぶ不正検知

smote_scatterplot_1

Rで学ぶ不正検知

smote_scatterplot_2

Rで学ぶ不正検知

SMOTE

不正サンプル X(Tim)を選ぶ

smote_zoomin

Rで学ぶ不正検知

SMOTE - ステップ1

ステップ1

X(Tim)の不正クラスの 最近傍 K 点を探す

例: K = 4

smote_step1

Rで学ぶ不正検知

SMOTE - ステップ2

ステップ2

Tim の最近傍から 1点をランダムに選ぶ 例: X4(Bart)

smote_step2

Rで学ぶ不正検知

SMOTE - ステップ3

ステップ3: 合成サンプルを作成

synthetic_case_1

Rで学ぶ不正検知

SMOTE - ステップ3

ステップ3: 合成サンプルを作成

synthetic_case_2

Rで学ぶ不正検知

SMOTE - ステップ3

ステップ3: 合成サンプルを作成

synthetic_case_3

Rで学ぶ不正検知

SMOTE - ステップ3

smote_step3

Rで学ぶ不正検知

SMOTE - ステップ4

ステップ4

各不正サンプルに対し、 ステップ1–3を dup_size 回繰り返す

例: dup_size = 10

smote_step3

Rで学ぶ不正検知
library(smotefamily)
smote_output = SMOTE(X = transfer_data[, -1],
                       target = transfer_data$isFraud,
                       K = 4,
                       dup_size = 10)

oversampled_data = smote_output$data
table(oversampled_data$isFraud)
false  true
  990   110
prop.table(table(oversampled_data$isFraud))
false  true
  0.9   0.1
Rで学ぶ不正検知

smote_result

Rで学ぶ不正検知

Passons à la pratique !

Rで学ぶ不正検知

Preparing Video For Download...