บทนำตั้งแต่ต้นจนจบเพื่อจัดการกับค่าที่หายไป

โหนดต้นทาง: 1121996

บทความนี้เผยแพร่โดยเป็นส่วนหนึ่งของไฟล์ Blogathon วิทยาศาสตร์ข้อมูล

ขององค์กร

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

เนื้อหา

  1. เหตุใดการจัดการค่าที่หายไปจึงสำคัญ
  2. เหตุผลเบื้องหลังค่าที่หายไป
  3. ประเภทของค่าที่หายไป
  4. ตรวจสอบค่าที่หายไปในชุดข้อมูล
  5. การแสดงค่าที่หายไป
  6. วางแถวที่มีค่าขาดหายไป
  7. วางคอลัมน์ที่มีค่าขาดหายไป
  8. การใส่แทนค่าตัวแปรต่อเนื่อง
    1. การใส่ร้ายป้ายสี
    2. การใส่ความด้วยค่ามัธยฐาน
  9. การทำนายค่าที่หายไปด้วยการถดถอย
  10. ค่าที่ขาดหายไปในข้อมูลหมวดหมู่
  11. ค่าที่ขาดหายไปในข้อมูลอนุกรมเวลา
    1. ส่งต่อค่าที่ขาดหายไป
    2. ย้อนกลับเติมค่าที่ขาดหายไป
    3. การแก้ไขเชิงเส้น
  12. อัลกอริธึมที่แข็งแกร่งจนถึงค่าที่หายไป
  13. สรุป

เหตุใดการจัดการข้อมูลที่ขาดหายไปจึงสำคัญ

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

เหตุผลเบื้องหลังค่านิยมที่หายไป

เคยสงสัยเกี่ยวกับสาเหตุที่อยู่เบื้องหลังข้อมูลที่ขาดหายไปในชุดข้อมูลหรือไม่?

สาเหตุที่เป็นไปได้บางประการที่อยู่เบื้องหลังข้อมูลที่ขาดหายไปคือ:

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

ประเภทของค่าที่หายไป

ข้อมูลที่ขาดหายไปอาจเกิดขึ้นได้จากหลายสาเหตุ เราสามารถจำแนกพวกเขาออกเป็นสามกลุ่มหลัก: ขาดหายไปโดยสิ้นเชิงในการสุ่ม, ขาดหายไปแบบสุ่ม, ไม่พลาดแบบสุ่ม

1. หายไปโดยสิ้นเชิงที่สุ่ม (MCAR)

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

2. หายไปแบบสุ่ม (MAR)

ที่นี่ไม่เหมือนกับ MCAR ข้อมูลขาดหายไปในกลุ่มย่อยเฉพาะ เป็นไปได้ที่จะคาดการณ์ว่าข้อมูลจะมีหรือไม่มีด้วยความช่วยเหลือของคุณสมบัติอื่น ๆ แต่คุณไม่สามารถคาดเดาข้อมูลที่ขาดหายไปได้ด้วยตนเอง

ตัวอย่างเช่น ให้เราพิจารณาแบบสำรวจเกี่ยวกับเวลาที่ใช้บนอินเทอร์เน็ต ซึ่งมีหัวข้อเกี่ยวกับเวลาที่ใช้บนแพลตฟอร์มอย่าง Netflix, amazon prime สังเกตได้ว่าผู้สูงอายุ (อายุมากกว่า 45 ปี) มีโอกาสน้อยกว่าคนอายุน้อยกว่า นี่คือตัวอย่างของ MAR ที่นี่ พารามิเตอร์ 'อายุ' เป็นตัวกำหนดว่าข้อมูลจะขาดหายไปหรือไม่ MAR เกิดขึ้นบ่อยกว่า MCAR

3. ไม่พลาดแบบสุ่ม (NMAR)

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

ตอนนี้เราได้เห็นข้อมูลประเภทต่างๆ ที่ขาดหายไปแล้ว มาดูวิธีการต่างๆ ในการจัดการกัน

ตรวจสอบค่าที่หายไป

เมื่อคุณมีชุดข้อมูล ขั้นตอนแรกคือตรวจสอบว่าคอลัมน์ใดมีข้อมูลที่ขาดหายไปและมีกี่คอลัมน์ ให้เราใช้ชุดข้อมูลที่มีชื่อเสียงที่สุดในบรรดา Data Science ที่เรียนรู้ แน่นอนว่าผู้รอดชีวิตจากเรือไททานิค! อ่านชุดข้อมูลโดยใช้ฟังก์ชัน pandas read_csv ดังที่แสดงด้านล่าง

train=pd.read_csv('../input/titanic/train.csv') test=pd.read_csv('../input/titanic/test.csv') พิมพ์ ('รูปแบบข้อมูลการฝึก: ', train.shape ) print('กำลังทดสอบรูปร่างข้อมูล: ', test.shape) train.head()

ไม่มีข้อมูลค่า

ที่มา: ภาพจากสมุดบันทึก Kaggle ของผู้แต่ง

ตอนนี้เรามีกรอบข้อมูลการฝึกอบรมและทดสอบของข้อมูลไททานิคแล้ว

จะตรวจสอบได้อย่างไรว่าคอลัมน์ใดมีข้อมูลที่ขาดหายไป และมีกี่คอลัมน์

ฟังก์ชัน ” isnull()” ใช้สำหรับสิ่งนี้ เมื่อคุณเรียกใช้ฟังก์ชัน sum พร้อมกับ isnull ผลรวมของข้อมูลที่ขาดหายไปในแต่ละคอลัมน์คือผลลัพธ์

Missing_values=train.isnull().sum() พิมพ์(missing_values)
PassengerId 0 Survived 0 Pclass 0 Name 0 Sex 0 Age 177 SibSp 0 Parch 0 Ticket 0 Fare 0 Cabin 687 Embarked 2 dtype: int64

สังเกตว่า 3 คอลัมน์มีค่าที่หายไป: อายุ, ห้องโดยสาร, ลงมือ

แม้ว่าเราจะทราบจำนวนค่าที่ขาดหายไปในแต่ละคอลัมน์ แต่สิ่งสำคัญคือต้องทราบเปอร์เซ็นต์ของค่าเหล่านี้เทียบกับค่าทั้งหมด ดังนั้น ให้เราคำนวณมันในโค้ดบรรทัดเดียว

mis_value_percent = 100 * train.isnull().sum() / len(train) พิมพ์ (mis_value_percent)
PassengerId 0.000000 รอด 0.000000 Pclass 0.000000 ชื่อ 0.000000 เพศ 0.000000 อายุ 19.865320 SibSp 0.000000 Parch 0.000000 ตั๋ว 0.000000 ค่าโดยสาร 0.000000 ห้องโดยสาร 77.104377 ลงมือ 0.224467 dtype: float64

เป็นที่ชัดเจนว่า 77% ของคอลัมน์ 'ห้องโดยสาร' หายไป ซึ่งเป็นเปอร์เซ็นต์ที่มีนัยสำคัญอย่างยิ่ง อายุมีข้อมูลหายไปประมาณ 19% และ Embarked หายไปเพียง 0.2% นี่คือการวิเคราะห์เชิงปริมาณของข้อมูลที่ขาดหายไปที่เรามี แล้วคุณภาพล่ะ? อ่านต่อ!

การแสดงค่าที่หายไปด้วย Missingno

คาดเดาอะไร? เรามีแพ็คเกจหลามโดยเฉพาะสำหรับการแสดงภาพและสำรวจข้อมูลที่ขาดหายไปของชุดข้อมูล แพ็คเกจหลาม "Missingno" ไปข้างหน้าและติดตั้งอย่างรวดเร็ว

pip ติดตั้งหายไปไม่มี

เมื่อใช้สิ่งนี้ เราสามารถสร้างภาพข้อมูลในรูปแบบของแผนที่ความร้อน แผนภูมิแท่ง และเมทริกซ์ ด้วยการวิเคราะห์วิธีการแจกจ่าย คุณสามารถสรุปได้ว่าหมวดหมู่ใดที่จัดอยู่ใน MCAR, MAR หรือ NMAR นอกจากนี้เรายังสามารถค้นหาความสัมพันธ์ของคอลัมน์ที่มีคอลัมน์เป้าหมายที่ขาดหายไป

เริ่มต้นด้วยการสร้างแผนภูมิแท่งสำหรับค่าที่ไม่ใช่ค่าว่างโดยใช้ฟังก์ชัน 'bar()' ของไลบรารี missingno คุณได้ส่ง dataframe แพนด้าไปยังฟังก์ชันนี้

นำเข้า missno เป็น msno msno.bar (รถไฟ)

ไม่มี | ค่าที่หายไปที่มา: ภาพจากสมุดบันทึก Kaggle ของผู้แต่ง

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

msno.matrix(รถไฟ)
แถบลวดลาย

ในพล็อตเมทริกซ์ คุณจะเห็นบรรทัดว่างสำหรับข้อมูลที่ขาดหายไปแต่ละรายการ โปรดสังเกตว่าคอลัมน์ 'เริ่มดำเนินการ' มีข้อมูลที่สุ่มหายไปเพียงสองข้อมูล ซึ่งไม่เป็นไปตามรูปแบบ พวกเขาอาจสูญหายระหว่างการเก็บข้อมูล ดังนั้นสิ่งนี้สามารถจัดเป็น Missing อย่างสมบูรณ์ที่ Random

คอลัมน์อายุและห้องโดยสารอาจเป็น MAR แต่เราต้องการให้แน่ใจว่าไม่มีความสัมพันธ์ระหว่างกัน

ต้องทำอย่างไร?

โชคดีสำหรับเรา แพ็คเกจ missno ยังมีฟังก์ชัน 'แผนที่ความร้อน' เมื่อใช้สิ่งนี้ เราจะพบว่ามีความสัมพันธ์ระหว่างข้อมูลที่ขาดหายไปของคอลัมน์ต่างๆ หรือไม่

msno.heatmap(รถไฟ)

แสดงผลออกมาแล้ว!

แผนที่ความร้อน | ไม่มีค่า

แผนที่ความหนาแน่นแสดงให้เห็นว่าไม่มีความสัมพันธ์ที่ชัดเจนระหว่างข้อมูลที่ขาดหายไปของคอลัมน์อายุและห้องโดยสาร ดังนั้นข้อมูลที่ขาดหายไปของคอลัมน์เหล่านี้สามารถจัดประเภทเป็น MAR หรือหายไปจากการสุ่ม

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

วางแถวที่มีค่าขาดหายไป

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

ตัวอย่างเช่น คอลัมน์ 'เริ่มดำเนินการ' มีค่าที่หายไปเพียง 2 ค่า ดังนั้นเราจึงสามารถวางแถวที่คอลัมน์นี้หายไปได้ ทำตามข้อมูลโค้ดด้านล่าง

print('Dataset before :', len(train)) train.dropna(subset=['Embarked'],how='any',inplace=True) print('Dataset after :', len(train)) พิมพ์ ( 'ค่าที่หายไป :',train['Embarked'].isnull().sum())
ชุดข้อมูลก่อน : 891 ชุดข้อมูลหลัง : 889 ค่าที่ขาดหายไป : 0

ลองนึกภาพถ้าคุณทำเช่นเดียวกันกับคอลัมน์ 'อายุ' คุณจะสูญเสียข้อมูลประมาณ 77%!

วางคอลัมน์

เมื่อคอลัมน์มีค่าที่หายไปจำนวนมาก ก็ไม่มีประโยชน์ที่จะใส่ค่าที่มีข้อมูลจริงที่มีอยู่น้อยที่สุดที่เรามี ดังนั้น เมื่อคอลัมน์ใดมีค่าขาดหายไปมากกว่า 80% คุณสามารถลบคอลัมน์นั้นออกจากการวิเคราะห์ของคุณได้ ในกรณีของเรา 'Cabin' มีข้อมูลขาดหายไป 77% ดังนั้นคุณสามารถเลือกที่จะวางคอลัมน์นี้

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

การใส่แทนค่าตัวแปรต่อเนื่อง

รถไฟ['อายุ'][:10]
0 22.0 1 38.0 2 26.0 3 35.0 4 35.0 5 NaN 6 54.0 7 2.0 8 27.0 9 14.0 ชื่อ: อายุ dtype: float64
train['Age']=train['Age'].replace(np.NaN,train['Age'].mean()) รถไฟ['Age'][:10]
0 22.000000 1 38.000000 2 26.000000 3 35.000000 4 35.000000 5 29.699118 6 54.000000 7 2.000000 8 27.000000 9 14.000000 ชื่อ: อายุ dtype: float64

คุณจะเห็นว่า 'NaN' ถูกแทนที่ด้วย 29.699 (ค่าเฉลี่ยที่คำนวณได้)

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

การใส่ความด้วยค่ามัธยฐาน

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

train['Age']=train['Age'].replace(np.NaN,train['Age'].median()) รถไฟ['Age'][:10]

การใส่ความด้วยค่าเฉลี่ย

คุณสามารถสังเกตได้ว่าค่ามัธยฐาน (28.0) ถูกเติมแทนที่ค่า NaN

ในทำนองเดียวกัน คุณสามารถทำการใส่โหมดได้เช่นกัน โดยทั่วไป Imputation with the mode เป็นที่นิยมสำหรับค่าที่ขาดหายไปตามหมวดหมู่ ฉันจะอธิบายในเชิงลึกในส่วนต่อไป

การทำนายค่าที่หายไปด้วยการถดถอย

แทนที่จะเติมค่าเฉลี่ยหรือค่ามัธยฐานเดียวในทุกแห่ง จะเกิดอะไรขึ้นถ้าเราสามารถทำนายพวกมันด้วยความช่วยเหลือจากตัวแปรอื่นๆ ที่เรามี

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

เราสามารถประมวลผลข้อมูลเพื่อสร้างแบบจำลองได้ คุณลักษณะ "อายุ" จะเป็นตัวแปรเป้าหมาย

x_รถไฟ: แถวของชุดข้อมูลที่มีค่า "อายุ" จะถูกกรอง 'อายุ' คือเป้าหมาย x_ทดสอบ: มันคือคอลัมน์ "อายุ" ที่มีค่าที่ไม่ใช่ค่าว่าง

พื้นที่ y_รถไฟ จะมีข้อมูลที่มีค่า Age หายไป ซึ่งจะมีการคาดคะเน (y_pred)

นำเข้าแพนด้าเป็น pd data=pd.read_csv('../input/titanic/train.csv') data = data[["Survived", "Pclass", "Sex", "SibSp", "Parch", "Fare "," "อายุ"]] data["Sex"] = [1 if x=="male" else 0 for x in data["Sex"]] test_data = data[data["Age"].isnull()] data.dropna(inplace=True) x_train = data.drop("Age", axis=1) x_test = test_data.drop("Age", axis=1) y_train = data["อายุ"]

ให้เราใส่ตัวแบบการถดถอยเชิงเส้นกับข้อมูลเหล่านี้ ฉันจะใช้ห้องสมุด sklearn ที่นี่

จาก sklearn.linear_model นำเข้า LinearRegression model = LinearRegression() model.fit(X_train, y_train) y_pred = model.predict(X_test)

ตอนนี้ เรามีค่าว่างของคอลัมน์อายุที่คาดการณ์ไว้ใน y_pred

ฉันจะพิมพ์ตัวอย่างข้อมูลการทดสอบและผลลัพธ์ที่คาดการณ์ไว้สองสามตัวอย่างเพื่อให้คุณเข้าใจมากขึ้น

พิมพ์(x_test[:10])
Survived Pclass Sex SibSp Parch Fare 5 0 3 1 0 0 8.4583 17 1 2 1 0 0 13.0000 19 1 3 0 0 0 7.2250 26 0 3 1 0 0 7.2250 28 1 3 0 0 0 7.8792 29 0 3 1 0 0 7.8958 31 1 1 0 1 0 146.5208 32 1 3 0 0 0 7.7500 36 1 3 1 0 0 7.2292 42 0 3 1 0 0

นี่คือวิธีที่อินพุตถูกส่งไปยังแบบจำลองการถดถอย ลองดูค่าอายุที่คาดการณ์ไว้

พิมพ์ (y_pred[:10])
[29.07080066 30.10833306 22.44685065 29.08927347 22.43705181 29.07922599 32.43692984 22.43898701 22.15615704 29.07922599]

เย่! เราได้ค่า

ค่าที่ขาดหายไปในข้อมูลหมวดหมู่

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

train['Cabin']=train['Cabin'].fillna(รถไฟ['Cabin'].value_counts().index[0])

เมื่อเปอร์เซ็นต์ของค่าที่ขาดหายไปน้อยกว่า แนะนำให้ใช้วิธีนี้ ไม่ก่อให้เกิดการสูญเสียข้อมูลจำนวนมาก และมีความเกี่ยวข้องทางสถิติ

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

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

train['Cabin']=train['Cabin'].fillna('Unknown') รถไฟ['Cabin'][:10]

แถวห้องโดยสาร | เติม na

ทำงานได้ดีกับชุดข้อมูลขนาดเล็ก นอกจากนี้ยังปฏิเสธการสูญหายของข้อมูลด้วยการเพิ่มหมวดหมู่เฉพาะ

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

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

เพื่อให้ได้แนวคิด ฉันจะสร้างชุดข้อมูลจำลองง่ายๆ

time= pd.date_range("1/01/2021", periods=10, freq="W") df = pd.DataFrame(index=time); df["หน่วยขาย"] = [5.0,4.0,np.nan,np.nan,1.0,np.nan,3.0,6.0,np.nan,2.0]; พิมพ์ (df)

หน่วยขาย

มาดูวิธีการกัน

ส่งต่อค่าที่ขาดหายไป

ค่าของแถวถัดไปจะใช้เพื่อเติมค่าที่ขาดหายไป 'ffill' ย่อมาจาก 'forward fill' มันง่ายมากที่จะนำไปใช้ คุณเพียงแค่ต้องส่งพารามิเตอร์ "method" เป็น "ffill" ในฟังก์ชัน fillna()

forward_filled=df.fillna(method='ffill') พิมพ์ (forward_filled)

เติมไปข้างหน้า

ย้อนกลับเติมค่าที่ขาดหายไป

ที่นี่เราใช้ค่าของแถวก่อนหน้าเพื่อเติมค่าที่ขาดหายไป 'bfill' หมายถึงการเติมย้อนกลับ ที่นี่ คุณต้องส่ง 'bfill' เป็นพารามิเตอร์เมธอด

back_filled=df.fillna(method='bfill') พิมพ์ (backward_filled)

ด้านหลังเต็มไปด้วย

ฉันหวังว่าคุณจะสามารถเห็นความแตกต่างในทั้งสองกรณีด้วยภาพด้านบน

การแก้ไขเชิงเส้น

ข้อมูลอนุกรมเวลามีความหลากหลายมาก วิธีการระบุโดยใช้โฆษณาทดแทนและการเติมล่วงหน้าไม่ใช่วิธีแก้ปัญหาที่ดีที่สุด การแก้ไขเชิงเส้นเพื่อช่วยชีวิต!

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

interpolated=df.interpolate(limit_direction="both") พิมพ์ (สอดแทรก)

การแก้ไขเชิงเส้นของค่าที่หายไป

เปรียบเทียบค่าเหล่านี้กับการเติมย้อนหลังและส่งต่อ และตรวจสอบด้วยตัวคุณเองว่าแบบไหนดี!

นี่เป็นวิธีพื้นฐานในการจัดการค่าที่ขาดหายไปในข้อมูลอนุกรมเวลา

อัลกอริธึมที่แข็งแกร่งจนถึงค่าที่หายไป

มีบางกรณีที่วิธีข้างต้นไม่ทำงานได้ดี แต่คุณต้องทำการวิเคราะห์ จากนั้น คุณควรเลือกใช้อัลกอริทึมที่รองรับค่าที่หายไป KNN (เพื่อนบ้านที่ใกล้ที่สุด K) เป็นหนึ่งในอัลกอริทึมดังกล่าว โดยจะพิจารณาค่าที่ขาดหายไปโดยนำค่า K ที่ใกล้ที่สุดมาใช้ ฟอเรสต์สุ่มยังมีประสิทธิภาพในการจัดหมวดหมู่ข้อมูลที่มีค่าที่ขาดหายไป อัลกอริธึมที่อิงตามโครงสร้างการตัดสินใจหลายอย่าง เช่น XGBoost, Catboost รองรับข้อมูลที่มีค่าที่ขาดหายไป

สรุป

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

ฉันหวังว่าคุณจะชอบการอ่าน

คุณสามารถเชื่อมต่อกับฉันได้ที่: [ป้องกันอีเมล]

Linkedin: การประมวลผลข้อมูลล่วงหน้า

สื่อที่แสดงในบทความนี้ไม่ใช่ของ Analytics Vidhya และใช้ดุลยพินิจของผู้เขียน

ที่มา: https://www.analyticsvidhya.com/blog/2021/10/end-to-end-introduction-to-handling-missing-values/

ประทับเวลา:

เพิ่มเติมจาก การวิเคราะห์ วิทยา