1 | ////////////////////////////////////////////////////////////////////////////// |
---|
2 | // FILE : EndesaPrimas_CLARA_Clustering.tol |
---|
3 | // PURPOSE : Extracción datos y cluster CLARA |
---|
4 | ////////////////////////////////////////////////////////////////////////////// |
---|
5 | |
---|
6 | // Parámetros |
---|
7 | ////Base de datos |
---|
8 | Real DBOpen( "PrjEndesaPRIMas" , "endesa", "end!101."); |
---|
9 | ////Tabla de muestra |
---|
10 | Text nombre_tabla_muestra = "vmc_cliente_cluster_v2"; |
---|
11 | |
---|
12 | //Extracción de los datos |
---|
13 | //Se crea la query |
---|
14 | Text query = |
---|
15 | "select ccliente, |
---|
16 | case when avg_vpotppal_3M = 0 then 0 else ln(avg_vpotppal_3M) end as vpotppal, |
---|
17 | qt_contrat_3M, |
---|
18 | pc_imp_mora_3M, |
---|
19 | qt_obl_mora_3M, |
---|
20 | qt_imp_medio_3M, |
---|
21 | case when qt_dias_recencia_3m is null then 0 else ln(qt_dias_recencia_3m) |
---|
22 | end as qt_dias_recencia_3m , |
---|
23 | sum_dias_mora_3M, |
---|
24 | avg_dias_mora_3M |
---|
25 | from " + nombre_tabla_muestra |
---|
26 | ; |
---|
27 | WriteLn("La query que extrae la muestra es: |
---|
28 | "+query); |
---|
29 | |
---|
30 | //Se extrae la información |
---|
31 | Matrix Original_data = Matrix DBMatrix(query); |
---|
32 | Matrix Var_cluster = SubCol(Original_data, [[2,3,4,5,6,7]]); |
---|
33 | |
---|
34 | ////////////////////////////////////////////////////////////////////////////// |
---|
35 | //Función que extrae los estadísticos de una matriz |
---|
36 | ////////////////////////////////////////////////////////////////////////////// |
---|
37 | Set Matrix_Stadistic (Matrix mat){ |
---|
38 | For(1, Columns(mat), Set (Real x){ |
---|
39 | Matrix vector = SubCol(mat, [[x]]); |
---|
40 | Real Media = MatAvr(vector); |
---|
41 | Real Desv_est = MatStDs(vector); |
---|
42 | Real Varianza = MatVar(vector); |
---|
43 | Real Maximo = MatMax(vector); |
---|
44 | Real Minimo = MatMin(vector); |
---|
45 | Real Mediana = MatMedian(vector); |
---|
46 | Set Estadísticos = [[Media, Desv_est, Varianza, Maximo, Minimo, Mediana]]; |
---|
47 | Eval("Set Stadistics_var_"+FormatReal(x)+" = Estadísticos") |
---|
48 | }) |
---|
49 | }; |
---|
50 | |
---|
51 | ////////////////////////////////////////////////////////////////////////////// |
---|
52 | //Transformación de las variables |
---|
53 | ////////////////////////////////////////////////////////////////////////////// |
---|
54 | |
---|
55 | |
---|
56 | Matrix var = SubCol(Var_cluster, [[4]]); |
---|
57 | Set var_stadistic = Matrix_Stadistic(var); |
---|
58 | Matrix var_trans = RProd(var-var_stadistic[1][1],var_stadistic[1][2]); |
---|
59 | |
---|
60 | |
---|
61 | Matrix Var_cluster_trans = ConcatColumns(SubCol(Var_cluster, [[2,3]]), |
---|
62 | var_trans,SubCol(Var_cluster, [[5,6]])); |
---|
63 | |
---|
64 | |
---|
65 | |
---|
66 | ////////////////////////////////////////////////////////////////////////////// |
---|
67 | //Clustering |
---|
68 | ////////////////////////////////////////////////////////////////////////////// |
---|
69 | #Require Rcluster; |
---|
70 | |
---|
71 | Real Cantidad_clusters = 4; |
---|
72 | Real Cantidad_variables = 6; |
---|
73 | |
---|
74 | Set Clara_cluster = |
---|
75 | Rcluster::CLARA::Run(Var_cluster, Cantidad_clusters, [[ Real verbose = True ]]); |
---|
76 | |
---|
77 | Matrix Cluster_Asignment = |
---|
78 | ConcatColumns(Clara_cluster["assignment"],Var_cluster); |
---|
79 | |
---|
80 | //Cálculo de las estadísticas de las variables de cada cluster |
---|
81 | Set Cluster_Stadistics = For(1, Cantidad_clusters, Set (Real x){ |
---|
82 | Set stadistics = Matrix_Stadistic( |
---|
83 | Matrix SubCol( |
---|
84 | SetMat( |
---|
85 | Select(MatSet(Cluster_Asignment), Real(Set se){ |
---|
86 | Real se[1] == x |
---|
87 | }) |
---|
88 | ), Range(2, Cantidad_variables+1,1) |
---|
89 | ) |
---|
90 | ); |
---|
91 | Eval("Set Stadistics_cluster_"+FormatReal(x)+" = stadistics") |
---|
92 | }); |
---|
93 | |
---|
94 | //Variables de los representantes (medoides) |
---|
95 | Matrix Medoides_vars = SubRow(Var_cluster, |
---|
96 | Set BinGroup("<<",MatSet(Clara_cluster["representative"]))); |
---|
97 | |
---|
98 | //Tamaño de cada cluster |
---|
99 | Set Tamaño_Cluster = For(1, Cantidad_clusters, Real (Real x){ |
---|
100 | Real dim_cluster = Card( |
---|
101 | Select(MatSet(Cluster_Asignment), Real(Set se){ |
---|
102 | Real se[1] == x |
---|
103 | }) |
---|
104 | ); |
---|
105 | Eval("Real dim_cluster_"+FormatReal(x)+" = dim_cluster") |
---|
106 | }); |
---|
107 | |
---|
108 | Real Stop; |
---|
109 | |
---|
110 | |
---|
111 | |
---|
112 | |
---|
113 | |
---|
114 | |
---|
115 | |
---|
116 | |
---|
117 | |
---|
118 | |
---|
119 | |
---|