mlandry22 / ieee-fraud-detection

Kaggle ieee-fraud-detection
1 stars 0 forks source link

Explore Target Encodings #8

Open mlandry22 opened 5 years ago

mlandry22 commented 5 years ago

Single features:

    feature     train validation     fold8     fold9    fold10
 1:   card1 0.8488508  0.7400184 0.7692431 0.7284861 0.7223327
 2:   card2 0.7465687  0.7305811 0.7446458 0.7154137 0.7303467
 3:     V94 0.6834983  0.6994083 0.6827476 0.6963681 0.7130270
 4:     V34 0.6795396  0.6972368 0.6742226 0.6974491 0.7171208
 5:     V33 0.6768940  0.6937738 0.6616093 0.6980701 0.7182371
 6:     V52 0.6804505  0.6930605 0.6739769 0.7000577 0.7015367
 7:     V11 0.6246650  0.6929233 0.6641306 0.7021240 0.7078155
 8:     V10 0.6247795  0.6921308 0.6637633 0.7008758 0.7070736
 9:     V74 0.6801776  0.6919530 0.6460416 0.6951303 0.7296263
10:     V51 0.6770628  0.6918421 0.6733025 0.6991164 0.6995275
    feature      split  auc_mean auc_numeric
 1:   card1 validation 0.7400184   0.5186237
 2:   card2 validation 0.7305811   0.5069483
 3:     V94 validation 0.6994083   0.6699741
 4:     V34 validation 0.6972368   0.6815073
 5:     V33 validation 0.6937738   0.6776097
 6:     V52 validation 0.6930605   0.6167330
 7:     V11 validation 0.6929233   0.6265904
 8:     V10 validation 0.6921308   0.6260946
 9:     V74 validation 0.6919530   0.6805547
10:     V51 validation 0.6918421   0.6154287

Interactions of card1:

    feature     train validation     fold8     fold9    fold10
 1:    V201 0.8893372  0.7648908 0.7780972 0.7497434 0.7656982
 2:    V200 0.8880026  0.7639080 0.7799075 0.7470691 0.7636134
 3:    V192 0.8776279  0.7623971 0.7780243 0.7553827 0.7546219
 4:    V194 0.8781172  0.7618876 0.7810365 0.7496339 0.7551741
 5:    V189 0.8861151  0.7614634 0.7800904 0.7485724 0.7556978
 6:    V187 0.8858541  0.7613482 0.7790343 0.7547521 0.7513552
 7:    V197 0.8801368  0.7610513 0.7788565 0.7475453 0.7565332
 8:    V198 0.8810010  0.7610051 0.7776885 0.7470617 0.7578017
 9:    V188 0.8846022  0.7609821 0.7810115 0.7472614 0.7546722
10:    V193 0.8771208  0.7609464 0.7760175 0.7546277 0.7530708
mlandry22 commented 5 years ago
library(data.table)
setwd("/home/mark/competitions/ieee-fraud-detection/models/")
train<-merge(fread("../input/train_transaction.csv"),fread("../input/train_identity.csv"),by="TransactionID",all.x=TRUE)
#test<-merge(fread("../input/test_transaction.csv"),fread("../input/test_identity.csv"),by="TransactionID",all.x=TRUE)

GAP<-train[,max(TransactionDT)-min(TransactionDT)]/10
train[,.N,pmin(9,floor(TransactionDT/GAP))+1]
test[,.N,pmax(12,floor(TransactionDT/GAP))+1]

train[,fold_id:=pmin(9,floor(TransactionDT/GAP))+1]
test[,fold_id:=pmax(12,floor(TransactionDT/GAP))+1]
train[,.N,fold_id]

library(Metrics)

te_list<-list()
for(feature in colnames(test)){
  #feature<-"V257"
  train[,te1:=mean(isFraud[fold_id<8]),.(card1,get(feature))]
  #train[,num1:=frank(get(feature))]

  auc_mean<-c(
    train=auc(train[fold_id<8,isFraud],train[fold_id<8,te1])
    ,validation=auc(train[fold_id>=8,isFraud],train[fold_id>=8,te1])
    ,fold8=auc(train[fold_id==8,isFraud],train[fold_id==8,te1])
    ,fold9=auc(train[fold_id==9,isFraud],train[fold_id==9,te1])
    ,fold10=auc(train[fold_id==10,isFraud],train[fold_id==10,te1])
  )
  #auc_numeric<-c(
  #  train=auc(train[fold_id<8,isFraud],train[fold_id<8,num1])
  #  ,validation=auc(train[fold_id>=8,isFraud],train[fold_id>=8,num1])
  #  ,fold8=auc(train[fold_id==8,isFraud],train[fold_id==8,num1])
  #  ,fold9=auc(train[fold_id==9,isFraud],train[fold_id==9,num1])
  #  ,fold10=auc(train[fold_id==10,isFraud],train[fold_id==10,num1])
  #)
  #auc_numeric<-pmax(auc_numeric,1-auc_numeric)
  #te_list[[length(te_list)+1]]<-data.table(feature=feature,split=names(auc_mean),auc_mean=auc_mean,auc_numeric=auc_numeric)
  te_list[[length(te_list)+1]]<-data.table(feature=feature,split=names(auc_mean),auc_mean=auc_mean)

  if(length(te_list)%%10==0){
    print("***********")
    print("***********")
    print(length(te_list))
    print(rbindlist(te_list)[split=="validation"][order(-auc_mean)][1:pmin(10,length(te_list))])
    #print(rbindlist(te_list)[split=="validation"][order(-auc_numeric)][1:pmin(10,length(te_list))])
  }
}
feature_analysis<-rbindlist(te_list)
dcast(feature_analysis[feature %in% feature_analysis[split=="validation"][order(-auc_mean)][1:10,feature]],feature~split,value.var = "auc_mean"
      )[,.(feature,train,validation,fold8,fold9,fold10)][order(-validation)]

train[,.(.N,fraud=mean(isFraud)),fold_id][order(fold_id)]
fwrite(feature_analysis,"feature_analysis_initial_single_card1.csv")
#f1_analysis<-fread("feature_analysis_initial_single.csv")
#dcast(f1_analysis[feature %in% f1_analysis[split=="validation"][order(-auc_mean)][1:10,feature]],feature~split,value.var = "auc_mean"
#      )[,.(feature,train,validation,fold8,fold9,fold10)][order(-validation)]
mlandry22 commented 5 years ago
> dcast(feature_analysis[paste(top_feature,feature) %in% feature_analysis[split=="validation"][order(-auc_mean)][1:10,paste(top_feature,feature)]]
+       ,top_feature+feature~split,value.var = "auc_mean"
+       )[,.(top_feature,feature,train,validation,fold8,fold9,fold10)][order(-validation)]
    top_feature feature     train validation     fold8     fold9    fold10
 1:       card2     V70 0.8080394  0.7724967 0.7885659 0.7584897 0.7693863
 2:       card2     V69 0.8074520  0.7723277 0.7872140 0.7588878 0.7698420
 3:       card2     V91 0.8033130  0.7684628 0.7780335 0.7569342 0.7687264
 4:       card2     V29 0.8039496  0.7681870 0.7782208 0.7560165 0.7690464
 5:       card2     V90 0.8029745  0.7680992 0.7766026 0.7561603 0.7696218
 6:       card2     V30 0.8039194  0.7662201 0.7773111 0.7540120 0.7661814
 7:       card1    V201 0.8893372  0.7648908 0.7780972 0.7497434 0.7656982
 8:       card2    V201 0.7960752  0.7645828 0.7703538 0.7514570 0.7699774
 9:       card1    V200 0.8880026  0.7639080 0.7799075 0.7470691 0.7636134
10:       card2    V200 0.7938211  0.7624812 0.7699770 0.7492025 0.7664808
> dcast(feature_analysis[paste(top_feature,feature) %in% feature_analysis[
+   split=="validation" & !(top_feature %in% c("card1","card2")) & !(feature %in% c("card1","card2"))][order(-auc_mean)][1:10,paste(top_feature,feature)]]
+       ,top_feature+feature~split,value.var = "auc_mean"
+ )[,.(top_feature,feature,train,validation,fold8,fold9,fold10)][order(-validation)]
    top_feature feature     train validation     fold8     fold9    fold10
 1:         V74      D3 0.7485099  0.7543073 0.7373149 0.7476448 0.7768922
 2:         V94      D3 0.7571363  0.7539589 0.7528323 0.7477382 0.7596045
 3:         V94    V280 0.7537591  0.7538383 0.7542286 0.7557403 0.7487204
 4:         V94    V294 0.7503306  0.7533290 0.7557583 0.7552299 0.7468087
 5:         V33      D3 0.7522336  0.7530796 0.7482475 0.7486159 0.7619907
 6:         V34      D3 0.7526732  0.7526002 0.7508623 0.7463888 0.7601227
 7:         V33    V280 0.7483028  0.7522751 0.7508301 0.7577256 0.7479001
 8:         V74      M4 0.7386231  0.7514857 0.7301852 0.7430629 0.7772550
 9:         V34    V280 0.7485255  0.7506598 0.7515049 0.7551707 0.7450303
10:         V33    V294 0.7446141  0.7502535 0.7483305 0.7575803 0.7450177