# This R environment comes with all of CRAN preinstalled, as well as many other helpful packages
# The environment is defined by the kaggle/rstats docker image: https://github.com/kaggle/docker-rstats
# For example, here's several helpful packages to load in 

library(ggplot2) # Data visualization
library(readr) # CSV file I/O, e.g. the read_csv function
library(data.table)
#library(lubridate)


super_fread_all <- function( file , key_var=NULL){
  dt <- fread(file)
  if(!is.null(key_var)) setkeyv(dt,c(key_var))
  return(dt)
}

super_fread <- function( file , key_var=NULL){
  dt <- fread(file,nrows=1000000)
  if(!is.null(key_var)) setkeyv(dt,c(key_var))
  return(dt)
}

print("training")
train  <- super_fread( "../input/clicks_train.csv")

displayGroup <- train[,.N,by=display_id]
#head(displayGroup)
displayGroup$group <- seq.int(nrow(displayGroup))%%5
setkey(displayGroup,display_id)
setkey(train,display_id)
train<-train[displayGroup]
train[clicked==0.0,clickedtoZero := -1/(N-1)]
train[clicked==1.0,clickedtoZero := 1-1/(N-1)]
#head(train)


tz<-data.table(rbind(
c(tc="AD",tz="Europe/Andorra"),c(tc="AE",tz="Asia/Dubai"),c(tc="AF",tz="Asia/Kabul"),c(tc="AG",tz="America/Antigua"),c(tc="AI",tz="America/Anguilla"),c(tc="AL",tz="Europe/Tirane"),c(tc="AM",tz="Asia/Yerevan"),
c(tc="AO",tz="Africa/Luanda"),c(tc="AQ",tz="Antarctica/Casey"),c(tc="AR",tz="America/Argentina/Buenos_Aires"),c(tc="AS",tz="Pacific/Pago_Pago"),c(tc="AT",tz="Europe/Vienna"),c(tc="AU",tz="Australia/Sydney"),c(tc="AW",tz="America/Aruba"),
c(tc="AX",tz="Europe/Mariehamn"),c(tc="AZ",tz="Asia/Baku"),c(tc="BA",tz="Europe/Sarajevo"),c(tc="BB",tz="America/Barbados"),c(tc="BD",tz="Asia/Dhaka"),c(tc="BE",tz="Europe/Brussels"),c(tc="BF",tz="Africa/Ouagadougou"),
c(tc="BG",tz="Europe/Sofia"),c(tc="BH",tz="Asia/Bahrain"),c(tc="BI",tz="Africa/Bujumbura"),c(tc="BJ",tz="Africa/Porto-Novo"),c(tc="BL",tz="America/St_Barthelemy"),c(tc="BM",tz="Atlantic/Bermuda"),c(tc="BN",tz="Asia/Brunei"),
c(tc="BO",tz="America/La_Paz"),c(tc="BQ",tz="America/Kralendijk"),c(tc="BR",tz="America/Araguaina"),c(tc="BS",tz="America/Nassau"),c(tc="BT",tz="Asia/Thimphu"),c(tc="BW",tz="Africa/Gaborone"),c(tc="BY",tz="Europe/Minsk"),
c(tc="BZ",tz="America/Belize"),c(tc="CA>YT",tz="America/Vancouver" ),c(tc="CA>SK",tz="America/Regina" ),c(tc="CA>QC",tz="America/Toronto" ),c(tc="CA>PE",tz="America/Halifax" ),c(tc="CA>ON",tz="America/Toronto" ),c(tc="CA>NU",tz="America/Winnipeg" ),
c(tc="CA>NT",tz="America/Edmonton" ),c(tc="CA>NS",tz="America/Halifax" ),c(tc="CA>NL",tz="America/Halifax" ),c(tc="CA>NB",tz="America/Halifax" ),c(tc="CA>MB",tz="America/Winnipeg"),c(tc="CA>BC",tz="America/Vancouver"),c(tc="CA>AB",tz="America/Edmonton" ),
c(tc="CA",tz="America/Toronto"),c(tc="CC",tz="Indian/Cocos"),c(tc="CD",tz="Africa/Kinshasa"),c(tc="CF",tz="Africa/Bangui"),c(tc="CG",tz="Africa/Brazzaville"),c(tc="CH",tz="Europe/Zurich"),c(tc="CI",tz="Africa/Abidjan"),
c(tc="CK",tz="Pacific/Rarotonga"),c(tc="CL",tz="America/Santiago"),c(tc="CM",tz="Africa/Douala"),c(tc="CN",tz="Asia/Shanghai"),c(tc="CO",tz="America/Bogota"),c(tc="CR",tz="America/Costa_Rica"),
c(tc="CU",tz="America/Havana"),c(tc="CV",tz="Atlantic/Cape_Verde"),c(tc="CW",tz="America/Curacao"),c(tc="CX",tz="Indian/Christmas"),c(tc="CY",tz="Asia/Nicosia"),c(tc="CZ",tz="Europe/Prague"),c(tc="DE",tz="Europe/Berlin"),
c(tc="DJ",tz="Africa/Djibouti"),c(tc="DK",tz="Europe/Copenhagen"),c(tc="DM",tz="America/Dominica"),c(tc="DO",tz="America/Santo_Domingo"),c(tc="DZ",tz="Africa/Algiers"),c(tc="EC",tz="America/Guayaquil"),c(tc="EE",tz="Europe/Tallinn"),
c(tc="EG",tz="Africa/Cairo"),c(tc="EH",tz="Africa/El_Aaiun"),c(tc="ER",tz="Africa/Asmara"),c(tc="ES",tz="Europe/Madrid"),c(tc="ET",tz="Africa/Addis_Ababa"),c(tc="FI",tz="Europe/Helsinki"),c(tc="FJ",tz="Pacific/Fiji"),
c(tc="FK",tz="Atlantic/Stanley"),c(tc="FM",tz="Pacific/Chuuk"),c(tc="FO",tz="Atlantic/Faroe"),c(tc="FR",tz="Europe/Paris"),c(tc="GA",tz="Africa/Libreville"),c(tc="GB",tz="Europe/London"),c(tc="GD",tz="America/Grenada"),
c(tc="GE",tz="Asia/Tbilisi"),c(tc="GF",tz="America/Cayenne"),c(tc="GG",tz="Europe/Guernsey"),c(tc="GH",tz="Africa/Accra"),c(tc="GI",tz="Europe/Gibraltar"),c(tc="GL",tz="America/Danmarkshavn"),c(tc="GM",tz="Africa/Banjul"),
c(tc="GN",tz="Africa/Conakry"),c(tc="GP",tz="America/Guadeloupe"),c(tc="GQ",tz="Africa/Malabo"),c(tc="GR",tz="Europe/Athens"),c(tc="GS",tz="Atlantic/South_Georgia"),c(tc="GT",tz="America/Guatemala"),c(tc="GU",tz="Pacific/Guam"),
c(tc="GW",tz="Africa/Bissau"),c(tc="GY",tz="America/Guyana"),c(tc="HK",tz="Asia/Hong_Kong"),c(tc="HN",tz="America/Tegucigalpa"),c(tc="HR",tz="Europe/Zagreb"),c(tc="HT",tz="America/Port-au-Prince"),c(tc="HU",tz="Europe/Budapest"),
c(tc="ID",tz="Asia/Jakarta"),c(tc="IE",tz="Europe/Dublin"),c(tc="IL",tz="Asia/Jerusalem"),c(tc="IM",tz="Europe/Isle_of_Man"),c(tc="IN",tz="Asia/Kolkata"),c(tc="IO",tz="Indian/Chagos"),c(tc="IR",tz="Asia/Tehran"),
c(tc="IS",tz="Atlantic/Reykjavik"),c(tc="IT",tz="Europe/Rome"),c(tc="JE",tz="Europe/Jersey"),c(tc="JM",tz="America/Jamaica"),c(tc="JO",tz="Asia/Amman"),c(tc="JP",tz="Asia/Tokyo"),c(tc="KE",tz="Africa/Nairobi"),
c(tc="KG",tz="Asia/Bishkek"),c(tc="KH",tz="Asia/Phnom_Penh"),c(tc="KI",tz="Pacific/Kiritimati"),c(tc="KM",tz="Indian/Comoro"),c(tc="KN",tz="America/St_Kitts"),c(tc="KP",tz="Asia/Pyongyang"),c(tc="KR",tz="Asia/Seoul"),
c(tc="KW",tz="Asia/Kuwait"),c(tc="KY",tz="America/Cayman"),c(tc="KZ",tz="Asia/Almaty"),c(tc="LA",tz="Asia/Vientiane"),c(tc="LB",tz="Asia/Beirut"),c(tc="LC",tz="America/St_Lucia"),c(tc="LI",tz="Europe/Vaduz"),
c(tc="LK",tz="Asia/Colombo"),c(tc="LR",tz="Africa/Monrovia"),c(tc="LS",tz="Africa/Maseru"),c(tc="LT",tz="Europe/Vilnius"),c(tc="LU",tz="Europe/Luxembourg"),c(tc="LV",tz="Europe/Riga"),c(tc="LY",tz="Africa/Tripoli"),
c(tc="MA",tz="Africa/Casablanca"),c(tc="MC",tz="Europe/Monaco"),c(tc="MD",tz="Europe/Chisinau"),c(tc="ME",tz="Europe/Podgorica"),c(tc="MF",tz="America/Marigot"),c(tc="MG",tz="Indian/Antananarivo"),c(tc="MH",tz="Pacific/Kwajalein"),
c(tc="MK",tz="Europe/Skopje"),c(tc="ML",tz="Africa/Bamako"),c(tc="MM",tz="Asia/Rangoon"),c(tc="MO",tz="Asia/Macau"),c(tc="MP",tz="Pacific/Saipan"),c(tc="MQ",tz="America/Martinique"),c(tc="MR",tz="Africa/Nouakchott"),
c(tc="MS",tz="America/Montserrat"),c(tc="MT",tz="Europe/Malta"),c(tc="MU",tz="Indian/Mauritius"),c(tc="MV",tz="Indian/Maldives"),c(tc="MW",tz="Africa/Blantyre"),
c(tc="MX",tz="America/Chihuahua"),c(tc="MY",tz="Asia/Kuala_Lumpur"),c(tc="MZ",tz="Africa/Maputo"),c(tc="NA",tz="Africa/Windhoek"),c(tc="NC",tz="Pacific/Noumea"),c(tc="NE",tz="Africa/Niamey"),
c(tc="NF",tz="Pacific/Norfolk"),c(tc="NG",tz="Africa/Lagos"),c(tc="NI",tz="America/Managua"),c(tc="NL",tz="Europe/Amsterdam"),c(tc="NO",tz="Europe/Oslo"),c(tc="NP",tz="Asia/Kathmandu"),c(tc="NR",tz="Pacific/Nauru"),
c(tc="NU",tz="Pacific/Niue"),c(tc="NZ",tz="Pacific/Auckland"),c(tc="OM",tz="Asia/Muscat"),c(tc="PA",tz="America/Panama"),c(tc="PE",tz="America/Lima"),c(tc="PF",tz="Pacific/Gambier"),
c(tc="PG",tz="Pacific/Port_Moresby"),c(tc="PH",tz="Asia/Manila"),c(tc="PK",tz="Asia/Karachi"),c(tc="PL",tz="Europe/Warsaw"),c(tc="PM",tz="America/Miquelon"),c(tc="PN",tz="Pacific/Pitcairn"),c(tc="PR",tz="America/Puerto_Rico"),
c(tc="PS",tz="Asia/Hebron"),c(tc="PT",tz="Atlantic/Azores"),c(tc="PW",tz="Pacific/Palau"),c(tc="PY",tz="America/Asuncion"),c(tc="QA",tz="Asia/Qatar"),c(tc="RE",tz="Indian/Reunion"),
c(tc="RO",tz="Europe/Bucharest"),c(tc="RS",tz="Europe/Belgrade"),c(tc="RU",tz="Europe/Moscow"),c(tc="RW",tz="Africa/Kigali"),c(tc="SA",tz="Asia/Riyadh"),c(tc="SB",tz="Pacific/Guadalcanal"),c(tc="SC",tz="Indian/Mahe"),
c(tc="SD",tz="Africa/Khartoum"),c(tc="SE",tz="Europe/Stockholm"),c(tc="SG",tz="Asia/Singapore"),c(tc="SH",tz="Atlantic/St_Helena"),c(tc="SI",tz="Europe/Ljubljana"),c(tc="SJ",tz="Arctic/Longyearbyen"),c(tc="SK",tz="Europe/Bratislava"),
c(tc="SL",tz="Africa/Freetown"),c(tc="SM",tz="Europe/San_Marino"),c(tc="SN",tz="Africa/Dakar"),c(tc="SO",tz="Africa/Mogadishu"),c(tc="SR",tz="America/Paramaribo"),c(tc="SS",tz="Africa/Juba"),c(tc="ST",tz="Africa/Sao_Tome"),
c(tc="SV",tz="America/El_Salvador"),c(tc="SX",tz="America/Lower_Princes"),c(tc="SY",tz="Asia/Damascus"),c(tc="SZ",tz="Africa/Mbabane"),c(tc="TC",tz="America/Grand_Turk"),c(tc="TD",tz="Africa/Ndjamena"),c(tc="TF",tz="Indian/Kerguelen"),
c(tc="TG",tz="Africa/Lome"),c(tc="TH",tz="Asia/Bangkok"),c(tc="TJ",tz="Asia/Dushanbe"),c(tc="TK",tz="Pacific/Fakaofo"),c(tc="TL",tz="Asia/Dili"),c(tc="TM",tz="Asia/Ashgabat"),c(tc="TN",tz="Africa/Tunis"),
c(tc="TO",tz="Pacific/Tongatapu"),c(tc="TR",tz="Europe/Istanbul"),c(tc="TT",tz="America/Port_of_Spain"),c(tc="TV",tz="Pacific/Funafuti"),c(tc="TW",tz="Asia/Taipei"),c(tc="TZ",tz="Africa/Dar_es_Salaam"),c(tc="UA",tz="Europe/Kiev"),
c(tc="UG",tz="Africa/Kampala"),c(tc="UM",tz="Pacific/Johnston"),c(tc="US",tz="America/New_York"),c(tc="US>WY",tz="America/Denver" ),c(tc="US>WV" ,"America/New_York"),c(tc="US>WI",tz="America/Chicago" ),c(tc="US>WA",tz="America/Los_Angeles" ),
c(tc="US>VT",tz="America/New_York" ),c(tc="US>VA" ,"America/New_York"),c(tc="US>UT",tz="America/Denver" ),c(tc="US>TX",tz="America/Chicago" ),c(tc="US>TN",tz="America/Chicago" ),c(tc="US>SD",tz="America/Chicago"),c(tc="US>SC" ,"America/New_York"),
c(tc="US>RI",tz="America/New_York" ),c(tc="US>PA" ,"America/New_York"),c(tc="US>OR",tz="America/Los_Angeles"),c(tc="US>OK",tz="America/Chicago" ),c(tc="US>OH" ,"America/New_York"),c(tc="US>NY" ,"America/New_York"),c(tc="US>NV",tz="America/Los_Angeles" ),
c(tc="US>NM",tz="America/Denver" ),c(tc="US>NJ" ,"America/New_York"),c(tc="US>NH" ,"America/New_York"),c(tc="US>NE",tz="America/Chicago" ),c(tc="US>ND",tz="America/Chicago" ),c(tc="US>NC",tz="America/New_York"),c(tc="US>MT",tz="America/Denver" ),
c(tc="US>MS",tz="America/Chicago" ),c(tc="US>MO",tz="America/Chicago" ),c(tc="US>MN",tz="America/Chicago" ),c(tc="US>MI" ,"America/New_York"),c(tc="US>ME",tz="America/New_York" ),c(tc="US>MD",tz="America/New_York"),c(tc="US>MA",tz="America/New_York" ),
c(tc="US>LA",tz="America/Chicago" ),c(tc="US>KY" ,"America/New_York"),c(tc="US>KS",tz="America/Chicago" ),c(tc="US>IN" ,"America/New_York"),c(tc="US>IL",tz="America/Chicago" ),c(tc="US>ID",tz="America/Denver" ),c(tc="US>IA",tz="America/Chicago" ),
c(tc="US>HI",tz="Pacific/Honolulu" ),c(tc="US>GA",tz="America/New_York" ),c(tc="US>FL",tz="America/New_York" ),c(tc="US>DE",tz="America/New_York" ),c(tc="US>DC",tz="America/New_York" ),c(tc="US>CT",tz="America/New_York" ),c(tc="US>CO",tz="America/Denver" ),
c(tc="US>CA",tz="America/Los_Angeles" ),c(tc="US>AZ",tz="America/Los_Angeles" ),c(tc="US>AR",tz="America/Chicago" ),c(tc="US>AP",tz="Pacific/Honolulu" ),c(tc="US>AL",tz="America/Chicago" ),c(tc="US>AK",tz="America/Anchorage" ),c(tc="US>AE",tz="Pacific/Honolulu" ),
c(tc="US>AA",tz="Pacific/Honolulu" ),c(tc="UY",tz="America/Montevideo"),c(tc="UZ",tz="Asia/Samarkand"),c(tc="VA",tz="Europe/Vatican"),c(tc="VC",tz="America/St_Vincent"),c(tc="VE",tz="America/Caracas"),
c(tc="VG",tz="America/Tortola"),c(tc="VI",tz="America/St_Thomas"),c(tc="VN",tz="Asia/Ho_Chi_Minh"),c(tc="VU",tz="Pacific/Efate"),c(tc="WF",tz="Pacific/Wallis"),c(tc="WS",tz="Pacific/Apia"),c(tc="YE",tz="Asia/Aden"),
c(tc="YT",tz="Indian/Mayotte"),c(tc="ZA",tz="Africa/Johannesburg"),c(tc="ZM",tz="Africa/Lusaka"),c(tc="ZW",tz="Africa/Harare"))
)
setnames(tz, "tc", "state")
setnames(tz, "tz", "timezone")
hours <- data.table(hourdt=sapply(tz$timezone,function(x) as.integer(format(Sys.time(),"%H",tz=x))))
tz <- data.table(cbind(tz,hours))
setkey(tz,state)
#head(tz)
print("events")
events  <- super_fread( "../input/events.csv")
events[,time:=as.POSIXct((timestamp/1000),origin="2016-06-14 04:00:00 UTC")]
events[,hour:=as.integer(format(time,"%H "))]
events[,platform:=as.integer(platform)]
events[,day:=format(time,"%u ")]
events[,state:=strtrim(geo_location,5)]
events[,country:=strtrim(geo_location,2)]
events[country!="US" & country!="CA",state:=country]
setkey(events,state)
events <- events[tz,nomatch=0]
events <- events[,hour := (hour+hourdt)%%24]
events[,':='(timezone=NULL)]



setkey(events, document_id) 
print("document cat")

documents_categories  <- super_fread_all( "../input/documents_categories.csv")
documents_categories_lower <- documents_categories[documents_categories[, .I[which.min(confidence_level)], by=document_id]$V1]
documents_categories_upper <- documents_categories[documents_categories[, .I[which.max(confidence_level)], by=document_id]$V1]

setnames(documents_categories_lower, "confidence_level", "cat_confidence_level2")
setnames(documents_categories_lower, "category_id", "category_id2")
setnames(documents_categories_upper, "confidence_level", "cat_confidence_level1")
setkey(documents_categories_lower,document_id)
setkey(documents_categories_upper,document_id)
documents_categories <-documents_categories_upper[documents_categories_lower]
setkey(documents_categories,document_id)
events <- events[documents_categories,nomatch=0]

rm(documents_categories)
rm(documents_categories_lower)
rm(documents_categories_upper)

documents_entities  <- super_fread_all( "../input/documents_entities.csv")
documents_entities_lower <- documents_entities[documents_entities[, .I[which.min(confidence_level)], by=document_id]$V1]
documents_entities_upper <- documents_entities[documents_entities[, .I[which.max(confidence_level)], by=document_id]$V1]
head(documents_entities)
setnames(documents_entities_lower, "confidence_level", "entity_confidence_level2")
setnames(documents_entities_lower, "entity_id", "entity_id2")
setnames(documents_entities_upper, "confidence_level", "entity_confidence_level1")
setkey(documents_entities_lower,document_id)
setkey(documents_entities_upper,document_id)
documents_entities <-documents_entities_upper[documents_entities_lower]
documents_entities[entity_id==entity_id2,entity_confidence_level2:=0]
documents_entities[entity_id==entity_id2,entity_id2:=""]
setkey(documents_entities,document_id)
events <- events[documents_entities,nomatch=0]

rm(documents_entities)
rm(documents_entities_lower)
rm(documents_entities_upper)

documents_topic  <- super_fread_all( "../input/documents_topics.csv")
documents_topic_lower <- documents_topic[documents_topic[, .I[which.min(confidence_level)], by=document_id]$V1]
documents_topic_upper <- documents_topic[documents_topic[, .I[which.max(confidence_level)], by=document_id]$V1]

setnames(documents_topic_lower, "confidence_level", "topic_confidence_level2")
setnames(documents_topic_lower, "topic_id", "topic_id2")
setnames(documents_topic_upper, "confidence_level", "cat_confidence_level1")
setkey(documents_topic_lower,document_id)
setkey(documents_topic_upper,document_id)
documents_topic <-documents_topic_upper[documents_topic_lower]
setkey(documents_topic,document_id)
events <- events[documents_topic,nomatch=0]

rm(documents_topic)
rm(documents_topic_lower)
rm(documents_topic_upper)

documents_meta  <- super_fread_all( "../input/documents_meta.csv")

setkey(documents_meta,document_id)
events <- events[documents_meta,nomatch=0]

rm(documents_meta)

print("Merge Training")
setkey(events,display_id)
setkey(train,display_id)
events <- events[train,nomatch=0]


clickthru <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),clickedtoZero=sum(clickedtoZero, na.rm=TRUE),sdScore=sd(clickedtoZero, na.rm=TRUE)),by=ad_id]
setkey(clickthru,ad_id)


#clickthru <- clickthru[total>2,] #remove small number of clicks

print("Group State")
clickthrubyState <- events[,list(total=sum(clicked),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE),statedt=mean(hourdt,na.rm=TRUE)),by=.(ad_id,state)]
stateVariation <- clickthrubyState[,list(meanSt=mean(Summed, na.rm=TRUE),sdSt=sd(Summed, na.rm=TRUE),state=mean(statedt,na.rm=TRUE)),by=ad_id]
setkey(stateVariation,ad_id)

print("Group Topic")
clickthrubyTopic <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE)),by=.(ad_id,topic_id)]
topicVariation <- clickthrubyTopic[,list(meanTopic=mean(Summed, na.rm=TRUE),sdTopic=sd(Summed, na.rm=TRUE)),by=ad_id]
setkey(topicVariation,ad_id)

print("Group Category")
clickthrubycategory_id <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE)),by=.(ad_id,category_id)]
categoryVariation <- clickthrubycategory_id[,list(meanCat=mean(Summed, na.rm=TRUE),sdCat=sd(Summed, na.rm=TRUE)),by=ad_id]
setkey(categoryVariation,ad_id)

print("Group Entities")
clickthrubyentities_id <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE)),by=.(ad_id,entity_id)]
entitiesVariation <- clickthrubyentities_id[,list(meanEnt=mean(Summed, na.rm=TRUE),sdEnt=sd(Summed, na.rm=TRUE)),by=ad_id]
setkey(entitiesVariation,ad_id)

print("Group Platform")
clickthrubyplatform <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE)),by=.(ad_id,platform)]
summary(clickthrubyplatform)
platformVariation <- clickthrubyplatform[,list(meanplatform=mean(Summed, na.rm=TRUE),sdplatform=sd(Summed, na.rm=TRUE),platform=mean(platform, na.rm=TRUE)),by=ad_id]
setkey(platformVariation,ad_id)

print("Group Hour")
clickthrubyhour <- events[,list(total=sum(clicked, na.rm=TRUE),score=mean(clickedtoZero, na.rm=TRUE),Summed=sum(clickedtoZero, na.rm=TRUE)),by=.(ad_id,hour)]
hourVariation <- clickthrubyhour[,list(meanhour=mean(Summed, na.rm=TRUE),sdhour=sd(Summed, na.rm=TRUE),hour=mean(hour,na.rm=TRUE)),by=ad_id]
setkey(hourVariation,ad_id)

tail(clickthrubyhour)

print("Join State")
clickthru <- clickthru[stateVariation] 
print("Join Topic")
clickthru <- clickthru[topicVariation] 
print("Join Category")
clickthru <- clickthru[categoryVariation] 
print("Join Entities")
clickthru <- clickthru[entitiesVariation] 
print("Join Platform")
clickthru <- clickthru[platformVariation] 
print("Join Hour")
clickthru <- clickthru[hourVariation] 

print("Sort")
clickthru <- clickthru[order(clickedtoZero)]
clickthru$ID <- seq.int(nrow(clickthru))

tail(clickthru)
summary(clickthru)
#head(events)
clicks_test   <- super_fread( "../input/clicks_test.csv" , key_var = "ad_id" )
dim(clicks_test)
clicks_test <- merge( clicks_test, clickthru, all.x = T )
dim(clicks_test)
clicks_test[is.na(ID)==TRUE,ID:=-1000.0]
head(clicks_test[is.na(ID)==TRUE,],100)
#stop("X")
#DT_fill_NA( clicks_test, click_prob )

setkey(clicks_test,"ID")
submission <- clicks_test[,.(ad_id=paste(rev(ad_id),collapse=" ")),by=display_id]
setkey(submission,"display_id")

#summary(submission)
#head(submission)
dim(submission)
#write.csv(submission,file = "submission.csv",row.names = F)
#setkey(events,ad_id)
#setkey(clickthru,ad_id)
#events<- events[clickthru,nomatch=0]
#eventsmax <- events[events[, .I[which.max(Summed)], by=display_id]$V1]
#setnames(eventsmax, "Summed", "maximum")

#setkey(eventsmax,display_id)

#events <- events[eventsmax]
#events <- events[order(display_id,Summed)]
#head(events,100)
#hits <- events[ad_id==i.ad_id,]
#hit<-sum(hits$clicked)
#total <- sum(events$clicked)
#print(hit)
#print(total)
#print(1.0*hit/total)
