Content test.csv Para estudiar los datos podemos utilizar algn gestor de bases de datos relacional, tal y como por ejemplo MySQL
FERNANDO APARICIO GALISTEO
3 Preprocesado Tal cual tenemos los archivos csv ya se pueden agregar AML, aunque estos no sern nuestros datos de trabajo definitivos. Si agregamos los dos dataset (train y test): Para generar un dataset de entrenamiento y de prueba con los usuario, item y rating, podemos utilizar una consulta sql del tipo: select ID_Customer as iduser,Cod_Prod as iditem, '1' as rating from t1; Esto nos generar una tabla con iduser, iditem, y un valor 1 para todos los registros.
FERNANDO APARICIO GALISTEO
4 Preprocesado Problemas: El algoritmo de recomendacin necesita valores diferentes para los ratings Posibles soluciones: Generar unos ratings de 0 para aquellos productos que no han sido contratados (ESTO GENERA UN CONJUNTO DE MS DE 47M DE REGISTROS La versin free de AML no nos permite procesarlo). Ponderar de alguna manera los ratings
FERNANDO APARICIO GALISTEO
5 Anlisis de los datos Debido a la lentitud con la que AML procesa las consultas SQL, utilizaremos MySQL. A tener en cuenta: Trataremos las tablas como si de una base de datos no relacional se tratase (no usaremos relaciones). Cuando desde el cliente utilizado se sobrepasa un cierto lmite de tiempo, no nos muestra los resultados aunque el gestor de BBDD sigue haciendo los clculos. Para solucionarlo, los resultados los almacenamos en fichero o los insertamos en nuevas tablas.
FERNANDO APARICIO GALISTEO
6 Anlisis de los datos Carga de datos a MySQL:
LOAD DATA INFILE 'D:/temp/train.csv'
INTO TABLE train FIELDS TERMINATED BY ',' LINES terminated BY '\n' IGNORE 1 ROWS -- ignora las cabeceras (ID_Customer,Cod_Prod,Cod_Fecha,Socio_Demo_01, Socio_Demo_02,Socio_Demo_03,Socio_Demo_04,So cio_Demo_05);
FERNANDO APARICIO GALISTEO
7 Anlisis de los datos Despus de cargar los datos de train y test podemos hacer un poco de analtica: Comprobar si hay clientes repetidos El concepto de cliente (es suficiente el id de usuario?) Nmero de clientes y nmero de tems Cuntos registros nos saldran si consideramos todas las combinaciones de clientes y productos (producto cartesiano)
FERNANDO APARICIO GALISTEO
8 Anlisis de los datos Si el concepto de cliente lo determinamos por los atributos U={A1,,An} y el de producto por B, para calcular los usuarios que no estn en Train (y por tanto pondramos un rating de 0) haramos: (U x B) (Proyeccin(U,B) de Train)
FERNANDO APARICIO GALISTEO
9 Aproximacin colaborativa incluyendo el tiempo Dado que el resultado resulta una matriz de en torno a 47M, podramos pensar en una mtrica que tuviese en cuenta el tiempo para ponderar los ratings entre 1 y 5 por ejemplo: Si dividimos el tiempo en 5 partes: incremento=(tf-t0)/5 El rating podra consistir en: rating=5-parteEntera((tf-t)/incremento)
FERNANDO APARICIO GALISTEO
10 Aproximacin colaborativa incluyendo el tiempo Argumentos para usar el tiempo en la mtrica de los ratings: Usuarios que contratan los productos en los mismos periodos deberan parecerse. Los usuarios con patrones similares desplazados en el tiempo tambin tendrn una cierta similitud (menor cuanto mayor desplazamiento haya). Para reforzar esto habra que pensar en alguna caracterstica de frecuencia (por ejemplo). Los usuarios que sigan el mismo patrn pero en tiempos diferentes diferirn, aunque no completamente.
FERNANDO APARICIO GALISTEO
11 Recomendacin Una vez disponemos de una tabla de ratings ponderados podemos preparar nuestro experimento: Salvamos los datos a fichero SELECT * FROM rating1_ponderado INTO OUTFILE 'D:/tmp/rating_ponderado.csv' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'; Cargamos el dataset en el AML (teniendo en cuenta que van sin cabecera)
FERNANDO APARICIO GALISTEO
12 Recomendacin Montamos la primera parte del experimento
FERNANDO APARICIO GALISTEO
13 Recomendacin Dado que el dataset lo hemos cargado sin cabeceras, AML ver los nombres de las columnas como la secuencia col1,col2, Para cambiar esto editamos los metadatos e incluimos los nombres: ID_Customer,Cod_Prod,Cod_Fecha,Socio_Demo_01,Socio_Dem o_02,Socio_Demo_03,Socio_Demo_04,Socio_Demo_05,rating Extraemos el identificador de usuario, con el cdigo de producto y el rating: select (ID_Customer||'-'||Socio_Demo_01||'-'||Socio_Demo_02|| '-'||Socio_Demo_03||'-'||Socio_Demo_04||'-'||Socio_Demo_05) as iduser, Cod_Prod, rating from t1;
FERNANDO APARICIO GALISTEO
14 Recomendacin Eliminamos duplicados (mismo iduser y mismas caractersticas sociodemogrficas): para quedarnos con el ltimo registro DESMARCAMOS la opcin retain first duplicate row Por otro lado extraemos las caractersticas de usuario para cada usuario: select (ID_Customer||'-'||Socio_Demo_01||'-'||Socio_Demo_02|| '-'||Socio_Demo_03||'-'||Socio_Demo_04||'-'||Socio_Demo_05) as iduser, Socio_Demo_01, Socio_Demo_02, Socio_Demo_03, Socio_Demo_04, Socio_Demo_05 from t1 group by ID_Customer,Socio_Demo_01,Socio_Demo_02,Socio_Demo_03 ,Socio_Demo_04,Socio_Demo_05;
FERNANDO APARICIO GALISTEO
15 Recomendacin Por ltimo incorporamos los elementos esenciales y tambin y exportador a csv para poder cargar y valorar los resultados en nuestra bd local:
FERNANDO APARICIO GALISTEO
16 Recomendacin Si usamos nicamente los datos de entrenamiento , entonces debemos incluir el Split recommender. De lo contrario podemos hacer uso de los datos de test para la evaluacin.
FERNANDO APARICIO GALISTEO
17 Recomendacin
FERNANDO APARICIO GALISTEO
18 Evaluacin Para evaluar nuestra aproximacin, basta con utilizar la mtrica incluida en el AML o, de otro modo, guardarnos los resultados en local y analizarlos por nosotros mismos: Guardamos el archivo Excel resultante y lo incorporamos en la base de datos: LOAD DATA INFILE 'D:/tmp/results.csv INTO TABLE result FIELDS TERMINATED BY ',' LINES terminated BY '\n' IGNORE 1 ROWS (iduser,Cod_Prod);
FERNANDO APARICIO GALISTEO
19 Evaluacin Podramos calcular la exactitud teniendo en cuenta los posibles cambios de tipos (de cadenas a nmeros y viceversa, en todo el proceso de importacin y exportacin). Por ejemplo: SELECT count(*)/(SELECT count(*) from result) accuracy FROM result WHERE iduser in (select iduser from result,test where concat(ID_Customer,'-',Socio_Demo_01,'-',Socio_Dem o_02,'-',Socio_Demo_03,'-',Socio_Demo_04,'-',CAST(S ocio_Demo_05 AS UNSIGNED))=result.iduser AND CAST(test.Cod_Prod AS UNSIGNED)=CAST(result.Cod_Prod AS UNSIGNED));