Amazon SageMaker Feature Store är en specialbyggd tjänst för att lagra och hämta funktionsdata för användning av maskininlärningsmodeller (ML). Feature Store tillhandahåller en onlinebutik som kan läsa och skriva med låg latens och hög genomströmning, och en offlinebutik som ger bulkåtkomst till all historisk postdata. Feature Store hanterar synkroniseringen av data mellan online- och offlinebutikerna.
Eftersom modellutveckling är en iterativ process kommer kunderna ofta att fråga offlinebutiken och bygga olika datauppsättningar för modellträning. För närvarande finns det flera sätt att komma åt funktioner i offlinebutiken, inklusive att köra SQL-frågor med Amazonas Athena eller använda Spark SQL i Apache Spark. Dessa mönster kräver dock att man skriver ad hoc (och ibland komplexa) SQL-satser, vilket inte alltid är lämpligt för dataforskarens persona.
Feature Store nyligen utökat SageMaker Python SDK för att göra det enklare att skapa datauppsättningar från offlinebutiken. Med den här versionen kan du använda en ny uppsättning metoder i SDK:n för att skapa datauppsättningar utan att skriva SQL-frågor. Dessa nya metoder stöder vanliga operationer som tidsresor, filtrering av dubbletter av poster och sammanfogning av flera funktionsgrupper samtidigt som de säkerställer exakthet vid tidpunkten.
I det här inlägget visar vi hur man använder SageMaker Python SDK för att bygga ML-färdiga datamängder utan att skriva några SQL-satser.
Lösningsöversikt
För att demonstrera den nya funktionaliteten arbetar vi med två datauppsättningar: leads och webbmarknadsföringsstatistik. Dessa datauppsättningar kan användas för att bygga en modell som förutsäger om en lead kommer att omvandlas till en försäljning givet marknadsföringsaktiviteter och mätvärden som fångas upp för det leadet.
Leaddatan innehåller information om potentiella kunder som identifieras med hjälp av Lead_ProspectID
. Funktionerna för en potentiell kund (t.ex. LeadSource
) kan uppdateras över tid, vilket resulterar i ett nytt rekord för det leadet. De Lead_EventTime
representerar den tid under vilken varje post skapas. Följande skärmdump visar ett exempel på denna data.
Webbmarknadsföringsstatistiken spårar engagemangsstatistiken för en lead, där varje lead identifieras med hjälp av Web_ProspectID
. De Web_EventTime
representerar tiden då posten skapades. Till skillnad från leads-funktionsgruppen finns det bara en post per lead i denna feature-grupp. Följande skärmdump visar ett exempel på denna data.
Vi går igenom de viktigaste delarna av sagemaker-feature-store-offline-sdk.ipynb
anteckningsbok, som visar följande steg:
- Skapa en datauppsättning från en funktionsgrupp.
- Gå med i flera funktionsgrupper.
- Skapa en punkt-i-tid-koppling mellan en funktionsgrupp och en datauppsättning baserat på en uppsättning händelser vid specifika tidsstämplar.
- Hämta funktionshistorik inom ett specifikt tidsintervall.
- Hämta funktioner från en specifik tidsstämpel.
Förutsättningar
Du behöver följande förutsättningar:
Vi antar att en funktionsgrupp för leadsdata har skapats med den befintliga FeatureGroup.create
metod och kan refereras med variabeln base_fg
. För mer information om funktionsgrupper, se Skapa funktionsgrupper.
Skapa en datauppsättning från en funktionsgrupp
För att skapa en datauppsättning med SageMaker SDK använder vi den nya FeatureStore
klass, som innehåller create_dataset
metod. Denna metod accepterar en basfunktionsgrupp som kan sammanfogas med andra funktionsgrupper eller DataFrames. Vi börjar med att tillhandahålla leads-funktionsgruppen som bas och en Amazon enkel lagringstjänst (Amazon S3) sökväg för att lagra datamängden:
Smakämnen create_dataset
metoden returnerar a DatasetBuilder
objekt, som kan användas för att generera en datauppsättning från en eller flera funktionsgrupper (vilket vi visar i nästa avsnitt). För att skapa en enkel datauppsättning som endast består av leads-funktionerna, anropar vi to_csv_file
metod. Detta kör en fråga i Athena för att hämta funktionerna från offlinebutiken och sparar resultaten till den angivna S3-sökvägen.
Gå med i flera funktionsgrupper
Med SageMaker SDK kan du enkelt gå med i flera funktionsgrupper för att bygga en datauppsättning. Du kan också utföra kopplingsoperationer mellan en befintlig Pandas DataFrame till en enstaka eller flera funktionsgrupper. De basfunktionsgrupp är ett viktigt koncept för sammanfogningar. Basfunktionsgruppen är funktionsgruppen som har andra funktionsgrupper eller Pandas DataFrame ansluten till den.
När du skapar datasetet med hjälp av create_dataset
funktionen använder vi with_feature_group
metod, som utför en inre koppling mellan basfunktionsgruppen och en annan funktionsgrupp med användning av postidentifieraren och målobjektets namn i basfunktionsgruppen. I vårt exempel är basfunktionsgruppen leadsfunktionsgruppen och målfunktionsgruppen är funktionsgruppen för webbmarknadsföring. De with_feature_group
metoden accepterar följande argument:
- feature_group – Det här är featuregruppen vi går med i. I vårt kodexempel skapas målgruppen med hjälp av webbmarknadsföringsdataset.
- target_feature_name_in_base – Namnet på funktionen i basfunktionsgruppen som vi använder som nyckel i kopplingen. Vi använder
Lead_ProspectID
som postidentifierare för basfunktionsgruppen. - inkluderade_funktionsnamn – Det här är listan över objektnamnen för basfunktionsgruppen. Vi använder det här fältet för att specificera de funktioner som vi vill inkludera i datamängden.
Följande kod visar ett exempel på att skapa en datauppsättning genom att gå med i basfunktionsgruppen med målfunktionsgruppen:
Du kan utöka kopplingsoperationerna till att omfatta flera funktionsgrupper genom att lägga till with_feature_group
metod i slutet av föregående kodexempel och definiera de nödvändiga argumenten för den nya funktionsgruppen. Du kan också utföra kopplingsoperationer med en befintlig DataFrame genom att definiera basen som din befintliga Pandas DataFrame och gå med i de intresserade funktionsgrupperna. Följande kodexempel visar hur man skapar datauppsättning med en befintlig Pandas DataFrame och en befintlig funktionsgrupp:
För fler exempel på dessa olika konfigurationer, se Skapa en datauppsättning från dina funktionsgrupper.
Skapa en anslutning vid tidpunkten
En av de mest kraftfulla funktionerna med denna förbättring är att utföra punkt-i-tid-kopplingar enkelt och utan att behöva skriva komplex SQL-kod. När man bygger ML-modeller måste datavetare undvika dataläcka eller målläckage, som av misstag använder data under modellträning som inte skulle vara tillgängliga vid tidpunkten för förutsägelsen. Om vi till exempel försöker förutsäga kreditkortsbedrägerier, bör vi utesluta transaktioner som kommer efter den bedrägliga debiteringen vi försöker förutsäga, annars kan den utbildade modellen använda denna information efter bedrägeri för att ändra modellen, vilket gör att den generaliseras mindre bra.
Hämtning av punkt-i-tid exakta funktionsdata kräver att du tillhandahåller en entitet DataFrame som tillhandahåller en uppsättning post-ID:n (eller primärnyckel) och motsvarande händelsetider som fungerar som bryttid för händelsen. Denna hämtningsmekanism kallas ibland tidsresor på radnivå, eftersom det tillåter en annan tidsbegränsning att tillämpas för varje radnyckel. För att utföra "point-in-time joins" med SageMaker SDK använder vi Dataset Builder klass och tillhandahåll entiteten DataFrame som basargument till konstruktorn.
I följande kod skapar vi en enkel entitet DataFrame med två poster. Vi ställer in händelsetiderna, som används för att indikera bryttiden, nära mitten av tidsseriedata (mitten av januari 2023):
När vi använder point_in_time_accurate_join
funktionalitet med create_dataset
anrop, den interna frågan exkluderar alla poster med tidsstämplar senare än de angivna gränstiderna, vilket returnerar de senaste funktionsvärdena som skulle ha varit tillgängliga vid tidpunkten för händelsen:
Observera att det bara finns två poster i DataFrame som returneras av tidpunktsanslutningen. Detta beror på att vi bara skickade in två post-ID:n i entiteten DataFrame, en för varje Lead_ProspectID
vi vill hämta. Tidpunktskriterierna anger att en posts händelsetid (lagrad i Lead_Eventtime
fältet) måste innehålla ett värde som är mindre än bryttiden.
Dessutom instruerar vi frågan att endast hämta den senaste posten som uppfyller dessa kriterier eftersom vi har tillämpat with_number_of_recent_records_by_record_identifier
metod. När den används tillsammans med point_in_time_accurate_join
metoden gör detta att den som ringer kan specificera hur många poster som ska returneras från de som uppfyller kriterierna för att ansluta sig till tidpunkten.
Jämför anslutningsresultat vid tidpunkt med Athena-frågeresultat
För att verifiera utdata som returneras av SageMaker SDK point_in_time_accurate_join
funktion, jämför vi den med resultatet av en Athena-fråga. Först skapar vi en standard Athena-fråga med hjälp av en SELECT-sats kopplad till den specifika tabellen som skapats av Feature Store-runtime. Detta tabellnamn kan hittas genom att referera till table_name
fältet efter att ha instansierat athena_query
från FeatureGroup
API:
Athena-frågan innehåller ingen semantik för sammankoppling vid tidpunkt, så den returnerar alla poster som matchar den angivna record_id
(Lead_ProspectID
).
Därefter använder vi Pandas-biblioteket för att sortera Athena-resultaten efter händelsetider för enkel jämförelse. Posterna med tidsstämplar senare än händelsetiderna som anges i entiteten DataFrame (till exempel, 2023-01-15T00:00:00Z
) lämnat till point_in_time_accurate_join
dyker inte upp i tidpunktsresultaten. Eftersom vi dessutom specificerade att vi bara vill ha en enda post från föregående create_dataset
kod får vi bara det senaste rekordet före bryttiden. Genom att jämföra SageMaker SDK-resultaten med Athena-frågeresultaten ser vi att funktionen punkt-i-tid-join returnerade de rätta posterna.
Därför har vi tilltro till att vi kan använda SageMaker SDK för att utföra tidsresor på radnivå och undvika målläckage. Dessutom fungerar denna funktion över flera funktionsgrupper som kan uppdateras på helt olika tidslinjer.
Hämta funktionshistorik inom ett specifikt tidsintervall
Vi vill också demonstrera användningen av att ange ett tidsintervall när man går med i funktionsgrupperna för att bilda en datauppsättning. Tidsfönstret definieras med with_event_time_range
, som accepterar två ingångar, starting_timestamp
och ending_timestamp
, och returnerar ett datauppsättningsbyggarobjekt. I vårt kodexempel ställer vi in hämtningstidsfönstret för 1 hel dag från 2022-07-01 00:00:00
tills 2022-07-02 00:00:00
.
Följande kod visar hur man skapar en datauppsättning med det angivna händelsetidsfönstret samtidigt som man går med i basfunktionsgruppen med målfunktionsgruppen:
Vi bekräftar också skillnaden mellan storlekarna på datamängden som skapats med with_event_time_range
genom att exportera till en Pandas DataFrame med to_dataframe()
metod och visning av data. Lägg märke till hur resultatuppsättningen bara har en bråkdel av de ursprungliga 10,020 XNUMX posterna, eftersom den bara hämtar poster vars event_time
är inom 1-dagarsperioden.
Hämta funktioner från en specifik tidsstämpel
Smakämnen DatasetBuilder as_of
metoden hämtar funktioner från en datauppsättning som uppfyller en tidsstämpelbaserad begränsning, som anroparen tillhandahåller som ett argument till funktionen. Den här mekanismen är användbar för scenarier som att köra om experiment på tidigare insamlade data, backtesta tidsseriemodeller eller bygga en datauppsättning från ett tidigare tillstånd i offlinebutiken för datagranskningsändamål. Denna funktion kallas ibland för tidsresor eftersom den i huvudsak rullar tillbaka datalagret till ett tidigare datum och tid. Denna tidsbegränsning kallas också för cutoff tidsstämpel.
I vår exempelkod skapar vi först cutoff-tidsstämpeln genom att läsa write_time
värde för den senaste posten som skrevs till Feature Store, den som skrevs med put_record
. Sedan tillhandahåller vi denna gränstidsstämpel till DatasetBuilder
som ett argument till as_of
metod:
Det är viktigt att notera att as_of
metod tillämpar tidsbegränsningen på det interna write_time
fältet, som automatiskt genereras av Feature Store. De write_time
fältet representerar den faktiska tidsstämpeln när posten skrivs till datalagret. Detta är annorlunda än andra metoder som point-in-time-accurate-join
och with_event_time_range
som använder den klient som tillhandahålls event_time
fältet som en jämförelse.
Städa upp
Se till att ta bort alla resurser som skapats som en del av det här exemplet för att undvika pågående avgifter. Detta inkluderar funktionsgrupperna och S3-bucketen som innehåller offlinebutiksdata.
SageMaker Python SDK-erfarenhet kontra att skriva SQL
De nya metoderna i SageMaker Python SDK gör att du snabbt kan skapa datauppsättningar och snabbt gå till träningssteget under ML-livscykeln. För att visa den tid och ansträngning som kan sparas, låt oss undersöka ett användningsfall där vi behöver gå med i två funktionsgrupper samtidigt som vi hämtar funktionerna inom en angiven tidsram. Följande figur jämför Python-frågorna i offlinefunktionsarkivet med SQL som används för att skapa datasetet bakom en Python-fråga.
Som du kan se kräver samma operation att slå samman två funktionsgrupper att du skapar en lång, komplex SQL-fråga, medan den kan utföras med bara with_feature_group
och with_event_time_range
metoder i SageMaker Python SDK.
Slutsats
De nya offlinebutiksmetoderna i Python SageMaker SDK låter dig fråga dina offlinefunktioner utan att behöva skriva komplexa SQL-satser. Detta ger en sömlös upplevelse för kunder som är vana vid att skriva Python-kod under modellutveckling. För mer information om funktionsgrupper, se Skapa en datamängd från dina funktionsgrupper och Feature Store API:er: Feature Group.
Det fullständiga exemplet i det här inlägget finns i GitHub repository. Ge det ett försök och låt oss veta din feedback i kommentarerna.
Om författarna
Paul Hargis har fokuserat sina ansträngningar på maskininlärning på flera företag, inklusive AWS, Amazon och Hortonworks. Han tycker om att bygga tekniska lösningar och lära människor hur de kan utnyttja dem. Paul gillar att hjälpa kunder att utöka sina maskininlärningsinitiativ för att lösa verkliga problem. Innan hans roll på AWS var han ledande arkitekt för Amazon Exports and Expansions, och hjälpte till amazon.com förbättra upplevelsen för internationella shoppare.
Mecit Gungor är en AI/ML-specialistlösningsarkitekt på AWS som hjälper kunder att designa och bygga AI/ML-lösningar i stor skala. Han täcker ett brett spektrum av AI/ML-användningsfall för telekommunikationskunder och fokuserar för närvarande på Generativ AI, LLM och utbildning och slutledningsoptimering. Han kan ofta hittas på vandring i vildmarken eller spela brädspel med sina vänner på fritiden.
Tony Chen är en Machine Learning Solutions Architect på AWS, som hjälper kunder att designa skalbara och robusta maskininlärningsmöjligheter i molnet. Som tidigare datavetare och dataingenjör utnyttjar han sin erfarenhet för att hjälpa till att ta itu med några av de mest utmanande problemen som organisationer står inför med att operationalisera maskininlärning.
Sovik Kumar Nath är en AI/ML-lösningsarkitekt med AWS. Han har lång erfarenhet av end-to-end-designer och lösningar för maskininlärning; affärsanalys inom finansiell, operationell och marknadsanalys; sjukvård; försörjningskedjan; och IoT. Utanför jobbet tycker Sovik om att resa och titta på film.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- EVM Finans. Unified Interface for Decentralized Finance. Tillgång här.
- Quantum Media Group. IR/PR förstärkt. Tillgång här.
- PlatoAiStream. Web3 Data Intelligence. Kunskap förstärkt. Tillgång här.
- Källa: https://aws.amazon.com/blogs/machine-learning/build-machine-learning-ready-datasets-from-the-amazon-sagemaker-offline-feature-store-using-the-amazon-sagemaker-python-sdk/
- : har
- :är
- :var
- $UPP
- 1
- 10
- 100
- 11
- 14
- 15%
- 16
- 2023
- 22
- 24
- 7
- 8
- a
- Om oss
- accepterar
- tillgång
- åstadkommit
- noggrannhet
- exakt
- tvärs
- aktiviteter
- faktiska
- Ad
- tillsats
- Dessutom
- Efter
- AI
- AI / ML
- Alla
- tillåter
- tillåter
- också
- alltid
- amason
- Amazon SageMaker
- Amazon Web Services
- an
- analytics
- och
- Annan
- vilken som helst
- Apache
- api
- API: er
- tillämpas
- ÄR
- Argumentet
- argument
- AS
- At
- revision
- automatiskt
- tillgänglig
- undvika
- AWS
- tillbaka
- Backtesting
- bas
- baserat
- BE
- därför att
- varit
- bakom
- mellan
- ombord
- Brädspel
- SLUTRESULTAT
- byggare
- Byggnad
- företag
- by
- Ring
- Uppringare
- KAN
- kapacitet
- kapabel
- fångas
- kortet
- Vid
- fall
- kedja
- utmanande
- laddning
- avgifter
- klass
- cloud
- koda
- kommentarer
- Gemensam
- Företag
- jämföra
- jämförande
- jämförelse
- fullständigt
- komplex
- begrepp
- förtroende
- Bekräfta
- förening
- Bestående
- innehålla
- innehåller
- konvertera
- Motsvarande
- kunde
- Täcker
- skapa
- skapas
- Skapa
- kredit
- kreditkort
- kriterier
- För närvarande
- Kunder
- datum
- datavetare
- datauppsättningar
- Datum
- datum Tid
- dag
- definierade
- definierande
- demonstrera
- demonstrerar
- Designa
- mönster
- Utveckling
- Skillnaden
- olika
- visning
- inte
- inte
- under
- varje
- Tidigare
- lättare
- lätt
- lätt
- ansträngning
- ansträngningar
- änden
- början till slut
- ingrepp
- ingenjör
- säkerställa
- enhet
- epok
- väsentligen
- händelse
- händelser
- undersöka
- exempel
- exempel
- befintliga
- Bygga ut
- erfarenhet
- experiment
- export
- förlänga
- omfattande
- Omfattande erfarenhet
- Ansikte
- Leverans
- Funktioner
- FeatureStore
- återkoppling
- fält
- Figur
- Fil
- filtrering
- finansiella
- Förnamn
- fokuserade
- fokuserar
- efter
- För
- formen
- Tidigare
- hittade
- fraktion
- RAM
- bedrägeri
- bedräglig
- Fri
- ofta
- vänner
- från
- full
- fungera
- funktionalitet
- Vidare
- Games
- generera
- genereras
- generativ
- Generativ AI
- skaffa sig
- Ge
- ges
- Grupp
- Gruppens
- Handtag
- Har
- har
- he
- hälso-och sjukvård
- hjälpa
- hjälpa
- hans
- historisk
- historia
- Hur ser din drömresa ut
- How To
- Men
- html
- http
- HTTPS
- identifierade
- identifierare
- ids
- if
- importera
- med Esport
- förbättra
- in
- innefattar
- innefattar
- Inklusive
- indikerar
- informationen
- initiativ
- ingångar
- exempel
- intresserad
- inre
- Internationell
- in
- iot
- IT
- delta
- fogade
- sammanfogning
- Fogar
- jpg
- bara
- Nyckel
- Vet
- Efternamn
- senare
- senaste
- leda
- Leads
- inlärning
- mindre
- Låt
- Hävstång
- hävstångs
- Bibliotek
- livscykel
- tycka om
- gillar
- Lista
- läge
- Lång
- Maskinen
- maskininlärning
- göra
- Framställning
- många
- Marknadsföring
- Match
- Maj..
- mekanism
- Möt
- möter
- metod
- metoder
- Metrics
- Mitten
- ML
- modell
- modeller
- mer
- mest
- flytta
- Filmer
- multipel
- måste
- namn
- namn
- Nära
- Behöver
- Nya
- Nästa
- anteckningsbok
- Lägga märke till..
- objektet
- of
- offline
- Ofta
- on
- ONE
- pågående
- nätet
- endast
- drift
- operativa
- Verksamhet
- optimering
- or
- organisationer
- ursprungliga
- Övriga
- annat
- vår
- produktion
- utanför
- över
- pandor
- del
- reservdelar till din klassiker
- passera
- bana
- mönster
- paul
- Personer
- Utföra
- utför
- perioden
- plato
- Platon Data Intelligence
- PlatonData
- i
- Inlägg
- den mäktigaste
- förutse
- förutsägelse
- Förutspår
- förutsättningar
- föregående
- tidigare
- primär
- Innan
- problem
- process
- rätt
- blivande
- ge
- ger
- tillhandahålla
- syfte
- Python
- sökfrågor
- snabbt
- område
- Läsning
- verkliga världen
- post
- register
- erat
- avses
- frigöra
- representerar
- kräver
- Obligatorisk
- Kräver
- Resurser
- resultera
- Resultat
- avkastning
- tillbaka
- återgår
- robusta
- Roll
- rullar
- RAD
- rinnande
- sagemaker
- Till Salu
- Samma
- skalbar
- Skala
- scenarier
- Forskare
- vetenskapsmän
- sDK
- sömlös
- sekunder
- §
- se
- semantik
- Serier
- tjänar
- service
- Tjänster
- in
- inställning
- inställning
- flera
- skall
- show
- Visar
- Enkelt
- helt enkelt
- enda
- storlekar
- So
- lösning
- Lösningar
- LÖSA
- några
- Gnista
- specialist
- specifik
- specificerade
- standard
- starta
- Ange
- .
- uttalanden
- Steg
- Steg
- förvaring
- lagra
- lagras
- lagrar
- lämnats
- sådana
- lämplig
- levereras
- leverera
- leveranskedjan
- stödja
- synkronisering
- bord
- tackla
- Målet
- Undervisning
- Teknologi
- telekommunikation
- än
- den där
- Smakämnen
- deras
- Dem
- sedan
- Där.
- Dessa
- detta
- de
- Genom
- Bunden
- tid
- Tidsföljder
- tidsresor
- tidslinjer
- gånger
- tidsstämpel
- till
- Tony
- tränad
- Utbildning
- Transaktioner
- färdas
- Traveling
- prova
- två
- unix
- till skillnad från
- tills
- uppdaterad
- us
- användning
- användningsfall
- Begagnade
- med hjälp av
- värde
- Värden
- olika
- verifiera
- vs
- vill
- var
- tittar
- sätt
- we
- webb
- webbservice
- VÄL
- när
- medan
- som
- medan
- VEM
- vars
- bred
- Brett utbud
- wikipedia
- kommer
- med
- inom
- utan
- Arbete
- fungerar
- skulle
- skriva
- skrivning
- skriven
- Om er
- Din
- zephyrnet