Jedinica 3 / 11

Čišćenje podataka i predobrada: nedostajuća vrijednost, outlier i konverzija tipa

Dobici:

  • Sposobnost razlikovanja uzroka nedostajućih vrijednosti (nasumičnih, sustavnih, smislenih) i odabira odgovarajuće strategije i izračunavanja dopunske vrijednosti samo iz treninga
  • Sposobnost ispitivanja outliera prije brisanja i razlikovanja pogreške podataka od pravog rijetkog događaja
  • Sposobnost sprječavanja tihog gubitka praćenjem utjecaja svakog koraka na broj redaka/praznina uz dovođenje nedosljednosti tipa i formata u standard

Otprilike 60-80 posto vremena podatkovnog znanstvenika odlazi na čišćenje; U industriji se to polušaljivo naziva "data wrangling" (prepirka podataka ili čišćenje podataka). Budući da podaci iz stvarnog svijeta gotovo nikad nisu spremni za analizu: datumi su u mješovitim formatima, brojevi su pohranjeni kao tekst, neke su ćelije prazne, korisnik se pojavljuje tri puta u istoj tablici s dva različita načina pisanja. U ovoj jedinici pokrit ćemo tri osnovna aspekta čišćenja: vrijednosti koje nedostaju, ekstremne vrijednosti i pretvorbu tipa/formata. Umjetna inteligencija je u tom poslu izvanredno brz pomoćnik; Ali vi ste ti koji odlučujete što ćete čistiti i kako, jer svaki izbor čišćenja mijenja analizu.

Zlatno pravilo čišćenja: svaka promjena je odluka

Brisanje ćelije, popunjavanje nedostajuće vrijednosti srednjom vrijednošću, skraćivanje izvanredne vrijednosti — nijedna od ovih operacija nije "neutralna". Svaka mijenja podatke i utječe na rezultat. Dakle, zlatno pravilo čišćenja: zapišite svaku promjenu u kod, zabilježite obrazloženje, nikada ne prebrišite izvorne podatke. AI vam daje kod za brzo čišćenje, ali vaša je odgovornost razumjeti što taj kod radi; Nemojte ga pokretati a da ne vidite koliko je redaka nestalo kada kažete "izbriši prazne retke".

Oprez: Nikada ne mijenjajte izvorne neobrađene podatke. Zapišite očišćenu verziju u zasebnu datoteku/tablicu. Na ovaj način, ako uočite pogrešku, možete se vratiti na početak i održati ponovljivost.

Nedostaju vrijednosti: zašto je prazno, što učiniti

Vrijednost koja nedostaje (obično se pojavljuje kao NaN — "Nije broj" u pandama) je kada je ćelija prazna. Ali uzrok jaza određuje rješenje. Postoje tri tipične situacije. Slučajno nedostaje: senzor nije radio na trenutak; Možda bi bilo razumno ispuniti ga. Sustavno nedostaje: polje obrasca traži se samo za određene klijente; Ovdje je praznina zapravo informacija. Značajan nedostatak: ako je "datum povrata" prazan, kupac se nije vratio; Ovaj prostor znači 0 ili "ništa", nije popunjen.

Glavne strategije:

strategija

Kada je prikladno?

rizik

Izbriši red

Stopa nestalih je vrlo niska (<5%) i nasumična

Gubitak podataka i reprezentacije

Brisanje stupca

Većina stupca je prazna (>60%)

gubitak informacija

Prosječna/srednja popunjenost

Numerički, nasumično nedostaje

Smanjuje varijancu i iskrivljuje distribuciju

Kategorija "nepoznato"

Nedostaje kategorički, sustavni

Generira dodatne kategorije

Predviđanje s modelom

Kompleksan, dragocjen stupac

Rizik curenja, složenost

Kritična točka: imputiranu vrijednost treba izračunati samo iz podataka o obuci i istu vrijednost treba primijeniti na testne podatke. Ako uključite prosjek testnih podataka, stvarate curenje (Jedinica 10). Medijan (srednja vrijednost ordinalnih podataka) često se preferira u odnosu na srednju vrijednost jer je otpornija na odstupanja od srednje vrijednosti.

Outliers: pogreška ili stvarnost?

Outlier može biti jedna od dvije stvari: pogreška podataka (999 u stupcu dobi) ili stvaran, ali rijedak događaj (narudžba kupca od 2 milijuna dolara). Pobrkati ovo dvoje je katastrofalno: izbrišite stvarni outlier i odbacit ćete važne informacije; Ako zaboravite na pogrešku, vaši će prosjeci patiti. Stoga je potrebno prvo ispitati outlier, a ne automatski ga brisati.

Uobičajene metode otkrivanja: IQR metoda (interkvartilni raspon; vrijednosti koje su više od 1,5 puta veće od razlike između kvintila od 25% i 75% podataka smatraju se izvanrednim vrijednostima) i z-rezultat (broj standardnih odstupanja od srednje vrijednosti koja je vrijednost; obično je izvanredna vrijednost ako je veća od 3). AI piše kod za ove izračune u sekundi; Ali prije nego kažete "izbriši", provjerite koje su to vrijednosti.

Pretvorba tipa i formata: tihi izvor pogreške

Jedna od najvećih glavobolja je konfuzija tipa podataka. Ako je stupac "iznos" pohranjen kao tekst, ne možete dodati; Program neispravno čita broj u turskom formatu kao što je "1,250.50" umjesto "tisuću dvjesto pedeset". Datumi ("01/03/2024" dan-mjesec ili mjesec-dan?), kategorije ("Muškarac"/"muškarac"/"M" jesu li ista stvar?) i jedinice (TL ili kuruş?) tiho daju netočne rezultate. Velik dio čišćenja je povlačenje ovih nedosljednosti u standard: datumi u jedan format, kategorije u jedan pravopis, brojevi u jednu jedinicu.

tri mini kućišta

Slučaj 1 — Prosječna zamka. Tim je ispunio 320 nedostajućih vrijednosti u stupcu prihoda s prosjekom (48 500 USD). Ali nedostaci su bili sustavni: radilo se o segmentu s niskim prihodima koji nikada nije prijavio prihode. Prosječna popunjenost činila je ovu skupinu umjetno bogatom, a kreditni model je bio pogrešan. Lekcija: pitajte "zašto je prazno" prije nego što ga ispunite.

Slučaj 2 — Outlier koji se ne bi trebao brisati. Maloprodajni analitičar izbrisao je 4 ogromne narudžbe (1,8 milijuna TL svaka) u podacima o prodaji, misleći da su "greške". Međutim, to su bile stvarne korporativne narudžbe i činile su 22% ukupnog prometa. Model predviđanja nakon brisanja potpuno je promašio institucionalnu potražnju. Lekcija: ispitajte outlier prije brisanja.

Slučaj 3 — Katastrofa formata datuma. U CSV-u, datumi su pomiješani u "2024-03-01" i "01.03.2024". Kada je kôd koji je napisao YZ raščlanjen prema prvom formatu, 6400 redaka postalo je NaT kao "nevažeći datum" i tiho je isključeno iz analize. Analitičar je to primijetio tek kad se smanjio broj redaka. Lekcija: uvijek provjerite broj redaka i praznina nakon pretvorbe.

Četiri predloška za kopiranje

1) Nedostaje karta vrijednosti:

Imam pande df. Napišite kod koji proizvodi tablicu koja prikazuje broj i postotak nedostajućih (NaN) za svaki stupac. Zatim zasebno navedite stupce sa stopom manjka koja prelazi 40% i one sa stopom manjka manjom od 5%. Samo generirajte ovaj dijagnostički kod, a ne strategiju koju predlažete; Ja ću donijeti odluku.

2) Iznimna inspekcija (ne brisanje):

Napišite kod koji DETEKTIRA (ne briše!) vanjske vrijednosti za moj stupac "iznos" koristeći IQR metodu. Stavi vanjske retke u zaseban df kako bih ih mogao ručno ispitati. Također ispišite broj outliera i njihov udio u ukupnom broju.

3) Standardizacija tipa/formata:

Napišite kod koji standardizira sljedeće stupce:- "datum": mogu biti miješani formati ("2024-03-01" i "01.03.2024"); pretvoriti ih sve u datum i vrijeme, prebrojati neprevodive i prijaviti (tiho baciti). - "spol": "Muški"/"muški"/"M" -> "M", "Ženski"/"ženski"/"Ž" -> "K". - "iznos": turski formatirani tekst ("1.250,50") -> decimalni broj. Ispišite na koliko redaka utječe nakon svake pretvorbe.

4) Provjerite prije/poslije čišćenja:

Napišite kod koji uspoređuje df.shape, broj nedostajućih i sumarnu statistiku (srednja vrijednost, medijan, min, maks) odabranih stupaca prije i nakon koraka čišćenja. Svrha: vidjeti što čišćenje mijenja.

Slab upit / Jak upit

Slab upit:

Izbrišite ove podatke.

"Jasno" je višeznačno; AI ne zna koje dijelove treba izbrisati, što ispuniti, koji stupac obraditi i kako. Rezultat: slijepe, nepovratne promjene.

Snažan upit:

Vaša uloga: pomoćnik za čišćenje podataka. df stupci: customer_id (int), registration_date (tekst u mješovitom formatu), prihod_tl (tekst, "1.200,00"), city (tekst, nedosljedan pravopis). Pravila:- Promjena originalnog df-a; Radite na kopiji pod nazivom df_clean.- Pretvorite prihod_tl u broj, prebrojite ono što se ne može prevesti.- Promijenite record_date u datetime, prijavite grešku.- Nemojte brisati retke bez mog odobrenja; Pokažite kandidate zasebno. Nakon svakog koraka ispišite df_temiz.shape i broj koji nedostaje.

Ovdje je izvor zaštićen, svaka transformacija se računa, brisanje je prepušteno čovjeku.

Uobičajene greške

  • Popunjavanje praznina bez pitanja "zašto je prazno?" Popunjavanje sustavnog/značajnog nedostatka srednjom vrijednosti iskrivljuje podatke.
  • Brisanje outliera bez njegovog pregleda. Odbacivanje stvarnih, ali rijetkih događaja uništava važne informacije.
  • Izračunavanje vrijednosti ispune iz svih podataka. Uključivanje testnih podataka stvara curenje; samo izračunaj iz treninga.
  • Ne provjerava se broj redaka/prazna mjesta nakon pretvorbe. Redovi koji su tiho NaT/NaN isključeni su iz analize.
  • Prepisivanje izvornih podataka. Povrat i ponovljivost su izgubljeni.
Savjet: Pokrenite čišćenje s usporedbom "prije-poslije". Ispišite df.shape, broj nedostajućih i sažetak statistike kritičnih stupaca nakon svakog koraka. Dakle, odmah vidite da jedan korak neočekivano uništava 6000 redaka.

Ukratko

Čišćenje je faza znanosti o podacima koja oduzima najviše vremena i zahtjeva donošenje odluka. Svaka promjena mijenja podatke, stoga je svaka svjesna odluka. Za vrijednosti koje nedostaju, pitajte "zašto je prazno?" Pregledajte sve izvanredne vrijednosti prije nego ih izbrišete; Dovedite tip i format u standard. Izračunajte vrijednost punjenja samo iz podataka o vježbanju, zadržite original i pratite učinak svakog koraka brojeći ga. AI je ogroman akcelerator u ovom poslu, ali ljudi odlučuju što čistite i zašto.

Zadatak aplikacije

Uzmite (ili izradite) malu tablicu i namjerno u nju umetnite tri problema: torku vrijednosti koja nedostaje, outlier, mješoviti format datuma. Zahtjev za dijagnozu i standardizacijski kod od AI s gornjim predlošcima; usporedite broj redaka i praznina prije/poslije svakog koraka. Pokušajte uhvatiti barem jedan "tihi gubitak" i zabilježite kako ste ga primijetili.

popis za provjeru

  • [ ] Jesam li zadržao izvorne neobrađene podatke i radio na kopiji?
  • [ ] Jesam li postavio pitanje "zašto je prazan" za svaki stupac koji nedostaje?
  • [ ] Jesam li pregledao outliere prije njihovog brisanja?
  • [ ] Jesam li izračunao vrijednost ispune samo iz podataka o obuci?
  • [ ] Provjeravam li broj redaka/praznina nakon svakog koraka i eliminiram li tihi gubitak?