Organização de código e refatoração

Introdução ao Controle de Versão de Dados com DVC

Ravi Bhadauria

Machine Learning Engineer

Prototipagem vs código de produção

  • Prototipar código permite iterar rápido
  • Mas não serve para produção
    • Sem testes e sujeito a erros
    • Pouco modular, com blocos repetidos
    • Provavelmente não reprodutível
Introdução ao Controle de Versão de Dados com DVC

Características de um bom código de produção

  • Reprodutível: recriar as mesmas saídas em ambientes e tempos diferentes

  • Modular: escrito em módulos distintos, independentes e testáveis

  • Consistente: única fonte da verdade para todos os parâmetros

    • Um arquivo de configuração/parâmetros

Um diagrama esquemático mostrando três propriedades do código de produção

Introdução ao Controle de Versão de Dados com DVC

Arquivos de configuração e YAML

  • Arquivos devem estar em formato compatível

    • YAML, JSON, TOML, Python
    • Padrão é params.yaml
  • Vamos usar YAML

    • YAML Ain't Markup Language
    • Permite um formato padrão para trocar dados entre linguagens ou apps
    • Formato simples e limpo
    • Extensões válidas: .yaml ou .yml
1 https://dvc.org/doc/command-reference/params#description
Introdução ao Controle de Versão de Dados com DVC

Sintaxe YAML

  • Especifique parâmetros como dicionários

    • Chaves e valores separados por :
  • Comentários começam com #

  • Tipos de dados:

    • Integer, Floats, Strings
  • Estruturas de dados:

    • Arrays
    • Dicionários aninhados
  • Indentação é importante

# Key-value pairs
a: 1
b: 1.2
c: "String value"
# Arrays
a: [1, 2.2, 3, 4.8]
b:
  - 5
  - "String value"
# Nested dictionaries
a:
  b: "Some value"
  c: "Some other value"
Introdução ao Controle de Versão de Dados com DVC

Exemplo de arquivo de configuração

# Data preprocessing paramters
preprocess:
  ...
  target_column: RainTomorrow
  categorical_features:
    - Location
    - WindGustDir
    - ...

# Model training/evaluation paramters train_and_evaluate: rfc_params: n_estimators: 2 ...
Introdução ao Controle de Versão de Dados com DVC

Exemplo de função modular

# In model.py
def evaluate_model(model, X_test, y_test):
    """Evaluate a model on a test set and return metrics."""
    y_pred = model.predict(X_test)
    precision = precision_score(y_test, y_pred)
    ...
    return { "accuracy": accuracy, "precision": precision,
        "recall": recall, "f1_score": f1 }
# In entry-point code (train_and_evaluate.py)
from model import evaluate_model
metrics = evaluate_model(model, X_test, y_test)
Introdução ao Controle de Versão de Dados com DVC

Exemplo de layout de projeto

Imagem do layout de código em um repositório de Machine Learning

Introdução ao Controle de Versão de Dados com DVC

Vamos praticar!

Introdução ao Controle de Versão de Dados com DVC

Preparing Video For Download...