Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Esta página descreve como usar a correção pontual no tempo para criar um conjunto de dados de treino que reflita com precisão os valores das características no momento em que a observação do rótulo foi registada. Isso é importante para evitar o vazamento de dados, que ocorre quando você usa valores de recurso para treinamento de modelo que não estavam disponíveis no momento em que o rótulo foi gravado. Esse tipo de erro pode ser difícil de detetar e pode afetar negativamente o desempenho do modelo.
As tabelas de funcionalidades de séries temporais incluem uma coluna de chave de marca temporal que garante que cada linha no conjunto de dados de treino represente os valores de funcionalidades mais recentes conhecidos na altura da marca temporal da linha. Você deve usar tabelas de recursos de séries temporais sempre que os valores de recursos mudarem ao longo do tempo, por exemplo, com dados de séries temporais, dados baseados em eventos ou dados agregados por tempo.
O diagrama a seguir mostra como a chave de timestamp é usada. O valor da caraterística registado para cada carimbo de data/hora é o valor mais recente antes desse carimbo de data/hora, indicado pelo círculo laranja contornado. Se nenhum valor tiver sido registrado, o valor do recurso será nulo. Para obter mais detalhes, consulte Como funcionam as tabelas de recursos de séries temporais.
Nota
- Com o Databricks Runtime 13.3 LTS e superior, qualquer tabela Delta no Unity Catalog com chaves primárias e chaves de carimbo de data/hora pode ser usada como uma tabela de funcionalidades para séries temporais.
- Para melhor desempenho em consultas pontuais, a Databricks recomenda o clustering líquido (
databricks-feature-engineering0.6.0 e superiores) em tabelas de séries temporais. Veja Agrupamento líquido para tabelas e esquiva de dados. - A funcionalidade de pesquisa point-in-time é por vezes referida como "viagem no tempo". A funcionalidade de ponto no tempo no Databricks Feature Store não está relacionada com a viagem no tempo do Delta Lake.
Como funcionam as tabelas de características de séries temporais
Suponha que tenhas as seguintes tabelas de funcionalidades. Estes dados são retirados do notebook de exemplo.
As tabelas contêm dados do sensor que medem a temperatura, humidade relativa, luz ambiente e dióxido de carbono numa sala. A tabela de verdade de base indica se uma pessoa estava presente na sala. Cada uma das tabelas tem uma chave primária ('sala') e uma chave de timestamp ('ts'). Para simplificar, apenas os dados para um único valor da chave primária ('0') são mostrados.
A figura a seguir ilustra como a chave de carimbo de data/hora é usada para garantir a correção temporal exata em um conjunto de dados de treinamento. Os valores de características são correspondidos com base na chave primária (não mostrada no diagrama) e na chave de carimbo de data/hora, utilizando uma associação do tipo AS OF. A junção AS OF garante que o valor mais recente do recurso no momento da marca temporal seja usado no conjunto de treinamento.
Como mostrado na figura, o conjunto de dados de treinamento inclui os valores mais recentes das características para cada sensor antes da data e hora no resultado real observado.
Se criar um conjunto de dados de treino sem levar em conta a chave do carimbo de data/hora, poderá ter uma linha com estes valores de características e a verdade observada.
| temperatura | RH | luz | CO2 | verdade fundamental |
|---|---|---|---|---|
| 15.8 | 32 | 212 | 630 | 0 |
No entanto, esta não é uma observação válida para o treinamento, porque a leitura de co2 de 630 foi feita às 8:52, após a observação da verdade do terreno às 8:50. Os dados futuros estão "vazando" para o conjunto de treinamento, o que prejudicará o desempenho do modelo.
Requisitos
- Para Engenharia de Recursos no Catálogo Unity: Engenharia de Recursos no cliente do Catálogo Unity (qualquer versão).
- Para Workspace Feature Store (legado): Feature Store client v0.3.7 e superior.
Como especificar chaves relacionadas ao tempo
Para usar a funcionalidade point-in-time, deve especificar chaves relacionadas ao tempo usando o argumento timeseries_columns (para o Feature Engineering no Unity Catalog) ou o argumento timestamp_keys (para o Workspace Feature Store). Isso indica que as linhas da tabela de funcionalidades devem ser unidas combinando o valor mais recente para uma chave primária específica que não seja posterior ao valor da coluna timestamps_keys, em vez de unir com base em uma correspondência exata de tempo.
Se você não usar timeseries_columns ou timestamp_keyse designar apenas uma coluna de série temporal como uma coluna de chave primária, o repositório de recursos não aplicará lógica point-in-time à coluna de série temporal durante as junções. Em vez disso, ele corresponde apenas a linhas com uma correspondência de hora exata, em vez de corresponder a todas as linhas anteriores ao carimbo de data/hora.
Criar uma tabela de características de série temporal no Catálogo Unity
No Unity Catalog, qualquer tabela com uma TIMESERIES chave primária é uma tabela de características de série temporal. Para criar uma tabela de recursos de série temporal, consulte Criar uma tabela de recursos no Catálogo Unity. Os exemplos a seguir ilustram os diferentes tipos de tabelas de séries temporais.
Publicar tabelas de séries cronológicas em lojas online
Ao trabalhar com tabelas de recursos que contêm dados de carimbo de data/hora, você precisa considerar se deve designar a coluna de carimbo de data/hora como uma timeseries_column ou tratá-la como uma coluna regular, dependendo dos seus requisitos de serviço online.
Colunas de data/hora marcadas com designação de série temporal
Use timeseries_column quando precisar de precisão temporal para conjuntos de dados de treino e quiser consultar os valores mais recentes das características a partir de um determinado momento em aplicações online. Uma tabela de características de série temporal deve ter uma chave de carimbo de data/hora e não pode ter colunas de partição. A coluna chave de carimbo de data/hora deve ser de TimestampType ou DateType.
O Databricks recomenda que as tabelas de recursos de séries temporais não tenham mais do que duas colunas de chave primária para garantir gravações e pesquisas com desempenho.
FeatureEngineeringClient API
fe = FeatureEngineeringClient()
# Create a time series table for point-in-time joins
fe.create_table(
name="catalog.schema.user_behavior_features",
primary_keys=["user_id", "event_timestamp"],
timeseries_columns="event_timestamp", # Enables point-in-time logic
df=features_df # DataFrame must contain primary keys and time series columns
)
API de SQL
-- Create table with time series constraint for point-in-time joins
CREATE TABLE catalog.schema.user_behavior_features (
user_id STRING NOT NULL,
event_timestamp TIMESTAMP NOT NULL, -- part of primary key and designated as TIMESERIES
purchase_amount DOUBLE,
page_views_last_hour INT,
CONSTRAINT pk_user_behavior PRIMARY KEY (user_id, event_timestamp TIMESERIES)
) USING DELTA
TBLPROPERTIES (
'delta.enableChangeDataFeed' = 'true'
);
Colunas de timestamp sem designação de série temporal
Para publicar todos os valores de séries cronológicas na loja online (não apenas os valores mais recentes), inclua as colunas de carimbo de data/hora como parte da chave primária, mas não as designe como timeseries_column.
FeatureEngineeringClient API
fe = FeatureEngineeringClient()
# Create a regular table with timestamp column (no point-in-time logic)
fe.create_table(
name="catalog.schema.user_current_features",
primary_keys=["user_id", "event_timestamp"],
# Note: event_timestamp is not marked as a time series column
df=features_df # DataFrame must contain primary keys columns
)
API de SQL
-- Create table with timestamp column but no time series constraint
CREATE TABLE catalog.schema.user_current_features (
user_id STRING NOT NULL,
event_timestamp TIMESTAMP NOT NULL, -- part of primary key, but NOT designated as TIMESERIES
current_balance DOUBLE,
subscription_status STRING,
last_login_days_ago INT,
CONSTRAINT pk_user_current PRIMARY KEY (user_id, event_timestamp)
) USING DELTA
TBLPROPERTIES (
'delta.enableChangeDataFeed' = 'true'
);
Atualizar uma tabela de características de série temporal
Ao escrever recursos nas tabelas de recursos de séries temporais, seu DataFrame deve fornecer valores para todos os recursos da tabela de recursos, ao contrário das tabelas de recursos comuns. Essa restrição reduz a esparsidade de valores de características em diferentes carimbos de data/hora na tabela de características de séries temporais.
Engenharia de Funcionalidades no Unity Catalog
fe = FeatureEngineeringClient()
# daily_users_batch_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.write_table(
"ml.ads_team.user_features",
daily_users_batch_df,
mode="merge"
)
Cliente do Workspace Feature Store v0.13.4 e superior
fs = FeatureStoreClient()
# daily_users_batch_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.write_table(
"ads_team.user_features",
daily_users_batch_df,
mode="merge"
)
É suportado o streaming de escritas em tabelas de características de séries temporais.
Criar um conjunto de treino com uma tabela de características de série temporal
Para executar uma pesquisa pontual de valores de características de uma tabela de características de série temporal, deve especificar um timestamp_lookup_key na FeatureLookup da característica, que indica o nome da coluna do DataFrame que contém timestamps em relação aos quais pesquisar características de série temporal. O Databricks Feature Store recupera os valores de características mais recentes antes dos carimbos de data/hora especificados na coluna timestamp_lookup_key do DataFrame, cujas chaves primárias, excluindo chaves de carimbo de data/hora, correspondem aos valores nas colunas lookup_key do DataFrame, ou null se nenhum valor de característica existir.
Engenharia de Características no catálogo Unity
feature_lookups = [
FeatureLookup(
table_name="ml.ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts"
),
FeatureLookup(
table_name="ml.ads_team.ad_features",
feature_names=["sports_relevance", "food_relevance"],
lookup_key="ad_id",
)
]
# raw_clickstream DataFrame contains the following columns:
# - u_id
# - ad_id
# - ad_impression_ts
training_set = fe.create_training_set(
df=raw_clickstream,
feature_lookups=feature_lookups,
exclude_columns=["u_id", "ad_id", "ad_impression_ts"],
label="did_click",
)
training_df = training_set.load_df()
Gorjeta
Para um desempenho de pesquisa mais rápido quando o Photon estiver ativado, passe use_spark_native_join=True para FeatureEngineeringClient.create_training_set. Isto requer a databricks-feature-engineering versão 0.6.0 ou superior.
Loja de recursos do espaço de trabalho
feature_lookups = [
FeatureLookup(
table_name="ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts"
),
FeatureLookup(
table_name="ads_team.ad_features",
feature_names=["sports_relevance", "food_relevance"],
lookup_key="ad_id",
)
]
# raw_clickstream DataFrame contains the following columns:
# - u_id
# - ad_id
# - ad_impression_ts
training_set = fs.create_training_set(
df=raw_clickstream,
feature_lookups=feature_lookups,
exclude_columns=["u_id", "ad_id", "ad_impression_ts"],
label="did_click",
)
training_df = training_set.load_df()
Qualquer FeatureLookup em uma tabela de recursos de série temporal deve ser uma consulta de ponto no tempo, portanto, deve especificar uma timestamp_lookup_key coluna para usar no seu DataFrame. A pesquisa pontual no tempo não ignora linhas com null valores de característica armazenados na tabela de características de séries temporais.
Definir um limite de tempo para valores de recursos históricos
Com o cliente do Feature Store v0.13.0 ou superior, ou qualquer versão do Feature Engineering no cliente do Unity Catalog, você pode excluir valores de recursos com carimbos de data/hora mais antigos do conjunto de treinamento. Para fazer isso, use o parâmetro lookback_window no FeatureLookup.
O tipo de dados de lookback_window deve ser datetime.timedelta, e o valor padrão é None (são usados todos os valores das funcionalidades, independentemente da idade).
Por exemplo, o código a seguir exclui quaisquer valores de recurso com mais de 7 dias:
Engenharia de Características no Unity Catalog
from datetime import timedelta
feature_lookups = [
FeatureLookup(
table_name="ml.ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts",
lookback_window=timedelta(days=7)
)
]
Loja de recursos do espaço de trabalho
from datetime import timedelta
feature_lookups = [
FeatureLookup(
table_name="ads_team.user_features",
feature_names=["purchases_30d", "is_free_trial_active"],
lookup_key="u_id",
timestamp_lookup_key="ad_impression_ts",
lookback_window=timedelta(days=7)
)
]
Chama create_training_set com o parâmetro acima FeatureLookup, executa automaticamente a junção temporal e exclui valores de características com mais de 7 dias.
A janela de retrospetiva é aplicada durante o treinamento e a inferência em lote. Durante a inferência online, o valor do recurso mais recente é sempre usado, independentemente da janela de retrospetiva.
Modelos de pontuação com tabelas de recursos de séries temporais
Ao pontuar um modelo treinado com funcionalidades das tabelas de séries temporais, o Databricks Feature Store recupera as funcionalidades apropriadas usando consultas no ponto no tempo com metadados empacotados com o modelo durante o treinamento. O DataFrame que vós forneceis a FeatureEngineeringClient.score_batch (para Engenharia de Funcionalidades no Catálogo Unity) ou a FeatureStoreClient.score_batch (para o Repositório de Funcionalidades do Espaço de Trabalho) deverá conter uma coluna de data/hora de DataType com o mesmo nome e idêntico timestamp_lookup_key ao FeatureLookup do fornecido a FeatureEngineeringClient.create_training_set ou a FeatureStoreClient.create_training_set.
Gorjeta
Para um desempenho de pesquisa mais rápido quando o Photon estiver ativado, passe use_spark_native_join=True para FeatureEngineeringClient.score_batch. Isto requer a databricks-feature-engineering versão 0.6.0 ou superior.
Publicar recursos de séries cronológicas em uma loja online
Você pode usar FeatureEngineeringClient.publish_table (para Engenharia de Características no Unity Catalog) ou FeatureStoreClient.publish_table (para o Repositório de Características do Espaço de Trabalho) para publicar tabelas de características de séries temporais em lojas online. O Databricks Feature Store publica um instantâneo dos valores de recursos mais recentes para cada chave primária na tabela de recursos na loja online. A loja online suporta pesquisa de chave primária, mas não suporta pesquisa de momento específico.
Exemplo de bloco de notas: Tabela de funcionalidades de séries cronológicas
Estes blocos de anotações de exemplo ilustram consultas pontuais em tabelas de características de séries temporais.
Use este bloco de anotações em espaços de trabalho habilitados para o Catálogo Unity.
Exemplo de caderno de características de séries temporais (Catálogo Unity)
O bloco de anotações a seguir foi projetado para espaços de trabalho que não estão habilitados para o Catálogo Unity. Ele usa o Workspace Feature Store.