
library(data.table)

DT_fill_NA <- function(DT,replacement=0) {
  for (j in seq_len(ncol(DT)))
    set(DT,which(is.na(DT[[j]])),j,replacement)
}
super_fread <- function( file , key_var=NULL){
  dt <- fread(file)
  if(!is.null(key_var)) setkeyv(dt,c(key_var))
  return(dt)
}

clicks_train  <- super_fread( "../input/clicks_train.csv", key_var = "ad_id" )
displayGroup <- clicks_train[,.N,by=display_id]
setkey(displayGroup,display_id)
setkey(clicks_train,display_id)
clicks_train<-clicks_train[displayGroup]
clicks_train[clicked==0.0,clickedtoZero := -1/(N-1)]
clicks_train[clicked==1.0,clickedtoZero := 1-1/(N-1)]
ad_id_probs <- clicks_train[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),click_prob=sum(clickedtoZero, na.rm=TRUE),sdScore=sd(clickedtoZero, na.rm=TRUE)),by=ad_id]

rm(clicks_train)
gc()

clicks_test   <- super_fread( "../input/clicks_test.csv" , key_var = "ad_id" )
clicks_test <- merge( clicks_test, ad_id_probs, all.x = T )
clicks_test[is.na(click_prob)==TRUE,click_prob:=-1000.0]
head(clicks_test[is.na(click_prob)==TRUE,],100)
#stop("X")
#DT_fill_NA( clicks_test, click_prob )

setkey(clicks_test,"click_prob")
submission <- clicks_test[,.(ad_id=paste(rev(ad_id),collapse=" ")),by=display_id]
setkey(submission,"display_id")

write.csv(submission,file = "submission.csv",row.names = F)