El siguiente scrip carga la tabla Clientes y de esta crea varios set de datos con muestra aleatoria. Cada set de datos contiene campos elegidos al azar. Esto con el fin implementar metodologia de Consenso (bagging) que crea diferentes modelos con diferentes muestras para predecir perdida de cliente, usando el campo ClienteActivo como Clase ó Campo Objetivo.
Clientes:
LOAD * INLINE [
IdCliente, ClienteActivo, Edad, EstadoCivil, MontoCompra, CantidadCompra, MesesAntiguedad
1, SI, 66, Casado, 33, 4, 4
2, NO, 25, Soltero, 54, 1, 8
3, SI, 58, Divorciado, 45, 8, 6
4, NO, 57, Viudo, 87, 6, 1
5, SI, 45, Casado, 10, 8, 6
6, NO, 63, Soltero, 34, 4, 5
7, SI, 26, Casado, 12, 1, 2
8, SI, 21, Soltero, 20, 10, 6
9, NO, 26, Casado, 97, 5, 12
10, NO, 28, Soltero, 61, 4, 10
11, NO, 67, Divorciado, 89, 10, 2
12, SI, 27, Viudo, 10, 8, 9
13, NO, 63, Casado, 85, 1, 12
14, NO, 36, Soltero, 97, 6, 7
15, SI, 20, Casado, 26, 5, 12
16, SI, 29, Soltero, 86, 10, 1
17, SI, 41, Casado, 20, 2, 1
18, SI, 21, Soltero, 36, 6, 11
19, NO, 24, Divorciado, 85, 6, 3
20, NO, 47, Viudo, 85, 4, 4];
Clientes:
LOAD * INLINE [
IdCliente, ClienteActivo, Edad, EstadoCivil, MontoCompra, CantidadCompra, MesesAntiguedad
1, SI, 66, Casado, 33, 4, 4
2, NO, 25, Soltero, 54, 1, 8
3, SI, 58, Divorciado, 45, 8, 6
4, NO, 57, Viudo, 87, 6, 1
5, SI, 45, Casado, 10, 8, 6
6, NO, 63, Soltero, 34, 4, 5
7, SI, 26, Casado, 12, 1, 2
8, SI, 21, Soltero, 20, 10, 6
9, NO, 26, Casado, 97, 5, 12
10, NO, 28, Soltero, 61, 4, 10
11, NO, 67, Divorciado, 89, 10, 2
12, SI, 27, Viudo, 10, 8, 9
13, NO, 63, Casado, 85, 1, 12
14, NO, 36, Soltero, 97, 6, 7
15, SI, 20, Casado, 26, 5, 12
16, SI, 29, Soltero, 86, 10, 1
17, SI, 41, Casado, 20, 2, 1
18, SI, 21, Soltero, 36, 6, 11
19, NO, 24, Divorciado, 85, 6, 3
20, NO, 47, Viudo, 85, 4, 4];
let SetInicial='Clientes';
let CampoId='IdCliente';
let CampoObjetivo='ClienteActivo';
let CantCampos=NoOfFields('$(SetInicial)');
FOR CantidadSet=1 to 15
let setfinal='$(CampoId)'&', '&'$(CampoObjetivo)';
FOR i=Ceil(Rand()*(CantCampos-3)) to CantCampos
let Campo_$(i)=if(FieldName(i,'$(SetInicial)')<>'$(CampoId)'
and FieldName(i,'$(SetInicial)')<>'$(CampoObjetivo)'
and rand()>rand(),','&FieldName(i,'$(SetInicial)'),'');
let set1=' $'&'(Campo_'&$(i)&')';
let setfinal='$(setfinal)'&'$(set1)';
NEXT
QUALIFY*; UNQUALIFY $(CampoId);
Set$(CantidadSet): LOAD $(setfinal) Resident $(SetInicial) Where Rand()>0.5;
NEXT
let CampoId='IdCliente';
let CampoObjetivo='ClienteActivo';
let CantCampos=NoOfFields('$(SetInicial)');
FOR CantidadSet=1 to 15
let setfinal='$(CampoId)'&', '&'$(CampoObjetivo)';
FOR i=Ceil(Rand()*(CantCampos-3)) to CantCampos
let Campo_$(i)=if(FieldName(i,'$(SetInicial)')<>'$(CampoId)'
and FieldName(i,'$(SetInicial)')<>'$(CampoObjetivo)'
and rand()>rand(),','&FieldName(i,'$(SetInicial)'),'');
let set1=' $'&'(Campo_'&$(i)&')';
let setfinal='$(setfinal)'&'$(set1)';
NEXT
QUALIFY*; UNQUALIFY $(CampoId);
Set$(CantidadSet): LOAD $(setfinal) Resident $(SetInicial) Where Rand()>0.5;
NEXT
Los set de datos quedarian como sigue:
No hay comentarios:
Publicar un comentario