Uso de tablas de características de serie temporal con compatibilidad con un momento dado

Los datos usados para entrenar un modelo a menudo tienen dependencias de tiempo integradas en él. Por ejemplo, si está entrenando un modelo para predecir qué máquinas de una planta de fábrica necesitan mantenimiento, es posible que tenga conjuntos de datos históricos que contengan medidas de sensor y datos de uso para muchas máquinas, junto con etiquetas de destino que indican si la máquina necesita servicio o no. El conjunto de datos puede contener datos para las máquinas antes y después de realizar un servicio de mantenimiento.

Al compilar el modelo, solo debe tener en cuenta los valores de características hasta el momento del valor de destino observado (necesita servicio o no necesita servicio). Si no tiene en cuenta explícitamente la marca de tiempo de cada observación, podría usar accidentalmente los valores de características medidos después de la marca de tiempo del valor de destino para el entrenamiento. Esto se denomina "pérdida de datos" 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.

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. Recomendamos aplicar la ordenación Z a las tablas de series temporales para mejorar el rendimiento de las búsquedas a un momento dado.
  • La funcionalidad de búsqueda de un momento dado se conoce a veces como "viaje en el tiempo". La funcionalidad de un momento dado de Databricks Feature Store no está relacionada con el viaje en el tiempo de Delta Lake.
  • 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 solo designa una columna de marca de tiempo como columna de clave principal, el almacén de características no aplica lógica de un momento dado a la columna de serie temporal durante las combinaciones. En su lugar, solo coincide con las filas con una coincidencia de hora exacta en lugar de hacer coincidir todas las filas anteriores a la marca de tiempo.

Funcionamiento de las tablas de características de serie 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 verdad terreno indica si una persona estaba presente en la sala. 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 único valor de la clave principal ("0").

datos de ejemplo de características de tabla

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.

cómo funciona el trabajo de un momento dato

Como se muestra en la ilustración, el conjunto de datos de entrenamiento incluye los valores de las características más recientes para cada sensor antes de la marca de tiempo en la verdad terreno 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:

temp 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 la lectura co2 de 630 fue tomada a las 8:52, después de la observación de la verdad terreno de las 8:50. Los datos futuros se "filtran" en el conjunto de entrenamiento, lo que afectará al 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 Workspace Feature Store: Cliente de Feature Store v0.3.7 y posteriores

Creación de una tabla de características de serie temporal en Unity Catalog

En Unity Catalog, cualquier tabla con una clave principal TIMESERIES es una tabla de características de serie temporal. Consulte Creación de una tabla de características en Unity Catalog para obtener información sobre cómo crear una.

Creación de una tabla de características de serie temporal en el área de trabajo local

Para crear una tabla de características de serie temporal en Workspace Feature Store local, DataFrame o el esquema deben contener una columna que designe como clave de marca de tiempo.

A partir del cliente de Feature Store v0.13.4, las columnas de clave de marca de tiempo deben especificarse en el argumento primary_keys. Las claves de marca de tiempo forman parte de las "claves principales" que identifican de forma única cada fila de la tabla de características. Al igual que otras columnas de clave principal, las columnas de clave de marca de tiempo no pueden contener valores NULL.

Ingeniería de características en Unity Catalog

fe = FeatureEngineeringClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fe.create_table(
  name="ml.ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timeseries_columns="ts",
  features_df=user_features_df,
)

Cliente de Workspace Feature Store v0.13.4 y posteriores

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys=["user_id", "ts"],
  timestamp_keys="ts",
  features_df=user_features_df,
)

Cliente de Workspace Feature Store v0.13.3 y anteriores

fs = FeatureStoreClient()
# user_features_df DataFrame contains the following columns:
# - user_id
# - ts
# - purchases_30d
# - is_free_trial_active
fs.create_table(
  name="ads_team.user_features",
  primary_keys="user_id",
  timestamp_keys="ts",
  features_df=user_features_df,
)

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.

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 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 serie temporal.

Creación de un conjunto de entrenamiento con una tabla de características de serie temporal

Para realizar una búsqueda de un momento dado de los valores de características de una tabla de características de serie temporal, debe especificar timestamp_lookup_key en FeatureLookup de la característica, que indica el nombre de la columna DataFrame que contiene marcas de tiempo en las que buscar características de serie temporal. Databricks Feature Store recupera los valores de característica más recientes antes de las marcas de tiempo especificadas en la columna timestamp_lookup_key del DataFrame y cuyas claves principales (excluyendo las claves de marca de tiempo) coinciden con los valores de las columnas lookup_key del DataFrame null o si no existe ningún valor de característica de este tipo.

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()

Workspace Feature Store

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 de un momento dado no omite las filas con valores null de característica almacenados en la tabla de características de serie temporal.

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 posteriores, o cualquier versión de Ingeniería de características en el cliente de Unity Catalog, puede excluir valores de características con marcas de tiempo anteriores del conjunto de entrenamiento. 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)
  )
]

Workspace Feature Store

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 se llama a create_training_set con el FeatureLookup anterior, realiza automáticamente la combinación a un momento dado y excluye los valores de características anteriores a 7 días.

La ventana de búsqueda 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 búsqueda.

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.

Publicación de características de serie temporal en un almacén 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 proporciona la funcionalidad para publicar una instantánea o una ventana de datos de serie temporal en el almacén en línea, según el OnlineStoreSpec que creó el almacén en línea. En la tabla se muestran los detalles de cada modo de publicación.

Proveedor de almacén en línea Modo de publicación en instantáneas Modo de publicación en ventanas
Azure Cosmos DB (v0.5.0 y versiones posteriores) X
Azure MySQL (Servidor único) X
Azure SQL Server X

Publicación de una instantánea de serie temporal

Esto publica los valores de característica más recientes para cada clave principal de la tabla de características. La tienda en línea admite la búsqueda de claves principales, pero no admite la búsqueda de un momento dado.

En el caso de los almacenes en línea que no admiten un período de vida, el almacén de características de Databricks solo admite el modo de publicación en instantáneas. En el caso de los que sí lo admiten, el modo de publicación predeterminado es en instantáneas a menos que se especifique el período de vida (ttl) en OnlineStoreSpec en el momento de la creación.

Publicación de una ventana de series temporales

Esto publica todos los valores de características de cada clave principal de la tabla de características en el almacén en línea y quita automáticamente los registros expirados. Un registro se considera expirado si su marca de tiempo (en formato UTC) es mayor que el período de vida especificado en el pasado. Consulte la documentación específica de la nube para más información sobre el período de vida.

El almacén en línea admite la búsqueda de claves principales y recupera automáticamente el valor de la característica con la marca de tiempo más reciente.

Para usar este modo de publicación, debe proporcionar un valor para el período de vida (ttl) en OnlineStoreSpec cuando cree el almacén en línea. Una vez establecido no se puede cambiar ttl. Todas las llamadas de publicación posteriores heredan ttl y no es necesario definirla explícitamente en OnlineStoreSpec.

Ejemplo de Notebook: tabla de características de serie temporal

En el cuaderno siguiente se muestran las búsquedas de un momento dado en las tablas de características de serie temporal en Workspace Feature Store.

Cuaderno de ejemplo de tabla de características de serie temporal

Obtener el cuaderno