Archivo de la categoría: Consultoría

Los 10 errores y warnings más habituales en SAS

En función de los contactos con SAS support han elaborado un ranking de errores y warnings reportados a SAS con respecto al paso DATA. En este enlace tenéis el ranking, a los comentarios de Kim Wilson podéis añadir los míos. Veamos uno por uno esos errores:

  1. ERROR: AN INTERNAL ERROR HAS OCCURRED WHILE READING A COMPRESSED FILE. PLEASE CALL YOUR SAS SITE REPRESENTATIVE AND REPORT THE FOLLOWING…
    Tenéis que reparar el dataset como indica Kim, pero mucho ojo con mover datasets entre servidores o con trabajar con distintas versiones de SAS.
  2. ERROR: ARRAY SUBSCRIPT OUT OF RANGE AT LINE N AND COLUMN N
    Nos hemos ido de rango en el array sucede cuando recorremos los arrays con un bucle DO y el índice del bucle es mayor que el tamaño del array. Para evitarnos líos podemos hacer ARRAY AR(*) ; DO i = 1 TO DIM(AR); Que no se lleve nadie las manos a la cabeza.
  3. ERROR: THE FORMAT $NAME WAS NOT FOUND OR COULD NOT BE LOADED
    Llamamos a un  formato que no existe, muy habitual en input o put.
  4. NOTE: THE MEANING OF AN IDENTIFIER AFTER A QUOTED STRING MAY CHANGE IN A FUTURE SAS RELEASE. INSERTING WHITE SPACE BETWEEN A QUOTED STRING AND THE SUCCEEDING IDENTIFIER IS RECOMMENDED.
    Esto no pasa…
  5. NOTE: INVALID ARGUMENT TO FUNCTION INPUT AT LINE N COLUMN N
    En ocasiones el formato que ponemos en input es incorrecto y se produce este error, habitual cuando trabajamos con fechas
  6. NOTE: MERGE STATEMENT HAS MORE THAN ONE DATA SET WITH REPEATS OF BY VALUES
    Cuando hacemos un merge si uno de los conjuntos de datos tiene observaciones duplicadas por la variable que ponemos en BY obtenemos este WARNING, cuando cruzamos tablas SAS hemos de tener mucho cuidado con las observaciones duplicadas.
  7. NOTE: SAS WENT TO A NEW LINE WHEN INPUT STATEMENT REACHED PAST THE END OF A LINE
    No es muy habitual este error. Tenemos que realizar lo que nos dice Kim. La opción FLOWOVER no la he empleado nunca, en este link tenéis ejemplos de esta problemática.
  8. NOTE: INVALID DATA FOR VARIABLE-NAME AT LINE N
    Si definimos una variable de un tipo no podemos emplear datos de otro tipo, es decir, si la variable es numérica no la igualéis a un caracter y viceversa. Tenedlo en cuenta.
  9. WARNING: THE QUOTED STRING CURRENTLY BEING PROCESSED HAS BECOME MORE THAN 262 CHARACTERS LONG. YOU MAY HAVE UNBALANCED QUOTATION MARKS.
    Otro problema poco habitual, seguid haciendo caso a Kim.
  10. WARNING: MULTIPLE LENGTHS WERE SPECIFIED FOR THE VARAIBLE VARIABLE-NAME BY INPUT DATA SET(S). THIS MAY CAUSE TRUNCATION OF DATA.
    Este warning es muy típico cuando realizamos merge con variables alfanuméricas. Imaginemos que un dataset tiene la variable póliza definida como $10. y otro tiene la variable póliza definida como $12. si realizamos un merge por esa variable obtendremos este WARNING.

Estos son los errores que más aparecen en SAS SUPPORT. En mi opinión hay algunos que no son habituales pero hay algunos que son dudas recurrentes que me llegan. Al final lo que siempre plantea problemas son los formatos y las fechas en SAS, el 80% de las dudas que me llegan van por ahí. Espero complementar el mensaje de SAS.

COMIENZA LA CUENTA ATRAS. III JORNADAS DE USUARIOS DE R

Por fin están en marcha las III Jornadas de Usuarios de R de España. En este enlace tenéis toda la información disponible. Para esta tercera edición hay que destacar:

  • Serán en Madrid en la Escuela de Organización Industrial
  • Habrá talleres,  bajo mi punto de vista uno de los mayores aciertos
  • Podéis participar, R tiene que salir del ámbito universitario e investigador y pasar al ámbito empresarial. Muchos podéis pensar que yo debería aplicarme el cuento…
  • Necesitan patrocinio. No sólo por temas económicos, también por la repercusion que implica el patrocinio. Todos aquellos que trabajáis en grandes organizaciones podéis poner en contacto al comité organizador  con vuestras empresas
  • También podréis realizar aportaciones voluntarias ya que la asistencia es completamente gratuita
  • Creo que es el punto en el que este foro alcanza su madurez y es el momento de que el mundo empresarial fije sus ojos en R y en la comunidad de usuarios que tiene detrás
  • Y sobre todo y más importante. Podéis conocerme en persona, por muchos asistentes que haya a mi se me ve y no sólo por el Windows 7

Creo que los ingredientes para estas nuevas jornadas garantizan el éxito. ¡Nos vemos en noviembre!

Trucos Excel. Área bajo la curva ROC

curva-roc.png

¿Curva ROC y Excel? ¡Si no tiene nada que ver! No del todo.  En ocasiones tenemos que pintar las curvas ROC y empleamos las herramientas específicas para ello, sin embargo es habitual que nuestros resultados sean presentados en Excel (demasiado habitual). En ese caso creamos nuestros datos para llevarlos a Excel y realizamos nuestro gráfico. Ya tenemos nuestra tabla y hacemos un algo muy parecido a lo que tenemos más arriba. La curva ROC es un mecanismo para evaluar nuestro modelo y compara la especificidad que es la probabilidad de clasificar mal un caso negativo frente a la sensibilidad que es la probabilidad de clasificar correctamente un caso positivo, es decir, falsos positivos frente a verdaderos positivos. El área bajo la curva ROC será un valor entre 0,5 y 1. Cuanto más próximo a 1 mejor será nuestro modelo. Queda pendiente una revisión “en condiciones” de las curvas ROC y de los gráficos lift, mucho mejores cuando tienes que presentar resultados en un área de negocio.

Entonces, ya tenemos el gráfico en Excel y nos piden hayar el área bajo la curva ROC. ¿Cómo lo hacemos esto? Mediante una simulación por método Montecarlo. Creamos números aleatorios y si están por encima de la sensibilidad pues no valen. Posteriormente sumamos los que valen entre todos los que tenemos y hemos obtenido un valor muy próximo al área bajo la curva ROC. En realidad es un método para estimar el área de un póligono. Para entender mejor como se realiza el proceso os un documento de Excel con datos simulados:

curva_roc con datos simulados. Veréis que es muy sencillo. No se puede ser más dinosaurio pero ya verás como a más de uno se le enciende la bombilla. Saludos.

El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

Debido a la pobre aceptación había dado de lado esta serie de monográficos sobre la tarifa multivariante en el sector asegurador. Pero tengo una lectora que si los seguía y como yo me debo a mis lectores continúo con la serie. Recapitulemos. Como variables dependientes tenemos la frecuencia siniestral y el coste medio de los siniestros, las variables independientes serán aquellas que compongan la estructura de nuestra tarifa, como prototipo para determinar que variables forman parte de nuestro modelo empleamos el multitarificador de ARPEM. Con este planteamiento partimos de dos modelos: el modelo de frecuencias y el modelo de costes medios. Sin embargo a la hora de ajustar es muy importante plantear un modelo para cada una de las garantías. Parece lógico que el modelo multivariante para el contenido en una tarifa de hogar no ha de ser el mismo que el modelo para el continente. O centrándonos en el modelo de autos (sobre el que está girando nuestra serie) es necesario modelizar los siniestros de responsabilidad civil por un lado, los siniestros de daños propios por otro, defensa, robo,…

En el caso de automóviles las garantías a modelizar podrían ser:

• RC
• Daños con franquicia
• Daños sin franquicia
• Robo
• Incencio
• Defensa
• Asistencia
• Lunas
• Ocupantes

Esto es sólo una sugerencia/ejemplo estoy seguro de que algunos opinan que se pueden prescindir de algunas coberturas, pueden aparecer otras, en fin, son ideas personales y basadas en mi experiencia (que bonita expresión) no son axiomas y por tanto no me castiguéis por plantear esta estructura tarifaria para autos. Seguir leyendo El modelo multivariante en el sector asegurador. Los modelos por coberturas (V)

Detalles técnicos del seguro de crédito. El factor de uso del importe concedido

El seguro de crédito me sigue pareciendo muy interesante técnicamente y de vez en cuando hay que dedicarle alguna entrada en el blog. Voy a recordar viejos tiempos escribiendo sobre el factor de uso del importe concedido. Nos ponemos en antecedentes, en el seguro de crédito el riesgo es el impago de una transacción comercial. Las empresas que lo contratan tienen que disponer de información muy exacta de las ventas a crédito a sus clientes a los que llamaremos deudores. Esta información ha de estar en posesión de la compañía aseguradora que cubre la operación ya que en caso de siniestro define la cantidad máxima a indemnizar al asegurado (importe siniestral). Es decir, el asegurado “comunica” a la aseguradora el importe de la venta a su deudor y la aseguradora asume el riesgo de impago sobre un porcentaje del total, tiene un porcentaje garantizado. Un inciso, las aseguradoras de crédito, además, ofrecen información sobre deudores, gestión de recobros,… Pero la función fundamental del seguro de crédito es asumir el riesgo de impago de las transacciones de los deudores con sus asegurados; esta función es imprescindible para el desarrollo de un país, así de claro.

Pero las compañías aseguradoras de crédito se encuentran con un “problema”, es casi imposible ajustar el importe concedido a los deudores con el importe real de la venta. La aseguradora dispone de ventas globales de los asegurados, no por deudor. Además es común entre los asegurados vender por un importe menor del importe concedido, ¿por qué? porque la aseguradora garantiza un porcentaje del importe de la venta, no el total. Si no se produce el impago no conocerá el importe de la venta, la tendencia de los asegurados es asegurar ventas mayores para, en el caso de impago de su deudor, el porcentaje garantizado sobre la venta cubra la práctica totalidad de la venta. Es un poco lioso pero es una postura “muy española”, un ejemplo para facilitar la comprensión del problema:

A vende a B, C y D por valor de 100.000 € al año. La aseguradora tiene un % de garantía de las ventas del 80%. A cubre con nuestra compañía las ventas a B por 30.000 € el resto de operaciones no las cubre, luego tiene un importe concedido de 30.000 €. Si A tiene un siniestro por impago de B tendría que recibir 30.000×80% = 24.000 €, sin embargo A “miente” en sus ventas y vende por valor de 25.000 €, es decir, en realidad usa el 83% del importe condedido. A este % lo llamaremos factor de uso del importe concedido. Técnicamente es una medida de gran importancia para el seguro de crédito, ya que es una medida del importe expuesto al riesgo en las transacciones  imprescindible para la estimación de los importes siniestrales. De ahí su importancia técnica ¿Cómo calcular este factor de uso? Esto es lo problemático, si el concepto puede ser duro su estimación provoca el llanto a más de un técnico. Algún día contaré como nos podemos aproximar a este factor de uso. Saludos.

David gana a Goliat. La sentencia del caso SAS frente a WPS

Estaba esperando que saliera la sentencia. Además cabía la posibilidad de pertenecer a Goliat y tenía la boca cerrada. Y resulta que tenemos una de las sentencias más interesantes en cuanto a software se refiere:

http://www.bailii.org/ew/cases/EWHC/Ch/2010/1829.html

Yo no soy capaz de leerme eso en inglés pero el traductor de Google me ha ayudado:

Por las razones anteriormente expuestas, llego a la conclusión de la siguiente manera:i) Si bien no estoy convencido de que Pumfrey J se equivocó al concluir en Navitaire que, sobre la correcta interpretación del artículo 1 (2) de la Directiva sobre el software, derechos de autor en los programas de ordenador no protege a los lenguajes de programación de la copia, estoy de acuerdo con él que se trata de una cuestión sobre la que se requiere la orientación de la Tribunal de Justicia (véanse los párrafos 211-218 supra).

ii) Aunque yo no estoy convencido de que Pumfrey J se equivocó al concluir en Navitaire que, sobre la correcta interpretación del artículo 1 (2) de la Directiva sobre el software, derechos de autor en los programas de ordenador no protege a las interfaces que se copie en que esto puede lograrse sin descompilar el código objeto, considero que esta es también una cuestión sobre la que se requiere la orientación de la Tribunal de Justicia (véanse los párrafos 219-227 supra).

iii) Aunque yo no estoy convencido de que Pumfrey J se equivocó al concluir en Navitaire que, sobre la correcta interpretación del artículo 1 (2) de la Directiva sobre el software, derechos de autor en los programas de ordenador no protege a las funciones de los programas de la copia, y aunque su decisión sobre ese punto fue confirmada por el Tribunal de Apelación de Nueva, considero que esta es también una cuestión sobre la que se requiere la orientación de la TJCE (véanse los párrafos 228-238 supra).

iv) En el supuesto de que la interpretación Pumfrey J del artículo 1 (2) de la Directiva sobre el software era correcta, WPL no ha vulnerado los derechos de autor de SAS Institute en los componentes de SAS mediante la producción de WPS (véanse los párrafos 245-250 supra).

v) considero que el razonamiento que sustenta la interpretación Pumfrey J del artículo 1 (2) de la Directiva sobre el software también se aplica el artículo 2 (a) de la Directiva sobre Sociedad de la Información, pero de nuevo se trata de una cuestión sobre la que se requiere la orientación de la TJCE (véanse los párrafos 251-256 supra).

vi) En el supuesto de que el artículo 2 (a) de la Directiva sobre Sociedad de la Información debe ser interpretado de la misma manera en que el artículo 1 (2) de la Directiva sobre el software, WPL no ha vulnerado los derechos de autor SAS Institute en los Manuales de SAS mediante la producción o pruebas WPS (véanse los párrafos 257-267 supra).

vii) la utilización WPL de la edición de SAS aprendizaje queda fuera del alcance de los términos de las licencias pertinentes (véanse los párrafos 276-290 supra).

viii) La interpretación del artículo 5 (3) de la Directiva sobre el software es otra cuestión sobre la que se requiere la orientación de la Tribunal de Justicia (véanse los párrafos 291-311 y 314 supra).

ix) En la interpretación del artículo 5 (3), que estoy a favor, use WPL de la edición de aprendizaje es en el artículo 5 (3), y en la medida en que los términos de la licencia evitar que esto son nulos y sin valor, con el resultado de que ninguno de los actos WPL se quejó de un incumplimiento de contrato o de la violación del derecho de autor excepto, quizá, un (véanse los párrafos 313-315 arriba).

x) WPL ha infringido los derechos de autor en los Manuales de SAS de forma sustancial a la reproducción en el Manual de WPL (véanse los párrafos 317-319 supra).

xi) WPL no ha vulnerado los derechos de autor en los Manuales de SAS mediante la presentación de las Guías de WPS (véanse los párrafos 320-329 supra).

Atención a la frase la Directiva sobre el software era correcta, WPL no ha vulnerado los derechos de autor de SAS Institute en los componentes de SAS mediante la producción de WPS. Bueno, pues parece que al gigante le ha salido un duro competidor pero sobre todo hay una sentencia muy interesante sobre “la apertura del código cerrado”.

Sin duda alguna la noticia del verano.

Curso de lenguaje SAS con WPS. Variables

El elemento fundamental de los conjuntos de datos SAS son las variables. Ya las hemos referenciado en capítulos anteriores. Éstas pueden ser numéricas o alfanuméricas. Las variables se pueden crear, eliminar o se pueden recodificar. Todo esto siempre lo haremos mediante pasos DATA. Disponemos de un amplio número de funciones para que todas las variables se ajusten a nuestras necesidades.
Las variables tienen los siguientes atributos:

  • Nombre: no pueden exceder de 32 caracteres o empezar por un número ni tener espacios en blanco
  • Tipo: Numérica o alfanumérica ($)
  • Longitud:  máximo 8 bytes para numérica y 1 – 32,000 para alfnumérica
  • Formato salida de la variable: Por defecto para num BEST12. para numéricas y $w. para alfanumérica
  • Formato de entrada: similar al formato de salida
  • Etiqueta

Un tipo muy especial de variable es el valor perdido o missing. Por defecto la representación del missing para una variable numérica es . y ‘ ‘ para una variable alfanumérica. Para todas las variables podemos emplear operadores de comparación (por ejemplo en sentencias IF) y/o operadores lógicos. Los operadores de comparación son:

  • = EQ
  • ^= NE
  • ¬= NE
  • ~= NE
  • > GT
  • < LT
  • >= GE
  • <= LE
  • IN

Los operadores lógicos son:

  • & AND
  • | OR
  • ! OR
  • ¦ OR
  • ¬ NOT
  • ˆ NOT
  • ~ NOT

Variables numéricas:

Son las variables que representan números, son medidas de cada observación de nuestro ataset. Dentro de las numéricas se incluyen las variables de fecha y hora (un tipo muy especial). Su longitud va esde los 2 a los 8 bytes. El formato que tienen por defecto es BEST12. que es el formato de 12 bytes que SAS considera más adecuado para una variable numérica. La forma más común de representar las variables numéricas es w.[d] donde w representa la longitud de la parte entera y d la longitud de la parte decimal. Seguir leyendo Curso de lenguaje SAS con WPS. Variables

Curso de lenguaje SAS con WPS. Ejecuciones

Hasta la fecha nos hemos aproximado al interfaz de WPS y hemos ejecutado algunos script para trabajar con conjuntos de datos SAS y sobre todo entender que hace el paso DATA, también hemos analizado que son y como trabajan las librerías WPS. En nuevas entregas nos seguiremos centrando en el trabajo con dataset temporales y permanentes. La intención es conocer bien que hace DATA y establecer una metodología de trabajo con WPS. SAS es un lenguaje orientado a la gestión de datos y las personas acostumbradas a programar en otros lenguajes pueden tener muchos problemas conceptuales. Al final, con este manual intentaremos ayudar a todos aquellos que trabajáis con SAS a crear un método que permita a nuestros procesos SAS que funcionen de la forma más óptima para ganar tiempo y espacio en disco los dos elementos más importantes cuando manejamos grandes volúmenes de datos.

Lo más habitual en SAS es la lectura de otros conjuntos de datos para crear subconjuntos de registros o de variables o crear y modificar variables. La sintaxis habitual Seguir leyendo Curso de lenguaje SAS con WPS. Ejecuciones