jueves, 25 de agosto de 2016

Descomposición de series temporales con SAS

En este post vamos a ver un caso práctico de descomposición de series temporales con SAS. Inicialmente introducimos el concepto de serie temporal y su descomposición:

Una serie temporal se define como una colección de observaciones de una variable recogidas secuencialmente en el tiempo. Este tipo de datos son útiles cuando se quiere predecir la evolución de una variable que cambia a lo largo del tiempo. Las series temporales pueden mostrar una gran variedad de patrones. Suele ser útil descomponer una serie en partes, de forma de cada parte represente una parte del comportamiento:

Tendencia: incremento o decremento sostenido a medio o largo plazo en la serie
Estacionalidad: efectos estacionales (momento del año, mes, día de la semana..)
Ciclos: Subidas y bajadas variables e inestables sin aparente periodicidad fija. Puede ser ruido o puede contener información.



Podemos trabajar con series temporales en SAS en distintos módulos: SAS Enterprise Guide, SAS Visual Analytics, SAS Forecast Studio, etc..., el ejemplo que vamos a plantear puede realizarse con SAS Enterprise Guide utilizando procedimientos de SAS/ETS

El siguiente código SAS/BASE nos permite crear nuestro dataset de ejemplo:

data tabpre (keep =  periodo_f periodo val);
length mm $2. periodo $8.;
do a = 2013 to 2016;
if a = 2016 then tope = 6; else tope = 12;
do m = 1 to tope;
mm=put(m,z2.);
periodo = compress(a||mm||'01');
periodo_f = mdy(input(substr(put(periodo,8.),5,2),8.) ,input(substr(put(periodo,8.),7,2),8.) ,input(substr(put(periodo,8.),1,4),8.) );
ten = (a - 2000)*100;
val = ten + round(100*ranuni(1));
if m = 1 then val = 1.35*val;if m = 2 then val = 1.15*val;
if m = 3 then val = 1.22*val;if m = 4 then val = 1.05*val;
if m = 5 then val = 1*val;if m = 6 then val = 0.9*val;
if m = 7 then val = 0.85*val;if m = 8 then val = 0.8*val;
if m = 9 then val = 1.1*val;if m = 10 then val = 1.05*val;
if m = 11 then val = 1.24*val;if m = 12 then val = 1.3*val;
FORMAT periodo_f MONYY5.;
output;
end;
end;
run;

Una vez creado este dataset podemos ver la serie gráficamente empleando el procedimiento gplot:

proc gplot data=tabpre;
plot val*periodo_f;
run;


A simple vista comprobamos que los datos representan un negocio estacional con correlación interanual, vemos pico en ene-dic y valle en jul-ago, hay tendencia alcista a lo largo de los años.

Es interesante analizar la autocorrelación de la serie. Decimos que en una serie temporal hay autocorrelación cuando existe una correlación entre un periodo dado y periodos anteriores a este.

PROC AUTOREG data=tabpre; 
MODEL val = periodo_f / NLAG=12; 
run;


Encontramos una correlación positiva alta en t - 12 (interanual) y una correlación negativa alta en t-5 , t-6 y t -7, tal y como se intuía en la gráfica anterior.

Vamos a descomponer la serie en tendencia, estacionalidad y parte irregular. Para ello empleamos el procedimiento proc timeseries.

ods graphics on;
proc timeseries data=tabpre
                   out=series
                   outtrend=trend
                   outseason=season plots=(sc tc ic acf iacf);
  /* sc: estacional tc: tendencia ic: irregular acf: autocorrelacion */
      id periodo_f interval=month ;
      var val;
run;
ods graphics off;

La salida de este procedimiento nos muestra la descomposición de la serie:







El procedimiento proc timeseries nos puede dar más información útil de la serie temporal que en pasos posteriores puede ser utilizada para modelizar.

Más información en: Formación SAS




lunes, 27 de junio de 2016

Convocatoria cursos SAS en Septiembre

Próximas convocatoria del curso de SAS/BASE y Enterprise Guide en Madrid:






- Intensivo fin de semana (viernes tarde + sábado mañana): 9/10 Sept y 16/17  Sept . 20h


Profesorado: Consultores senior Business Intelligence ( > 15 años experiencia) con dilatada experiencia en SAS

Interesados: formacion@datademy.es

Localización: Madrid (zona metro Diego de León). Precio: 500 euros (descuento 40% para desempleados)

Es una formación muy práctica y el objetivo es conocer mediante la introducción de conceptos y la realización de ejercicios prácticos la herramienta SAS/Enterprise Guide y la programación SAS/BASE.

Perfiles a los que puede interesar:

- Consultores business intelligence
- Data scientists
- Actuarios de seguros
- Analistas de riesgos
- Perfil investigación: bioestadísticos, físicos, quimicos, etc..

No es necesario tener conocimientos iniciales en SAS, aunque es útil conocer a nivel básico el lenguaje SQL.

A las personas que hayan realizado un aprovechamiento óptimo del curso y estén interesadas en una oportunidad profesional o bien un cambio, se les facilitará una entrevista de trabajo con empresas interesadas en perfiles SAS.

Igualmente se ofrecerá orientación de carrera a aquellas personas que quieran orientar su perfil hacia el data science.

Interesados escribir a: formacion@datademy.es


Temario:

Programación SAS 1. Introducción a SAS
·         Introducción a SAS:
o        Soluciones Business Intelligence SAS
o        Capacidades SAS/BASE. Visión general.
·         Entorno trabajo SAS/BASE:
o        Acceso versión SAS for academics (entorno Cloud)
o        Inicio de sesión
o        Program editor
o        Ventanas log y output
o        Gestión de librerías y directorios
·         Acceso a fuentes de datos:
o        Lectura de ficheros planos (posiciones, delimitados)
o        Lectura de ficheros Excel
o        Acceso a bases de datos
·         Manejar tablas SAS. Crear informes lista:
o        Explorar tablas SAS
o        Indentificar observaciones
o        Salida en output (sentencia print).
·         Programar pasos DATA:
o        Leer conjuntos de datos SAS y crear variables
o        Procesos condicionales
o        Gestionar variables (sentencias keep y drop)
o        Filtrar observaciones (sentencias where)
·         Combinar conjuntos de datos:
o        Unir conjuntos de datos SAS (sentencia set)
o        Combinar conjuntos de datos SAS (sentencia merge)
·         Agregación de conjuntos de datos:
o        Procedimientos de agregación (procedimientos means y summary)
o        Manejo de informes (procedimientos report y tabulate)
·         Salidas de conjuntos de datos:
o        Personalizar la apariencia, aplicar formatos (sentencias title, footnote, proc format)
o        Crear informes HTML
Programación SAS 2.  Gestión de datos
·         Programación de pasos DATA:
o        Escribir en muchos conjuntos de datos SAS 
o        Escribir a la salida varias observaciones (sentencia ouput)
o        Escribir en un fichero de datos externo (sistema ods)
o        Filtrar observaciones en entrada y en salida. Diferencias if vs where.
·         Tratamiento de conjuntos de datos con sql:
o        Utilización de sql en SAS (procedimiento sql)
o        Unir y combinar conjuntos de datos SAS con sql
o        Agregaciones de conjuntos de datos SAS con sql
o        Extracción de datos y volcado a bases de datos externas
·         Agregación de conjuntos de datos:
o        Suma acumulada para un grupo de datos
o        Manejo de grupos de observaciones ( sentencias first, last, retain)
·         Transformaciones en los datos y funciones:
o        Manipular valores alfanuméricos
o        Manipular valores numéricos
o        Manipular fechas
o        Cambiar tipo de variables
o        Funciones tratamiento alfanuméricos, numéricos y fechas
·         Procesar datos de forma iterativa:
o        Tipos de bucles (sentencia do y while)
o        Arrays SAS
·         Empleo de procedimientos:
o        Procedimientos generalistas de utilidad (contents, compare, etc..)
o        Procedimientos estadísticos (freq, univariate, etc..)
·         Técnicas depuración de errores:
o        Uso de la sentencia PUT
o        Uso de la opción DEBUG
·         Introducción a los gráficos:
o        Diagramas de barras y circulares (GCHART)
o        Perfeccionar la salida

Programación SAS 3.  Programación macro
·         Visión general de las macros:
o        Aplicaciones habituales de las macros
o        Procesado de las macros
·         Creación de macrovariables:
o        Conceptos básicos
o        Creación de macrovariables en paso DATA
o        Inferfaz SQL y macrovariables
o        Obtención de valores en ejecución
·         Macro programas:
o        Estructura básica y definición
o        Parámetros de una macro
o        Proceso condicional
o        Procesos iterativos
o        Operaciones aritméticas y lógicas
o        Inferfaz SQL y macrovariables
·         Técnicas de almacenamiento de macros:
o        Sentencia %INCLUDE
o        Autocall
o        Almacenamiento de macros compiladas



jueves, 26 de mayo de 2016

Jornada calidad de datos (Deyde)

Interesante jornada  la celebrada por  Deyde y que desde  datademy hemos podido asistir. Los temas relativos a la calidad del dato nos parecen cada vez más relevantes de cara a asegurar una base de información confiable para nuestros procesos analíticos.

En la jornada organizada por Deyde hemos podido ver las presentaciones de Luis Martinez
(director general Deyde) y de Jaime Roig (director comercial de Deyde) sobre la compañía y
sus interesantes productos a la que ha seguido la intervención de María Hernández (data scientist
de BBVA) que nos han mostrado interesantes ejemplos de innovadores proyectos de data science. Posteriormente Miguel Cruz (director marketing Reale) nos explicó los diferentes retos a los que la gestión de clientes se enfrenta en el sector seguros y como su estrategia se apoya en unos datos de clientes de calidad y confiables. Por último David Dominguez nos presentó los servicios de la compañia Wysedo-deyde  y Ana Calvo (analista datos Deyde) nos hizo una interesante demostración de las capacidades de MyDataQ.



viernes, 13 de mayo de 2016

Decisiones basadas en datos

Ante los grandes eventos hay que tomar las mejores decisiones. Para ello es fundamental apoyarse en análisis y en datos.



Para ello es necesario formarse en Business Analytics y conocer las mejores herramientas del mercado: www.datademy.es


domingo, 24 de abril de 2016

Segmentación de clientes basada en RFM con SAS

El análisis RFM es una conocida técnica de segmentación del clientes. El modelo toma en consideración tres métricas:

1) Ticket medio de compra (Money)
2) Frecuencia de compra (Frecuency)
3) Tiempo qué hace que no compra (Recency)



En base a los resultados encontraré clientes de diferentes características. Alguno de los grupos que encuentro son:

- frecuencia de compra alta y ticket medio alto: clientes de alto valor (que debo cuidar)
- frecuencia de compra alta y bajo ticket medio: me interesa subir ticket medio (ofrecer otros productos)
- frecuencia de compra baja y ticket medio alto: me interesa subir frecuencia de visita (promociones con fecha)
- frecuencia alta y ticket medio alto, pero recencia baja: buenos clientes que debo recuperar ya que hace tiempo que no compran

Son sólo algunos de los grupos que puedo identificar y algunas acciones a tomar.

A continuación vamos a ver los pasos a dar para realizar un análisis RFM con SAS Enterprise Guide.

Partimos de un datasets con transacciones de compra como el que sigue:


Tenemos transacciones de compra donde tenemos identificada la fecha, el cliente, el producto y el importe de compra. Sobre este dataset ejecutamos la tarea de Guide 'Analisis RFM'.





Para parametrizar el análisis debemos seleccionar, el tipo de dataset de entrada, el rol que juega cada campo y el número de grupos de obtener por cada métrica y el tipo de gráficas a visualizar.







Tenemos dos salidas: un dataset con la puntuación RFM de cada cliente y un conjunto de gráficas que nos permiten analizar los grupos obtenidos. El campo puntuacion_rfm resume la puntación obtenida en las tres categorías (recency, frecuency, money). Los clientes con alta puntuación en las tres son clientes de alto valor.



Posiblemente los clientes con puntuaciones RFM: 233, 333 (alta frecuencia y alto ticket y recencia no baja) sean responsables del un porcentaje alto de las compras totales.

También podemos analizar este efecto en el siguiente mapa de calor:



Otro efecto interesante a estudiar es identificar grupos de baja recencia y alta frecuencia y ticket que son clientes que interesa reactivar y son candidatos a target en campaña de marketing.



Estas conclusiones son sólo algunas de las que se pueden obtener en un análisis de este tipo que como hemos visto resulta sencillo de realizar con SAS Enterprise Guide.

Más infomación en:

Formación SAS

Formación Business Intelligence







sábado, 23 de abril de 2016

Formación Business Intelligence

Un grupo de profesionales expertos en tecnologías Business Intelligence con amplia experiencia en proyectos ofrece formación en B.I. en las tecnologías líderes en el mercado:



El conjunto de tecnologías que se imparte es el siguiente:

  • Arquitecturas Business Intelligence
  • Diseño y creación de un Data Warehouse (integración, modelos dimensionales y reporting)
  • Plataforma B.I. Pentaho
  • Plataforma B.I. Oracle
  • Qlikview
  • Tableau
  • SAS BASE y Enterprise Guide
  • SAS Visual Analytics
  • Análisis de datos con R 
  • Base de datos Oracle. SQL (básico, avanzado y tunning)
  • Oracle PL-SQL
  • Introducción a Big Data


Con objeto de cubrir todas las áreas tecnológicas contamos con colaboradores especializados en tecnologías específicas.

El modelo que proponemos va desde un máster B.I., a formación en cápsulas que se pueden impartir de manera independiente y formando itinerarios formativos. Asimismo la formación está perfectamente acoplada para on-line como presencial.

El detalle de los itinerarios y de algunos de los módulos está en las siguientes presentaciones:


Interesados en recibir más información: formacion@datademy.es

datademy


domingo, 20 de marzo de 2016

Partición real-time en un Datawarehouse

Es cada vez más habitual la necesidad de tener los datos en nuestros sistemas de Business Intelligence lo más actualizados posibles y eso implica el tener un datawarehouse lo más próximo al real-time que podamos.




Vamos a ver una forma de implementarlo:

En un DW nos puede interesar combinar la actualización de datos en batch con una actualización real-time. El objetivo podría ser obtener informes de los datos procedentes de un proceso batch diario nocturno que nos muestran el estado de los eventos de negocio a cierre del día anterior y por otro lado poder obtener informes sobre los eventos de negocio que ocurren durante el mismo día de la solicitud del informe.

- ¿Cómo debo almacenar la información para guardar los datos procedentes del batch diario nocturno y los datos real-time?- ¿Cómo debo implementar los procesos ETL para realizar esta doble actualización?

En nuestro DW tendremos una tabla de hechos que guarde los datos cargados en el proceso batch diario que llamaremos partición estática y que será una foto a d -1. Añadimos a esta partición una nueva partición que llamaremos partición real-time que guardará los eventos generados durante el día y que será otra tabla física a parte idéntica en estructura a la tabla de hechos ya existente



Fuente: www.rittmanmead.com


La ventaja de tener dos tablas físicas es que la tabla de hechos de la partición estática que será consultada desde la capa de explotación no se verá afectada por las actualizaciones de la partición real-time. 

Para actualizar la partición real-time será necesario implementar mecanismos CDC que detecten los cambios y los actualicen N veces al día, en micro-lotes muy frecuentes.  La partición real-time afecta a los hechos, pero no a las dimensiones, lo que puede dar lugar a falta de sincronización entre hechos y dimensiones, con situación del tipo early-arriving facts que será necesario gestionar. Por ejemplo, los datos de hechos real-time traen un valor en un campo no encontrado en su tabla de dimensión, no rechazamos el registro, lo integramos pero con valor ‘unknown’ o un código que establezcamos para el valor indeterminado de esa dimensión (ejemplo: 9999). Este valor indeterminado si existe en la tabla de dimensión. El dato se ve en los informes, pero clasificado en un valor ‘saco’, hasta que la tabla dimensión se actualice y la tabla de hechos se reprocese


El proceso ETL será idéntico para la actualización batch y la real-time con la diferencia de las fuentes origen (extracción en batch y CDC en real-time) y las tablas destino que será las tabla de la partición estática o la tabla de la partición real-time.





Fuente: www.rittmanmead.com

Los datos actualizados a final del día en la partición real-time podrán ser movidos a la partición estática. Esta operación puede hacerse realizando una actualización de la metadata (alter table … exchange partition…) que no suponga un movimiento de datos, aprovechando que ambas tablas son idénticas. 

El hecho de tener 2 particiones facilita el trabajo del analista de negocio que sabe que en una partición tiene la foto a d-1 y que en la partición real-time le pueden cambiar los datos si obtiene el mismo informe varias veces en un día. Será posible obtener informes que unan datos de ambas particiones de forma sencilla. Obteniendo SQL’s que unan los datos de ambas particiones de una forma sencilla ya que tienen la misma estructura.




Esta aproximación permite la convivencia de dos particiones que dan dos visiones del dato y nos acercan a el análisis real-time, sin perder la visión clásica de la foto de la situación del negocio a una fecha.