Enhet 6 / 11

Modellbygging: Problemdefinisjon, algoritmevalg og trening/testdeling

Gevinster:

  • Evne til å definere problemtypen (klassifisering, regresjon, clustering) og suksesskriterier i henhold til den reelle kostnaden for jobben
  • Evne til å dele dataene ærlig (uten å berøre testsettet; kronologisk i tidsserien) og etablere et lekkasjefritt evalueringsgrunnlag
  • Evne til å velge en tolkbar modell ved å starte med en enkel grunnlinje og legge til kompleksitet bare når den fortjener det.

Så langt har vi samlet inn data, renset dem, utforsket dem og produsert funksjoner. Nå kommer vi til det virkelige arbeidet, å bygge en modell. En modell er en matematisk struktur som lærer et mønster fra data og produserer spådommer for nye situasjoner. Men den mest kritiske delen av å bygge en modell er ikke selve koden, men de to avgjørelsene som går foran den: å definere det riktige problemet og dele dataene riktig. AI er en kraftig rådgiver innen algoritmevalg, kodeskriving og parameterinnstilling; men det er opp til én å bestemme hva man skal forutsi og hva suksess betyr. Et dårlig definert problem vil ikke fungere selv med en perfekt skrevet modell.

Problemdefinisjon først: hva forutsier vi

Hver modelljobb starter med et spørsmål, og dette spørsmålet bestemmer type modell. Klassifisering — utgangen er en kategori: "Vil denne kunden forlate eller bli?", "Er denne transaksjonen falsk?". Regresjon (på engelsk regresjon - utgangen er et tall): "Hvor mye er dette huset verdt?", "Hvor mange bestillinger kommer neste måned?". Clustering (deler umerkede data inn i naturlige grupper): "Hvor mange naturlige segmenter er mine kunder delt inn i?".

Den andre delen av problemformuleringen er suksesskriteriet: hva betyr det at denne modellen er «god»? I en svindelmodell er det mye dyrere å savne en svindler enn å blokkere en ærlig kunde ved et uhell; Derfor kommer ikke «generell nøyaktighet», men «rate for fangst av svindlere» i forgrunnen. Hvis du ikke definerer dette kriteriet fra begynnelsen, sammen med bedriftseieren, vil du ende opp med en "svært nøyaktig" modell som ikke fungerer (vi går dypere inn på beregninger i enhet 7).

Forsiktig: "Nøyaktighet" kan være misvisende. Hvis 10 av 1000 transaksjoner er uredelige, vil en dum modell som sier "ingen er svindel" gi 99% nøyaktighet, men vil ikke fange en eneste svindel. Velg suksesskriterier basert på den reelle kostnaden for problemet.

Trening/testdeling: ærlig undersøkelse av modellen

Å teste en modell med dataene den har lært er som å stille studenten de samme spørsmålene han/hun studerte på eksamen; Han får høye karakterer, men viser ikke hva han egentlig kan. Så vi deler dataene i to (ofte tre):

  • Treningssett (treningssett på engelsk, vanligvis 70-80%): Modellen lærer på dette.
  • Testsett (testsett, vanligvis 20-30%): Modellen ser ikke dette i det hele tatt; reell ytelse måles her.
  • Valideringssett: Mellomsett brukt for modellinnstilling (hvilken parameter er bedre); for å holde testsettet "rent".

Den mest grunnleggende regelen: testsettet berøres aldri under trening. Skalering, koding, funksjonsvalg - alt læres ganske enkelt fra treningssettet, og brukes deretter til testing (lekkasjeprinsipp fra enhet 5). Testsettet er første gang modellen ser den virkelige verden; Hvis du slår den på for tidlig, vil du aldri vite den sanne ytelsen.

Tidsserieunntak: Hvis dataene dine er tidsavhengige (salg, aksjemarked, etterspørsel), gjøres ikke tilfeldig deling. Fordi tilfeldig splitting får modellen til å se fremtiden og forutsi fortiden - dette er lekkasje. Del heller kronologisk: tren med den gamle perioden, test med den nye perioden.

Algoritmevalg: fra enkel til kompleks

Den vanligste feilen for nybegynnere er å starte med den mest komplekse modellen. Den riktige tilnærmingen er det motsatte: først etablere en enkel grunnlinje. "gjett alltid majoritetsklassen" i en klassifisering; "beregn alltid gjennomsnittet" i en regresjon. Denne dumme modellen gir en grunnlinje; Hvis den faktiske modellen ikke klarer dette, er det et problem. Gå deretter videre til enkle og tolkbare modeller.

modell

Problemtype

sterke poeng

svakhet

Grunnlinje (flertal/gjennomsnitt)

begge deler

Gir benchmark

lærer ikke

Logistisk regresjon

Klassifisering

Enkelt, tolkbart

Kun lineært forhold

Lineær regresjon

regresjon

Enkelt, raskt

lineær antakelse

beslutningstreet

begge deler

tolkbar

Enkel memorisering

tilfeldig skog

begge deler

Sterk, slitesterk

Mindre tolkbart

Gradientforsterkning (XGBoost osv.)

begge deler

veldig sterk

Vanskelig å justere, fare for memorering

Regel: velg den enkleste "god nok" modellen. Tolkbarhet er mer verdifullt enn makt i de fleste forretningssammenhenger; Det er bedre å forklare et avslag på lån "fordi gjeld-til-inntektsforholdet ditt er høyt" enn "fordi den svarte boksen sa det."

tre minisaker

Tilfelle 1 – Feil problemdefinisjon. Et team bygde en klassifiseringsmodell basert på "er kunden fornøyd", men valgte "nøyaktighet" som suksesskriterium. I dataene var 88 % av kundene fornøyde; Modellen fikk 88 % nøyaktighet ved å kalle alle "fornøyde" og fanget aldri de misfornøyde - selv om det egentlige målet var å finne dem. Leksjon: velg suksesskriterier basert på reelle formål.

Tilfelle 2 — Tidslekkasje i kupeen. I et etterspørselsprognoseprosjekt ble data tilfeldig delt. Modellen ga 93 % nøyaktighet, men krasjet i produksjonen fordi den under trening hadde spådd januar, deretter november, med desemberdata – den hadde sett fremtiden. Da vi gikk over til kronologisk inndeling økte den faktiske ytelsen til 74 %. Leksjon: kronologisk inndeling i tidsserier.

Case 3 — Unødvendig kompleksitet. En analytiker startet direkte med et dypt nevralt nettverk, innstilte det i flere uker og fikk 81 % nøyaktighet. Så fikk en kollega 80 % med 20 linjer med logistisk regresjon — mye raskere, tolkbar og enklere å vedlikeholde. Leksjon: start med en grunnlinje og en enkel modell, legg til kompleksitet når det fortjener det.

Fire kopierbare maler

1) Avklare problemdefinisjonen:

Din rolle: modellkonsulent. Hjelp meg med å definere denne jobben: "Jeg vil redusere kundefragangen." Spør meg og avklar: (1) er dette en klassifisering eller regresjon, (2) hva er målvariabelen og hvordan skal den defineres, (3) hva skal være suksesskriteriene og hvorfor. Avgjørelsen er min; du presenterer spørsmålene og alternativene.

2) Sikker trenings-/testrom:

Del opp min df i trening/testing 80%/20%. Oppretthold klassefordeling (stratify).random_state=42. Dette er IKKE en TIDSERIE (uavhengige observasjoner). Skriv ut klasseforholdet til hvert sett etter deling. Bare gi delekoden til testsettet uten å bruke noen transformasjon.

3) Tidsserier kronologisk inndeling:

Dataene er tidsavhengige (datokolonne: ordre_dato). IKKE tilfeldig, del kronologisk: eldste 80% trening, nyeste 20% testing. Skriv ut datointervallene for trening og testing slik at jeg kan bekrefte at fremtiden ikke har lekket.

4) Sette en grunnlinje:

Jeg har et klassifiseringsproblem (mål: churn 0/1). Etabler først en grunnlinje: mål trenings-/testingsnøyaktigheten med DummyClassifier, som alltid forutsier majoritetsklassen. Tren deretter en enkel logistisk regresjon og sammenlign om den slår grunnlinjen. Vis beregningene til de to side ved side.

Svak forespørsel / Sterk forespørsel

Svak melding:

Bygg den beste modellen med disse dataene.

"Best" er udefinert; Det er ingen problemtype, ingen mål, ingen suksesskriterier og ingen divisjonsstrategi. AI genererer et tilfeldig mønster, muligens utett.

Kraftig ledetekst:

Din rolle: modellassistent. Problem: klassifisering, mål "churn" (0/1), det er klasseubalanse (~12% churn). Suksesskriterium: Å tilbakekalle de som churner er en prioritet. Datauavhengig observasjon (ikke tidsserier). Oppgave: (1) 80/20 % stratifisert splittelse, (2) DummyClassifier baseline, (3) logistisk regresjon, alle transformasjoner i pipeline og kun lært fra trening. Ikke berør testsettet før du deler.

Her er problemtype, ubalanse, kriterium og lekkasjemål tydelige.

Vanlige feil

  • Å ikke velge suksesskriteriene i henhold til det virkelige formålet. "Nøyaktighet" i ubalanserte data er misvisende; Hvis du ønsker å fange minoritetsklassen, kommer tilbakekalling i forgrunnen.
  • Berøring av testsettet under trening. Å gjøre skalering/koding før splitting er utett og skjuler reell ytelse.
  • Tilfeldig oppdeling i tidsserier. Modellen ser fremtiden, kollapser i produksjonen; Kronologisk inndeling er viktig.
  • Hoppe inn i en kompleks modell uten å etablere en grunnlinje. Uten benchmarks kan du ikke vite om en modell er virkelig god eller ikke.
  • Ignorerer tolkbarhet. I forretningsbeslutninger er en enkel forklarbar modell ofte mer verdifull enn en svart boks.
Tips: Før du begynner å bygge en modell, skriv én setning: "Denne modellen vil forutsi _____, dens suksess vil bli målt ved metrikken _____, fordi den sanne kostnaden for jobben er _____." Hvis du ikke kan fylle ut denne setningen, er du ikke klar til å skrive kode ennå.

Oppsummert

Den mest kritiske delen av å bygge en modell er ikke koden, men beslutningene som går foran den: definere riktig problem (klassifisering eller regresjon, hva er målet, hva er suksesskriteriet) og dele dataene rettferdig (uten å berøre testsettet; kronologisk i tidsserien). Start alltid med en enkel grunnlinje og legg til kompleksitet bare når det fortjener det; tolkbarhet er verdsatt over makt i de fleste forretningssammenhenger. AI er en kraftig rådgiver i algoritmevalg og kode, men mennesket bestemmer hva du forutsier og hvorfor.

Søknadsoppgave

Definer et prediksjonsproblem og fullfør følgende setning skriftlig: "Denne modellen vil forutsi ___ (klassifisering/regresjon), målet er ___, suksesskriteriet er ___ fordi ___." Deretter deler du dataene med riktig strategi (kronologisk hvis det er en tidsserie), etablerer en grunnlinje og måler om et enkelt mønster bryter den grunnlinjen.

sjekkliste

  • [ ] Har jeg klart definert problemtypen (klassifisering/regresjon) og målet?
  • [ ] Har jeg valgt suksesskriteriene basert på den faktiske kostnaden for jobben?
  • [ ] Forlot jeg testsettet urørt under trening?
  • [ ] Hvis det er en tidsserie, delte jeg den inn kronologisk?
  • [ ] Har jeg etablert en grunnlinje før jeg går videre til den komplekse modellen?