Dr. Dataman

17 decembrie 2019 · 11 min de citire

Codificarea variabilelor categorice în variabile numerice face parte din munca de zi cu zi a unui om de știință. Am vrut să notez câteva sfaturi pentru cititorii care trebuie să codeze variabile categorice. Tehnicile din acest articol sunt tehnicile utilizate frecvent în munca mea profesională. Sper că acest articol vă va ajuta pentru orice transformări suplimentare pentru a vă îmbunătăți performanța modelului. Mai jos sunt tehnicile:

cercetător

(A) O codare la cald

(B) Greutatea probelor

(C) Codificare țintă

(D) Codificare Leave-One-Out

(E) Codificare ordinală

(F) Codare Hashing:

Deoarece este posibil să produceți exponate de vizualizare a datelor pentru noile variabile, merită să aruncați o privire asupra seriei mele de articole despre vizualizarea datelor, inclusiv „Pandas-Bokeh pentru a face uimitoare parcele interactive interactive”, „Folosiți Seaborn pentru a face parcele frumoase” Ușor ”,„ Ploturi puternice cu Plotly ”și„ Creați Geomap-uri frumoase cu Plotly ”. Scopul meu în articolele de vizualizare a datelor este să vă ajut să produceți expoziții și informații despre vizualizarea datelor cu ușurință și competență. Dacă doriți să adoptați toate aceste coduri de vizualizare a datelor sau să vă îmbunătățiți munca, aruncați o privire asupra lor. Am scris articole despre o varietate de subiecte de știință a datelor. Pentru ușurința utilizării, puteți marca semnul postului meu rezumat „Căi de învățare Dataman - Construiți-vă abilitățile, conduceți-vă cariera” care listează linkurile către toate articolele.

(A) CODARE CU UN FIER

Codificarea fictivă și codificarea one-hot sunt același lucru; primul termen provine din statistici și cel din urmă din inginerie electrică (electronică). Permiteți-mi să explic diferența subtilă. Deoarece un model de regresie poate lua doar variabile numerice, statisticile au rezolvat mult timp problema prin conversia unei variabile categorice de n valori în n-1 variabile inexact. De ce n-1? Aceasta pentru a evita problema multicoliniarității (explicată mai târziu). Codificarea cu o singură temperatură convertește o variabilă categorică de n valori în n variabilă fictivă. Toate variabilele create au valoarea 1 și 0. Cu toate acestea, software-ul de astăzi vă permite să creați toate variabilele fictive și vă permite să decideți ce variabilă fictivă să renunțați pentru a preveni problema multicoliniarității.

Există multe module Python care se ocupă de codificarea cu o singură pornire. Aici vă prezint get_dummies de Pandas și OneHotEncoder de categorie_encodere. Puteți instala modulul encode_category prin pip install category_encoders. Pentru a vă prezenta un caz real, folosesc setul de date Home Credit Default Risk de la Kaggle pentru a demonstra metodele de codificare. Există 18 categorii plus lipsa (NaN) pentru variabila „ocupație_tip” așa cum se arată mai jos.

Variabilele fictive sunt create folosind pd.get_dummies (df ('OCCPATION_TYPE'], dummy_na = True). Apoi adaug din nou variabilele fictive. Rezultatele devin:

(A.2) OneHotEncoder pentru Category_encoders

Specific handle_unknown = 'indicator' pentru a crea categoria necunoscută „OCCUPATION_TYPE_nan” care este categoria valorilor lipsă.

Dezavantajul codării one-hot sau fictive este că creează o matrice rar foarte mare dacă o variabilă categorică are multe categorii. De exemplu, există aproximativ 41.700 de coduri poștale în Statele Unite. Dacă convertiți variabila „Zip_code” utilizând o codare rapidă, aceasta va crea o matrice gigantică, extrem de ineficientă și predispusă la supra-montare. Avem căi mai bune? Da. Să analizăm următoarele tehnici.

(B) CODAREA MĂSURII EVIDENȚEI (VĂJU)

Ponderea dovezilor (WOE) este o tehnică utilizată pe scară largă în modelarea riscului de credit sau numită probabilitatea de modelare implicită (astfel de modele prezic cât de capabil un solicitant este capabil să ramburseze împrumutul).

Obiectivul unei astfel de transformări este de a obține diferența maximă între categoriile binate legate de variabila țintă. Numără numărul de respondenți și non-respondenți din fiecare categorie blocată, apoi atribuie o valoare numerică fiecărei categorii blocate. În această transformare, informațiile variabilei țintă au fost utilizate. Când aveți o variabilă categorică cu multe categorii, WOE este o alegere bună. Transformarea WOE poate fi extinsă la variabila dependentă continuă. Datorită aplicațiilor sale valoroase, descriu cele două scenarii din (B.1) și (B.2).

(B.1) WOE cu variabilă țintă binară

În probabilitatea modelelor implicite, valorile țintă sunt fie bune, fie rele (implicit). Așadar, aici doar adopt populara formulă WOE care încă folosește termenul „bun” sau „rău” ca următor:

Mai jos scriu o scurtă funcție Python pentru a calcula WOE. În primul rând, creez o categorie „NoData” pentru a mă asigura că valorile lipsă sunt numărate ca categorie. Pentru fiecare categorie numără înregistrările totale și numărul de înregistrări „bune”. Apoi obțin procentul înregistrărilor „bune” și „rele”. Valoarea WOE este raportul impar între procentele „bune” și „rele”.

Figura (1) prezintă WOE pentru variabila „occupation_type”. Observați că a fost clasificat în ordine crescătoare.

Anexez valoarea WOE a fiecărei categorii înapoi la datele originale. Primele zece înregistrări sunt tipărite în Figura (2).

De asemenea, puteți utiliza funcția WOEEncoder () a modulului category_encoders pentru a calcula și WOE. Mai jos este modul în care efectuați transformarea WOE. Veți găsi că valorile WOE sunt aceleași în Figura (2) fie folosind funcția mea, fie WOEEncoder () .

Ce se întâmplă dacă ținta este o variabilă continuă? Puteți împărți predictorul în 10 sau 20 de părți egale, apoi calculați WOE în consecință.

  • Potrivit în special pentru regresia logistică: regresia logistică se potrivește cu o ecuație de regresie liniară a predictorilor pentru a prezice variabila țintă Bunuri/Baduri binare transformate în logit. Transformarea Logit este pur și simplu jurnalul cotelor. Deci, utilizând predictorii tranformați WOE în regresia logistică, predictorii sunt codificați la aceeași scară WOE, iar parametrii din ecuația de regresie logistică liniară pot fi comparați direct.
  • Nu uitați să creați valoarea „NoData” pentru valorile lipsă
  • Relația monotonă cu ținta: între variabila țintă și variabila transformată în WOE. Transformarea WoE este strict liniară în raport cu cotele logice ale răspunsului cu corelația unității.
  • Nu este nevoie să limitați sau să limitați valorile aberante: Având în vedere categoriile cu binele, valorile aberante vor intra în categoriile cu binele. Valoarea WOE pentru fiecare coș este distribuirea bunului către cel rău, preocuparea pentru valorile aberante dispare.

(B.2) WOE pentru variabila țintă continuă

Să presupunem că acum variabila țintă este venitul total din date și dorim să regresăm venitul total pe „ocupația_tip”. Deoarece variabila țintă este o variabilă continuă, vom modifica formula WOE pentru a fi:

Funcția noastră WOE Python cu țintă continuă devine: