เราควรจัดการกับข้อมูลที่หายไปที่ไหนในเวิร์กโฟลว์


16

ฉันกำลังสร้างเวิร์กโฟลว์สำหรับการสร้างแบบจำลองการเรียนรู้ของเครื่อง (ในกรณีของฉันโดยใช้ Python pandasและsklearnแพ็คเกจ) จากข้อมูลที่ดึงมาจากฐานข้อมูลขนาดใหญ่มาก (ที่นี่ Vertica ด้วยวิธี SQL และpyodbc) และขั้นตอนสำคัญในกระบวนการนั้น ค่าของผู้ทำนาย สิ่งนี้ตรงไปตรงมาในแพลตฟอร์มการวิเคราะห์หรือสถิติเดียวไม่ว่าจะเป็น Python, R, Stata และอื่น ๆ --- แต่ฉันอยากรู้ว่าจะหาขั้นตอนนี้ได้ดีที่สุดในเวิร์กโฟลว์แบบหลายแพลตฟอร์มได้อย่างไร

มันง่ายพอที่จะทำสิ่งนี้ใน Python ไม่ว่าจะเป็นsklearn.preprocessing.Imputerคลาสใช้pandas.DataFrame.fillnaวิธีการหรือด้วยมือ (ขึ้นอยู่กับความซับซ้อนของวิธีการใส่ความคิดที่ใช้) แต่เนื่องจากฉันจะใช้คอลัมน์นี้หลายสิบหรือหลายร้อยคอลัมน์ในหลายร้อยล้านระเบียนฉันสงสัยว่ามีวิธีที่มีประสิทธิภาพมากกว่าในการทำสิ่งนี้โดยตรงผ่าน SQL ล่วงหน้าหรือไม่ นอกเหนือจากประสิทธิภาพที่เป็นไปได้ของการทำเช่นนี้ในแพลตฟอร์มแบบกระจายเช่น Vertica สิ่งนี้จะมีประโยชน์เพิ่มเติมที่ช่วยให้เราสามารถสร้างไปป์ไลน์อัตโนมัติสำหรับการสร้างตารางเวอร์ชัน "สมบูรณ์" ดังนั้นเราจึงไม่จำเป็นต้องกรอกชุดใหม่ ของค่าที่หายไปตั้งแต่เริ่มต้นทุกครั้งที่เราต้องการเรียกใช้แบบจำลอง

ฉันไม่สามารถหาคำแนะนำมากมายเกี่ยวกับสิ่งนี้ แต่ฉันคิดว่าเราจะทำได้:

  1. สร้างตารางค่าทดแทน (เช่นค่าเฉลี่ย / มัธยฐาน / โหมดโดยรวมหรือตามกลุ่ม) สำหรับแต่ละคอลัมน์ที่ไม่สมบูรณ์
  2. เข้าร่วมตารางค่าทดแทนกับตารางเดิมเพื่อกำหนดค่าทดแทนสำหรับแต่ละแถวและคอลัมน์ที่ไม่สมบูรณ์
  3. ใช้ชุดคำสั่ง case เพื่อรับค่าดั้งเดิมหากมีและค่าทดแทนเป็นอย่างอื่น

สิ่งนี้เป็นสิ่งที่สมเหตุสมผลที่ต้องทำใน Vertica / SQL หรือมีเหตุผลที่ดีที่จะไม่รบกวนและเพียงจัดการกับ Python แทน? และถ้าหลังมีกรณีที่แข็งแกร่งสำหรับการทำเช่นนี้ในหมีแพนด้ามากกว่า sklearn หรือกลับกัน? ขอบคุณ!

คำตอบ:


14

ความคิดเห็นที่แข็งแกร่งของฉันเกี่ยวกับงานอัตโนมัติเช่นการใส่ข้อมูล (แต่ที่นี่ฉันสามารถรวมถึงการปรับการจัดกึ่งกลางการเลือกคุณสมบัติ ฯลฯ ) คือการหลีกเลี่ยงการทำสิ่งต่าง ๆ โดยไม่ตรวจสอบข้อมูลของคุณอย่างรอบคอบ

แน่นอนหลังจากตัดสินใจเลือกประเภทของการใส่ข้อมูลที่จะสามารถเป็นไปโดยอัตโนมัติ (ภายใต้สมมติฐานว่าข้อมูลใหม่มีรูปร่าง / ปัญหาเดียวกัน)

ดังนั้นก่อนตัดสินใจจะทำอะไร ฉันมักจะเสียเวลาพยายามทำสิ่งนี้โดยอัตโนมัติทำลายข้อมูลของฉัน ฉันจะให้คุณตัวอย่าง: - ตลาดที่เข้ารหัสเป็น N / A ซึ่งฉันพลาดและคิดว่าเป็นอเมริกาเหนือ / - ตัวเลขเช่น -999.0 เนื่องจากผู้ผลิตข้อมูลไม่สามารถหาข้อมูลทดแทนที่ดีกว่าสำหรับข้อมูลที่ขาดหายไปได้ - เช่น 0 สำหรับ ความดันโลหิตหรืออุณหภูมิของร่างกายแทนที่จะเป็นข้อมูลที่หายไป (มันยากที่จะจินตนาการถึงมนุษย์ที่มีชีวิตด้วยความดันโลหิต 0) - ตัวยึดตำแหน่งหลายตัวสำหรับข้อมูลที่หายไปเนื่องจากข้อเท็จจริงที่ว่าข้อมูลถูกรวบรวมจากแหล่งต่าง ๆ

หลังจากนั้นคุณต้องเข้าใจว่าการใส่ร้ายชนิดใดจะมีลักษณะคล้ายกับข้อมูลจากข้อมูลของคุณมากขึ้นสำหรับงานที่กำหนด นี่เป็นเรื่องยากที่จะทำถูกกว่าที่คิด

หลังจากสิ่งเหล่านี้คำแนะนำของฉันคือการชะลองานการใส่ข้อมูลของคุณไปยังชั้นบนที่คุณมีเครื่องมือในการทำซ้ำข้อมูลใหม่และตรวจสอบว่าข้อสันนิษฐานสำหรับข้อมูลใหม่ไม่ได้ถูกละเมิด (ถ้าเป็นไปได้)


1
+1 อัตโนมัติไม่จำเป็นต้องทำให้สิ่งต่าง ๆ ดีขึ้นเพียงอย่างต่อเนื่องและเร็วขึ้นเท่านั้น!
James

4

Therriault ยินดีที่ทราบว่าคุณใช้ Vertica! การเปิดเผยอย่างเต็มรูปแบบฉันเป็นหัวหน้านักวิทยาศาสตร์ด้านข้อมูลที่นั่น :) เวิร์กโฟลว์ที่คุณอธิบายนั้นเป็นสิ่งที่ฉันพบบ่อยมากและฉันเป็นผู้เชื่อที่แท้จริงในการประมวลผลชุดข้อมูลที่มีขนาดใหญ่มากเหล่านั้นในฐานข้อมูลก่อนการทำงานของ pyodbc และแพนด้า ฉันขอแนะนำให้สร้างมุมมองหรือตารางผ่านข้อความค้นหาที่ใช้ไฟล์เพียงเพื่อให้มั่นใจว่างานที่ทำซ้ำได้ โชคดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.