15 de junio de 2014

Crear multiples muestras aleatorias

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]




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  



Los set de datos quedarian como sigue:


No hay comentarios: