paint-brush
Laadunvarmistus tarkistaa suuria tietojoukkoja Deequ- ja tilastomenetelmilläkirjoittaja@akshayjain1986
42,029 lukemat
42,029 lukemat

Laadunvarmistus tarkistaa suuria tietojoukkoja Deequ- ja tilastomenetelmillä

kirjoittaja Akshay Jain7m2024/05/30
Read on Terminal Reader
Read this story w/o Javascript

Liian pitkä; Lukea

Deequ-kirjasto on avoimen lähdekoodin tietojen profilointi- ja laadunvarmistuskehys, joka on rakennettu Sparkille. Sen avulla voit määrittää monimutkaisia validointisääntöjä, jotka on räätälöity omien tarpeidesi mukaan, mikä varmistaa kattavan kattavuuden. Deequ sisältää laajat mittarit ja poikkeamien havaitsemisominaisuudet, jotka auttavat sinua tunnistamaan ja ennakoimaan tietojen laatuongelmia. Näin voit toteuttaa nämä tarkistukset Deequillä.

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - Laadunvarmistus tarkistaa suuria tietojoukkoja Deequ- ja tilastomenetelmillä
Akshay Jain HackerNoon profile picture

Yksi osaavan data-ammattilaisen elintärkeistä taidoista on suurten tietojoukkojen tehokas käsittely, joka varmistaa tiedon laadun ja luotettavuuden. Data on minkä tahansa tietojärjestelmän keskeinen ja perustavanlaatuinen osa, ja riippumatta siitä, mitä hyviä taitoja sinulla on muilla kauppamme osa-alueilla, sinulla ei ole varaa sivuuttaa tätä.


Tässä artikkelissa tutkin vankkoja tekniikoita suurten tietojoukkojen laadunvarmistustarkastuksiin käyttämällä Deequ-kirjastoa ja tilastollisia menetelmiä. Yhdistämällä alla selittämiäni lähestymistapoja pystyt säilyttämään tietojen eheyden, parantamaan tiedonhallintakäytäntöjäsi ja ehkäisemään mahdollisia ongelmia loppupään sovelluksissa.

Laadunvarmistustarkistukset Deequ-kirjaston avulla

Miksi Deequ?

Tietojen laadun varmistaminen mittakaavassa on pelottava tehtävä, varsinkin kun käsitellään hajautettuihin tiedostojärjestelmiin tai tietovarastoihin tallennettuja miljardeja rivejä. Deequ-kirjasto on Sparkiin rakennettu avoimen lähdekoodin dataprofilointi- ja laadunvarmistuskehys, joka on moderni ja monipuolinen työkalu, joka on suunniteltu ratkaisemaan tämä ongelma. Se erottaa sen samankaltaisista työkaluista sen kyky integroida saumattomasti Sparkiin ja hyödyntää hajautettua prosessointitehoa laajamittaisten tietojoukkojen tehokkaaseen käsittelyyn.


Kun kokeilet sitä, näet, kuinka sen joustavuus antaa sinun määrittää monimutkaiset validointisäännöt, jotka on räätälöity omiin tarpeisiisi, mikä varmistaa kattavan kattavuuden. Lisäksi Deequ sisältää laajat mittarit ja poikkeamien havaitsemisominaisuudet, jotka auttavat sinua tunnistamaan ja ennakoimaan tietojen laatuongelmia. Suurien ja dynaamisten tietojoukkojen parissa työskenteleville data-ammattilaisille Deequ on sveitsiläinen veitsiratkaisu. Katsotaan kuinka voimme käyttää sitä.

Deequ

Lisätietoja Deequ-kirjaston asetuksista ja dataprofiloinnin käyttötapauksista on saatavilla täältä . Yksinkertaisuuden vuoksi tässä esimerkissä loimme vain muutaman lelutietueen:


 val rdd = spark.sparkContext.parallelize(Seq( Item(1, "Thingy A", "awesome thing.", "high", 0), Item(2, "Thingy B", "available at http://thingb.com", null, 0), Item(3, null, null, "low", 5), Item(4, "Thingy D", "checkout https://thingd.ca", "low", 10), Item(5, "Thingy E", null, "high", 12))) val data = spark.createDataFrame(rdd)


Tietooletusten määrittäminen

Useimmat tietosovellukset sisältävät implisiittisiä oletuksia tietojen attribuuteista, kuten ei-NULL-arvoista ja ainutlaatuisuudesta. Deequillä nämä oletukset tulevat selväksi yksikkötestien kautta. Tässä on joitain yleisiä tarkistuksia:


  1. Rivien määrä: Varmista, että tietojoukko sisältää tietyn määrän rivejä.


  2. Attribuuttien täydellisyys: Tarkista, että määritteet, kuten id ja productName, eivät koskaan ole NULL-arvoja.


  3. Attribuuttien ainutlaatuisuus: Varmista, että tietyt määritteet, kuten id, ovat yksilöllisiä.


  4. Arvoalue: Varmista, että attribuutit, kuten prioriteetti ja numViews, ovat odotettujen rajojen sisällä.


  5. Pattern Matching: Varmista, että kuvaukset sisältävät URL-osoitteet, kun odotat.


  6. Tilastolliset ominaisuudet: Varmista, että numeeristen attribuuttien mediaani täyttää tietyt kriteerit.


Näin voit toteuttaa nämä tarkistukset Deequillä:


 import com.amazon.deequ.VerificationSuite import com.amazon.deequ.checks.{Check, CheckLevel, CheckStatus} val verificationResult = VerificationSuite() .onData(data) .addCheck( Check(CheckLevel.Error, "unit testing my data") .hasSize(_ == 5) // we expect 5 rows .isComplete("id") // should never be NULL .isUnique("id") // should not contain duplicates .isComplete("productName") // should never be NULL // should only contain the values "high" and "low" .isContainedIn("priority", Array("high", "low")) .isNonNegative("numViews") // should not contain negative values // at least half of the descriptions should contain a url .containsURL("description", _ >= 0.5) // half of the items should have less than 10 views .hasApproxQuantile("numViews", 0.5, _ <= 10)) .run()


Tulokset

Näiden tarkistusten suorittamisen jälkeen Deequ muuntaa ne sarjaksi Spark-töitä, jotka se suorittaa laskeakseen mittareita tiedoista. Myöhemmin se kutsuu näiden mittareiden väitefunktioita (esim. _ == 5 koon tarkistukseen) nähdäkseen, pitävätkö rajoitukset dataa. Voimme tarkastaa objektin "verificationResult" nähdäksemme, löysikö testi virheitä:


 import com.amazon.deequ.constraints.ConstraintStatus if (verificationResult.status == CheckStatus.Success) { println("The data passed the test, everything is fine!") } else { println("We found errors in the data:\n") val resultsForAllConstraints = verificationResult.checkResults .flatMap { case (_, checkResult) => checkResult.constraintResults } resultsForAllConstraints .filter { _.status != ConstraintStatus.Success } .foreach { result => println(s"${result.constraint}: ${result.message.get}") } }


Jos suoritamme esimerkin, saamme seuraavan tulosteen:


 We found errors in the data: CompletenessConstraint(Completeness(productName)): Value: 0.8 does not meet the requirement! PatternConstraint(containsURL(description)): Value: 0.4 does not meet the requirement!


Testissä havaittiin, että olettamuksiamme rikottiin! Vain 4 viidestä (80 %) productName-attribuutin arvoista ei ole nollaa, ja vain 2/5 (eli 40 %) description-attribuutin arvoista sisälsi URL-osoitteen. Onneksi teimme testin ja löysimme virheet; jonkun pitäisi korjata tiedot välittömästi!

Laadunvarmistustarkastukset tilastollisilla menetelmillä

Vaikka Deequ tarjoaa vankan kehyksen tietojen validointiin, tilastollisten menetelmien integrointi voi parantaa laadunvarmistustarkastuksiasi, varsinkin jos käsittelet tietojoukon aggregoituja mittareita. Katsotaanpa, kuinka voit käyttää tilastollisia menetelmiä tietojen laadun valvontaan ja varmistamiseen.

Record Count seuranta

Harkitse liiketoimintaskenaariota, jossa ETL-prosessi (Extract, Transform, Load) tuottaa N tietuetta päivittäisestä ajoitetusta työstä. Tukitiimit saattavat haluta määrittää laadunvarmistustarkistuksia varoittaakseen, jos tietueiden määrässä on merkittävä poikkeama. Jos prosessi esimerkiksi luo tyypillisesti 9 500–10 500 tietuetta päivittäin kahden kuukauden aikana, mikä tahansa merkittävä lisäys tai lasku voi viitata taustalla oleviin tietoihin liittyvään ongelmaan.


Voimme käyttää tilastollista menetelmää määrittääksemme tämän kynnyksen, jonka perusteella prosessin tulisi antaa hälytys tukitiimille. Alla on esimerkki ennätysmäärän seurannasta kahden kuukauden ajalta:











Tämän analysoimiseksi voimme muuntaa tietueiden lukumäärätiedot tarkkailemaan päivittäisiä muutoksia. Nämä muutokset vaihtelevat yleensä nollan ympärillä, kuten seuraavasta kaaviosta näkyy:












Kun edustamme tätä muutosnopeutta normaalijakaumalla, se muodostaa kellokäyrän, joka osoittaa, että data jakautuu normaalisti. Odotettu muutos on noin 0 % keskihajonnan ollessa 2,63 %.













Tämä analyysi viittaa siihen, että ennätysmäärä on tyypillisesti -5,26 %:n ja +5,25 %:n välillä 90 %:n varmuudella. Tämän perusteella voit luoda säännön hälytyksen antamiseksi, jos tietueiden määrä poikkeaa tämän alueen yli, mikä varmistaa oikea-aikaisen puuttumisen.

Ominaisuuden kattavuuden seuranta

Attribuutin kattavuus viittaa ei-NULL-arvojen suhteeseen tietojoukon tilannevedoksen tietueiden kokonaismäärään. Jos esimerkiksi kahdeksalla tietueesta 100 tietueesta on NULL-arvo tietylle määritteelle, kyseisen määritteen kattavuus on 92 %.


Tarkastellaan toista liiketoimintatapausta, jossa ETL-prosessi luo tuotetaulukon tilannekuvan päivittäin. Haluamme seurata tuotekuvauksen ominaisuuksien kattavuutta. Jos kattavuus alittaa tietyn kynnyksen, tukitiimille tulee tehdä hälytys. Alla on visuaalinen esitys tuotekuvausten määritteiden kattavuudesta kahden kuukauden ajalta:









Analysoimalla kattavuuden absoluuttisia päivittäisiä eroja havaitsemme, että muutokset värähtelevät nollan ympärillä:










Näiden tietojen esittäminen normaalijakaumana osoittaa, että se jakautuu normaalisti, odotetulla muutoksella noin 0 % ja keskihajonnan ollessa 2,45 %.















Kuten näemme, tämän tietojoukon tuotekuvauksen määritteen kattavuus vaihtelee tyypillisesti -4,9 %:sta +4,9 %:iin 90 %:n varmuudella. Tämän indikaattorin perusteella voimme asettaa säännön hälyttämään, jos kattavuus poikkeaa tämän alueen yli.

QA tarkistaa aikasarjaalgoritmeilla

Jos käsittelet tietojoukkoja, joissa on merkittäviä vaihteluita kausivaihtelun tai trendien kaltaisten tekijöiden vuoksi, perinteiset tilastomenetelmät voivat laukaista vääriä hälytyksiä. Aikasarjaalgoritmit tarjoavat tarkemman lähestymistavan, mikä parantaa laadunvarmistustarkistusten tarkkuutta ja luotettavuutta.


Voit tuottaa järkevämpiä hälytyksiä käyttämällä joko Autoregressiivinen integroitu liukuva keskiarvo (ARIMA) tai Holt-Wintersin menetelmä . Edellinen on riittävän hyvä trendejä sisältäville tietojoukoille, mutta jälkimmäinen antaa meille mahdollisuuden käsitellä sekä trendejä että kausiluonteisia tietojoukkoja. Tämä menetelmä käyttää komponentteja tasolle, trendille ja kausivaihtelulle, minkä ansiosta se mukautuu joustavasti ajan kuluessa tapahtuviin muutoksiin.


Mallitetaan Holt-Wintersillä päivittäistä myyntiä, jossa on sekä trendejä että kausiluonteisia malleja:

 import pandas as pd from statsmodels.tsa.holtwinters import ExponentialSmoothing # Load and preprocess the dataset data = pd.read_csv('sales_data.csv', index_col='date', parse_dates=True) data = data.asfreq('D').fillna(method='ffill') # Fit the Holt-Winters model model = ExponentialSmoothing(data, trend='add', seasonal='add', seasonal_periods=365) fit = model.fit() # Forecast and detect anomalies forecast = fit.fittedvalues residuals = data - forecast threshold = 3 * residuals.std() anomalies = residuals[abs(residuals) > threshold] print("Anomalies detected:") print(anomalies)


Tällä menetelmällä voit havaita merkittäviä poikkeamia, jotka voivat viitata tietojen laatuongelmiin, mikä tarjoaa monipuolisemman lähestymistavan laadunvarmistustarkistuksiin.


Toivon, että tämä artikkeli auttaa sinua ottamaan tehokkaasti käyttöön suurien tietojoukkojen laadunvarmistustarkistuksia. Käyttämällä Deequ-kirjastoa ja integroimalla tilastollisia menetelmiä ja aikasarjaalgoritmeja voit varmistaa tietojen eheyden ja luotettavuuden, mikä parantaa viime kädessä tiedonhallintakäytäntöjäsi.


Yllä kuvattujen tekniikoiden käyttöönotto auttaa estämään mahdolliset ongelmat jatkosovelluksissa ja parantamaan tietotyönkulkujesi yleistä laatua.