Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En esta página se describe cómo usar la corrección en un punto en el tiempo para crear un conjunto de datos de entrenamiento que refleje con precisión los valores de las características en el momento en que se registró una observación de etiquetas. Esto es importante para evitar la pérdida de datos, que se produce cuando se usan valores de características para el entrenamiento del modelo que no estaban disponibles en el momento en que se registró la etiqueta. Este tipo de error puede ser difícil de detectar y puede afectar negativamente al rendimiento del modelo.
Las tablas de características de serie temporal incluyen una columna de clave de marca de tiempo que garantiza que cada fila del conjunto de datos de entrenamiento represente los valores de características conocidos más recientes a partir de la marca de tiempo de la fila. Debe usar tablas de características de serie temporal cuando los valores de las características cambian con el tiempo, por ejemplo, con datos de serie temporal, datos basados en eventos o datos agregados en tiempo.
En el diagrama siguiente se muestra cómo se usa la clave de marca de tiempo. El valor de característica registrado para cada marca de tiempo es el valor más reciente antes de esa marca de tiempo, indicado por el círculo naranja descrito. Si no se han registrado valores, el valor de la característica es NULL. Para obtener más información, consulte Funcionamiento de las tablas de características de serie temporal.
Nota:
- Con Databricks Runtime 13.3 LTS y versiones posteriores, cualquier tabla Delta de Unity Catalog con claves principales y claves de marca de tiempo se puede usar como tabla de características de serie temporal.
- Para mejorar el rendimiento de las búsquedas a un momento dado, Databricks recomienda la agrupación en clústeres líquidos (
databricks-feature-engineering0.6.0 y versiones posteriores) en tablas de series temporales. Consulte Uso de clústeres líquidos para tablas y omisión de datos. - La funcionalidad de búsqueda de un momento dado se conoce a veces como "viaje en el tiempo". La funcionalidad temporal de Databricks Feature Store no está relacionada con el viaje en el tiempo de Delta Lake.
Funcionamiento de las tablas de características de series temporales
Supongamos que tiene las siguientes tablas de características. Estos datos se toman del cuaderno de ejemplo.
Las tablas contienen datos de sensor que miden la temperatura, la humedad relativa, la luz ambiente y el dióxido de carbono en una habitación. La tabla de datos obtenidos indica si una persona estaba presente en la habitación. Cada una de las tablas tiene una clave principal ('room') y una clave de marca de tiempo ('ts'). Por motivos de simplicidad, solo se muestran los datos de un solo valor de la clave principal ("0".
En la ilustración siguiente, se muestra cómo se usa la clave de marca de tiempo para garantizar la corrección de un momento dado de un conjunto de datos de entrenamiento. Los valores de características se hacen coincidir en función de la clave principal (no se muestra en el diagrama) y la clave de marca de tiempo, mediante una combinación AS OF. La combinación AS OF garantizará que el valor más reciente de la característica en el momento de la marca de tiempo se use en el conjunto de formación.
Como se muestra en la figura, el conjunto de datos de entrenamiento incluye los valores de las características más recientes de cada sensor antes de la marca de tiempo en la verdad en tierra observada.
Si ha creado un conjunto de datos de entrenamiento sin tener en cuenta la clave de marca de tiempo, es posible que tenga una fila con estos valores de características y verdad terreno observada:
| Temperatura | Rh | luz | co2 | verdad terreno |
|---|---|---|---|---|
| 15.8 | 32 | 212 | 630 | 0 |
Sin embargo, esto no es una observación válida para el entrenamiento, ya que a las 8:52 se obtuvo una lectura de CO2 de 630, después de que la verdad de terreno se observara a las 8:50. Los datos futuros se "filtran" en el conjunto de entrenamiento, lo cual perjudicará el rendimiento del modelo.
Requisitos
- Para la ingeniería de características en Unity Catalog: Ingeniería de características en el cliente de Unity Catalog (cualquier versión).
- Para el Almacén de Funciones del área de trabajo (versión heredada): cliente del Almacén de Funciones v0.3.7 y versiones posteriores.
Especificación de claves relacionadas con el tiempo
Para usar la funcionalidad a un momento dado, debe especificar claves relacionadas con el tiempo mediante el argumento timeseries_columns (para la ingeniería de características en Unity Catalog) o el argumento timestamp_keys (para Workspace Feature Store). Esto indica que las filas de la tabla de características deben combinarse haciendo coincidir el valor más reciente de una clave principal determinada que no es posterior al valor de la columna timestamps_keys, en lugar de combinar en función de una coincidencia de hora exacta.
Si no usa timeseries_columns o timestamp_keys, y solo designa una columna de serie temporal como columna de clave principal, el almacén de funcionalidades no aplica lógica de punto en el tiempo a la columna de serie temporal durante las operaciones de combinación. En su lugar, solo se empareja con las filas que tienen una coincidencia exacta de tiempo, en lugar de emparejar todas las filas anteriores al sello de tiempo.
Creación de una tabla de características de serie temporal en Unity Catalog
En el catálogo de Unity, cualquier tabla con una TIMESERIES clave principal es una tabla de características de serie temporal. Para crear una tabla de características de serie temporal, consulte Creación de una tabla de características en el catálogo de Unity. En los ejemplos siguientes se muestran los distintos tipos de tablas de series temporales.
Publicación de tablas de series temporales en tiendas en línea
Al trabajar con tablas de características que contienen datos de marca de tiempo, debe tener en cuenta si debe designar la columna timestamp como un timeseries_column o tratarla como una columna normal, dependiendo de los requisitos de procesamiento en línea.
Columnas de marca de tiempo marcadas con designación de serie temporal
Use timeseries_column cuando necesite corrección a un momento dado para los conjuntos de datos de entrenamiento y quiera buscar los valores de características más recientes a partir de una marca de tiempo específica en aplicaciones en línea. Una tabla de características de serie temporal debe tener una clave de marca de tiempo y no puede tener ninguna columna de partición. La columna de clave de marca de tiempo debe ser de TimestampType o DateType.
Databricks recomienda que las tablas de características de serie temporal no tengan más de dos columnas de clave principal para garantizar escrituras y búsquedas eficaces.
API de FeatureEngineeringClient
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
)
SQL API
-- 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'
);
Columnas de marca de tiempo sin designación de series temporales
Para publicar todos los valores de serie temporal en el almacén en línea (no solo los valores más recientes), incluya las columnas de marca de tiempo como parte de la clave principal, pero no las 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
)
SQL API
-- 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'
);
Actualización de una tabla de características de serie temporal
Al escribir características en las tablas de características de serie temporal, DataFrame debe proporcionar valores para todas las características de la tabla de características, a diferencia de las tablas de características normales. Esta restricción reduce la dispersión de los valores de característica entre las marcas de tiempo de la tabla de características de serie temporal.
Ingeniería de características en 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 de Workspace Feature Store v0.13.4 y versiones posteriores
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"
)
Se admite el streaming de escrituras en tablas de características de series temporales.
Creación de un conjunto de entrenamiento con una tabla de características de serie temporal
Para realizar una búsqueda en un momento determinado para los valores de características de una tabla de características de serie temporal, debe especificar un timestamp_lookup_key en el FeatureLookup, que indica el nombre de la columna DataFrame que contiene las marcas de tiempo contra las cuales buscar características de series temporales. Databricks Feature Store recupera los valores de características más recientes antes de las marcas de tiempo especificadas en la columna de timestamp_lookup_key DataFrame y cuyas claves principales (excluyendo las claves de marca de tiempo) coinciden con los valores de las columnas de lookup_key DataFrame o null si no existe ese valor de característica.
Ingeniería de características en Unity Catalog
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()
Sugerencia
Para obtener un rendimiento de búsqueda más rápido cuando se habilita Photon, pase use_spark_native_join=True a FeatureEngineeringClient.create_training_set. Esto requiere databricks-feature-engineering versión 0.6.0 o posterior.
Tienda de Características del Espacio de Trabajo
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()
Cualquier FeatureLookup de una tabla de características de serie temporal debe ser una búsqueda de un momento dado, por lo que debe especificar una columna timestamp_lookup_key que se usará en el DataFrame. La búsqueda puntual no omite las filas con valores de características null almacenados en la tabla de características de series temporales.
Establecer un límite de tiempo para los valores históricos de las características
Con el cliente de Feature Store v0.13.0 o posterior, o cualquier versión de Ingeniería de características en el cliente de Unity Catalog, puede excluir del conjunto de entrenamiento los valores de características con marcas de tiempo anteriores. Para ello, use el parámetro lookback_window en FeatureLookup.
El tipo de datos de lookback_window debe ser datetime.timedelta y el valor predeterminado es None (se usan todos los valores de características, independientemente de la antigüedad).
Por ejemplo, el código siguiente excluye los valores de características que tienen más de 7 días de antigüedad:
Ingeniería de características en 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)
)
]
Tienda de Características del Espacio de Trabajo
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)
)
]
Cuando llamas a create_training_set con el FeatureLookup anterior, realiza automáticamente la unión en un punto específico del tiempo y excluye los valores de características anteriores a 7 días.
La ventana retrospectiva se aplica durante el entrenamiento y la inferencia por lotes. Durante la inferencia en línea, siempre se usa el valor de característica más reciente, independientemente de la ventana de retrospección.
Modelos de puntuación con tablas de características de serie temporal
Al puntuar un modelo entrenado con características de tablas de características de serie temporal, Databricks Feature Store recupera las características adecuadas mediante búsquedas de un momento dado con metadatos empaquetados con el modelo durante el entrenamiento. El objeto DataFrame que proporcione a FeatureEngineeringClient.score_batch (para la ingeniería de características en Unity Catalog) o FeatureStoreClient.score_batch (para Workspace Feature Store) debe contener una columna de marca de tiempo con el mismo nombre y DataType que la cadena timestamp_lookup_key del objeto FeatureLookup proporcionado a FeatureEngineeringClient.create_training_set o FeatureStoreClient.create_training_set.
Sugerencia
Para obtener un rendimiento de búsqueda más rápido cuando se habilita Photon, pase use_spark_native_join=True a FeatureEngineeringClient.score_batch. Esto requiere databricks-feature-engineering versión 0.6.0 o posterior.
Publicar funciones de serie temporal en una tienda en línea
Puede usar FeatureEngineeringClient.publish_table (para la ingeniería de características en Unity Catalog) o FeatureStoreClient.publish_table (para Workspace Feature Store) para publicar tablas de características de serie temporal en tiendas en línea. El almacén de características de Databricks publica una instantánea de los valores de características más recientes para cada clave principal de la tabla de características en la tienda en línea. La tienda en línea admite la búsqueda de claves principales, pero no admite la búsqueda de un momento dado.
Ejemplo de Notebook: tabla de características de series temporales
Estos cuadernos de ejemplo ilustran consultas puntuales en tablas de características de series temporales.
Utilice este cuaderno en las áreas de trabajo habilitadas para Unity Catalog.
Cuaderno de ejemplo de tabla de atributos de series temporales (Unity Catalog)
El cuaderno siguiente está diseñado para las áreas de trabajo que no estén habilitadas para el catálogo de Unity. Utiliza el Feature Store del espacio de trabajo.