Megosztás a következőn keresztül:


Időponthoz kötött támogatás idősoros funkciótáblák használatával

A modellek betanítása során használt adatok gyakran beépített időfüggőségekkel is rendelkeznek. Ha például betanítást végez egy modell betanításával annak előrejelzésére, hogy a gyári szinten mely gépeknek kell karbantartást végeznie, előfordulhat, hogy olyan előzményadatkészletekkel rendelkezik, amelyek számos gép érzékelőméréseit és használati adatait tartalmazzák, valamint célcímkéket, amelyek jelzik, hogy a gépnek szüksége van-e szolgáltatásra vagy sem. Az adathalmaz a karbantartási szolgáltatás végrehajtása előtt és után is tartalmazhat adatokat a gépekhez.

A modell létrehozásakor csak a jellemzőértékeket kell figyelembe vennie a megfigyelt célérték időpontjáig (szolgáltatásra van szükség, vagy nincs szükség szolgáltatásra). Ha nem veszi figyelembe kifejezetten az egyes megfigyelések időbélyegét, előfordulhat, hogy véletlenül a betanítás célértékének időbélyege után mért funkcióértékeket használja. Ezt "adatszivárgásnak" nevezzük, és negatívan befolyásolhatja a modell teljesítményét.

Az idősor-funkciótáblák olyan időbélyegkulcs-oszlopot tartalmaznak, amely biztosítja, hogy a betanítási adathalmaz minden sora a sor időbélyegének legújabb ismert funkcióértékeit adja meg. Idősorozat-funkciótáblákat akkor érdemes használni, amikor a funkcióértékek idővel változnak, például idősoradatokkal, eseményalapú adatokkal vagy időaggregált adatokkal.

Feljegyzés

  • A Databricks Runtime 13.3 LTS-es és újabb verziója esetén a Unity Katalógusban az elsődleges kulcsokat és időbélyegkulcsokat tartalmazó deltatáblák idősorozat-funkciótábláként használhatók. Javasoljuk, hogy a Z-Orderinget idősortáblákon alkalmazza a jobb teljesítmény érdekében az időponthoz kötött keresésekben.
  • Az időponthoz kötött keresés funkcióját néha "időutazásnak" is nevezik. A Databricks szolgáltatástároló időponthoz kötött funkciói nem kapcsolódnak a Delta Lake időutazásához.
  • Az időponthoz kötött funkciók használatához meg kell adnia az időhöz kapcsolódó kulcsokat az timeseries_columns argumentum használatával (a Unity Catalog szolgáltatásfejlesztéséhez) vagy az timestamp_keys argumentumhoz (a Munkaterület szolgáltatástárához). Ez azt jelzi, hogy a funkciótáblák sorait úgy kell összekapcsolni, hogy egy adott elsődleges kulcs legutóbbi értékét egyeztetik meg, amely nem későbbi, mint az timestamps_keys oszlop értéke, ahelyett, hogy pontos időegyezés alapján csatlakoznának. Ha csak egy időkorlát oszlopot jelöl ki elsődleges kulcsoszlopként, a funkciótároló nem alkalmazza az időkorlátok oszlopára az időkorlátok logikáját az illesztések során. Ehelyett csak a pontos időegyeztetésű sorokat egyezteti meg ahelyett, hogy az időbélyeg előtti összes sort egyezteti.

Az idősorok funkciótábláinak működése

Tegyük fel, hogy a következő funkciótáblák vannak. Ezek az adatok a példajegyzetfüzetből származnak.

A táblázatok a helyiség hőmérsékletét, relatív páratartalmát, környezeti fényét és szén-dioxidot mérő érzékelőadatokat tartalmaznak. A földi igazság tábla azt jelzi, hogy egy személy jelen volt-e a szobában. Mindegyik tábla rendelkezik egy elsődleges kulccsal ('room') és egy időbélyeg-kulccsal ('ts'). Az egyszerűség kedvéért csak az elsődleges kulcs egyetlen értékére ('0') vonatkozó adatok jelennek meg.

példa funkciótáblázat adataira

Az alábbi ábra bemutatja, hogyan használja az időbélyegkulcsot a betanítási adatkészlet időhöz kötött helyességének biztosítására. A funkcióértékek az elsődleges kulcs (a diagramon nem látható) és az időbélyeg-kulcs alapján egy AS OF illesztés használatával egyeznek meg. Az AS OF illesztés biztosítja, hogy a funkció legújabb értéke az időbélyeg idején legyen használva a betanítási csoportban.

az időpont működése

Az ábrán látható módon a betanítási adatkészlet tartalmazza az egyes érzékelők legújabb funkcióértékeit a megfigyelt alapigaz időbélyege előtt.

Ha az időbélyegkulcs figyelembe vétele nélkül hozott létre betanítási adatkészletet, előfordulhat, hogy van egy sor az alábbi jellemzőértékekkel és a megfigyelt alapigazsággal:

temp Rh fény co2 alapigazság
15.8 32 212 630 0

Ez azonban nem érvényes megfigyelés a betanításhoz, mivel a 630 co2-értékének leolvasása 8:52-kor történt, miután a földi igazság 8:50-kor történt. A jövőbeli adatok "kiszivárognak" a betanítási készletbe, ami rontja a modell teljesítményét.

Követelmények

  • Funkciófejlesztés a Unity Catalogban: Funkciófejlesztés a Unity Catalog-ügyfélben (bármely verzió)
  • Munkaterület szolgáltatástárolója esetén: Funkciótár-ügyfél 0.3.7-s vagy újabb verziója

Idősorozat-funkciótábla létrehozása a Unity Catalogban

A Unity Catalogban minden olyan tábla, amely timesERIES elsődleges kulccsal rendelkezik, egy idősorozat-funkciótáblázat. A Szolgáltatástábla létrehozása a Unity Katalógusban című cikkben megtudhatja , hogyan hozhat létre egyet.

Idősor-funkciótábla létrehozása a helyi munkaterületen

Ha idősorozat-szolgáltatástáblát szeretne létrehozni a helyi munkaterület szolgáltatástárolójában, a DataFrame-nek vagy a sémának tartalmaznia kell egy oszlopot, amelyet időbélyegkulcsként jelöl ki.

A Feature Store-ügyfél 0.13.4-től kezdődően az időbélyegkulcs oszlopait meg kell adni az primary_keys argumentumban. Az időbélyeg-kulcsok az "elsődleges kulcsok" részét képezik, amelyek egyedileg azonosítják a funkciótábla minden egyes sorát. A többi elsődleges kulcsoszlophoz hasonlóan az időbélyegkulcs oszlopai sem tartalmazhatnak NULL értékeket.

Funkciófejlesztés a Unity Katalógusban

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

Munkaterületi szolgáltatástár ügyfél 0.13.4-s vagy újabb verziója

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

Munkaterületi szolgáltatástár ügyfél v0.13.3 és újabb verzió

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

Az idősorok funkciótábláinak egy időbélyeg-kulccsal kell rendelkezniük, és nem lehetnek partícióoszlopai. Az időbélyegkulcs oszlopának TimestampType a következőnek kell lennie: vagy DateType.

A Databricks azt javasolja, hogy az idősorozat-funkciótáblák legfeljebb két elsődleges kulcsoszlopot tartalmazzanak, így biztosítva a teljesítményt nyújtó írásokat és kereséseket.

Idősorok funkciótábláinak frissítése

Az idősor-funkciótáblákhoz írt szolgáltatások esetében a DataFrame-nek meg kell adnia a funkciótábla összes funkciójának értékeit, ellentétben a normál funkciótáblákkal. Ez a korlátozás csökkenti a szolgáltatásértékek időbélyegek közötti ritkaságát az idősorok funkciótáblájában.

Funkciófejlesztés a Unity Katalógusban

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

Munkaterületi szolgáltatástár ügyfél 0.13.4-s vagy újabb verziója

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

Az idősorozat-szolgáltatástáblákba történő írások streamelése támogatott.

Betanítási csoport létrehozása idősoros funkciótáblával

Az idősoros funkciótáblák funkcióértékeinek időponthoz kötött kereséséhez meg kell adnia a timestamp_lookup_key funkció FeatureLookupegyikét, amely annak a DataFrame oszlopnak a nevét jelzi, amely időbélyegeket tartalmaz, amelyek alapján idősor-funkciókat kell keresni. A Databricks szolgáltatástároló a DataFrame timestamp_lookup_key oszlopában megadott időbélyegek előtt lekéri a legújabb funkcióértékeket, és amelynek elsődleges kulcsai (az időbélyegkulcsok kivételével) megegyeznek a DataFrame lookup_key oszlopaiban szereplő értékekkel, vagy null ha nincs ilyen funkcióérték.

Funkciófejlesztés a Unity Katalógusban

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

Munkaterület funkciótárolója

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

Az FeatureLookup idősorok funkciótábláinak időponthoz kötött keresésnek kell lenniük, ezért meg kell adnia egy timestamp_lookup_key , a DataFrame-ben használandó oszlopot. Az időponthoz kötött keresés nem hagyja ki az idősorok funkciótáblájában tárolt funkcióértékekkel rendelkező null sorokat.

Időkorlát beállítása az előzményfunkció-értékekhez

A Feature Store-ügyfél 0.13.0-s vagy újabb verziójával vagy a Unity Catalog-ügyfél szolgáltatásfejlesztésének bármely verziójával kizárhatja a betanítási készletből a régebbi időbélyegekkel rendelkező funkcióértékeket. Ehhez használja a paramétert lookback_window a FeatureLookup.

Az adattípusnak lookback_window meg kell lennie, és az alapértelmezett értéknek None kell lennie datetime.timedelta(az összes funkcióértéket az életkortól függetlenül használja).

Az alábbi kód például kizárja a 7 napnál régebbi funkcióértékeket:

Funkciófejlesztés a Unity Katalógusban

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

Munkaterület funkciótárolója

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

Ha a fentiekkel FeatureLookuphív, create_training_set az automatikusan végrehajtja az időponthoz kötött illesztéseket, és kizárja a 7 napnál régebbi funkcióértékeket.

A visszatekintő ablak a betanítás és a kötegelt következtetés során lesz alkalmazva. Az online következtetés során a rendszer mindig a legújabb funkcióértéket használja a visszatekintő ablaktól függetlenül.

Modellek pontszáma idősoros funkciótáblákkal

Ha idősoros funkciótáblákból származó funkciókkal betanított modellt szerez be, a Databricks Szolgáltatástár a megfelelő funkciókat az időalapú keresések használatával kéri le a modellbe csomagolt metaadatokkal a betanítás során. Az Ön által megadott FeatureEngineeringClient.score_batch DataFrame-nek (a Unity Catalog szolgáltatásfejlesztése esetén) vagy FeatureStoreClient.score_batch (munkaterületi szolgáltatástároló esetén) olyan időbélyegoszlopot kell tartalmaznia, amelynek neve megegyezik DataType a timestamp_lookup_key FeatureLookup megadott FeatureEngineeringClient.create_training_set névvel vagy FeatureStoreClient.create_training_set.

Idősor-funkciók közzététele online áruházban

Az idősorozat-funkciótáblák online áruházakban való közzétételéhez (a Unity Catalog szolgáltatásfejlesztéséhez) vagy FeatureStoreClient.publish_table a munkaterületi szolgáltatástárhoz használható FeatureEngineeringClient.publish_table . A Databricks szolgáltatástároló funkcióval pillanatképet vagy idősoradatokat tehet közzé az online áruházban attól függően, hogy melyiket OnlineStoreSpec hozta létre az online áruház. A táblázat az egyes közzétételi módokat mutatja be.

Online áruház szolgáltató Pillanatkép közzétételi módja Ablak közzétételi módja
Azure Cosmos DB (0.5.0-s vagy újabb verzió) X
Azure MySQL (egykiszolgálós) X
Azure SQL Server-kiszolgáló X

Idősor pillanatképének közzététele

Ez közzéteszi a funkciótáblában lévő egyes elsődleges kulcsok legújabb funkcióértékeit. Az online áruház támogatja az elsődleges kulcskeresést, de nem támogatja az időponthoz kötött kereséseket.

Az olyan online áruházak esetében, amelyek nem támogatják az élettartamot, a Databricks Feature Store csak pillanatkép-közzétételi módot támogat. Azoknak az online áruházaknak, amelyek támogatják az élettartamot, az alapértelmezett közzétételi mód a pillanatkép, kivéve, ha a létrehozáskor meg van adva az OnlineStoreSpec élettartam (ttl).

Idősorok közzététele ablak

Ezzel közzéteszi a funkciótáblában lévő összes funkcióértéket az online áruházban, és automatikusan eltávolítja a lejárt rekordokat. A rekord lejártnak minősül, ha a rekord időbélyege (UTC-ben) nagyobb, mint a megadott élettartam a múltban. Az élettartamra vonatkozó részletekért tekintse meg a felhőspecifikus dokumentációt.

Az online áruház támogatja az elsődleges kulcsok keresését, és automatikusan lekéri a funkció értékét a legújabb időbélyeggel.

A közzétételi mód használatához meg kell adnia egy értéket az online áruház létrehozásakor az élettartamhoz (ttl).OnlineStoreSpec A ttl beállítás után nem módosítható. Minden későbbi közzétételi hívás örökli a függvényt ttl , és nem szükséges explicit módon definiálni azt a OnlineStoreSpec.

Példa jegyzetfüzetre: Idősor funkciótáblája

Az alábbi jegyzetfüzet az idősorok funkciótábláinak időponthoz kötött kereséseit mutatja be a Munkaterület funkciótárolójában.

Time series feature table example notebook

Jegyzetfüzet beszerzése