Yksikkö 5 / 11

Ominaisuussuunnittelu: vaihtoehtojen luominen, koodaus, skaalaus ja vuotojen välttäminen

Voitot:

  • Kyky tuottaa merkityksellisiä johdannaisominaisuuksia toimialuetiedolla ja koodata kategorisia luokkia sopivilla menetelmillä (one-hot, label, target)
  • Kyky skaalata numeerisia muuttujia mallityypin mukaan (standardointi, normalisointi) ja välttää tarpeetonta tai epätäydellistä skaalausta
  • Kyky välttää ominaisuusvuodot oppimalla kaikki muunnokset harjoittelun/testin jaon jälkeen ja vain harjoittelusta

Koneoppimisessa on vanha sanonta: "Soveltava koneoppiminen on pohjimmiltaan ominaisuustekniikkaa." Koska mallin menestys johtuu usein siitä, mitä syötteitä annat mallille, eikä siitä, minkä algoritmin valitset. Ominaisuussuunnittelu on taitoa tuottaa merkityksellisiä signaaleja raakatiedoista, joista malli voi oppia. Tekoäly on tässä vaiheessa rikas ideoiden lähde: kun kysytään "mitä ominaisuuksia tästä tiedosta voidaan tuottaa", se listaa kymmeniä ehdotuksia. Mutta jotkut näistä ehdotuksista voivat olla arvokkaita, jotkut voivat olla hyödyttömiä ja jotkut voivat olla vaarallisia (vuoto). Sinun tehtäväsi on selvittää se.

Miksi ominaisuustekniikka

Raakadata tulee harvoin malliin parhaassa muodossaan. Vaikka "syntymäaika"-sarake yksinään on merkityksetön, siitä luotu "ikä"-arvo on vahva signaali. Voit poimia attribuutteja, kuten "viikonpäivä", "päivä/yö", "onko loma" "tilauksen aikaleimasta". Voit yhdistää kaksi saraketta saadaksesi suhteen ("velka/tulosuhde"). Tässä ominaisuussuunnittelu kääntää verkkoalueen tiedon matemaattisiksi signaaleiksi; Ja juuri siksi se on vaihe, joka vaatii eniten inhimillistä älykkyyttä.

Kategoristen muuttujien muuntaminen numeroiksi: koodaus

Mallit käyttävät yleensä numeroita, eivät tekstiä. Kategoristen muuttujien (kuten kaupunki, väri, tuotetyyppi) muuntamista numeroiksi kutsutaan koodaukseksi. Kolme yleistä menetelmää:

One-hot-koodaus: Avaa erillisen sarakkeen, jonka arvo on 0/1 kullekin luokalle. "Kaupungille" muodostetaan pylväät Istanbul, Ankara, Izmir; Jos asiakas on Istanbulista, vain tuo sarake on 1. Ihanteellinen, kun luokkien määrä on pieni; Jos luokkia on liian monta, se tuottaa satoja sarakkeita (tätä kutsutaan "kokoräjähdykseksi").

Tunnisteen koodaus: Antaa numeron jokaiselle luokalle (Istanbul=0, Ankara=1). Se on yksinkertainen, mutta se voi vahingossa opettaa mallille sekvenssin (kuten Ankara > Istanbul); joten sitä käytetään varoen järjestämättömissä luokissa.

Kohdekoodaus: Korvaa jokaisen luokan kyseisen luokan kohdemuuttujan keskiarvolla. Se on erittäin voimakas, mutta vaarallisin vuotolähde: jos ottaa huomioon testitietojen kohteen, malli näkee tulevaisuuden. Se tulee laskea vain harjoitustiedoista ja huolellisesti (ristivalidoinnin sisällä).

Skaalaus: suuret luvut eivät kuormita mallia

Jotkut mallit (etäisyyspohjaiset, lineaariset mallit, neuroverkot) ovat herkkiä muuttujien mittakaavalle. Jos "tulot" (0-500 000) ja "ikä" (0-100) osuvat samaan malliin, tulot voivat hallita yksinkertaisesti siksi, että ne ovat suurempia. Skaalaus korjaa tämän. Kaksi yleistä menetelmää: standardointi (muuntaa kunkin arvon "kuinka monta standardipoikkeamaa pois keskiarvosta") ja normalisointi (min-max normalisointi - pakkaa arvot alueelle 0-1). Puupohjaiset mallit (päätöspuut, satunnainen metsä) ovat mittakaavattomia, ne eivät vaadi skaalausta.

Varoitus: Skaalaus- ja koodausparametrit (keskiarvo, keskihajonta, kategoria-keskiarvokartoitus) tulee laskea vain harjoitustiedoista, sitten samaa tulee soveltaa testitietoihin. Testitietojen sisällyttäminen on vuotoa ja saa mallistasi näyttämään paremmalta kuin se todellisuudessa on.

Ominaisuussuunnittelun vuotojen sydän

Ominaisuuden luominen on tapa, josta tietovuodot useimmiten alkavat. Kaksi tyypillistä virhettä: Aikavuoto — ominaisuuden tuottaminen, joka sisältää tulevaa tietoa (mukaan lukien päivät ennustepäivän jälkeen laskettaessa "viimeisen 30 päivän keskiarvoa"). Tilastovuoto — ominaisuuden (skaalauskeskiarvo, tavoitekoodausarvo) laskeminen kaikista tiedoista ennen harjoittelun/testin jakoa. Sääntö: opi jokainen muunnos suoritettuasi ensin harjoitus-/testi-jaon ja vain harjoitustiedoista. Turvallisin tapa tehdä tämä säännöllisesti on käyttää liukuhihnaa – rakennetta, joka kerää kaikki muunnokset yhteen ketjuun ja soveltaa niitä jakamisen jälkeen.

menetelmä

mitä varten

Vuotovaara

huomautus

One-hot koodaus

Muuttuva muutamalla kategorialla

alhainen

Räjähtää kokoa useissa luokissa

Etiketin koodaus

Lajiteltu luokka

alhainen

Out of order opettaa väärää järjestystä

kohdekoodaus

Monikategoria, vahva signaali

erittäin korkea

Vain koulutuksesta, CV:ssä

standardointi

Lineaariset/etäisyysmallit

keskikokoinen

Parametri riippuu vain koulutuksesta

Aikaikkuna-ominaisuus

aikasarja

korkea

Lisää tulevaisuus

kolme minilaukkua

Tapaus 1 – Arvokasta omaisuutta. Luottotiimi loi "velka-tulosuhde" -ominaisuuden "kuukausitulot"- ja "kuukausittaiset velanmaksut" -sarakkeista. Tämä yksittäinen johdettu ominaisuus paransi mallin tarkkuutta 71 %:sta 79 %:iin; koska se oli korko, ei absoluuttinen tulo, joka todella määritti riskin. Oppitunti: toimialueen tietämyksen luomat suhteet ovat vahvoja signaaleja.

Tapaus 2 — Kohteen koodausvuoto. Yksi tiimi muunsi "postinumeron" numeroksi kohdekoodauksella (keskimääräinen vaihtuvuus kyseisellä alueella), mutta teki niin kaikista tiedoista ennen jakamista. Malli antoi 94 % testisarjasta ja putosi 68 %:iin tuotannossa. 6 viikon ponnistelu meni hukkaan. Oppitunti: Kohdekoodaus tehdään huolellisesti, vain koulutuksen aikana.

Tapaus 3 – Skaalaus unohtaminen. Eräs analyytikko syötti tuoton (0–400 000) ja asiakkaan iän (18–75) etäisyyteen perustuvaan malliin ilman skaalausta. Malli tarkasteli lähes yksinomaan tuloja murskaamalla ikävaikutuksen. Kun skaalaus lisättiin, segmentoinnista tuli mielekästä. Oppitunti: skaalaus ei ole unohdettu etäisyys/lineaarisissa malleissa.

Neljä kopioitavaa mallia

1) Ominaisuusideoiden luominen (poistaminen on sinun):

Tehtäväsi: ominaisuustekniikan assistentti. Omat df-sarakkeet: syntymäpäivä, tilausaika (aikaleima), tulon_tunnus, velan_tunnus, kaupunki, tuoteluokka. Tavoite: "maksetaanko laina takaisin" (0/1). Ehdota 15 ominaisuutta, jotka voidaan luoda näistä sarakkeista; määritä vuotoriski (pieni/keskimääräinen/suuri) kullekin. Merkitse selvästi ne, jotka sisältävät tulevaa tietoa.

2) Suojattu koodaus (jakamisen jälkeinen):

Kirjoita koodi, joka yksi-hot koodaa "city" ja "product_category". TÄRKEÄÄ: sovita koodaus vain harjoitustietoihin ja muunna sitten testitiedot (sklearn OneHotEncoderilla). Selitä, kuinka käsittelet näkymätöntä luokkaa (handle_unknown) koulutuksessa.

3) Vuototon muunnos putkilinjalla:

Sklearn-putkilinjan määrittäminen: käytä StandardScaleria numeerisissa sarakkeissa, OneHotEncoderia kategorisissa sarakkeissa, lisää luokitin loppuun. Takuu, että kaikki muutokset opitaan junan/testijaon JÄLKEEN ja vain harjoittelusta. Selitä koodi ja miksi se ei vuoda.

4) Aikaikkuna-ominaisuus (vuotojen hallinta):

Luo kullekin asiakkaalle "tilausten määrä viimeisten 30 päivän aikana" -attribuutti, mutta ÄLÄ KOSKAAN sisällytä ennustepäivän jälkeisiä tietoja. Selitä rivi riviltä, ​​että koodi ei katso tulevaisuuteen. Annan viitepäivämäärän sarakkeen.

Heikko kehote / Vahva kehote

Heikko kehote:

Lisää tähän dataan hyviä ominaisuuksia.

"Hyvä" on määrittelemätön, tavoite on epäselvä, ei ole vuodonhallintaa. AI luo satunnaisia, ehkä vuotavia ominaisuuksia.

Tehokas kehotus:

Tehtäväsi: ominaisuusinsinööri. Tavoite: "vaihtuu 30 päivässä" (0/1), arvioitu viitepäivämäärä: save_date. df.Taskissa on tapahtumahistoria: Luo 8 ominaisuutta, vastaa kysymykseen "Onko minulla nämä tiedot ennustushetkellä" JOKAiselle. Päivämäärän lisääminen viitepäivämäärän jälkeen aikaikkunan ominaisuuksiin. Kirjoita koodi putkilinjan kanssa yhteensopivalla tavalla suoritettavaksi juna-/testiosion jälkeen.

Tässä kohde, viiteaika ja vuodonhallinta määritellään alusta alkaen.

Yleisiä virheitä

  • Muunnoksen oppiminen kaikista tiedoista ennen jakamista. Jos skaalaus/koodausparametri näkee testitiedot, tapahtuu vuotoa.
  • Kohdekoodauksen huolimaton käyttö. Se on tehokkain mutta vuotavin menetelmä; juuri koulutuksesta, ristiinvalidaatiossa.
  • Tulevaisuuden lisääminen aikaikkunaominaisuuden avulla. Jos "viimeiset 30 päivää" lasketaan ennustepäivän jälkeen, malli näkee tulevaisuuden.
  • Tarpeeton skaalaus puumallissa ja epätäydellinen skaalaus lineaarisessa mallissa. Skaalauspäätökset tehdään mallityypin mukaan.
  • Tekoälyn jokaisen ominaisuusehdotuksen lisääminen ilman kysymystä. Ehdotukset voivat sisältää hyödyttömiä ja vuotavia ominaisuuksia.
Vinkki: Kirjoita yksi kysymys jokaiselle luomasi ominaisuudelle: "Voinko laskea tämän arvon tiedoilla, jotka minulla on ennustusta tehdessäni?" Jos vastaus ei ole selkeä "kyllä", älä käytä ominaisuutta. Tämä yksittäinen kurinalaisuus eliminoi useimmat ominaisuuksiin liittyvät vuodot.

Yhteenvetona

Ominaisuussuunnittelu on taitoa tuottaa merkityksellisiä signaaleja raakatiedoista, ja se määrittää usein mallin onnistumisen enemmän kuin algoritmin. Kategorioiden koodaus (yksi-hot, etiketti, kohde), numeeristen skaalaus (standardointi, normalisointi) ja johdannaisominaisuuksien tuottaminen toimialuetiedolla ovat perustyökaluja. Mutta tämä vaihe on myös vuodon ydin: kaikki muunnokset on opittava harjoittelun/testin jaon jälkeen ja vain harjoitustiedoista. AI tuottaa paljon ideoita; Ihmisen harkintakyky erottaa arvokkaan vaarallisesta.

Sovellustehtävä

Valitse kohdemuuttuja ja suunnittele vähintään viisi johdannaisominaisuutta omistamistasi sarakkeista. Vastaa jokaisen kohdalla kirjallisesti kysymykseen "Olenko käytettävissä ennusteen aikaan" ja poista vähintään yksi "korkea vuotoriski". Koodaa sitten suojatut ominaisuudet liukuhihnaan, joka otetaan käyttöön osion jälkeen.

tarkistuslista

  • [ ] Käytinkö kaikkia muunnoksia junan/testijaon jälkeen?
  • [ ] Opinko skaalaus-/koodausparametrit vain harjoittelusta?
  • [ ] Olenko vastannut kunkin ominaisuuden kohdalla kysymykseen "Onko minulla se ennustehetkellä"?
  • [ ] Olenko ollut erityisen varovainen riskialttiiden menetelmien, kuten kohdekoodauksen, kanssa?
  • [ ] Olenko päättänyt skaalata mallityypin (puu/lineaarinen) sopivasti?