¿Por qué la Ciencia de Datos necesita de la Ingeniería de Software?

Escribe Alejandro Bianchi, Presidente de Liveware IS

En su publicación acerca de las tendencias en tecnología para el 2020, la IEEE Computer Society expone, entre otras, que el interés y crecimiento de las aplicaciones de software basadas en Inteligencia Artificial, en particular Machine and Deep Learning, (ML/DL), será una de las tendencias durante este año y los venideros. Nuevas industrias de bienes y servicios utilizarán esta tecnología para mejorar la experiencia de sus clientes, optimizar sus procesos operativos y/o crear nuevos modelos de negocios asistidos por este tipo de software. La llegada del 5G y la consolidación del uso de sensores inteligentes como la IoT, permitirá que nuevas áreas se vean beneficiadas por ML/DL tales como conducción autónoma, automatización industrial y procesamiento de lenguaje natural por mencionar algunos relevantes.

También, según la IEEE, no es solo en estos dominios donde la IA seguirá creciendo. El universo de los sistemas de misión crítica, (sistemas que si fallan hay riesgos de pérdida de vidas o catastróficas pérdidas para las empresas o los estados), tales como sistemas de defensa y seguridad, salud, sistemas de generación y distribución de energía, aplicaciones médicas y farmacéuticas, telecomunicaciones, gestión de rutas y transporte, entre otros.

Evidencia de que estos pronósticos son acertados es el hecho de la cantidad de proyectos que las empresas y organizaciones incluyen en sus prepuestos para la evaluación y/o desarrollo de este tipo de aplicaciones o el interés que se tiene en incorporar conocimientos específicos a través de cursos, tutoriales y/o posgrados. Es claro que es una tendencia que no va a decrecer, sino todo lo contrario.

Una primera reflexión sobre este informe, tiene que ver con el hecho de las ML/DL ya no solo son una solución en sí mismas, sino que comenzarán a formar parte de sistemas mucho más complejos en donde recibirán información de otros sistemas, se deberán integrar entre sí y los resultados que produzcan serán input a otras aplicaciones que deberán tomar sus resultados para procesar y resolver cuestiones del negocio bajo ciertas propiedades y restricciones. La otra reflexión, es más bien una pregunta: ¿Están las prácticas de desarrollo alienadas con las exigencias futuras? En nuestra experiencia, como consultor y como docente, me atrevo a decir que no, pero veamos por qué.

El ciclo más habitual para el desarrollo de una ML/DL es, haciendo una simplificación, más o menos de la siguiente forma: una instancia de exploración y otra de experimentación. En la primera el experto de dominio plantea el problema, identifica fuentes de datos y especifica el resultado buscado e interactúa con el científico de datos, (matemático o especialista en estadística y probabilidades quien además aprendió a programar en Phyton y/o en R), para transmitir su necesidad. La instancia de experimentación es trabajar los datos y buscar/elaborar y programar el algoritmo que resuelva el requerimiento. Esta etapa es iterativa y puede, dependiendo de la complejidad, llevar varias iteraciones, hasta que ambos actores concuerdan, sobre la base de algún soporte de pruebas, que la aplicación está dando los resultados esperados. El siguiente paso es la puesta en producción. O sea que se pasa del experimento exitoso a la producción.

Estando en producción surgen ciertos problemas relacionados con:

  • Performance, "la aplicación tarda demasiado en responder", "cuando hay más de una consulta se bloquea"
  • Integración, "te dejo la aplicación funcionando, como la integras con el core es problema de arquitectura"
  • Disponibilidad, "la aplicación tiene tres caídas por cada 10 horas de operación".
  • Confiabilidad, "es posible que hayan modificado alguna de las fuentes de datos, por eso el resultado es erróneo"

Estos problemas están asociados, entre otras cuestiones, a un acumulado de deuda técnica que, cuando no es gestionada adecuadamente, termina impactando en la calidad final de la aplicación. El punto es que esa ML/DL no termina de ser un "producto de Software", funcional y técnicamente robusto. Saber programar no implica saber fabricar productos de software y en un dominio que está adquiriendo cada vez más relevancia, se necesita integrar otras disciplinas asociadas a la Ingeniería para mitigar los riesgos expuestos. La convergencia de estas disciplinas es inevitable a medida que la IA tome mayor relevancia en los sistemas de las organizaciones. Esta convergencia se debe dar a partir de un trabajo integrado en donde cada uno de los roles deberá asumir nuevas responsabilidades:
  • Experto/Ingeniero de Dominio: Además de identificar los objetivos del negocio, plantear la necesidad, identificar los datos y las reglas de los mismos; debe saber identificar las propiedades o atributos de calidad que debe satisfacer la ML/DL en lo que hace a Rendimiento, Disponibilidad, Integración, Confiabilidad y expresar las restricciones que deben ser consideradas en el desarrollo.
  • Científico de datos: Además de experimentar/desarrollar el algoritmo que resuelve la necesidad, deberá incorporar mejores prácticas de desarrollo a partir de estándares, reúso y sinergia con los ingenieros.
  • Ingeniería: La ingeniería debe resolver las cuestiones técnicas de este tipo de aplicaciones a partir de identificar patrones de diseño de arquitectura que satisfagan las propiedades/atributos de calidad; por ejemplo, cómo resolvemos la semántica de los mensajes en una aplicación de tiempo real y/o streaming, cuáles son las mejores tácticas de integración entre ML/DL y entre estas y otras aplicaciones de la organización. Diseñar arquitecturas de referencia que potencien el reúso de soluciones. Identificar métodos y técnicas de verificación y validación, (A/B testing, Chaos Engineering). Asegurar la consistencia e integridad de las fuentes de datos, la gestión de configuración a todo nivel y la evaluación y selección de tecnologías; por mencionar algunas relevantes.
Si bien el ciclo de exploración y experimentación es válido para la instancia de aprendizaje y/o para ML/DL de baja criticidad; no lo es, a nuestro criterio, para desarrollos que impliquen mayor criticidad y complejidad por lo tanto la necesidad de la ingeniería se hace evidente más aún, cuando además hay integración con otro tipo de sistemas.

Las prácticas actuales de Ingeniería de Software pueden resolver algunos de los problemas planteados, pero es necesario explorar nuevos métodos que estén más adaptados a este tipo de desarrollo por lo que, creemos, se abren nuevos campos de investigación y desarrollo en donde tanto la industria como la academia tienen mucho para aportar en un trabajo conjunto tanto sea en la creación de nuevas herramientas y técnicas como en la formación de los futuros ingenieros.

La IA y en particular ML/DL, abren enormes posibilidades para mejorar la calidad de vida de la gente y el funcionamiento de las organizaciones, pero a medida que crece la criticidad de su aplicación se hace imperativo asegurar integridad, y consistencia por lo que disponer de una Ingeniería robusta se hace una condición más que necesaria.

(*) Alejandro Bianchi: Presidente de Liveware IS


Comentarios

Comparte tu opinión con los lectores