Advanced forecasting, IIR

Ponencia para el Institute for International Research (IIR) y en calidad de Director General de Bayes Inference SA.

  • Speaker, «Advanced forecasting», Institute of International Research (IIR), Madrid, 1996.
  • Ponente, «Modelos avanzados de previsión», Institute of International Research (IIR), Madrid, 1996.

MBA, IESE, Universidad de Navarra

  • Master in Business Administration (Executive MBA), IESE Business School, University of Navarra, 2 years, 1995-1996.
  • Máster en Administración de Negocios (Executive MBA), IESE, Universidad de Navarra, 2 años, 1995-1996.

Diccionario de informática

  • Coauthor, «Computer science dictionary», Foundation for Industrial Innovation & Computer Sciences School (UPM), Madrid, 1996.
  • Coautor, «Diccionario de informática», Fundación para la Innovación Industrial y Facultad de Informática de Madrid (UPM), Madrid, 1996.

Bayes Forecast, dirección general y clientes

  • Since 1995 to 2005: Leading and mentoring a group of 50+ economists, software engineers and mathematicians. Responsible for the commercial actions, whole planning, execution, and goal achievement of the projects for client companies like Coca-Cola, Microsoft, Telefónica, Spanish National Uranium Institute, Mercadona, Carrefour, Forces Elèctriques d’Andorra, Grupo Sogecable, Movistar, NCR, Unidad Editorial, etc. These projects included electronic capture of information, analysis and modelling of huge and dynamic operational and sales data, reporting and delivering forecast estimates, business intelligence and customer relationship management and marketing (CRM).
  • De 1995 a 2004: Liderando un grupo de más de 50 ingenieros de software, matemáticos y economistas. Con responsabilidad directa en la comercialización y el desarrollo de proyectos de modelización de la demanda y los mercados, sistemas de previsión de ventas, de optimización e inteligencia de negocio. Para clientes como Coca-Cola, Microsoft, Telefónica, Empresa Nacional de Uranio, Mercadona, Forces Elèctriques d’Andorra, Sogecable, Movistar, NCR, Unidad Editorial (El Mundo), Recoletos Compañía Editorial (Marca y Expansión), etc.

Bayes Forecast, diseñador inicial de TOL

Bayes Forecast, web crawlers especializados

  • Developer of several web crawling systems based on ad-hoc or heuristic search (references and keywords matching).
  • Creador de web crawlers especializados en la recopilación de información en internet por áreas de conocimiento.

Bayes Forecast, entorno software

  • Developement environment: Operating systems: Windows, Linux, Aix, Irix, and Solaris; Databases: Oracle, SQL Server, and Teradata (data warehouse); Languages: C++, C, JavaScript, Visual Basic, Html, and TOL (Time Oriented Language).
  • Entorno software: Sistemas operativos: Windows, Linux, Aix, Irix y Solaris; Bases de datos: Oracle, SQL Server y Teradata (data warehouse); Lenguajes: C++, C, JavaScript, Visual Basic, Html y TOL (Time Oriented Language).

Investigación Operativa, UNED

  • Collaborator in forecasting programming with the Department of Operations Research, UNED University, Madrid, 1988-1989.
  • Colaborador en programación de previsiones con el Departamento de Investigación Operativa, UNED, Madrid, 1988-1989.

MAP y Fundación Ortega y Gasset

Profesor de la asignatura «Conceptos fundamentales de informática», del Curso de Postgrado en Administración Pública, del Ministerio para las Administraciones Públicas (MAP), el Instituto Nacional de Administraciones Públicas (INAP) y la Fundación Ortega y Gasset, dos ediciones, Madrid, 1995 y 1996.

  • Teacher, «Computer science concepts», Ministry of Public Administration & Ortega y Gasset Foundation, Madrid, 2 editions, 1995 & 1996.
  • Profesor, «Conceptos fundamentales de informática», Ministerio para las Administraciones Públicas y Fundación Ortega y Gasset, Madrid, 2 ediciones, 1995 y 1996.

De BMP Windows a ICO Unix

De BMP de 16 bits de Windows a ICO Unix y a BIF

El programa de conversión de Bitmaps (BMP) de 16 bits de Windows al formato ICO (de icono) de Unix lo comenzó a desarrollar Juan Ramón Miraz, al comienzo de los noventa, y la versión final que se adjunta en este post la terminé yo.

El formato ICO de Unix especifica un mapa de bits como una matriz de caracteres ASCII, donde cada letra se asocia con el color del pixel de su misma fila y columna. Hubo una época que los bitmaps de los botones de los interfaces de usuario yo lo pintaba así, utilizando el editor vi de Unix y letra a letra. Por ejemplo, asociaba la v al verde, la b al blanco, la r al rojo, etc., para que me fuera más fácil, e iba poniendo letras, una a una, hasta que el botón quedaba bien. Para mi era una gratificante labor artesanal.

A partir de este programa también desarrollé el que convierte del formato BMP al formato BIF, que era un formato propio mio, que utilizaba en combinación con Clipper.

Aunque ahora se podrían recompilar estos dos códigos fuente para las versiones de Windows de 64 bits, sigo utilizando los ejecutables originales de 16 bits. Antes estos ejecutables de 16 bits podían correr mediante emulación en Windows de 32 bits, pero ahora el Windows de 64 bits ya no emula al de 16 bits.

Para poder seguir ejecutando estas pequeñas joyas históricas, sin necesidad de recompilarlas (y más aun en aquellos casos en el que el compilador es también de 16 bits) utilizo el emulador de x86 con DOS de DOSBox que se publica con licencia GNU GPL y aceptan donaciones (yo se la di).

Aunque adjunto en PDF el código fuente completo de los 2 programas de conversión y un ejemplo del formato ICO generado con mi logotipo personal, pongo a continuación el ciclo fundamental de extracción de pixels de un Bitmap (BMP) de 16 colores. Como curiosidad, en esta época, por razones de normalización con el equipo de software con el que trabajaba, los corchetes { } están en la vertical del bloque de código y no dos caracteres antes como es mi costumbre habitual:


for (Y=0, YMax=Bmih.biHeight; Y < YMax; Y++)
  {
  fseek(Bmp, RowStart, SEEK_SET);
  for (X=0, XMax=Bmih.biWidth; X < XMax; X++)
    {
    Arg = fgetc(Bmp);
    H = (Arg >> 4) & 0x0F;  H = Color[H];
    L = Arg & 0x0F;         L = Color[L];
    X++;
    fprintf(Pix,"%c%c",(char)H,(char)L);
    }
  RowStart -= RowBytes;
  fprintf(Pix,"\n");
  fputc('.',stdout); fflush(stdout);
  }
  

Graduate Management Admission Test

En 1994 organice un curso, busqué al profesor estudié y me presenté al Graduate Management Admission Test (GMAT) de la Universidad de Princeton (Nueva Jersey), obteniendo una puntuación superior al percentil 80.

Este test es el que se requiere es Estados Unidos para cursar estudios económicos en las universidades y maestrias en dirección y administración de empresas.

  • «Graduate Management Admission Test», course and score above the 80th percentile, Princeton University, New Jersey, 1994.
  • «Graduate Management Admission Test», curso y evaluación por encima del percentil 80, Universidad de Princeton, Nueva Jersey, 1994.

Master de Ingeniería de Tráfico, DGT

Profesor de la asignatura «Panorámica del hardware», en el Master de Ingeniería de Tráfico, organizado por la Asociación para la Carretera, la Dirección General de Tráfico (DGT) y la Universidad Politécnica de Madrid (UPM). Impartido en la Escuela Universitaria de Ingeniería Técnica de Obras Públicas (UPM). Participé las dos ediciones de 1994 y 1995.

  • Teacher, «Hardware concepts», Master of Traffic Engineering, DGT, 2 editions, Madrid, 1994 & 1995.
  • Profesor, «Panorámica del hardware», Master de Ingeniería de Tráfico, DGT, 2 ediciones, Madrid, 1994 y 1995.

Sistema Inteligente de Codificación

McEQ, SIC, Clipper, Sistema Inteligente de Codificación

Este Sistema Inteligente de Codificación (SIC) estaba basado en un primer prototipo de EQ Sistemas Inteligentes para el Instituto Nacional de Estadística (INE) de apoyo a la codificación automática de enfermedades según el Código Internacional de Enfermedades (CIE).

Este hardcopy muestra la arquitectura interna de SIC, que estaba basada en un esquema de pizarra. A continuación se incluye la documentación de este sistema inteligente de codificación, que se ha dejado adrede tal y como se documentaba al inicio de la década de los 90, aunque, por supuesto, ya disponíamos de unos estupendos Macintoshs.

+--------------------------------------------------------------------+
| SIC: SISTEMA INTELIGENTE DE CODIFICACION.                          |
+--------------------------------------------------------------------+
| 1.- INTRODUCCION.                                                  |
+--------------------------------------------------------------------+

SIC es una aplicación de demostración, desarrollada por EQ Sistemas
Inteligentes.  Su objetivo es presentar cómo puede realizarse una
codificación automática de literales a partir de una información que
puede ser parcial y/o errónea.

La tarea de codificación de SIC consiste en asignar códigos a
literales, aún cuando estos literales contengan errores, utilicen
sinónimos o no correspondan totalmente con los literales originales.
Para ello SIC cuenta con la siguiente información:

  a) Uno o varios dicionarios con las palabras que se manejan en los
     literales (un vocabulario básico del dominio de aplicación).
     Sobre estos diccionarios SIC aplica diversos métodos de búsqueda
     especializados en encontrar palabras a pesar de sus posibles
     errores (de tecleo, ortografía, fallos en lecturas por medios
     ópticos, por errores en transmisión, etc.). A estos métodos se
     les denomina especialistas.

  b) Un diccionario de sinónimos, que proporciona, para cada palabra,
     uno o varios sinónimos dependiendo, como se verá, del modo de
     trabajo de SIC.

  c) La tabla original de codificación en la que a cada código se le
     asocia un literal.  Sobre ella SIC construye un diccionario
     canónico (normalizado) que le permite manejar los literales con
     independencia del contexto en el que trabaja la aplicación.

Esta versión de demostración de SIC proporciana tres funcionalidades
principales:

  a) Validación de palabras durante la entrada de datos.

  b) Codificación asistida, dado un literal se codifica y en caso de
     dudas (cuando existen varias soluciones posibles) se consulta con
     el usuario.

  c) Codificación automática de conjuntos de literales.

A estas tres funcionalidades se accede a través de las tres primeras
opciones menú principal de la aplicación y son las tres consecuencia
de la arquitectura interna de SIC.

En el ejemplo escogido para esta demostración se utiliza una versión,
parcial, del Código Internacional de Enfermedades (CIE), realizado por
la Organización Mundial de la Salud (OMS).  Esta codificación de
enfermedades se aplica para la codificación partes de defunción (cada
parte está formado por cuatro causas de muerte).
  

+--------------------------------------------------------------------+
| 2.- ARQUITECTURA.                                                  |
+--------------------------------------------------------------------+

SIC posee una arquitectura general, esto es, independiente del dominio
o área de aplicación.  Por tanto aunque esta demostración se realice
para la codificación de enfermedades puede ser transportable a otras
áreas como, por ejemplo, la codificación postal (nombres de calles,
nombres de municipios, etc.), la codificación de productos a partir de
sus descripciones, la localización de títulos de libros, etc.

Frente casos complejos de codificación, diccionarios de gran volumen o
retricciones de tiempo, esta arquitectura general debe especializarse
(incluyéndole información sobre el dominio y el contexto en el que se
realiza la codificación) para que proporcione los rendimientos que se
requieran.

 +------------------------------------------------------------------+
 |    +------++--------------++-----------------------------------+ |
 | +--+---+ES|| ARQUITECTURA ||  DICCIONARIOS ORTOGRAFICOS (Dio)  | |
 | |PARTES|==|+--------------+|+-----+ +-----+   +-----+   +-----+| |
 | |======|==|  +-------+     ||DIO 1| |DIO 2|...|DIO i|...|DIO n|| |
 | |======+--+  |PIZARRA|     ||=====| |=====|   |=====|   |=====|| |
 | +-+----+     +-+-+-+-+     |+--+--+ +--+--+   +--+--+   +--+--+| |
 | +-+-----+ +>-+=|=|=|=+-+   |Ind#############################---+ |
 | |FILTRO | |  +-+-+-+-+ |   | +-+-+  +-+-+  +-+-+  +-+-+  +-+-+ | |
 | +-+-----+ |  |=|=|=|=| +>--+ |DIR|  |INV|  |BID|  |FON|  |ORT| | |
 | +-+-----+ |  +-+-+-+-+<+   | +---+  +---+  +---+  +---+  +---+ | |
 | |SCANNER+-+  |=|=|=|=| +---+ CLASE DE LOS ESPECIALISTAS  (Esp) | |
 | +-------+    +-+-+-+-+     +-----------------------------------+ |
 | +-------+    |=|=|=|=|     +---------+   +-----+   +---+-------+ |
 | |SINONIM+-<--+-+-+-+-+ +>--+GRAMATICA+->-+CANON+->-+COD|LITERAL| |
 | | (Sin) +->--+=|=|=|=+-+   |CANONICA |   |=====|   |===|=======| |
 | |=======|    +-+-+-+-+     +---------+   +-----+   |===|=======| |
 | |=======|    |=|=|=|=+<--------S-O-L-U-C-I-O-N---<-+===|=======| |
 | +-------+    +-+-+-+-+                             +---+-------+ |
 +------------------------------------------------------------------+
                Figura: Arquitectura de SIC.

Pulsando la combinación de teclas [Alt-U], una vez dentro de la
aplicación SIC, puede accederse a un menú de utilidades una de cuyas
opciones es un semi-gráfico, con una versión simplificada de la
arquitectura interna de la aplicación SIC (ver figura anterior).

Esta arquitectura esta basada en un sencillo mecanismo de PIZARRA, con
un control semi-rígido.  Sobre esta pizarra, los diferentes métodos
especialistas (DIRecto, INVerso, BIDireccional, FONético, etc.) en
localización de palabras apuntan sus resultados, decidiendo la pizarra
quién o quienes de ellos dan soluciones más verosímiles.

En líneas generales el funcionamiento de SIC es el siguiente (se ha
destacado en mayúscula, en cada punto, una palabra clave que permite
identificar la fase de proceso en la figura de la arquitectura):

   a) En una primera fase los literales son filtrados eliminando
      posibles caracteres extra¤os y transformados, bien a mayúsculas
      o a minúsculas (FILTRO).

   b) Posteriormente cada literal es procesado, separando las posibles
      palabras (o tokens) que lo constituyen (SCANNER).

   c) Cada palabra es buscada en los diccionarios por toda una familia
      de especialistas. Dependiendo de si la palabra es directamente
      correcta o de si tiene muchos errores este proceso se demorará
      más o menos. La PIZARRA controla este proceso y su resultado es
      una gama de posibles literales, constituidos por variantes de
      palabras. En la decisión sobre que variantes de palabras se
      eligen influyen las opiniones, coincidentes o discrepantes, de
      los diferentes especialistas y la importancia relativa de cada
      uno de ellos.

   d) La gama de posibles literales es procesada con el diccionario de
      SINONIMOS, sustituyéndose cada palabra por su sinónimo o
      sinónimos principales.  Dependiendo de si para cada palabra
      existen uno o varios sinónimos, la gama de literales originales
      puede simplificarse o complicarse.

   e) Cada literal, resultado de la fase anterior es normalizado según
      una forma CANONICA, ello facilita su confrontación con la tabla
      original de codificación.

   f) Finalmente, cada literal canónico (CANON) es confrontado con una
      versión canónica de la tabla de codificación. Devolviéndose los
      resultados a la pizarra.

   g) Cuando la pizarra dispone de todas las posibles variantes
      (SOLUCIONES) de codificación decide:
      =) bien cual de ellas es la correcta,
      =) bien que no dispone de criterios suficientes para discernir
         entre varias (en este caso y en codificación asistida se pide
         ayuda al usuario) o
      =) bien que ninguna de las soluciones propuestas es
         suficientemente válida.
  

+--------------------------------------------------------------------+
| 3.- CONFIGURACION.                                                 |
+--------------------------------------------------------------------+

Desde el mismo menú anterior ([Alt-U]) se puede acceder a una ventana
de configuración de esta versión de SIC, cuyas opciones son:

  a) Test en partes (S/N): Que permite decir si se desea o no realizar
     una verificación de palabras durante la entrada de datos.

  b) Control de pizarra (S/N):  Si se pone a "S" esta versión de SIC
     muestra, en cada paso de codificación, sus resultados
     intermedios.  Ello permite entender su funcionamiento interno.

  c) Modo de funcionamiento respecto a los sinónimos. SIC posee 2
     modos de trabajo (no modificable):

     =) Relación Palabras N:1 Principal (Sinónimos sencillos).
     =) Relación Palabras N:M Principal (Sinónimos complejos).

     Esto es:

     =) Si se dá el caso que en cada familia de sinónimos, todos
        con el mismo significado, puede escogerse, siempre, una sóla
        palabra principal representante de todos (relación N:1).

     =) O si por el contrario, una palabra puede tener varios
        sinónimos, con diferentes significados, dependiendo del
        contexto en el que se utilice (relación N:M).

     El diccionario de sinónimos de esta versión de SIC pertenecen a
     al segundo caso.

  d) Sonido (en décimas de segundo):  Si se pone un entero superior a
     cero SIC generará un pitido en cada fase de codificación.
     Permite, por tanto, controlar, de forma aproximada, la duración
     de las diferentes fases de codificación.

  e) Filtros de palabras y de códigos que facilitan a SIC la taréa de
     aceptar o rechazar palabras parecidas o códigos parecidos.  El
     comportamiento de SIC es muy dependiente de estos dos parámetros.

     =) Valores muy altos, cercanos a la unidad, harán que SIC tenga
        un comportamiento muy estricto, dando gran seguridad a su
        codificación, pero por el contrario rechazando algunos
        literales por pocas de diferencias.

     =) Valores muy bajos, cercanos al cero, harán que SIC tenga un
        comportamiento muy flexible, encontrando posibles soluciones
        para casi todo, pero generando, a menudo, excesivas variantes.

     Dependiendo del contexto de aplicación y de las restricciones que
     deban cumplirse deberán ajustarse dichos parámetros.  Por
     ejemplo, en un mismo dominio, para la verificación en entrada
     debe utilizarse un filtro de palabras más bajo que el que se
     utilizaría para la codificación asistida.
  

+--------------------------------------------------------------------+
| 4.- INSTALACION Y ARRANQUE.                                        |
+--------------------------------------------------------------------+

Cree un subdirectorio en su disco duro, por ejemplo, de nombre SIC.

C:\> MKDIR SIC

Copie el contenido del disco de distribución en el subdirectorio
subdirectorio anterior.

C:\> COPY A:*.* SIC

Ejecute el fichero SICDemo.Bat.

C:\> CD SIC
C:\> SICDEMO

Todo ello puede realizarse, directamente con el programa Instala.Bat

C:\> A:INSTALAR A: C:

SIC puede ejecutarse directamente sobre el disco flexible de
distribución, pero los tiempos de respuesta pueden ser desesperantes.

Si en el momento de ejecución de SIC y tras pulsar el [Intro]
correspondiente, pulsa la tecla [Del] (Suprimir) entra en un menú de
autoconfiguración del interfaz de usuario de la aplicación SIC.  Desde
este menú se puede modificar algunas de las caracteristicas del
interfaz de usuario de SIC.

De este menú se sale con la tecla escape [Esc].  Si algunas de las
opciones de este menú le da errores, NO SE PREOCUPE, está buscando
Pixmaps o configuraciones del entorno de desarrollo McEQ sobre el que
está construido SIC y que no se distribuyen junto a él.
  

+--------------------------------------------------------------------+
| 5.- CONTACTO.                                                      |
+--------------------------------------------------------------------+

Para cualquier cuestión o consulta no dude en ponerse en contacto con
nosotros:

                                 EQ Sistemas Inteligentes

+--------------------------------------------------------------------+
| GRACIAS POR SU ATENCION.                                           |
+--------------------------------------------------------------------+
  

Herramienta TIRS, IBM

Profesor del curso «Desarrollo de sistemas basados en el conocimiento con la herramienta TIRS». Dos ediciones, la primera para El Corte Inglés y la segunda para el Instituto Nacional de Estadística (INE).

  • Teacher, «IBM Tirs Tool», National Statistics Institute & El Corte Ingles, 2 editions, Madrid, 1993.
  • Profesor, «Herramienta Tirs de IBM», Instituto Nacional de Estadística & El Corte Inglés, 2 ediciones, Madrid, 1993.

Sigart Bulletin, ACM Press

Referencia de mi tesis doctoral en el número 1, del volumen 4, de la revista Sigart Bulletin, de ACM Press. Edición al cuidado de W. Lewis Johnson, USC, Information Sciences Institute, California, USA.

  • Doctoral thesis referenced in the «Sigart Bulletin», volume 4, issue 1, ACM Press, Information Sciences Institute, California, January of 1993.
  • Referencia de mi tesis doctoral en el «Sigart Bulletin», volumen 4, número 1, ACM Press, Information Sciences Institute, California, enero de 1993.