Pular para o conteúdo principal

Ensinando modelos com recurso declarativo

info

Beta

Este recurso é Beta e está disponível nas seguintes regiões: us-east-1 e us-west-2.

Esta página descreve como usar recursos declarativos para treinamento de modelos. Para informações sobre definição de recurso declarativo, veja Recurso declarativo.

Requisitos

Métodos da API

create_training_set()

Após criar o recurso declarativo, o próximo passo é criar os dados de treinamento para o seu modelo. Para fazer isso, passe um dataset de rótulo para create_training_set, o que garante automaticamente o cálculo preciso de cada valor de recurso em um determinado momento.

Por exemplo:

Python
FeatureEngineeringClient.create_training_set(
df: DataFrame, # DataFrame with training data
features: Optional[List[Feature]], # List of Feature objects
label: Union[str, List[str], None], # Label column name(s)
exclude_columns: Optional[List[str]] = None, # Optional: columns to exclude
) -> TrainingSet

Chame TrainingSet.load_df para join os dados de treinamento originais com o recurso de cálculo dinâmico pontual.

O argumento df deve atender aos seguintes requisitos:

  • Deve conter todos os entity_columns do recurso fonte de dados.
  • Deve conter timeseries_column do recurso fonte de dados.
  • Deve conter coluna(s) de rótulo.

Correção pontual: os recursos são calculados usando apenas os dados de origem disponíveis antes do carimbo de data/hora de cada linha, para evitar vazamento futuro de dados no treinamento do modelo. Os cálculos utilizam as funções de janelamento do Spark para maior eficiência.

log_model()

Você pode usar MLflow para log um modelo com metadados de recursos para acompanhamento de linhagem e busca automática de recursos durante a inferência:

Python
FeatureEngineeringClient.log_model(
model, # Trained model object
artifact_path: str, # Path to store model artifact
flavor: ModuleType, # MLflow flavor module (e.g., mlflow.sklearn)
training_set: TrainingSet, # TrainingSet used for training
registered_model_name: Optional[str], # Optional: register model in Unity Catalog
)

O parâmetro flavor especifica o módulo de sabor do modelo MLflow a ser usado, como mlflow.sklearn ou mlflow.xgboost.

Os registros de modelos com um TrainingSet rastreiam automaticamente a linhagem até o recurso usado no treinamento. Para mais detalhes, consulte ensinar modelos com tabelas de recursos.

score_batch()

Realizar inferência de lotes com busca automática de recursos:

Python
FeatureEngineeringClient.score_batch(
model_uri: str, # URI of logged model
df: DataFrame, # DataFrame with entity keys and timestamps
) -> DataFrame

score_batch Utiliza os metadados de recurso armazenados com o modelo para compute automaticamente o recurso correto em um determinado momento para inferência, garantindo a consistência com o treinamento. Para mais detalhes, consulte ensinar modelos com tabelas de recursos.

Exemplo de fluxo de trabalho

Python
import mlflow
from databricks.feature_engineering import FeatureEngineeringClient
from sklearn.ensemble import RandomForestClassifier

fe = FeatureEngineeringClient()

# Assume features were created with fe.create_feature()
# labeled_df should have columns "user_id", "transaction_time", and "is_fraud"

# 1. Create training set using declarative features
training_set = fe.create_training_set(
df=labeled_df,
features=features,
label="is_fraud",
)

# 2. Load training data with computed features
training_df = training_set.load_df()
X = training_df.drop("is_fraud").toPandas()
y = training_df.select("is_fraud").toPandas().values.ravel()

# 3. Train model
model = RandomForestClassifier().fit(X, y)

# 4. Log model with feature metadata
with mlflow.start_run():
fe.log_model(
model=model,
artifact_path="fraud_model",
flavor=mlflow.sklearn,
training_set=training_set,
registered_model_name="main.ecommerce.fraud_model",
)

# 5. Batch scoring with automatic feature lookup
# inference_df must contain the same entity_columns and timeseries_column
# used during training. Features are automatically computed.
predictions = fe.score_batch(
model_uri="models:/main.ecommerce.fraud_model/1",
df=inference_df,
)
predictions.display()