Share via


Usare le tabelle delle funzionalità delle serie temporali con supporto temporizzato

I dati usati per eseguire il training di un modello spesso presentano dipendenze temporali incorporate. Ad esempio, se si esegue il training di un modello per stimare quali computer in un ambiente di produzione richiedono manutenzione, è possibile che siano presenti set di dati cronologici che contengono misurazioni dei sensori e dati di utilizzo per molti computer, insieme alle etichette di destinazione che indicano se il computer necessita o meno del servizio. Il set di dati può contenere dati per i computer prima e dopo l'esecuzione di un servizio di manutenzione.

Quando si compila il modello, è necessario prendere in considerazione solo i valori delle funzionalità fino all'ora del valore di destinazione osservato (richiede il servizio o non richiede il servizio). Se non si tiene conto in modo esplicito del timestamp di ogni osservazione, è possibile usare inavvertitamente i valori delle caratteristiche misurati dopo il timestamp del valore di destinazione per il training. Questa operazione è denominata "perdita di dati" e può influire negativamente sulle prestazioni del modello.

Le tabelle delle funzionalità delle serie temporali includono una colonna chiave timestamp che garantisce che ogni riga nel set di dati di training rappresenti i valori delle funzionalità note più recenti a partire dal timestamp della riga. È consigliabile usare le tabelle delle funzionalità delle serie temporali ogni volta che i valori delle funzionalità cambiano nel tempo, ad esempio con i dati delle serie temporali, i dati basati su eventi o i dati aggregati nel tempo.

Nota

  • Con Databricks Runtime 13.3 LTS e versioni successive, qualsiasi tabella Delta in Unity Catalog con chiavi primarie e chiavi timestamp può essere usata come tabella delle funzionalità della serie temporale. È consigliabile applicare l'ordinamento Z nelle tabelle delle serie temporali per ottenere prestazioni migliori nelle ricerche temporizzato.
  • La funzionalità di ricerca temporizzato viene talvolta definita "viaggio temporale". La funzionalità temporizzato in Databricks Feature Store non è correlata al viaggio in tempo delta Lake.
  • Per usare la funzionalità temporizzato, è necessario specificare chiavi relative al tempo usando l'argomento timeseries_columns (per Progettazione delle funzionalità nel catalogo unity) o l'argomento (per l'archivio delle funzionalità dell'area timestamp_keys di lavoro). Ciò indica che le righe della tabella delle caratteristiche devono essere unite in join associando il valore più recente per una determinata chiave primaria che non è successiva al valore della timestamps_keys colonna, anziché unire in join in base a una corrispondenza temporale esatta. Se si designa solo una colonna timeseries come colonna chiave primaria, l'archivio funzionalità non applica la logica temporizzato alla colonna timeseries durante i join. Corrisponde invece solo alle righe con una corrispondenza temporale esatta anziché a tutte le righe prima del timestamp.

Funzionamento delle tabelle delle funzionalità delle serie temporali

Si supponga di avere le tabelle delle funzionalità seguenti. Questi dati vengono ricavati dal notebook di esempio.

Le tabelle contengono dati del sensore che misurano la temperatura, l'umidità relativa, la luce ambientale e l'anidride carbonica in una stanza. La tabella di verità del terreno indica se una persona era presente nella stanza. Ognuna delle tabelle ha una chiave primaria ('room') e una chiave timestamp ('ts'). Per semplicità, vengono visualizzati solo i dati per un singolo valore della chiave primaria ('0').

dati della tabella delle caratteristiche di esempio

La figura seguente illustra come viene usata la chiave timestamp per garantire la correttezza temporizzato in un set di dati di training. I valori delle funzionalità vengono confrontati in base alla chiave primaria (non illustrata nel diagramma) e alla chiave timestamp, usando un join AS OF. Il join AS OF garantisce che il valore più recente della funzionalità al momento dell'utilizzo del timestamp nel set di training.

funzionamento temporizzato

Come illustrato nella figura, il set di dati di training include i valori di funzionalità più recenti per ogni sensore prima del timestamp sulla verità del terreno osservata.

Se è stato creato un set di dati di training senza prendere in considerazione la chiave timestamp, è possibile che sia presente una riga con questi valori di funzionalità e la verità del terreno osservata:

temp Rh light Co2 terra verità
15.8 32 212 630 0

Tuttavia, questa non è un'osservazione valida per l'addestramento, perché la lettura co2 di 630 è stata presa alle 8:52, dopo l'osservazione della verità sul terreno alle 8:50. I dati futuri sono "perdite" nel set di training, che compromettono le prestazioni del modello.

Requisiti

  • Per progettazione di funzionalità nel catalogo unity: Progettazione delle funzionalità nel client del catalogo Unity (qualsiasi versione)
  • Per l'archivio funzionalità dell'area di lavoro: client di Feature Store v0.3.7 e versioni successive

Creare una tabella delle funzionalità della serie temporale nel catalogo unity

In Unity Catalog qualsiasi tabella con una chiave primaria TIME edizione Standard RIES è una tabella delle funzionalità della serie temporale. Per informazioni su come crearne una, vedere Creare una tabella delle funzionalità in Unity Catalog .

Creare una tabella delle funzionalità serie temporali nell'area di lavoro locale

Per creare una tabella delle funzionalità della serie temporale nell'archivio delle funzionalità dell'area di lavoro locale, il dataframe o lo schema deve contenere una colonna designata come chiave timestamp.

A partire dal client di Feature Store v0.13.4, le colonne chiave timestamp devono essere specificate nell'argomento primary_keys . Le chiavi timestamp fanno parte delle "chiavi primarie" che identificano in modo univoco ogni riga nella tabella delle funzionalità. Analogamente ad altre colonne chiave primaria, le colonne chiave timestamp non possono contenere NULL valori.

Progettazione delle funzionalità nel catalogo unity

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

Client dell'archivio delle funzionalità dell'area di lavoro v0.13.4 e versioni successive

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

Client dell'archivio delle funzionalità dell'area di lavoro v0.13.3 e versioni successive

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 tabella delle funzionalità della serie temporale deve avere una chiave timestamp e non può avere colonne di partizione. La colonna chiave timestamp deve essere di TimestampType o DateType.

Databricks consiglia che le tabelle delle funzionalità delle serie temporali non dispongano di più di due colonne chiave primaria per garantire scritture e ricerche efficienti.

Aggiornare una tabella delle funzionalità della serie temporale

Quando si scrivono funzionalità nelle tabelle delle funzionalità delle serie temporali, il dataframe deve fornire valori per tutte le funzionalità della tabella delle funzionalità, a differenza delle normali tabelle delle funzionalità. Questo vincolo riduce la spazità dei valori delle caratteristiche tra i timestamp nella tabella delle funzionalità della serie temporale.

Progettazione delle funzionalità nel catalogo unity

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

Client dell'archivio delle funzionalità dell'area di lavoro v0.13.4 e versioni successive

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

Le scritture di streaming nelle tabelle delle funzionalità delle serie temporali sono supportate.

Creare un set di training con una tabella delle funzionalità serie temporali

Per eseguire una ricerca temporizzato per i valori delle funzionalità di una tabella delle funzionalità di una serie temporale, è necessario specificare un timestamp_lookup_key oggetto nella funzionalità , FeatureLookupche indica il nome della colonna DataFrame che contiene timestamp in base ai quali cercare le funzionalità della serie temporale. Databricks Feature Store recupera i valori delle funzionalità più recenti prima dei timestamp specificati nella colonna del timestamp_lookup_key dataframe e le cui chiavi primarie (escluse le chiavi timestamp) corrispondono ai valori nelle colonne del lookup_key dataframe o null se non esiste alcun valore di funzionalità di questo tipo.

Progettazione delle funzionalità nel catalogo 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()

Archivio delle funzionalità dell'area di lavoro

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

Qualsiasi FeatureLookup tabella delle funzionalità di una serie temporale deve essere una ricerca temporizzato, pertanto deve specificare una timestamp_lookup_key colonna da usare nel dataframe. La ricerca temporizzato non ignora le righe con null valori di funzionalità archiviati nella tabella delle funzionalità della serie temporale.

Impostare un limite di tempo per i valori delle funzionalità cronologici

Con il client di Feature Store v0.13.0 o versione successiva o con qualsiasi versione di Progettazione funzionalità nel client del catalogo Unity, è possibile escludere i valori delle funzionalità con timestamp precedenti dal set di training. A tale scopo, usare il parametro lookback_window in FeatureLookup.

Il tipo di dati di lookback_window deve essere datetime.timedeltae il valore predefinito è None (vengono usati tutti i valori di funzionalità, indipendentemente dall'età).

Ad esempio, il codice seguente esclude tutti i valori di funzionalità che hanno più di 7 giorni:

Progettazione delle funzionalità nel catalogo unity

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

Archivio delle funzionalità dell'area di lavoro

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

Quando si chiama create_training_set con l'oggetto precedente FeatureLookup, esegue automaticamente il join temporizzato ed esclude i valori di funzionalità precedenti a 7 giorni.

La finestra di lookback viene applicata durante il training e l'inferenza batch. Durante l'inferenza online, il valore della funzionalità più recente viene sempre usato, indipendentemente dalla finestra di lookback.

Assegnare punteggi ai modelli con tabelle delle funzionalità delle serie temporali

Quando si ottiene un punteggio per un modello sottoposto a training con funzionalità dalle tabelle delle funzionalità delle serie temporali, Databricks Feature Store recupera le funzionalità appropriate usando ricerche temporizzato con i metadati inseriti nel pacchetto con il modello durante il training. Il dataframe specificato a FeatureEngineeringClient.score_batch (per progettazione delle funzionalità nel catalogo Unity) o FeatureStoreClient.score_batch (per l'archivio funzionalità dell'area di lavoro) deve contenere una colonna timestamp con lo stesso nome e DataType l'oggetto timestamp_lookup_key dell'oggetto FeatureLookup fornito a FeatureEngineeringClient.create_training_set o FeatureStoreClient.create_training_set.

Pubblicare le funzionalità delle serie temporali in un negozio online

È possibile usare FeatureEngineeringClient.publish_table (per progettazione di funzionalità nel catalogo Unity) o FeatureStoreClient.publish_table (per l'archivio delle funzionalità dell'area di lavoro) per pubblicare tabelle delle funzionalità delle serie temporali nei negozi online. Databricks Feature Store offre la funzionalità per pubblicare uno snapshot o una finestra di dati delle serie temporali nell'archivio online, a seconda dell'oggetto OnlineStoreSpec che ha creato l'archivio online. La tabella mostra i dettagli per ogni modalità di pubblicazione.

Provider di punti vendita online Modalità di pubblicazione snapshot Modalità di pubblicazione della finestra
Azure Cosmos DB (v0.5.0 e versioni successive) X
Azure MySQL (server singolo) X
Azure SQL Server X

Pubblicare uno snapshot di serie temporali

In questo modo vengono pubblicati i valori delle funzionalità più recenti per ogni chiave primaria nella tabella delle funzionalità. L'archivio online supporta la ricerca della chiave primaria, ma non supporta la ricerca temporizzato.

Per gli store online che non supportano la durata, Databricks Feature Store supporta solo la modalità di pubblicazione snapshot. Per gli archivi online che supportano il tempo di attività, la modalità di pubblicazione predefinita è snapshot, a meno che non venga specificata l'ora OnlineStoreSpec di durata (ttl) in al momento della creazione.

Pubblicare una finestra della serie temporale

In questo modo vengono pubblicati tutti i valori delle funzionalità per ogni chiave primaria nella tabella delle funzionalità nell'archivio online e vengono rimossi automaticamente i record scaduti. Un record viene considerato scaduto se il timestamp del record (in formato UTC) è superiore alla durata specificata in passato. Per informazioni dettagliate sul time-to-live, vedere la documentazione specifica del cloud.

L'archivio online supporta la ricerca della chiave primaria e recupera automaticamente il valore della funzionalità con il timestamp più recente.

Per usare questa modalità di pubblicazione, è necessario specificare un valore per la durata (ttl) in quando si crea l'archivio OnlineStoreSpec online. Non è possibile modificare l'oggetto ttl una volta impostato. Tutte le chiamate di pubblicazione successive ereditano ttl e non sono necessarie per definirlo in modo esplicito in OnlineStoreSpec.

Esempio di notebook: tabella delle funzionalità serie temporali

Il notebook seguente illustra le ricerche temporizzato nelle tabelle delle funzionalità delle serie temporali nell'Archivio funzionalità dell'area di lavoro.

Notebook di esempio della tabella delle funzionalità serie temporali

Ottenere il notebook