Lanzamiento público de SoAM

La forma más fácil de crear y ejecutar sus canales de previsión de series temporales.

September 15, 2021
Modern Data Platform

¿Qué es SoAM?

SoAm es una biblioteca diseñada por chucho. Su objetivo es proporcionar un marco en el que se incluyan las pilas para la previsión y la detección de anomalías en los oleoductos. SoAm es el resultado de múltiples experiencias de proyectos, de ahí su nombre: Son of a Mutt = SoAm.

Desarrollamos esta biblioteca porque nos dimos cuenta de la necesidad de un marco sólido y claro para la previsión de proyectos y no encontramos una solución de código abierto que se ajustara a todas nuestras necesidades. Como Mutters, uno de nuestros valores fundamentales es Nerds de los datos, sobre esto: siempre estamos buscando formas de optimizar nuestro tiempo y productividad cuando trabajamos con datos. Al desarrollar SoAM, el mismo diseño y código podrían reutilizarse en diferentes proyectos cuando fuera necesario.

SoAm se diferencia de otras soluciones al proporcionar un marco integral para los productos de previsión y detección de anomalías. Desde la extracción de los datos hasta la presentación de los resultados. En cada etapa, SoAm proporciona componentes listos para usar que le ayudarán a reducir el tiempo de desarrollo.

Los inicios y el camino hacia este lanzamiento público

Este largo camino comenzó el 21 de abril de 2020, cuando un par de Mutters tuvieron la brillante idea de empezar a desarrollar esta biblioteca y fusionaron la primera versión de SoAm.

Desde entonces, hemos girado e iterado continuamente sobre el alcance del proyecto, pero el objetivo principal siempre fue el mismo: ser el mejor marco de código abierto para productos de datos de pronóstico de series temporales.

Cómo logramos construirlo

Creamos este proyecto estableciendo metas ambiciosas para cada Sprint y dividiendo la carga de trabajo entre los Mutters involucrados. Por lo general, nos reunimos dos veces por semana. Los viernes son para planificar y ponerse al día y los lunes para programar en vivo. Durante la semana, nuestra prioridad es siempre establecido en proyectos externos, pero de vez en cuando, encontramos algunos períodos que podemos dedicar a contribuir y enviar código a esta biblioteca.

También incentivamos a los nuevos Mutters a resolver problemas durante su período de incorporación para que puedan aprender sobre nuestras metodologías y esquemas de trabajo en un entorno seguro y, lo que es más importante, ¡conocer nuevos colegas!

Características principales

Podemos entender la SoAM dividiéndola en cuatro características principales, donde cada una de ellas representa una etapa en un proceso de previsión. Dividimos cada etapa en diferentes pasos conceptuales y utilizamos Prefecto tareas y flujos que nos ayudan a crear estas canalizaciones de datos.

1. Extracción

Este módulo lo ayudará a extraer y agregar sus datos de cualquier dato SQL fuente de datos y proporcionarle una Pandas DataFrame para una fácil manipulación.

2. Procesamiento previo

Una vez cargados los datos, SoAM le proporciona herramientas listas para usar para realizar tareas de preprocesamiento, como cualquier Transformación de Scikit-Learn --como el Escalador Min-Max-- o incluso personalizados. Además, puedes unir, concatenar, y rebanar estás cargado Pandas DataFrame con nuestros módulos integrados.

3. Previsión

Dado que SoAm está diseñado para la previsión de series temporales, ya hemos incorporado métodos de previsión como los de Statsmodel Suavizado exponencial y SARIMAX, de Uber Órbita, y de Facebook Profeta para que puedas ajustar y comparar fácilmente el rendimiento de los modelos. Por supuesto, no limitamos la usabilidad solo a estos modelos, sino que siempre puedes importar tus algoritmos de previsión preferidos.

4. Posprocesamiento

Después de hacer previsiones para períodos futuros, es posible que desees conservar los resultados en algún lugar para detectar anomalías, hacer pruebas retrospectivas de tus experimentos, graficar los resultados e incluso informarlos por correo electrónico o Slack a tus colegas.

Bueno... entendemos que esto puede ser difícil de cubrir. La buena noticia es que SoAM también le ayudará a realizar estas tareas en un abrir y cerrar de ojos.

Ejemplo de código simple de extremo a extremo

Así es como se vería un caso de uso simple y genérico de SoAm:

#1. Extracción# Inicialización del objeto Extractor con el cliente de base de datos y el nombre de la tabla.fromsoam.workflow.Time_Series_ExtractorImportTimeSeriesExtractor=TimeSeriesExtractor (db=db_client, table_name='table_name') # 2. Preprocesamiento# Inicialización de objetos Transformer con una transformación de Scikit-Learn elegida.fromSOAM.WorkflowImportTransformerFromSklearn.preprocessingImportMinMaxScalerScaler=minMaxScaler () transformer=Transformer (transformer=scaler) # El método add_future_dates se refiere a la cantidad de períodos que predeciremos más adelante, # creamos una tarea perfecta para este trabajo.fromsoamutili.ties.utilsimportadd_future_datesfromprefectimporttask @task () defadd_future_dates (df:pd.DataFrame) :df=add_future_dates (df, periods=periods, frequency="d») devuelve df# 3. Previsión# Inicialización del objeto Forecaster con una longitud de salida igual a la cantidad de períodos que predeciremos. fromSOAM.models.ProphetImportSKProphetFromSOAM.workflow.ForecasterImportForecasterMY_MODEL=SKProphet () Forecaster=Forecaster=Forecaster (my_model, output_length=periods) # 4. Posprocesamiento# Genera un gráfico y envíalo por correo electrónico.# 4a. Inicialización del objeto SOAM ForecastPlotterTask.fromSOAM.plotting.Forecast_PlotterImportForecastPlotterTaskFromSOAM.ConstantsImportPlot_ConfigFromCopyImportDeepCopyFromPathLibImportPathPlot_Config=DeepCopy (PLOT_CONFIG) FORECAST_PLOTTER=ForecastPlotterTask (PATH=PATH ('img_path'), metric_name="metric_metri= c_name», plot_config=plot_config) # 4b. Inicialización del objeto SOAM Mail Report.fromSOAM.reporting.mail_reportImportMailReportTaskmail_report=MailReportTask (mail_recipients_list= [» mail@muttdata.ai «], metric_name="metric_name») # 5. SoamFlow# Uso de SoamFlow para ejecutar todo como una canalización perfecta.FromSoam.CoreImportSoamFlowWithSoamFlow (name="flow») asflow: # extractionDF=extractor (build_query_kwargs=query_dict) # PRE ProcessingDF ['column_name'] =transformer (df ['column_name']) df=add_future_dates (df=df) # ForecastingPredictions, time_series, model=forecaster (time_series=df) # PlottingForecast_plotter (time_series, predicciones) # ReportingMail_Report (current_date="current_date», plot_filename='img_path.png') # Ejecuta el pipelineflow.run () # ¡Listo! # Ahora revisa tu bandeja de entrada y encontrarás un correo electrónico parecido al siguiente:

¿Cómo lo usamos hoy en día?

Por supuesto, SoAm está presente en muchos de nuestros proyectos. Un caso de uso común sería iniciar fácilmente un proceso de detección de anomalías para monitorear datos de series temporales. En uno de esos casos, necesitábamos poner en marcha rápidamente un canal para detectar valores anómalos en los KPI empresariales como parte de la implementación de una plataforma DataOps para mejorar la creación y la gestión de los canales de datos en toda la organización. Para ello, aprovechamos los módulos SOaM para extraer datos de series temporales de Amazon Redshift, entrene un modelo a partir de los datos, detecte anomalías, trace los resultados y envíe un informe a un Slack canal. Hemos puesto en marcha esta canalización correctamente con un mínimo de código personalizado, solo hemos añadido una lógica de trazado personalizada con fines de estilo (cópiala y pégala desde tu Cuaderno Jupyter!).

De esta manera, SoAm reduce significativamente nuestra carga de trabajo y estructura nuestro código a la manera de Mutt. En la imagen de abajo puedes ver cómo recibimos este informe en nuestro canal de Slack. Hemos programado esta canalización para que funcione a diario con Flujo de aire Apache y obtuvo resultados positivos al permitir al cliente tomar decisiones basadas en datos con un mínimo esfuerzo de desarrollo.

En otro caso, necesitábamos detectar e informar sobre desviaciones significativas en los datos de entrada de un asignador automático de presupuestos publicitarios, lo que nos ayudó a reducir las pérdidas al ajustar los parámetros del asignador en función de los períodos volátiles.

Cómo empezar

¿Ya te hemos llamado la atención? ¿Estás listo para empezar a usar SoAm? Relájese... tenemos lo que necesita. Mutters entiende la importancia de una documentación limpia y precisa, y SoAm no fue la excepción.

En primer lugar, puede echar un vistazo a nuestra Documentos de Sphinx para tener una visión general del proyecto.

De todos modos, si llegaste hasta aquí, probablemente estés deseando algún código, si ese es el caso, tenemos algunos nuevos Cuadernos Jupyter con ejemplos como nuestro Inicio rápido I y nuestro Inicio rápido II donde lo llevamos a descubrir cómo aprovechar las herramientas de SoAM de manera efectiva.

Eso no es todo, quizás se pregunte cómo será un producto de extremo a extremo que utilice SoAm. ¿Cómo integrarlo con otras herramientas como Flujo de aire Apache? Bueno... también tenemos documentación para eso. Consulta nuestro Producto de datos de extremo a extremo con SoAm publique para ver cómo se verá.

¿Cómo puedes usarlo?

Puede instalarlo directamente desde PyPI con un simple: pip install soam.

Consulta la sección de instalación en nuestra LÉEME para obtener más información sobre la instalación y los extras disponibles.

Cómo mantenemos una base de código limpia y escalable

Durante el desarrollo de SoAM, aplicamos prácticas eficientes para garantizar la calidad del código y las implementaciones sólidas. Esto nos ayuda a garantizar una base de calidad del código y a automatizar el proceso de implementación. Con esto queremos decir: - Realizar pruebas en el código con el pytest marco. - Actualización del REGISTRO DE CAMBIOS archivo. - Versionar el código con estándares de control de versiones semánticos. - Configurar ganchos previos a la confirmación y linting de código, como negro, pylint, mypy, y otros. - Documentar el código y ejecutarlo cadena de documentos controles para garantizar un porcentaje mínimo de cobertura de las cadenas de documentación. - Revisión del código entre pares (no puede fusionar a menos que un colega haya aprobado su solicitud). - Implementar la nueva versión en el registro de PyPI o GitLab.

Uno de nuestros valores fundamentales en Mutt es que somos Equipo abierto. Todos cometemos errores y necesitamos ayuda para solucionarlos. Fomentamos la seguridad psicológica. Cuando no sabemos algo pedimos consejo.

Esperamos que todos los que contribuyen a SoAm sigan este principio. Sé amable, no seas grosero, sé amable; aprende, enseña, pregunta y ayuda.

No dude en contribuir a nuestra biblioteca si lo desea, lo alentamos a que lo haga. Consulta nuestro Pautas de contribución para ver cómo hacer contribuciones útiles.

Próximos pasos

En cuanto a los planes y posibles lanzamientos futuros, algunas de las cosas que tenemos a nuestro alcance contemplan:

Nuestro equipo

Hay mucho trabajo detrás de esta biblioteca y un gran equipo responsable de ella. Reconocemos el esfuerzo de todos los fanáticos de los datos que están detrás de este desarrollo:

  • Alejandro Rusi
  • Diego Leguizamon
  • Diego Lizondo
  • Eugenio Scafati
  • Fabián Wolfmann
  • Federico Font
  • Francisco López Destain
  • Guido Trucco
  • Hugo Daniel Viotti
  • Juan Martín Pampliega
  • Pablo Andrés Lorenzatto
  • Wenceslao Villegas

Ha sido una gran experiencia construir SoAm juntos como equipo y estamos muy orgullosos del resultado.

¡Gracias a todos ellos!

Share article.
News & insights

Latest Insights

Muttdata
Empresa

¿Cómo sabes que es hora de hacer evolucionar tu marca?

Evolucionar nuestra marca para que esté a la altura de nuestro crecimiento
Read Article
Modern Data Platform

El lenguaje natural se une a los datos en tiempo real: análisis sin cuellos de botella

Obtenga información sin necesidad de conocimientos técnicos
Read Article
Paid Media Optimizer

No todos los optimizadores de medios online están diseñados de la misma manera

5 razones por las que deberías solicitar una demo
Read Article

Listo para desbloquear

¿el poder de los datos?