forked from CarlosLugones07/labo
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsemillero.R
More file actions
221 lines (170 loc) · 7.89 KB
/
Copy pathsemillero.R
File metadata and controls
221 lines (170 loc) · 7.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# para correr el Google Cloud
# 8 vCPU
# 64 GB memoria RAM
# 256 GB espacio en disco
# son varios archivos, subirlos INTELIGENTEMENTE a Kaggle
#limpio la memoria
rm( list=ls() ) #remove all objects
gc() #garbage collection
require("data.table")
require("primes")
require("lightgbm")
kdataset <- "/Users/asansone/Desktop/data-mining/dataset2_FE_8_meses_2cocientes.csv.gz" # QUEDA ASI
ksemilla_azar <- 102191 #Aqui poner la propia semilla
ktraining <- c( 202101 ) # QUEDA ASI
# hasta 202006
kfuture <- c( 202103 ) #periodo donde aplico el modelo final
kexperimento <- "dataset2_FE_8_meses_2cocientes_FINAL_1m"
ksemilla_primos <- 3245234
ksemillerio <- 50
#------------------------------------------------------------------------------
#------------------------------------------------------------------------------
#Aqui empieza el programa
#genero un vector de una cantidad de PARAM$semillerio de semillas, buscando numeros primos al azar
primos <- generate_primes(min=100000, max=1000000) #genero TODOS los numeros primos entre 100k y 1M
set.seed( ksemilla_primos ) #seteo la semilla que controla al sample de los primos
ksemillas <- sample(primos)[ 1:ksemillerio ] #me quedo con PARAM$semillerio primos al azar
#cargo el dataset donde voy a entrenar
dataset <- fread(kdataset, stringsAsFactors= TRUE)
#--------------------------------------
#paso la clase a binaria que tome valores {0,1} enteros
#set trabaja con la clase POS = { BAJA+1, BAJA+2 }
#esta estrategia es MUY importante
dataset[ , clase01 := ifelse( clase_ternaria %in% c("BAJA+2","BAJA+1"), 1L, 0L) ]
#--------------------------------------
#los campos que se van a utilizar
campos_buenos <- setdiff( colnames(dataset), c("clase_ternaria","clase01") )
#--------------------------------------
#establezco donde entreno
dataset[ , train := 0L ]
dataset[ foto_mes %in% ktraining, train := 1L ]
#dejo los datos en el formato que necesita LightGBM
dtrain <- lgb.Dataset( data= data.matrix( dataset[ train==1L, campos_buenos, with=FALSE]),
label= dataset[ train==1L, clase01], max_bin=30) # , max_bin=170
dapply <- dataset[ foto_mes== kfuture ]
tb_prediccion_semillerio <- dapply[ , list(numero_de_cliente) ]
tb_prediccion_semillerio[ , pred_acumulada := 0L ]
index = -1
ksemillas <- sample(primos)[ 1:ksemillerio ]
for( semilla in ksemillas ) {
#genero el modelo
#estos hiperparametros salieron de una laaarga Optmizacion Bayesiana
index = index + 1
print(index)
set.seed( semilla )
modelo <- lgb.train( data= dtrain,
param= list( objective= "binary",
force_row_wise= TRUE,
boost_from_average= TRUE,
num_iterations= 187,
num_leaves= 796,
min_data_in_leaf= 1,
learning_rate= 0.0181,
feature_fraction= 0.396,
seed= semilla
)
)
prediccion <- predict( modelo, data.matrix( dapply[, campos_buenos, with=FALSE ]) )
#calculo el ranking
prediccion_semillerio <- frank( prediccion) #, ties.method= "random" )
#acumulo el ranking de la prediccion
tb_prediccion_semillerio[ , paste0( "pred_", semilla ) := prediccion ]
tb_prediccion_semillerio[ , pred_acumulada := pred_acumulada + prediccion_semillerio ]
}
tb_entrega <- dapply[ , list( numero_de_cliente, foto_mes ) ]
tb_entrega[ , prob := tb_prediccion_semillerio$pred_acumulada ]
#ordeno por probabilidad descendente
setorder( tb_entrega, -prob )
#genero archivos con los "envios" mejores
#deben subirse "inteligentemente" a Kaggle para no malgastar submits
cortes <- seq( 8500, 11500, by=500 )
for( envios in cortes )
{
tb_entrega[ , Predicted := 0L ]
tb_entrega[ 1:envios, Predicted := 1L ]
fwrite( tb_entrega[ , list(numero_de_cliente, Predicted)],
file= paste0( kexperimento, "_50_", envios, ".csv" ),
sep= "," )
}
ksemillas <- sample(primos)[ 1:ksemillerio ]
for( semilla in ksemillas ) {
#genero el modelo
#estos hiperparametros salieron de una laaarga Optmizacion Bayesiana
index = index + 1
print(index)
set.seed( semilla )
modelo <- lgb.train( data= dtrain,
param= list( objective= "binary",
force_row_wise= TRUE,
boost_from_average= TRUE,
num_iterations= 187,
num_leaves= 796,
min_data_in_leaf= 1,
learning_rate= 0.0181,
feature_fraction= 0.396,
seed= semilla
)
) # semillas 100
prediccion <- predict( modelo, data.matrix( dapply[, campos_buenos, with=FALSE ]) )
#calculo el ranking
prediccion_semillerio <- frank( prediccion) #, ties.method= "random" )
#acumulo el ranking de la prediccion
tb_prediccion_semillerio[ , paste0( "pred_", semilla ) := prediccion ]
tb_prediccion_semillerio[ , pred_acumulada := pred_acumulada + prediccion_semillerio ]
}
tb_entrega <- dapply[ , list( numero_de_cliente, foto_mes ) ]
tb_entrega[ , prob := tb_prediccion_semillerio$pred_acumulada ]
#ordeno por probabilidad descendente
setorder( tb_entrega, -prob )
#genero archivos con los "envios" mejores
#deben subirse "inteligentemente" a Kaggle para no malgastar submits
cortes <- seq( 8500, 11500, by=500 )
for( envios in cortes )
{
tb_entrega[ , Predicted := 0L ]
tb_entrega[ 1:envios, Predicted := 1L ]
fwrite( tb_entrega[ , list(numero_de_cliente, Predicted)],
file= paste0( kexperimento, "_100_", envios, ".csv" ),
sep= "," )
}
ksemillas <- sample(primos)[ 1:ksemillerio ]
for( semilla in ksemillas ) {
#genero el modelo
#estos hiperparametros salieron de una laaarga Optmizacion Bayesiana
index = index + 1
print(index)
set.seed( semilla )
modelo <- lgb.train( data= dtrain,
param= list( objective= "binary",
force_row_wise= TRUE,
boost_from_average= TRUE,
num_iterations= 187,
num_leaves= 796,
min_data_in_leaf= 1,
learning_rate= 0.0181,
feature_fraction= 0.396,
seed= semilla
)
) # semillas 100
prediccion <- predict( modelo, data.matrix( dapply[, campos_buenos, with=FALSE ]) )
#calculo el ranking
prediccion_semillerio <- frank( prediccion) #, ties.method= "random" )
#acumulo el ranking de la prediccion
tb_prediccion_semillerio[ , paste0( "pred_", semilla ) := prediccion ]
tb_prediccion_semillerio[ , pred_acumulada := pred_acumulada + prediccion_semillerio ]
}
tb_entrega <- dapply[ , list( numero_de_cliente, foto_mes ) ]
tb_entrega[ , prob := tb_prediccion_semillerio$pred_acumulada ]
#ordeno por probabilidad descendente
setorder( tb_entrega, -prob )
#genero archivos con los "envios" mejores
#deben subirse "inteligentemente" a Kaggle para no malgastar submits
cortes <- seq( 8500, 11500, by=500 )
for( envios in cortes )
{
tb_entrega[ , Predicted := 0L ]
tb_entrega[ 1:envios, Predicted := 1L ]
fwrite( tb_entrega[ , list(numero_de_cliente, Predicted)],
file= paste0( kexperimento, "_150_", envios, ".csv" ),
sep= "," )
}