Deja de codificar duro en un proyecto de ciencia de datos – usa archivos de configuración en su lugar.

Usa archivos de configuración en lugar de codificar duro en un proyecto de ciencia de datos.

Cómo interactuar eficientemente con archivos de configuración en Python.

Problema

En tu proyecto de ciencia de datos, ciertos valores tienden a cambiar con frecuencia, como los nombres de archivo, las características seleccionadas, la relación de división de entrenamiento y prueba y los hiperparámetros para tu modelo.

Está bien codificar estos valores cuando se escribe código ad-hoc para pruebas de hipótesis o propósitos de demostración. Sin embargo, al expandirse la base de código y el equipo, es esencial evitar la codificación rígida porque puede dar lugar a varios problemas:

  • Mantenibilidad : Si los valores están dispersos en toda la base de código, actualizarlos de manera consistente se vuelve más difícil. Esto puede llevar a errores o inconsistencias cuando se deben actualizar los valores.

  • Reutilización : La codificación rígida de valores limita la reutilización del código para diferentes escenarios.

  • Preocupaciones de seguridad : Codificar de forma rígida información confidencial como contraseñas o claves de API directamente en el código puede ser un riesgo de seguridad. Si se comparte o expone el código, podría llevar a acceso no autorizado o brechas de datos.

  • Pruebas y depuración : Los valores codificados de forma rígida pueden hacer que la prueba y depuración sean más desafiantes. Si los valores están cableados en el código, se vuelve difícil simular diferentes escenarios o probar casos límite de manera efectiva.

Solución – Archivos de configuración

Los archivos de configuración resuelven estos problemas al ofrecer los siguientes beneficios:

  • Separación de la configuración del código : Un archivo de configuración le permite almacenar los parámetros por separado del código, lo que mejora la mantenibilidad y legibilidad del código.

  • Flexibilidad y modificabilidad : Con un archivo de configuración, puedes modificar fácilmente las configuraciones del proyecto sin modificar el código en sí mismo. Esta flexibilidad permite experimentación rápida, ajuste de parámetros y adaptación del proyecto a diferentes escenarios o entornos.

  • Control de versiones : Almacenar el archivo de configuración en el control de versiones te permite rastrear los cambios en la configuración con el tiempo. Esto ayuda a mantener un registro histórico de las configuraciones del proyecto y facilita la colaboración entre los miembros del equipo.

  • Implementación y producción : Al implementar un proyecto de ciencia de datos en un entorno de producción, un archivo de configuración permite la personalización fácil de ajustes específicos del entorno de producción sin necesidad de modificaciones de código. Esta separación de configuración del código simplifica el proceso de implementación.

Introducción a Hydra

Entre las numerosas bibliotecas de Python disponibles para crear archivos de configuración, Hydra se destaca como mi herramienta preferida de gestión de configuración debido a su impresionante conjunto de características, que incluyen:

  • Acceso conveniente a parámetros
  • Sobreescritura de configuración de línea de comandos
  • Composición de configuraciones de múltiples fuentes
  • Ejecución de múltiples trabajos con diferentes configuraciones

Profundicemos en cada una de estas características.

Sientete libre de jugar y bifurcar el código fuente de este artículo aquí:

Ver en GitHub

Acceso conveniente a parámetros

Supongamos que todos los archivos de configuración se almacenan en la carpeta conf y todos los scripts de Python se almacenan en la carpeta src.

.
├── conf/
│   └── main.yaml
└── src/
    ├── __init__.py
    ├── process.py
    └── train_model.py

Y el archivo main.yaml se ve así:

Acceder a un archivo de configuración dentro de un script de Python es tan sencillo como aplicar un solo decorador a su función de Python.

Para acceder a un parámetro específico del archivo de configuración, podemos usar la notación de punto (.e.g., config.process.cols_to_drop ), que es una forma más limpia e intuitiva en comparación con el uso de corchetes (e.g., config['process']['cols_to_drop'] ).

Este enfoque directo le permite recuperar sin esfuerzo los parámetros deseados.

Anulación de la configuración de línea de comandos

Supongamos que está experimentando con diferentes test_size . Es muy lento abrir repetidamente su archivo de configuración y modificar el valor de test_size.

Afortunadamente, Hydra hace que sea fácil sobrescribir directamente la configuración desde la línea de comandos. Esta flexibilidad permite ajustes rápidos y ajustes finos sin modificar los archivos de configuración subyacentes.

Composición de configuraciones a partir de múltiples fuentes

Imaginemos que queremos experimentar con varias combinaciones de métodos de procesamiento de datos e hiperparámetros del modelo. Si bien podríamos editar manualmente el archivo de configuración cada vez que ejecutamos un nuevo experimento, este enfoque puede ser lento.

Hydra permite la composición de configuraciones a partir de múltiples fuentes con grupos de configuración. Para crear un grupo de configuración para el procesamiento de datos, cree un directorio llamado process para contener un archivo para cada método de procesamiento:

.
└── conf/
    ├── process/
    │   ├── process1.yaml
    │   └── process2.yaml
    └── main.yaml

Si desea utilizar el archivo process1.yaml de forma predeterminada, agréguelo a la lista predeterminada de Hydra.

Siga los mismos procedimientos para crear un grupo de configuración para los hiperparámetros de entrenamiento:

.
└── conf/
    ├── process/
    │   ├── process1.yaml
    │   └── process2.yaml
    ├── train/
    │   ├── train1.yaml
    │   └── train2.yaml
    └── main.yaml

Establezca train1 como el archivo de configuración predeterminado:

Ahora, al ejecutar la aplicación, se utilizarán los parámetros en el archivo process1.yaml y el archivo model1.yaml de forma predeterminada:

Esta capacidad es particularmente útil cuando se necesitan combinar sin problemas diferentes archivos de configuración.

Multi-ejecución

Supongamos que desea realizar experimentos con varios métodos de procesamiento, aplicar cada configuración uno por uno puede ser una tarea que consume mucho tiempo.

Afortunadamente, Hydra te permite ejecutar la misma aplicación con diferentes configuraciones simultáneamente.

Este enfoque simplifica el proceso de ejecutar una aplicación con varios parámetros, lo que finalmente ahorra tiempo y esfuerzo valiosos.

Conclusión

¡Felicidades! Acabas de aprender sobre la importancia de utilizar archivos de configuración y cómo crearlos usando Hydra. Espero que este artículo te brinde el conocimiento necesario para crear tus propios archivos de configuración.

Khuyen Tran es una prolífica escritora de ciencia de datos y ha escrito una impresionante colección de temas útiles de ciencia de datos junto con código y artículos. Actualmente, Khuyne está buscando un rol de ingeniera en aprendizaje automático, un rol de científica de datos o un rol de defensora del desarrollador en Bay Area después de mayo de 2022, así que por favor contáctala si estás buscando a alguien con sus habilidades.

Original. Repostead con permiso.