Gå till huvudinnehåll Gå till ytterligare innehåll

Omvandling av datatyper

När du tränar en modell för maskininlärning är det viktigt att datauppsättningen representerar alla datatyper på ett korrekt sätt. Om en variabel har en felaktig representation kan det leda till en modell med låg noggrannhet eller en modell som ser bra ut men som inte ger bra prognoser när den tillämpas på verkliga data. Du måste kunna urskilja vad varje funktion mäter och hur man tilldelar en korrekt representation för den funktionen.

I allmänhet anses i maskininlärning att allt som är en float- eller dubbeldatatyp är ett numeriskt värde och att allt som är en sträng är kategoriskt. Detta är dock inte alltid den rätta tolkningen, vilket vi kommer att se i de följande exemplen.

Exemplen bygger på en datauppsättning som har sammanställts för att besvara frågan: "Kommer en användare att köpa en produkt igen inom 30 dagar från det första inköpsdatumet?" Datauppsättningen innehåller kolumner med olika datatyper, t.ex. strängar, dubbelvärden, heltal, booleska värden och datum.

Kolumner och datatyper

Tabell med kolumnnamn och datatyper.

Strängar

Tabellen nedan visar två kolumner i vår datauppsättning som båda har datatypen sträng. Kolumnen MarketingSource har ingen mätbar skillnad mellan värdena, till exempel mellan "Facebook" och "Customer Referral". Det finns ingen numerisk eller skalär relation och kolumnen bör därför betraktas som kategorisk.

Å andra sidan sträcker sig värdena i kolumnen SourceCostPerAcquisition från "Låg" till "Hög" och det är mer mätbara skillnader mellan dem. Det är inte lika exakt som att ha den genomsnittliga kostnaden per källförvärv i dollar, men det finns en tydlig storleksordning mellan värdena. I detta fall kan man diskutera om SourceCostPerAcquisition ska betraktas som kategorisk eller numerisk.

Exempel på data för kolumnerna PersonID, MarketingSource och SourceCostPerAquisition

Tabell med exempeldata.

En rekommenderad metod i de här situationerna är att skapa två separata konfigurationer, var och en med en annan möjlig klassificering av funktionerna. De här experimenten körs separat. Den första konfigurationen är för den ursprungliga strängrepresentationen. I den andra konfigurationen ger du en numerisk mappning till de olika värdena så att kolumnen konverteras till datatypen double. Till exempel: "Låg" = 1,0, "Medel" = 2,0 och "Hög" = 3,0. När du har kört varje konfiguration kan du få en bättre förståelse för vilken konfiguration som fungerar bäst för det aktuella användningsfallet. I vissa fall är det lämpligt att använda en strängrepresentation och på andra är en numerisk representation bättre.

Siffror

När det finns en mätbar skillnad i vad data i en kolumn beskriver bör de representeras som numeriska värden. Exempel på detta är kostnader, intäkter, vinst, antal, summor och medelvärden.

Ibland kan datauppsättningen ha ett numeriskt värde som inte är mätbart eftersom det är ett lexikonvärde eller ett inkrementellt värde, t.ex. ett ID. I vårt exempel skulle värdena i kolumnen PersonID kunna förväxlas med ett numeriskt värde om de inte hade börjat med "Person_". Att behandla ID:na som numeriska värden skulle ha gett en felaktig bild av skillnaden mellan dessa rader. Den bästa metoden i sådana fall är att representera ID:t som en sträng. Innan du använder en datauppsättning kan du behöva avgöra om någon av de numeriska kolumnerna ska konverteras till kategoriska värden.

Datum

När det gäller maskininlärning är datumfältstyper kategoriska variabler. Även om datum och tidsstämplar kan subtraheras från varandra finns det flera komponenter i ett datum. Frågan är vilka av dessa komponenter som ska beaktas och hur: Ska värdet vara år, månad, dag i månaden eller året eller klockslaget? Du kanske vill ha tidsskillnaden i minuter? För att ge bästa möjliga prognosförmåga bör datumet delas upp i åtminstone några av sina beståndsdelar. En del av dessa beståndsdelar kan vara kategoriska och en del kan vara numeriska.

Ett datum kan till exempel analyseras som en veckodag. Detta kan representeras som ett numeriskt värde (1 till 7) eller ett strängvärde ("söndag" till "lördag").

Veckodagar som siffror och strängar

Tabell med veckodagar som representeras som siffror och strängar.

Det finns några problem med att representera veckodagen som ett numeriskt värde. När börjar veckan, är det måndag eller söndag? Även om veckodagen är viktig kan den dessutom vara dold i en cyklisk trend.

I vissa fall kan trenden vara mycket talande, som i diagram 1 där veckan börjar på måndagen.

Diagram 1: Genomsnittlig försäljning per veckodag när veckan börjar på måndag

Diagram över försäljningen per veckodag med en tydlig trendlinje.

Diagram 2 innehåller samma data som diagram 1, men har förskjutits en dag så att veckan börjar på söndagen. Här är signifikansen av data mycket lägre.

Diagram 2: Genomsnittlig försäljning per veckodag när veckan börjar på söndag

Diagram över försäljningen per veckodag utan en tydlig trendlinje.

Diagram 3 illustrerar ett annat problem med att använda den analyserade komponenten av ett datum som ett numeriskt värde. Det kan finnas ett signifikant mönster, men om det inte är linjärt kommer det att missas. På grund av detta och de cykliska trender (t.ex. dagliga eller kvartalsvisa säsongsvariationer) som ofta förekommer i datumkomponenter rekommenderas att dessa komponenter används som kategoriska värden och inte som numeriska värden.

Diagram 3: Genomsnittlig försäljning per veckodag med en hög nivå mitt i veckan

Diagrammet över försäljningen per veckodag med en cyklisk trend som kulminerar mitt i veckan.

Qlik AutoML använder automatisk funktionsgenerering för att separera komponenterna i datum och tidsstämplar till sina egna distinkta kolumner. Detta bidrar till att förbättra den prediktiva kapaciteten hos de modeller du skapar. Autogenererade funktioner som har härletts från en överordnad datumfunktion klassificeras som numeriska funktioner. Vid behov kan du åsidosätta den här funktionen så att datumkolumnerna behandlas som kategoriska. Mer information finns i Generering av datumfunktioner.

Datumskillnader

Datumskillnader kan användas som en bättre ersättning för inkrementella ID:n eftersom ett inkrementellt ID endast beskriver i vilken ordning posterna lades till i tabellen. Inkrementella ID:n kan lätt förvrängas av volymförändringen (kunder per dag i många exempel), medan en datumskillnad är oberoende av den omsättningshastigheten.

Datumskillnaden kan vara ett av flera mått – sekunder, timmar, dagar, månader eller kvartal. Välj den som är mest relevant för hur detaljerade dina data är. När man till exempel tittar på månadsdata finns det inget verkligt värde i en datumskillnad på några dagar. I ett sådant fall skulle en datumskillnad på flera månader vara mer relevant.

Var den här sidan till hjälp för dig?

Om du hittar några fel på denna sida eller i innehållet – ett stavfel, ett steg som saknas eller ett tekniskt fel – berätta för oss så att vi kan blir bättre!