42,167 การอ่าน
42,167 การอ่าน

QA ตรวจสอบชุดข้อมูลขนาดใหญ่ด้วย Deequ และวิธีการทางสถิติ

โดย akshayjain...7m2024/05/30
Read on Terminal Reader
Read this story w/o Javascript

นานเกินไป; อ่าน

ไลบรารี Deequ เป็นกรอบงานการจัดทำโปรไฟล์ข้อมูลและ QA แบบโอเพ่นซอร์สที่สร้างขึ้นบน Spark ช่วยให้คุณกำหนดกฎการตรวจสอบที่ซับซ้อนซึ่งปรับให้เหมาะกับความต้องการเฉพาะของคุณ เพื่อให้แน่ใจว่าครอบคลุมอย่างครอบคลุม Deequ มีเมตริกที่ครอบคลุมและความสามารถในการตรวจจับความผิดปกติที่จะช่วยให้คุณระบุและแก้ไขปัญหาด้านคุณภาพข้อมูลได้ล่วงหน้า นี่คือวิธีที่คุณสามารถนำการตรวจสอบเหล่านี้ไปใช้โดยใช้ Deequ

Companies Mentioned

Mention Thumbnail
Mention Thumbnail
featured image - QA ตรวจสอบชุดข้อมูลขนาดใหญ่ด้วย Deequ และวิธีการทางสถิติ
Akshay Jain HackerNoon profile picture

ทักษะที่สำคัญอย่างหนึ่งของผู้เชี่ยวชาญด้านข้อมูลที่เชี่ยวชาญคือการจัดการชุดข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ เพื่อให้มั่นใจได้ถึงคุณภาพและความน่าเชื่อถือของข้อมูล ข้อมูลถือเป็นส่วนสำคัญและพื้นฐานของระบบข้อมูลทุกระบบ และไม่ว่าคุณจะมีทักษะที่ดีในด้านอื่นๆ ของการทำงานของเรา ทักษะนี้ถือเป็นทักษะที่คุณไม่ควรมองข้าม


ในบทความนี้ เราจะมาสำรวจเทคนิคที่มีประสิทธิภาพสำหรับการตรวจสอบ QA บนชุดข้อมูลขนาดใหญ่โดยใช้ไลบรารี Deequ และวิธีทางสถิติ โดยการรวมแนวทางที่อธิบายไว้ด้านล่างเข้าด้วยกัน คุณจะสามารถรักษาความสมบูรณ์ของข้อมูล ปรับปรุงแนวทางการจัดการข้อมูล และป้องกันปัญหาที่อาจเกิดขึ้นในแอปพลิเคชันปลายทางได้

การตรวจสอบ QA โดยใช้ไลบรารี Deequ

ทำไมต้อง Deequ?

การรับประกันคุณภาพข้อมูลในระดับขนาดใหญ่เป็นงานที่น่าปวดหัว โดยเฉพาะอย่างยิ่งเมื่อต้องจัดการกับข้อมูลนับพันล้านแถวที่จัดเก็บอยู่ในระบบไฟล์แบบกระจายหรือคลังข้อมูล ไลบรารี Deequ เป็นกรอบงานการจัดทำโปรไฟล์ข้อมูลและ QA แบบโอเพ่นซอร์สที่สร้างขึ้นบน Spark ซึ่งเป็นเครื่องมือที่ทันสมัยและอเนกประสงค์ที่ออกแบบมาเพื่อแก้ปัญหานี้ สิ่งที่ทำให้ Deequ แตกต่างจากเครื่องมืออื่นๆ ที่คล้ายกันคือความสามารถในการบูรณาการกับ Spark ได้อย่างราบรื่น โดยใช้ประโยชน์จากพลังการประมวลผลแบบกระจายเพื่อการจัดการชุดข้อมูลขนาดใหญ่ที่มีประสิทธิภาพ


เมื่อคุณลองใช้ คุณจะเห็นว่าความยืดหยุ่นของ Deequ ช่วยให้คุณกำหนดกฎการตรวจสอบที่ซับซ้อนซึ่งเหมาะกับความต้องการเฉพาะของคุณได้ เพื่อให้แน่ใจว่าครอบคลุมทุกความต้องการ นอกจากนี้ Deequ ยังมีเมตริกที่ครอบคลุมและความสามารถในการตรวจจับความผิดปกติที่จะช่วยให้คุณระบุและแก้ไขปัญหาด้านคุณภาพข้อมูลได้ล่วงหน้า สำหรับผู้เชี่ยวชาญด้านข้อมูลที่ทำงานกับชุดข้อมูลขนาดใหญ่และไดนามิก 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)


การกำหนดสมมติฐานข้อมูล

แอปพลิเคชันข้อมูลส่วนใหญ่มักมีสมมติฐานโดยนัยเกี่ยวกับแอตทริบิวต์ของข้อมูล เช่น ค่าที่ไม่ใช่ค่าว่างและความเฉพาะตัว ด้วย Deequ สมมติฐานเหล่านี้จะชัดเจนขึ้นผ่านการทดสอบยูนิต ต่อไปนี้คือการตรวจสอบทั่วไปบางส่วน:


  1. จำนวนแถว: ตรวจ สอบให้แน่ใจว่าชุดข้อมูลมีจำนวนแถวที่กำหนด


  2. ความสมบูรณ์ของแอตทริบิวต์: ตรวจสอบว่าแอตทริบิวต์เช่น id และ productName ไม่เคยเป็นค่า NULL


  3. ความเฉพาะตัวของแอตทริบิวต์: ตรวจสอบให้แน่ใจว่าแอตทริบิวต์บางอย่าง เช่น id ไม่ซ้ำกัน


  4. ช่วงค่า: ตรวจสอบว่าแอตทริบิวต์เช่น priority และ numViews อยู่ในช่วงที่คาดไว้


  5. การจับคู่รูปแบบ: ตรวจสอบว่าคำอธิบายมี URL เมื่อคาดไว้


  6. คุณสมบัติทางสถิติ: ตรวจสอบให้แน่ใจว่าค่ามัธยฐานของคุณลักษณะเชิงตัวเลขตรงตามเกณฑ์เฉพาะ


คุณสามารถนำการตรวจสอบเหล่านี้ไปใช้งานโดยใช้ 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!


การทดสอบพบว่าสมมติฐานของเราถูกละเมิด! มีเพียง 4 ใน 5 (80%) ของค่าแอตทริบิวต์ productName เท่านั้นที่ไม่ใช่ค่าว่าง และมีเพียง 2 ใน 5 (หรือ 40%) ของค่าแอตทริบิวต์คำอธิบายเท่านั้นที่มี URL โชคดีที่เราได้ทำการทดสอบและพบข้อผิดพลาด ควรมีใครสักคนแก้ไขข้อมูลดังกล่าวในทันที!

การตรวจสอบ QA ด้วยวิธีการทางสถิติ

แม้ว่า Deequ จะนำเสนอกรอบการทำงานที่แข็งแกร่งสำหรับการตรวจสอบข้อมูล แต่การผสานรวมวิธีการทางสถิติสามารถเพิ่มประสิทธิภาพการตรวจสอบ QA ของคุณได้มากขึ้น โดยเฉพาะอย่างยิ่งหากคุณกำลังจัดการกับเมตริกรวมของชุดข้อมูล มาดูกันว่าคุณสามารถใช้วิธีการทางสถิติเพื่อตรวจสอบและรับรองคุณภาพของข้อมูลได้อย่างไร

การติดตามการนับบันทึก

ลองพิจารณาสถานการณ์ทางธุรกิจที่กระบวนการ ETL (Extract, Transform, Load) สร้างระเบียน N รายการในงานตามกำหนดการรายวัน ทีมสนับสนุนอาจต้องการตั้งค่าการตรวจสอบ QA เพื่อแสดงการแจ้งเตือนหากจำนวนระเบียนมีการเบี่ยงเบนอย่างมีนัยสำคัญ ตัวอย่างเช่น หากกระบวนการสร้างระเบียนโดยปกติระหว่าง 9,500 ถึง 10,500 รายการต่อวันเป็นเวลาสองเดือน การเพิ่มขึ้นหรือลดลงอย่างมีนัยสำคัญใดๆ อาจบ่งชี้ถึงปัญหาที่เกิดขึ้นกับข้อมูลพื้นฐาน


เราสามารถใช้วิธีการทางสถิติเพื่อกำหนดเกณฑ์ว่ากระบวนการใดควรส่งการแจ้งเตือนไปยังทีมสนับสนุน ด้านล่างนี้คือตัวอย่างการติดตามจำนวนระเบียนในช่วงสองเดือน:











ในการวิเคราะห์สิ่งนี้ เราสามารถแปลงข้อมูลจำนวนเรกคอร์ดเพื่อสังเกตการเปลี่ยนแปลงในแต่ละวัน โดยทั่วไปการเปลี่ยนแปลงเหล่านี้จะแกว่งไปมาอยู่ที่ประมาณศูนย์ ดังที่แสดงในแผนภูมิต่อไปนี้:












เมื่อเราแสดงอัตราการเปลี่ยนแปลงนี้ด้วยการแจกแจงแบบปกติ จะเกิดกราฟรูประฆังคว่ำ ซึ่งบ่งชี้ว่าข้อมูลมีการแจกแจงแบบปกติ การเปลี่ยนแปลงที่คาดไว้คือประมาณ 0% โดยมีค่าเบี่ยงเบนมาตรฐานอยู่ที่ 2.63%













การวิเคราะห์นี้แสดงให้เห็นว่าจำนวนบันทึกโดยทั่วไปจะอยู่ในช่วง -5.26% ถึง +5.25% โดยมีความเชื่อมั่น 90% จากข้อมูลนี้ คุณสามารถกำหนดกฎเกณฑ์เพื่อแจ้งเตือนหากจำนวนบันทึกเบี่ยงเบนเกินช่วงนี้ เพื่อให้แน่ใจว่าสามารถดำเนินการได้ทันท่วงที

การติดตามการครอบคลุมคุณลักษณะ

การครอบคลุมแอตทริบิวต์ หมายถึงอัตราส่วนของค่าที่ไม่ใช่ค่า NULL ต่อจำนวนเรกคอร์ดทั้งหมดสำหรับสแนปช็อตชุดข้อมูล ตัวอย่างเช่น หากเรกคอร์ด 8 รายการจาก 100 รายการมีค่า NULL สำหรับแอตทริบิวต์เฉพาะ การครอบคลุมสำหรับแอตทริบิวต์นั้นจะอยู่ที่ 92%


มาทบทวนกรณีทางธุรกิจอื่น ๆ ด้วยกระบวนการ ETL ที่สร้างภาพรวมของตารางผลิตภัณฑ์ทุกวัน เราต้องการติดตามความครอบคลุมของแอตทริบิวต์คำอธิบายผลิตภัณฑ์ หากความครอบคลุมต่ำกว่าเกณฑ์ที่กำหนด ควรมีการแจ้งเตือนไปยังทีมสนับสนุน ด้านล่างนี้คือภาพแสดงการครอบคลุมแอตทริบิวต์สำหรับคำอธิบายผลิตภัณฑ์ในระยะเวลาสองเดือน:









เมื่อวิเคราะห์ความแตกต่างในการครอบคลุมรายวันโดยสมบูรณ์แล้ว เราจะสังเกตได้ว่าการเปลี่ยนแปลงจะแกว่งไปมาอยู่ที่ประมาณศูนย์:










การแสดงข้อมูลนี้เป็นการแจกแจงแบบปกติแสดงให้เห็นว่าข้อมูลนี้มีการแจกแจงแบบปกติโดยมีการเปลี่ยนแปลงที่คาดไว้ประมาณ 0% และค่าเบี่ยงเบนมาตรฐานคือ 2.45%















จากที่เราเห็น สำหรับชุดข้อมูลนี้ การครอบคลุมคุณลักษณะคำอธิบายผลิตภัณฑ์โดยทั่วไปจะอยู่ในช่วง -4.9% ถึง +4.9% โดยมีความเชื่อมั่น 90% จากตัวบ่งชี้ตัวนี้ เราสามารถตั้งกฎเพื่อแจ้งเตือนหากการครอบคลุมเบี่ยงเบนไปจากช่วงนี้

การตรวจสอบ QA ด้วยอัลกอริทึมแบบอนุกรมเวลา

หากคุณทำงานกับชุดข้อมูลที่แสดงการเปลี่ยนแปลงที่สำคัญอันเนื่องมาจากปัจจัยต่างๆ เช่น ฤดูกาลหรือแนวโน้ม วิธีทางสถิติแบบเดิมอาจทำให้เกิดการแจ้งเตือนที่ผิดพลาดได้ อัลกอริทึมอนุกรมเวลาให้แนวทางที่ละเอียดกว่า ซึ่งช่วยปรับปรุงความแม่นยำและความน่าเชื่อถือของการตรวจสอบ QA ของคุณ


เพื่อสร้างการแจ้งเตือนที่สมเหตุสมผลมากขึ้น คุณสามารถใช้ ค่าเฉลี่ยเคลื่อนที่เชิงบูรณาการถดถอยอัตโนมัติ (ARIMA) หรือว่า วิธีโฮลท์-วินเทอร์ส วิธีแรกนั้นดีพอสำหรับชุดข้อมูลที่มีแนวโน้ม แต่วิธีหลังนั้นช่วยให้เราจัดการกับชุดข้อมูลที่มีทั้งแนวโน้มและฤดูกาลได้ วิธีนี้ใช้ส่วนประกอบสำหรับระดับ แนวโน้ม และฤดูกาล ซึ่งทำให้สามารถปรับตัวให้เข้ากับการเปลี่ยนแปลงตามกาลเวลาได้อย่างยืดหยุ่น


มาสร้างแบบจำลองยอดขายรายวันซึ่งแสดงทั้งแนวโน้มและรูปแบบตามฤดูกาลโดยใช้ Holt-Winters กัน:

 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 และการผสานรวมวิธีการทางสถิติและอัลกอริทึมอนุกรมเวลา จะช่วยให้คุณมั่นใจได้ถึงความสมบูรณ์และความน่าเชื่อถือของข้อมูล ซึ่งจะช่วยปรับปรุงแนวทางการจัดการข้อมูลของคุณในที่สุด


การนำเทคนิคที่อธิบายไว้ข้างต้นไปใช้จะช่วยป้องกันปัญหาที่อาจเกิดขึ้นในแอปพลิเคชันปลายทางและปรับปรุงคุณภาพโดยรวมของเวิร์กโฟลว์ข้อมูลของคุณ

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks