Мэдээллийн чадварлаг мэргэжилтний нэг чухал ур чадвар бол өгөгдлийн чанар, найдвартай байдлыг хангах том өгөгдлийн багцтай үр дүнтэй ажиллах явдал юм. Өгөгдөл бол аливаа өгөгдлийн системийн гол бөгөөд үндсэн хэсэг бөгөөд манай худалдааны бусад тал дээр та ямар ч сайн ур чадвар эзэмшсэн байсан ч үүнийг үл тоомсорлож болохгүй.
Энэ нийтлэлд би Deequ номын сан болон статистикийн аргуудыг ашиглан том өгөгдлийн багц дээр QA шалгалт хийх найдвартай арга техникийг судлах болно. Миний доор тайлбарласан аргуудыг нэгтгэснээр та өгөгдлийн бүрэн бүтэн байдлыг хадгалах, өгөгдлийн удирдлагын арга барилаа сайжруулах, доод хэрэглээний програмуудад гарч болзошгүй асуудлуудаас урьдчилан сэргийлэх боломжтой болно.
Өгөгдлийн чанарыг масштабаар хангах нь ялангуяа тархсан файлын систем эсвэл өгөгдлийн агуулахад хадгалагдсан олон тэрбум мөртэй ажиллахад хэцүү ажил юм. Deequ номын сан нь Spark дээр бүтээгдсэн нээлттэй эх сурвалжийн өгөгдлийн профайл болон QA тогтолцоо бөгөөд энэ асуудлыг шийдвэрлэхэд зориулагдсан орчин үеийн, олон талын хэрэгсэл юм. Үүнийг ижил төстэй хэрэгслээс ялгаж байгаа зүйл нь том хэмжээний өгөгдлийн багцыг үр ашигтай зохицуулахын тулд тархсан боловсруулалтын хүчийг ашиглан Spark-тай саадгүй нэгтгэх чадвар юм.
Та үүнийг туршиж үзэхэд түүний уян хатан байдал нь танд өөрийн тусгай шаардлагад нийцүүлэн баталгаажуулах нарийн төвөгтэй дүрмийг тодорхойлж, иж бүрэн хамрах хүрээг хангах боломжийг танд олгоно. Нэмж дурдахад Deequ нь өгөгдлийн чанарын асуудлыг тодорхойлж, идэвхтэй шийдвэрлэхэд тань туслах өргөн хүрээний хэмжүүрүүд болон гажиг илрүүлэх чадавхийг агуулдаг. Том, динамик мэдээллийн багцтай ажилладаг өгөгдлийн мэргэжилтнүүдийн хувьд Deequ бол Швейцарийн хутганы шийдэл юм. Үүнийг хэрхэн ашиглахаа харцгаая.
Deequ номын сангийн тохиргоо болон өгөгдлийн профайлыг ашиглах тохиолдлын талаарх дэлгэрэнгүй мэдээллийг эндээс авах боломжтой. Энгийн байх үүднээс энэ жишээн дээр бид хэдхэн тоглоомын бичлэг хийсэн:
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)
Ихэнх өгөгдлийн программууд NULL бус утга, өвөрмөц байдал гэх мэт өгөгдлийн шинж чанаруудын талаархи далд таамаглалтай ирдэг. Deequ-ийн тусламжтайгаар эдгээр таамаглалууд нэгжийн туршилтаар тодорхой болно. Энд зарим нийтлэг шалгалтууд байна:
Мөрний тоо: Өгөгдлийн багц нь тодорхой тооны мөр агуулсан эсэхийг шалгаарай.
Атрибутын бүрэн байдал: ID болон productName зэрэг шинж чанарууд хэзээ ч NULL биш эсэхийг шалгана уу.
Өвөрмөц шинж чанар: id гэх мэт зарим шинж чанарууд өвөрмөц эсэхийг шалгаарай.
Утгын хүрээ: Тэргүүлэх болон numViews зэрэг шинж чанарууд хүлээгдэж буй мужид багтаж байгааг баталгаажуулна уу.
Загвар тааруулах: Тодорхойлолт нь URL-г агуулж байгаа эсэхийг шалгаарай.
Статистик шинж чанарууд: Тоон шинж чанаруудын медиан нь тодорхой шалгуурт нийцэж байгаа эсэхийг шалгаарай.
Та Deequ-г ашиглан эдгээр шалгалтыг хэрхэн хийж болохыг эндээс үзнэ үү.
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()
Эдгээр шалгалтыг хийсний дараа Deequ тэдгээрийг Spark ажлын цуврал болгон хөрвүүлэн өгөгдөл дээр хэмжигдэхүүнийг тооцоолохын тулд гүйцэтгэдэг. Дараа нь эдгээр хэмжигдэхүүнүүд дээр таны баталгаажуулах функцуудыг (жишээ нь, хэмжээ шалгах _ == 5) дуудаж, өгөгдөлд хязгаарлалт байгаа эсэхийг шалгана. Бид "verificationResult" объектыг шалгаж, шалгалтын явцад алдаа илэрсэн эсэхийг шалгах боломжтой.
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}") } }
Хэрэв бид жишээг ажиллуулбал дараах үр дүнг авна.
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!
Туршилт нь бидний таамаглалыг зөрчсөн болохыг тогтоосон! productName атрибутын 5-ын 4 (80%) нь л null биш бөгөөд тайлбарын атрибутын 5-аас 2 (өөрөөр хэлбэл 40%) нь л URL агуулж байсан. Аз болоход бид шалгалт хийж, алдааг олсон; Хэн нэгэн нэн даруй өгөгдлийг засах хэрэгтэй!
Deequ нь өгөгдлийн баталгаажуулалтын бат бөх тогтолцоог санал болгодог ч статистикийн аргуудыг нэгтгэх нь таны QA шалгалтыг сайжруулж чадна, ялангуяа та өгөгдлийн багцын нэгтгэсэн хэмжигдэхүүнтэй харьцаж байгаа бол. Мэдээллийн чанарыг хянах, баталгаажуулахын тулд статистикийн аргыг хэрхэн ашиглаж болохыг харцгаая.
ETL (Extract, Transform, Load) процесс нь өдөр тутмын хуваарьтай ажил дээр N бичлэг үүсгэдэг бизнесийн хувилбарыг авч үзье. Бичлэгийн тоонд мэдэгдэхүйц хазайлт байгаа тохиолдолд тусламжийн багууд QA шалгалтыг тохируулахыг хүсч болно. Жишээлбэл, хэрэв үйл явц нь ихэвчлэн хоёр сарын хугацаанд өдөр бүр 9,500-аас 10,500 бичлэг үүсгэдэг бол аливаа мэдэгдэхүйц өсөлт эсвэл бууралт нь үндсэн өгөгдөлтэй холбоотой асуудал байгааг илтгэнэ.
Бид статистикийн аргыг ашиглан энэ босгыг аль процесс нь тусламжийн багт сэрэмжлүүлэх ёстойг тодорхойлох боломжтой. Доорх нь хоёр сарын хугацаанд бүртгэгдсэн тооллогыг хянах жишээ юм.
Үүнийг шинжлэхийн тулд бид өдөр тутмын өөрчлөлтийг ажиглахын тулд бүртгэлийн тооллын өгөгдлийг хувиргаж болно. Дараах диаграммд үзүүлсэн шиг эдгээр өөрчлөлтүүд ерөнхийдөө тэг орчим хэлбэлздэг.
Бид энэхүү өөрчлөлтийн хурдыг хэвийн тархалтаар илэрхийлэхэд энэ нь хонхны муруй үүсгэдэг бөгөөд энэ нь өгөгдөл хэвийн тархсан болохыг харуулж байна. Хүлээгдэж буй өөрчлөлт нь ойролцоогоор 0%, стандарт хазайлт нь 2.63% байна.
Энэхүү дүн шинжилгээ нь рекордын тоо нь ихэвчлэн -5.26% -аас +5.25% -ийн хооронд 90% итгэлтэй байгааг харуулж байна. Үүний үндсэн дээр та бичлэгийн тоо энэ хязгаараас давсан тохиолдолд сэрэмжлүүлэг өгөх дүрмийг тогтоож, цаг алдалгүй хөндлөнгөөс оролцох боломжтой.
Аттрибутын хамрах хүрээ e нь өгөгдлийн багцын хормын хувилбарын нийт бичлэгийн тоонд NULL бус утгуудын харьцааг хэлнэ. Жишээлбэл, 100 бичлэгийн 8 нь тодорхой шинж чанарын хувьд NULL утгатай байвал тухайн шинж чанарын хамрах хүрээ 92% байна.
Өдөр бүр бүтээгдэхүүний хүснэгтийн агшин зургийг үүсгэдэг ETL процесс бүхий бизнесийн өөр нэг тохиолдлыг авч үзье. Бид бүтээгдэхүүний тодорхойлолтын шинж чанаруудын хамрах хүрээг хянахыг хүсч байна. Хэрэв хамрах хүрээ тодорхой босго хэмжээнээс доогуур байвал тусламжийн багт сэрэмжлүүлэг өгөх хэрэгтэй. Хоёр сарын хугацаанд бүтээгдэхүүний тайлбарын шинж чанарын хамрах хүрээг харуулсан дүрслэлийг доор харуулав.
Хамрах хүрээний үнэмлэхүй өдөр тутмын ялгааг шинжлэх замаар бид өөрчлөлтүүд тэг орчим хэлбэлзэж байгааг ажиглаж байна.
Энэ өгөгдлийг хэвийн тархалтаар төлөөлөх нь 0% орчим хүлээгдэж буй өөрчлөлт, 2.45% стандарт хазайлттай хэвийн тархалттай байгааг харуулж байна.
Бидний харж байгаагаар энэ өгөгдлийн багцын хувьд бүтээгдэхүүний тодорхойлолтын шинж чанарын хамрах хүрээ нь ихэвчлэн -4.9% -аас +4.9% хооронд хэлбэлзэж, 90% итгэлтэй байна. Энэ үзүүлэлт дээр үндэслэн бид хамрах хүрээ нь энэ хязгаараас хэтэрсэн тохиолдолд сэрэмжлүүлэг өгөх дүрмийг тогтоож болно.
Хэрэв та улирлын шинж чанар, чиг хандлага зэрэг хүчин зүйлээс шалтгаалан мэдэгдэхүйц өөрчлөлтийг харуулсан өгөгдлийн багцтай ажилладаг бол уламжлалт статистикийн аргууд нь хуурамч дохиолол үүсгэж болзошгүй. Цагийн цувааны алгоритмууд нь илүү боловсронгуй хандлагыг санал болгож, QA шалгалтын нарийвчлал, найдвартай байдлыг сайжруулдаг.
Илүү мэдрэмжтэй сэрэмжлүүлэг гаргахын тулд та аль нэгийг ашиглаж болно
Холт-Винтерс ашиглан чиг хандлага болон улирлын хэв маягийг харуулсан өдөр тутмын борлуулалтын загварчлалыг хийцгээе:
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)
Энэ аргыг ашигласнаар та өгөгдлийн чанарын асуудлуудыг илтгэж болох томоохон хазайлтыг илрүүлж, QA шалгалтыг илүү нарийн арга барилаар хангаж чадна.
Энэ нийтлэл нь танд том өгөгдлийн багцад QA шалгалтыг үр дүнтэй хэрэгжүүлэхэд тусална гэж найдаж байна. Deequ номын санг ашиглаж, статистикийн аргууд болон цагийн цувааны алгоритмуудыг нэгтгэснээр та өгөгдлийн бүрэн бүтэн байдал, найдвартай байдлыг хангаж, эцсийн дүндээ өгөгдлийн менежментийн туршлагаа сайжруулж чадна.
Дээр тайлбарласан арга техникийг хэрэгжүүлснээр доод талын хэрэглээний программуудад гарч болзошгүй асуудлаас сэргийлж, өгөгдлийн ажлын урсгалын ерөнхий чанарыг сайжруулахад тусална.