Reflexiones sobre Machine Learning y los ingenieros de software.

Me pareció interesante el articulo  Machine Learning Driven Programming: A New Programming For A New World.

Uno de sus párrafos dice:

The software engineer is out of the loop. Instead, data flows into a machine learning component and a representation flows out.


lo cual me hizo presta mas atención aun.

Para algunos problemas, ya las computadoras pueden realizar un mejor aproximación a las soluciones uqe podemos lograr con programas tradicionales. La mayoría de estos problemas tienen muchos datos, salidas conocidas y no varían mucho a través del tiempo. 

Por ejemplo, reconocer rostros, reconocer imágenes, clasificar huellas, detección de patrones, clasificación de textos libres son buenos candidatos para hacer un modelo matemático (redes neuronales o algún otro) y sustituir parte de los programas que hasta ahora hacemos en forma manual y ya incorporarlos a nuestros sistemas. 

Tal como dice el articulo, se va a necesitar menos ingenieros de software y mas especialistas en los datos  Ofertas como Tensorflow o Watson hacen cada vez mas fácil incorporar esto a nuestras aplicaciones. 

Ejemplo
Supongamos que quiero sustituir un programa hecho a mano de Liquidación de Sueldos por un algoritmo generado por una maquina. 
 
Debería conseguir un conjunto suficientemente grande de datos del tipo

(Variables de Entrada, Variables de Salida)

donde la variable de entrada serian todas las que hoy necesitan para realizar la liquidación de sueldos por ejemplo horas trabajadas, días trabajados, días de licencia, salario mensual, jornal, edad, antigüedad, retenciones judiciales, etc

Las salidas serian lo que sale en un recibo de sueldos, Salario, impuestos, retenciones, etc. 

Divido los datos en datos de entrenamiento y datos de prueba. 

Entrenaría al modelo  hasta que los resultados tengan diferencias menores a un limite preestablecido. y después hay que chequear con los datos de prueba, para comprobar que con datos diferentes a los del entrenamiento, sigue dando resultados correctos. 

La duda es si siempre puedo conseguir un modelo que aproxime bien los datos, en tiempos aceptables. 

Este ya es un punto interesante, el modelo se acepta cuando es "suficientemente exacto". 
En programas hechos por humanos, se tiene la sensación que son correctos y calculan bien los sueldos para el 100% de los casos, cosa que los informáticos sabemos que s muy difícil de aceptar. 

Sustituyendo programas por modelos, se hace mas visible que la solución es un buena aproximación a la solución, pero nunca 100% exacta, lo cual es algo bueno. 

Mantenimiento. Que pasa cuando cambia la realidad?
Para seguir con el ejemplo, que pasa si el gobierno define un cambio en la forma en que se liquidan los sueldos?.  Por ejemplo, define que hay que pagar 1000 $ adicionales por cada persona que tenga mas de 5 años de antigüedad.

El especialista de los datos, debería modificar los datos de entrenamiento y para cada persona que tenga mas de 5 años de antigüedad, debería modificar la salida en 1000$ y calcular los impuestos y demás. Una vez terminado esto, debería volver a entrenar al  modelo y repetir el proceso. 

Pruebas
Otro articulo, (Is artificial intelligence in software testing coming to you?)  habla sobre como puede usarse la inteligencia artificial para probar nuestros sistemas. 

Otras tareas de la construcción de software (deploy, seguridad, requerimientos, documentación, mesa de ayuda) también pueden verse afectadas con uso de Machine Learning en el proceso.  

Conclusiones
Por ahora no tengo conclusiones para sacar, pero si es claro, es que todos los ingenieros en sistemas y programadores tenemos que prestar atención a estas tecnologías, pues van a afectar nuestro futuro (y nuestro presente) en forma muy significativa. Hay mucho para aprender y muchos problemas nuevos por resolver. 

Comentarios

Entradas más populares de este blog

El Sordo

Paleta de colores en GeneXus