Abilitățile de bază pentru generarea de rețele de valori aleatoare – atât numerice, cât și categoriale, se pot aplica pentru a crea seturi de date sintetice care conțin mai multe variabile.
Ne vom concentra aici pe cazul cu două variabile, dar ideea este ușor extinsă la trei sau mai multe. Noua întrebare importantă, acum că știm cum să generăm un singur tablou izolat, este: în ce măsură vrem ca perechea noastră de variabile sintetice să fie corelată și cum le facem astfel?
Două variabile numerice
Să începem cu cazul a două variabile numerice. După cum știți din volumul unu, poate exista sau nu o asociere între ei. Coeficientul de corelație al lui Pearson măsoară acest lucru: dacă valoarea sa p este mai mică decât setarea noastră (de obicei .05), atunci considerăm că există o asociere semnificativă, iar valoarea r ne spune dacă corelația este pozitivă sau negativă.
Variabile numerice necorelate
Într-o extremă, să presupunem că doriți să creați un set de date cu două variabile numerice complet necorelate – cum ar fi înălțimile (în inci) și scorurile SAT ale unui grup de candidați la facultate. Atunci ați genera doar două matrice, una câte una:
heights = np.random.normal(65, 8, 100) sat_scores = np.random.normal(1000, 300, 100)
Cum am ales acele medii specifice și abateri standard? le-am inventat. Și m-am jucat cu ele până au părut rezonabile.
Graficul cu dispersie a acestora (a se vedea partea stângă a Figurii 6.1) și rularea unei corelații Pearson ar trebui să dezvăluie că sunt independente una de cealaltă:
plt.scatter(heights, sat_scores) plt.xlabel("height (in)") plt.ylabel("SAT score") print(scipy.stats.pearsonr(heights,sat_scores))
▌(-0.025053425275878834, 0.8045806864145338)
O valoare p de .8046 spune „nu, nu este corelată semnificativ”. Și, desigur, nu există niciun motiv pentru care ar trebui să fie: doar am generat două matrice aleatoare diferite, pentru diferite intervale.
De altfel, s-ar putea să fii încurcat de faptul că câteva dintre scorurile noastre SAT sunt în afara limitei legale:
print("min: {}, max: {}".format(sat_scores.min(), sat_scores.max()))
▌min: 304.29, max: 1618.35
Scorurile reale SAT ar trebui să varieze între 400 și 1600, îmi spune Internetul. Am putea remedia acest lucru utilizând metoda NumPy .clip(), care impune ca argumente să aibă o limită mare și una mică:
sat_scores = sat_scores.clip(400,1600) print("min: {}, max: {}".format(sat_scores.min(), sat_scores.max()))
▌min: 400.0 max: 1600.0
Graficul de dispersie revizuit este prezentat în partea dreaptă a figurii 6.1.
Figura 6.1: Variabile aleatoare numerice necorelate. Graficul din dreapta are scorurile SAT „decupate” pentru a rămâne peste 400 și sub 1600.
Sursa: Stephen Davies, The Crystal Ball – Instruction Manual, Vol. 2: Introduction to Data Science, v. 1.1. Copyright © 2020 Stephen Davies. Licența CC BY-SA 4.0. Traducere și adaptare: Nicolae Sfetcu. © 2021 MultiMedia Publishing, Introducere în Știința Datelor, Volumul 2
Lasă un răspuns