Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
Esse recurso está em Visualização Pública. Os administradores do workspace podem controlar o acesso a esse recurso na página Visualizações . Consulte Gerenciar visualizações do Azure Databricks.
Feature Views permitem treinar modelos com cálculo de atributos correto em um determinado ponto no tempo e busca automática de atributos durante a inferência. Para obter informações sobre como definir exibições de recursos, consulte Exibições de Recursos.
Requisitos
- Os atributos devem ser criados como visões de atributos. Consulte Visualizações de recursos.
Métodos de API
create_training_set()
Depois de criar Exibições de Recursos, a próxima etapa é criar dados de treinamento para seu modelo. Para fazer isso, passe um conjunto de dados rotulado para create_training_set, o que garante automaticamente a computação precisa pontual de cada valor de característica.
Por exemplo:
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 integrar os dados originais de treinamento com recursos calculados dinamicamente em um momento no tempo.
O df argumento deve atender aos seguintes requisitos:
- Deve conter todas as colunas de entidade referenciadas por definições de funcionalidades.
- Deve conter a coluna série temporal referenciada por definições de características.
- Deve conter todas as colunas declaradas em qualquer
RequestSourceesquema. Os tipos são validados em relação ao esquema declarado. Incompatibilidades geram um erro (sem conversão implícita). - Deve conter coluna(s) de etiqueta.
- O conjunto de nomes de coluna de entidade, nomes de coluna de série temporal e nomes de coluna de recursos de solicitação deve ser globalmente exclusivo em todas as origens.
Correção de ponto no tempo: para agregação e recursos ColumnSelection apoiados por uma origem de tabela, 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 de dados futuros no treinamento do modelo. Para RequestSource atributos, o valor é obtido diretamente da linha do DataFrame rotulada.
log_model()
Use o MLflow para registrar um modelo com metadados de recurso para acompanhamento de linhagem e pesquisa automática de recursos durante a inferência:
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 variante do modelo MLflow a ser usado, como mlflow.sklearn ou mlflow.xgboost.
Modelos registrados com um TrainingSet rastreiam automaticamente a linhagem dos recursos usados no treinamento. Quando o conjunto de treinamento inclui recursos RequestSource, as colunas RequestSource são adicionadas à assinatura do modelo do MLflow como entradas necessárias. Isso garante que o esquema de API do endpoint de serviço reflita os campos que os chamadores devem fornecer no momento da inferência. Para obter detalhes, consulte Treinar modelos com tabelas de recursos.
score_batch()
Execute a inferência em lote com a busca automática de características.
FeatureEngineeringClient.score_batch(
model_uri: str, # URI of logged model
df: DataFrame, # DataFrame with entity keys and timestamps
) -> DataFrame
score_batch usa os metadados de recursos armazenados com o modelo para calcular automaticamente os recursos temporais corretos para uso na inferência, garantindo consistência com o treinamento. Para obter detalhes, consulte Treinar modelos com tabelas de recursos.
Fluxo de trabalho de exemplo
import mlflow
from databricks.feature_engineering import FeatureEngineeringClient
from sklearn.ensemble import RandomForestClassifier
fe = FeatureEngineeringClient()
# Assume features are registered in UC
# labeled_df should have columns "user_id", "transaction_time", and "is_fraud"
# 1. Create training set using Feature Views
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 and timeseries columns
# used during training. Features are automatically computed.
predictions = fe.score_batch(
model_uri="models:/main.ecommerce.fraud_model/1",
df=inference_df,
)
predictions.display()
Treinamento com recursos do RequestSource
Quando o modelo exigir dados fornecidos em tempo de inferência (como detalhes da transação de uma chamada à API), use recursos RequestSource junto com recursos com suporte de tabela. Durante o treinamento, colunas RequestSource são extraídas do DataFrame rotulado.
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
DeltaTableSource, Feature, FieldDefinition, RequestSource,
ScalarDataType, ColumnSelection,
)
fe = FeatureEngineeringClient()
# RequestSource provides transaction data at inference time
request_source = RequestSource(
schema=[
FieldDefinition(name="transaction_amount", data_type=ScalarDataType.DOUBLE),
FieldDefinition(name="vendor_id", data_type=ScalarDataType.STRING),
FieldDefinition(name="transaction_id", data_type=ScalarDataType.STRING),
FieldDefinition(name="transaction_time", data_type=ScalarDataType.DATE),
]
)
delta_source = DeltaTableSource(
catalog_name="catalog",
schema_name="schema",
table_name="vendor_data",
)
# A column selection feature from the request source (pass-through)
latest_transaction_amount = Feature(
source=request_source,
function=ColumnSelection("transaction_amount"),
name="latest_transaction_amount",
)
# A lookup feature from a delta table
vendor_category = Feature(
source=delta_source,
function=ColumnSelection("vendor_category"),
entity=["vendor_id"],
timeseries_column="transaction_time",
name="vendor_category",
)
# labels_df must contain: transaction_id, transaction_time, vendor_id,
# transaction_amount, and the label column.
ts = fe.create_training_set(
df=labels_df,
features=[latest_transaction_amount, vendor_category],
label="is_fraud",
exclude_columns=["card_id"],
)
import mlflow
from sklearn.ensemble import RandomForestClassifier
with mlflow.start_run():
training_df = ts.load_df().toPandas()
X = training_df.drop(columns=["is_fraud"])
y = training_df["is_fraud"]
model = RandomForestClassifier().fit(X, y)
# log_model() adds RequestSource columns to the MLflow model signature
fe.log_model(
model=model,
artifact_path="fraud_model",
flavor=mlflow.sklearn,
training_set=ts,
registered_model_name="catalog.schema.fraud_model",
)
Treinamento com recursos de streaming
Quando você define um Stream, o Databricks gerencia um pipeline de ingestão que grava dados de fluxo em uma tabela Delta.
create_training_set lê desta tabela de ingestão e executa junções pontuais em relação ao DataFrame rotulado, assim como os recursos de lote de um DeltaTableSource. Para obter detalhes sobre a configuração da ingestão, o backfill e a eliminação de duplicatas, consulte Ingestão e provisionamento.
Exemplo
from databricks.feature_engineering import FeatureEngineeringClient
from databricks.feature_engineering.entities import (
StreamSource,
Feature,
AggregationFunction,
Sum,
RollingWindow,
)
from datetime import timedelta
fe = FeatureEngineeringClient()
# Define a streaming feature
stream_source = StreamSource(full_name="my_catalog.my_schema.my_stream")
streaming_feature = Feature(
name="user_purchase_sum",
source=stream_source,
entity=["value.user_id"],
timeseries_column="value.event_time",
function=AggregationFunction(
operator=Sum(input="value.amount"),
time_window=RollingWindow(window_duration=timedelta(hours=1)),
),
)
# Create training set — reads from the ingestion table
# labeled_df must contain "user_id", "event_time", and label columns.
# Entity and timeseries columns use leaf node names (not value. prefixes).
training_set = fe.create_training_set(
df=labeled_df,
features=[streaming_feature],
label="is_fraud",
)
training_df = training_set.load_df()
Combinando funcionalidades em lote e de streaming
Os recursos de processamento em lote e em fluxo contínuo podem ser usados em conjunto no mesmo conjunto de treinamento e modelo. No momento da veiculação, os recursos em lote são consultados em repositórios offline ou online, e os recursos de streaming são consultados em repositórios online.
training_set = fe.create_training_set(
df=labeled_df,
features=[batch_feature, streaming_feature],
label="is_fraud",
)
O modelo registrado com log_model() realiza pesquisas de características na loja virtual e configura a assinatura do modelo para ambos os tipos de fonte.
O que atinge o modelo bruto durante o tempo de serviço
O wrapper de modelo do Repositório de Recursos filtra as colunas antes de passá-las para o modelo bruto:
| Tipo de coluna | Atinge o modelo interno? |
|---|---|
Saídas de recursos explícitas (ColumnSelection, agregação) |
Sim |
RequestSource colunas declaradas como recursos |
Sim |
| Colunas de entidade (chaves de consulta) | Não (a menos que explicitamente declarado como um recurso) |
| Colunas de timeseries | Não (a menos que explicitamente declarado como um recurso) |