Jedinica 3 / 11

Čišćenje podataka i prethodna obrada: Nedostajuća vrijednost, Outlier i konverzija tipa

Dobici:

  • Sposobnost razlikovanja uzroka nedostajućih vrijednosti (slučajnih, sistematičnih, smislenih) i odabira odgovarajuće strategije i izračunavanja vrijednosti punjenja samo iz treninga
  • Sposobnost da se ispitaju odstupanja prije brisanja i da se napravi razlika između greške u podacima i istinskog rijetkog događaja
  • Sposobnost da se spreči tihi gubitak praćenjem uticaja svakog koraka na broj redova/praznih mesta uz dovođenje nedoslednosti tipa i formata na standard

Otprilike 60-80 posto vremena naučnika podataka odlazi na čišćenje; U industriji, ovo se u polušali naziva "data wrangling" (data wrangling ili data cleaning). Zato što podaci iz stvarnog svijeta gotovo nikada nisu spremni za analizu: datumi su u mješovitim formatima, brojevi se pohranjuju kao tekst, neke ćelije su prazne, kupac se pojavljuje tri puta u istoj tabeli s dva različita pisanja. U ovoj jedinici ćemo pokriti tri osnovna aspekta čišćenja: nedostajuće vrijednosti, odstupanja i konverziju tipa/formata. Umjetna inteligencija je izuzetno brz pomoćnik u ovom poslu; Ali vi odlučujete šta i kako čistiti, jer svaki izbor čišćenja mijenja analizu.

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

Brisanje ćelije, popunjavanje nedostajuće vrijednosti srednjom vrijednosti, skraćivanje outlier-a – nijedna od ovih operacija nije “neutralna”. Svaki mijenja podatke i utječe na rezultat. Dakle, zlatno pravilo čišćenja: upišite svaku promjenu u kod, obratite pažnju na obrazloženje, nikada ne prepišite originalne podatke. AI vam daje brzi kod za čišćenje, ali vaša je odgovornost da shvatite šta taj kod radi; Nemojte ga pokretati a da ne vidite koliko je redova nestalo kada kažete "izbriši prazne redove".

Oprez: Nikada nemojte mijenjati originalne neobrađene podatke. Očišćenu verziju zapišite u zasebnu datoteku/tabelu. Na ovaj način, ako uočite grešku, možete se vratiti na početak i održati ponovljivost.

Nedostaju vrijednosti: zašto je prazan, šta 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. Nasumično nedostaje: senzor nije radio na trenutak; Možda bi bilo razumno da ga popunite. Sistematski nedostaje: polje obrasca se traži samo za određene kupce; Ovdje je praznina zapravo informacija. Značajno nedostaje: ako je "datum povratka" 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 propuštanja je vrlo niska (<5%) i nasumična

Gubitak podataka i reprezentacije

Izbrišite kolonu

Većina kolone je prazna (>60%)

gubitak informacija

Prosjek/srednja popunjenost

Numerički, nedostaje nasumično

Smanjuje varijansu i iskrivljuje distribuciju

Kategorija "nepoznato"

Nedostaje kategoričan, sistematski

Generiše dodatne kategorije

Predviđanje sa modelom

Kompleksna, dragocena kolona

Rizik od curenja, složenost

Kritična tačka: imputovanu vrijednost treba izračunati samo iz podataka o obuci i istu vrijednost treba primijeniti na podatke testa. Ako uključite prosjek podataka testa, stvarate curenje (Jedinica 10). Medijan (srednja vrijednost rednih podataka) se često preferira u odnosu na srednju vrijednost zato što je robustniji prema odstupnicima od srednje vrijednosti.

Outliers: greška ili stvarna?

Izuzetak može biti jedna od dvije stvari: greška u podacima (999 u koloni starosti) ili stvaran, ali rijedak događaj (narudžba kupca od 2 miliona dolara). Zbrkati ovo dvoje je pogubno: izbrišite istinski izuzetak i odbacićete važne informacije; Ako otpustite grešku, vaši prosjeci će patiti. Zbog toga je potrebno prvo ispitati outlier, a ne automatski ga izbrisati.

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

Konverzija tipa i formata: tihi izvor greške

Jedna od najvećih glavobolja je konfuzija tipa podataka. Ako je kolona "iznos" pohranjena kao tekst, ne možete dodati; Program pogrešno čita broj u turskom formatu kao što je "1.250,50" umjesto "hiljadu dvjesto pedeset". Datumi ("01/03/2024" dan-mjesec ili mjesec-dan?), kategorije ("muški"/"muški"/"M" su ista stvar?) i jedinice (TL ili kuruş?) tiho daju netačne rezultate. Veliki dio čišćenja je povlačenje ovih nedosljednosti u standard: datumi u jedan format, kategorije u jedan pravopis, brojevi u jednu jedinicu.

tri mini kofera

Slučaj 1 — Prosječna zamka. Tim je popunio 320 nedostajućih vrijednosti u koloni prihoda sa prosjekom (48.500 dolara). Ali nedostaci su bili sistematski: radilo se o segmentu sa niskim primanjima koji nikada nije prijavio prihod. Prosječno popunjavanje učinilo je ovu grupu umjetno bogatom, a kreditni model je bio pogrešan. Lekcija: pitajte "zašto je prazan" prije nego što ga popunite.

Slučaj 2 — Izuzetak koji se ne bi trebao brisati. Maloprodajni analitičar je izbrisao 4 ogromne narudžbe (1,8 miliona TL svaka) u podacima o prodaji, misleći da su to "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. Pouka: ispitajte odstupnicu prije nego što je obrišete.

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

Četiri šablona za kopiranje

1) Nedostaje mapa vrijednosti:

Imam pande df. Napišite kod koji proizvodi tabelu koja prikazuje broj i procenat nedostajućih (NaN) za svaku kolonu. Zatim posebno navedite kolone sa stopom manjka koja prelazi 40% i one sa stopom manjka od 5%. Samo generirajte ovaj dijagnostički kod, a ne strategiju koju predlažete; Ja ću donijeti odluku.

2) Vanredni pregled (ne brisanje):

Napišite kod koji OTKRIVA (ne briše!) odstupanja za moju kolonu "iznos" koristeći IQR metodu. Stavite vanredne redove u poseban df tako da ih mogu ručno ispitati. Također odštampajte broj odstupanja i njihov udio u ukupnom iznosu.

3) Standardizacija tipa/formata:

Napišite kod koji standardizira sljedeće kolone:- "datum": mogu biti mješoviti formati ("2024-03-01" i "01.03.2024"); pretvorite ih sve u datum i vrijeme, prebrojite neprevodive i prijavite (tiho bacite). - "gender": "Muški"/"muški"/"M" -> "M", "Ženski"/"ženski"/"F" -> "K". - "iznos": tekst u turskom formatu ("1.250,50") -> decimalni broj. Odštampajte na koliko redova utiče svaka konverzija.

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

Napišite kod koji upoređuje df.shape, nedostajući broj i zbirnu statistiku (srednja vrijednost, medijan, min, max) odabranih stupaca prije i nakon koraka čišćenja. Svrha: vidjeti šta se mijenja čišćenjem.

Slaba prompt / Jaka prompt

Slab upit:

Obrišite ove podatke.

"Jasno" je dvosmisleno; AI ne zna koje dijelove koji nedostaju treba izbrisati, šta popuniti, koju kolonu obraditi i kako. Rezultat: slijepe, nepovratne promjene.

Snažan upit:

Vaša uloga: pomoćnik za čišćenje podataka. df kolone: ​​customer_id (int), register_date (tekst u mješovitom formatu), revenue_tl (tekst, "1.200,00"), grad (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 nijedan red bez mog odobrenja; Pokažite kandidate odvojeno. 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 prazan?" Popunjavanje sistematskog/značajnog nedostatka srednjom vrijednosti iskrivljuje podatke.
  • Brisanje odstupanja bez ispitivanja. Odbacivanje stvarnih, ali rijetkih događaja uništava važne informacije.
  • Izračunavanje vrijednosti dopuna iz svih podataka. Uključivanje testnih podataka stvara curenje; samo izračunaj iz treninga.
  • Ne provjerava se broj redova/praznina nakon konverzije. Redovi koji su tihi NaT/NaN isključeni su iz analize.
  • Prepisivanje originalnih podataka. Povrat i reproduktivnost su izgubljeni.
Savjet: Pokrenite čišćenje uz poređenje "prije i poslije". Odštampajte df.shape, nedostajući broj i zbirnu statistiku kritičnih kolona nakon svakog koraka. Tako da odmah vidite da jedan korak neočekivano uništava 6.000 redova.

Ukratko

Čišćenje je faza nauke o podacima koja oduzima najviše vremena i zahtijeva odluke. Svaka promjena mijenja podatke, tako da je svaka svjesna odluka. Za vrijednosti koje nedostaju, pitajte "zašto je prazan?" Pregledajte sve odlike prije nego što ih izbrišete; Dovedite tip i format na standard. Izračunajte vrijednost punjenja samo iz podataka o treningu, zadržite original i pratite utjecaj svakog koraka tako što ćete ga brojati. AI je ogroman akcelerator u ovom poslu, ali ljudi odlučuju šta ćete čistiti i zašto.

Zadatak aplikacije

Uzmite (ili kreirajte) malu tabelu i namerno ubacite tri problema u nju: tuple vrednosti koje nedostaju, outlier, mešoviti format datuma. Zatražite kod za dijagnozu i standardizaciju od AI sa gornjim šablonima; uporedi broj redova i praznina prije/poslije svakog koraka. Pokušajte uhvatiti barem jedan "tihi gubitak" i zabilježite kako ste ga primijetili.

kontrolna lista

  • [ ] Da li sam zadržao originalne neobrađene podatke i radio na kopiji?
  • [ ] Da li sam postavio pitanje "zašto je prazan" za svaku kolonu koja nedostaje?
  • [ ] Jesam li pregledao odlike prije nego što sam ih izbrisao?
  • [ ] Jesam li izračunao vrijednost dopune samo iz podataka o obuci?
  • [ ] Provjeravam li broj redova/praznina nakon svakog koraka i eliminišem li tihi gubitak?