רווחים:
- יכולת להבחין בגורם לערכים החסרים (אקראי, שיטתי, משמעותי) ולבחור את האסטרטגיה המתאימה ולחשב את ערך המילוי מתוך אימון בלבד
- יכולת לבחון חריגים לפני מחיקתם ולהבחין בין שגיאת נתונים לאירוע נדיר אמיתי
- יכולת למנוע אובדן שקט על ידי ניטור ההשפעה של כל שלב על מספר השורות/החסר תוך הבאת חוסר עקביות של סוג ופורמט לתקן
כ-60-80 אחוז מזמנו של מדען נתונים הולך לניקוי; בתעשייה קוראים לזה בצחוק למחצה "התחבטות נתונים" (התחבטות נתונים או ניקוי נתונים). מכיוון שנתונים מהעולם האמיתי כמעט ולא מוכנים לניתוח: תאריכים הם בפורמטים מעורבים, מספרים מאוחסנים כטקסט, חלק מהתאים ריקים, לקוח מופיע שלוש פעמים באותה טבלה עם שני איותים שונים. ביחידה זו נסקור שלושה היבטים בסיסיים של ניקוי: ערכים חסרים, חריגים והמרת סוג/פורמט. בינה מלאכותית היא עוזרת מהירה במיוחד בעבודה זו; אבל אתה זה שמחליט מה לנקות ואיך, כי כל בחירת ניקיון משנה את הניתוח.
כלל הזהב של הניקיון: כל שינוי הוא החלטה
מחיקת תא, מילוי ערך חסר בממוצע, חיתוך חריג - אף אחת מהן אינה פעולות "נייטרליות". כל אחד משנה את הנתונים ומשפיע על התוצאה. אז כלל הזהב של ניקוי: כתוב כל שינוי בקוד, שים לב לרציונל, לעולם אל תחליף את הנתונים המקוריים. ה-AI נותן לך קוד ניקוי מהיר, אבל באחריותך להבין מה הקוד הזה עושה; אל תפעיל אותו מבלי לראות כמה שורות נעלמו כשאתה אומר "מחק שורות ריקות".
זהירות: לעולם אל תשנה את הנתונים הגולמיים המקוריים. כתוב את הגרסה המנוקת לקובץ/טבלה נפרדת. בדרך זו, אם אתה מזהה שגיאה, אתה יכול לחזור למקום הראשון ולשמור על יכולת השחזור.
ערכים חסרים: למה הוא ריק, מה לעשות
ערך חסר (בדרך כלל מופיע כ-NaN - "לא מספר" בפנדות) הוא כאשר תא ריק. אבל הסיבה לפער קובעת את הפתרון. ישנם שלושה מצבים אופייניים. חסר אקראי: חיישן לא פעל לרגע; יכול להיות שזה הגיוני למלא אותו. חסר שיטתי: שדה טופס מתבקש רק עבור לקוחות מסוימים; הפער כאן הוא למעשה מידע. חסר משמעותי: אם "תאריך החזרה" ריק, הלקוח לא החזיר; רווח זה אומר 0 או "אף אחד", הוא לא מלא.
אסטרטגיות עיקריות:
אסטרטגיה
מתי זה מתאים?
סיכון
מחק שורה
שיעור החסר נמוך מאוד (<5%) ואקראי
אובדן נתונים וייצוג
מחק עמודה
רוב העמודה ריקה (>60%)
אובדן מידע
מילוי ממוצע/חציוני
מספרי, חסר באופן אקראי
זה מפחית את השונות ומעוות את ההתפלגות
קטגוריה "לא ידוע"
חסר קטגורי, שיטתי
יוצר קטגוריות נוספות
חיזוי עם מודל
טור מורכב ויקר
סיכון דליפה, מורכבות
נקודה קריטית: יש לחשב את ערך הזקיפה רק מנתוני האימון ולהחיל את אותו ערך על נתוני הבדיקה. אם אתה כולל את הממוצע של נתוני הבדיקה, אתה יוצר דליפה (יחידה 10). החציון (הערך האמצעי של נתונים סידוריים) מועדף לעתים קרובות על הממוצע מכיוון שהוא חזק יותר לחריגים מאשר הממוצע.
חריגים: שגיאה או אמיתית?
חריג יכול להיות אחד משני דברים: שגיאת נתונים (999 בעמודת הגיל) או אירוע אמיתי אך נדיר (הזמנה של 2 מיליון דולר של לקוח). לבלבל בין השניים הוא הרסני: מחיקת חריגה אמיתית ואתה זורק מידע חשוב; אם תעזוב טעות, הממוצעים שלך יסבלו. לכן יש לבחון תחילה את החריג, לא למחוק אותו אוטומטית.
שיטות זיהוי נפוצות: שיטת IQR (טווח בין-רבעוני; ערכים שהם יותר מפי 1.5 מההפרש בין 25% ו-75% חמישוני הנתונים נחשבים לחריגים) וציון z (מספר סטיות התקן הרחק מהממוצע שערך הוא; בדרך כלל חריג אם הוא גדול מ-3). AI כותב את הקוד לחישובים אלה בשניות; אבל לפני שאתה אומר "מחק", בדוק מהם הערכים האלה.
המרת סוג ופורמט: מקור שגיאה שקט
אחד מכאבי הראש הכי גדולים הוא בלבול סוגי נתונים. אם עמודת "כמות" מאוחסנת כטקסט, לא תוכל להוסיף; התוכנית קוראת באופן שגוי מספר בפורמט טורקי כגון "1,250.50" במקום "אלף מאתיים וחמישים". תאריכים ("01/03/2024" יום-חודש או חודש-יום?), קטגוריות ("זכר"/"זכר"/"M" זה אותו הדבר?) ויחידות (TL או kuruş?) מייצרות בשקט תוצאות שגויות. חלק גדול מהניקיון הוא משיכת חוסר העקביות האלה לתקן: תאריכים לפורמט אחד, קטגוריות לאות אחד, מספרים ליחידה אחת.
שלושה מיני תיקים
מקרה 1 - המלכודת הממוצעת. צוות מילא את 320 הערכים החסרים בעמודת ההכנסה עם הממוצע ($48,500). אבל הליקויים היו שיטתיים: אלה היו הפלח עם ההכנסה הנמוכה שמעולם לא הצהיר על הכנסה. מילוי ממוצע עשה את הקבוצה הזו עשירה באופן מלאכותי ומודל האשראי היה שגוי. שיעור: שאלו "למה זה ריק" לפני מילוי.
מקרה 2 - חריג שאסור למחוק. אנליסט קמעונאי מחק 4 הזמנות ענק (1.8 מיליון TL כל אחת) בנתוני המכירות, מתוך מחשבה שהן "שגיאות". עם זאת, מדובר בהזמנות אמיתיות של תאגידים והיו 22% מסך המחזור. מודל התחזית לאחר המחיקה פספס לחלוטין את הביקוש המוסדי. לקח: בדוק את החריג לפני מחיקתו.
מקרה 3 - אסון בפורמט תאריך. ב-CSV התערבבו התאריכים גם ל-"2024-03-01" וגם ל-"01.03.2024". כאשר הקוד שנכתב על ידי YZ נותח לפי הפורמט הראשון, 6,400 שורות הפכו ל-NaT כ"תאריך לא חוקי" והוצאו מניתוח בשקט. האנליסט הבחין בכך רק כאשר מספר השורות ירד. שיעור: בדוק תמיד את מספר השורות והחסר לאחר ההמרה.
ארבע תבניות הניתנות להעתקה
1) מפת ערך חסר:
יש לי פנדות df. כתוב קוד שמפיק טבלה המציגה את המספר והאחוז של חסר (NaN) עבור כל עמודה. לאחר מכן, רשום בנפרד את העמודות עם שיעור חסר העולה על 40% ואלה עם שיעור חסר מתחת ל-5%. פשוט הפק את קוד האבחון הזה, לא איזו אסטרטגיה אתה מציע; אני אקבל את ההחלטה.
2) בדיקת חריגים (לא מחיקה):
כתוב קוד שמזהה (לא מוחק!) חריגים עבור עמודת ה"כמות" שלי בשיטת IQR. שים את השורות המרוחקות ב-df נפרד כדי שאוכל לבחון אותן באופן ידני. כמו כן הדפס את מספר החריגים ואת חלקם בסך הכל.
3) סטנדרטיזציה של סוג/פורמט:
כתוב קוד המתקן את העמודות הבאות:- "תאריך": יכול להיות בפורמטים מעורבים ("2024-03-01" ו-"01.03.2024"); המיר את כולם לתאריך-שעה, ספור את הבלתי ניתנים לתרגום ודווח (זרוק בשקט). - "gender": "זכר"/"זכר"/"מ" -> "מ", "נקבה"/"נקבה"/"ו" -> "ק". - "כמות": טקסט בפורמט טורקי ("1.250,50") -> מספר עשרוני. הדפס כמה שורות מושפעות לאחר כל המרה.
4) בדוק לפני/אחרי הניקוי:
כתוב קוד שמשווה בין df.shape, ספירה חסרה וסטטיסטיקות סיכום (ממוצע, חציון, min, max) של עמודות נבחרות לפני ואחרי שלב ניקוי. מטרה: לראות מה הניקיון משנה.
הנחיה חלשה / הנחיה חזקה
הנחיה חלשה:
נקה את הנתונים האלה.
"צלול" הוא דו-משמעי; AI לא יודע אילו חלקים חסרים יש למחוק, מה למלא, איזו עמודה לעבד וכיצד. התוצאה: שינויים עיוורים ובלתי הפיכים.
הנחיה עוצמתית:
תפקידך: עוזר ניקוי נתונים. עמודות df: customer_id (int), registration_date (טקסט בפורמט מעורב), revenue_tl (טקסט, "1,200.00"), עיר (טקסט, איות לא עקבי). כללים:- שינוי df המקורי; עבוד על העותק בשם df_clean.- המר את income_tl למספר, ספור את מה שלא ניתן לתרגם.- שנה record_date ל-datetime, דווח על השגיאה.- אל תמחק אף שורה ללא אישורי; הצג את המועמדים בנפרד. לאחר כל שלב, הדפס df_temiz.shape ואת המספר החסר.
כאן המקור מוגן, כל טרנספורמציה נספרת, המחיקה נשארת לאדם.
טעויות נפוצות
- להשלים את החסר בלי לשאול "למה הוא ריק?" מילוי חסר שיטתי/משמעותי עם הממוצע מעוות את הנתונים.
- מחיקת החריג מבלי לבדוק אותו. השלכת אירועים אמיתיים אך נדירים הורסת מידע חשוב.
- חישוב ערך הריפוד מכל הנתונים. הכללת נתוני בדיקה יוצרת דליפה; רק לחשב מאימון.
- לא בודק את מספר השורות/החסר לאחר ההמרה. שורות שהן בשקט NaT/NaN אינן נכללות בניתוח.
- החלפת הנתונים המקוריים. ההחזרה והשחזור אובדים.
טיפ: הפעל את הניקוי עם השוואת "לפני-אחרי". הדפס df.shape, ספירה חסרה וסטטיסטיקות סיכום של עמודות קריטיות לאחר כל שלב. אז אתה רואה מיד שצעד אחד הורס באופן בלתי צפוי 6,000 שורות.
לסיכום
ניקוי הוא השלב שגוזל זמן רב ודורש החלטות במדעי הנתונים. כל שינוי משנה את הנתונים, כך שכל אחד מהם הוא החלטה מודעת. עבור ערכים חסרים, שאל "למה הוא ריק?" סקור את כל החריגים לפני מחיקתם; הביאו את הסוג והפורמט לסטנדרטים. חשב את ערך המילוי מנתוני האימון בלבד, שמור את המקור, ועקוב אחר ההשפעה של כל שלב על ידי ספירתו. AI הוא מאיץ אדיר בעסק הזה, אבל בני אדם מחליטים מה אתה מנקה ומדוע.
משימת יישום
קח (או צור) טבלה קטנה והכנס לתוכה בכוונה שלוש בעיות: טופל ערך חסר, חריג, פורמט תאריך מעורב. בקש אבחון וקוד סטנדרטיזציה מ-AI עם התבניות לעיל; השווה מספר שורות וחסר לפני/אחרי כל שלב. נסו לתפוס לפחות "אובדן שקט" אחד ושימו לב איך שמתם לב לזה.
רשימת בדיקה
- [ ] האם שמרתי את הנתונים הגולמיים המקוריים ועבדתי על העותק?
- [ ] האם שאלתי את השאלה "למה הוא ריק" עבור כל עמודה חסרה?
- [ ] האם בדקתי חריגים לפני שמחקתי אותם?
- [ ] האם חישבתי את ערך הריפוד מנתוני אימון בלבד?
- [ ] האם אני בודק את מספר השורות/החסרים לאחר כל שלב ומבטל אובדן שקט?