מתודות עבודה

ניקיון דאטה – למה זה חשוב, מה מנקים ואיך עושים את זה?

By יולי 9, 2018 No Comments

מסקר טלפוני שבוצע לאחרונה, נראה שראש הממשלה הבא של ישראל הולך להיות 'הסר'.

את דבר השנינות הנחמד הזה מצאתי ברחבי הפייסבוק (אני לא כל כך זוכר על ידי מי, אז אם כתבת את זה, גש.י לקבלה לקבלת הקרדיט המגיע לך) ולאחר שקראתי אותו – הבנתי שזה יהיה נושא הפוסט הבא.

הרי באמצעות ההיגיון הבריא של כולנו, אנחנו לגמרי מבינים מה הבעיה ואיך "מסקנה" כזאת יכלה הייתה להתקבל (גם אם כולנו חכמים וכולנו גדולים וגו' וזאת טעות קצת מצחיקה).

אז היום אנחנו הולכים לדבר על ניקוי דאטה – למה זה חשוב, כמה טכניקות יש לניקוי דאטה בשילוב עם הדגמות.

 

 חשיבות ניקיון הדאטה – למה דאטה נקי הוא דאטה טוב?

אין לי סטטיסטיקה על העניין, ולכן מה שאכתוב עכשיו הוא אנקדוטלי לחלוטין ומתבסס על הניסיון שלי – עבור מסדי נתונים אמיתיים, של לקוחות אמיתיים, בעולם האמיתי – משך הזמן שהשקעתי אני בפועל בניקוי וסידור הדאטה (יחד עם עיבוד מקדים והוצאות תכונות) – הוא בין 60% ל-80%, אלו מספרים מאוד גבוהים שהשתנו ממש בהתאם למשימה שהייתה לי ואיך הדאטה שירת את אותה המשימה, ובכל זאת – למה לנקות את הדאטה שלנו? ועוד יותר – למה לנקות את הדאטה שלנו כמו שצריך?

דאטה מלוכלך יכול להוביל לשלושה מצבים עיקריים –

  1. המקרה הטוב – האלגוריתם שלכם לא יעבוד, משהו ישבר באמצע (כי מה שהיה אמור להיות מספר יהיה מחרוזת, או מה שהיה אמור להיות מספר חיובי יהיה אפס) יהיה בלאגן, המחשב יעלה בלהבות ותיזרק לכם הערה שאומרת שמה שניסיתם להשיג, פשוט בלתי אפשרי – אם אתם אנליסטים הארד קור שבמקרה שכחו לנקות דאטה, תלכו אחורה, תתחילו תעשו ניקוי טוב-טוב, תחזרו לשלב המרכזי (לימוד המודל, ספירת מאורעות, התפלגות – יו ניים איט) והכל יהיה בסדר (עד כמה שהקלון של לא לנקות דאטה יכול להיות בסדר).
  2. המקרה הרע – האלגוריתם שלכם יעבוד – תצליחו ללמד את המודל שלכם, תבצעו ספירה, תסתכלו על ההתפלגות – והתוצאות תהיינה לא הגיוניות – משהו יהיה לא בסדר ולא תוכלו להמשיך את המחקר (בשלב הזה, שוב, תצטרכו לחזור אחורה, לנקות וכו'). המצב הזה פחות טוב, רק כי לאלגוריתם לא אכפת – הוא יאכל כל מה שתיתנו לו, ולו רק שזה יעמוד בסט הכללים המאוד כללי שלו.
  3. המקרה הממש גרוע – האלגוריתם שלכם יעבוד, התוצאות תהיינה רק טיפה לא הגיוניות או לא הגיוניות בעליל, אבל המודל נתן את התשובות שלו – אז אין מה לעשות, ותלכו עם זה ללקוח, למחלקת פרודקט, להנהלה ולמי לא. זה המקרה הכי גרוע – כי עם כל הילת הדאטה סיינס שרצה היום וכל הניים-דרופינג האפשרי של למידת מכונה, גם הנהלה יכולה ללכת שולל אחרי מסקנות לא נכונות – ולזה כבר יכולה להיות עלות אמיתית וכואבת.

 

אז סיכמנו שלנקות דאטה זה חשוב?

יופי.

מזכיר בשלב הזה שחלק מהתהליך המקדים הוא גם התמודדות עם דאטה חסר, עליו כתבתי כאן בפוסט אחר לפני שנים רבות (שנה פלוס מינוס, אבל אנחנו קטנוניים).

ניקוי דאטה לפני תחילת עבודהאיזה דאטה מנקים בעצם ואיך לנקות דאטה?

ניקוי דאטה הוא שם די כללי למציאת בעיות וסתירות פנימיות בתוך טבלת הנתונים איתה אנחנו עובדים, והטיפול בו הוא בהתאמה  ריכזתי כאן כמה נושאים שקשורים בניקוי דאטה – זה בהחלט לא כל הנושאים, אפילו לא למסד נתונים כללי, ובטח לא למסד נתונים פרטני הדורש Domain knowledge

  • חיפוש וקיצוץ קיצוניים

    • נתונים לא הגיוניים –

      • חד מימדי – גיל שלילי, גובה מעל X מטרים לאדם, משך זמן בימים ארוך יותר מתקופת המחקר, ערך שלישי בעמודה בינארית – תשאלו את בנדר

      • דו -מימדי – גיל קבלת מחזור ראשון עבור מגדר זכר, כמות שיערות על הראש עבור אדם שהוגדר כקירח, כמות כנפיים שונה מאפס לפרה (אלא אם אנחנו ממש בקטע של הנדסה גנטית)
  • שגיאות כתיב נפוצות\וריאציות – ההבדל בין "תל אביב יפו" ל-"תל-אביב יפו" הוא הבדל של שמיים וארץ וכזה שיכול ממש לשנות את תמונת המצב העסקית.
  • תאריכים בפורמטים שונים – אני חסיד של עבודה עם תאריכים וימים, ואני שואב הנאה והשראה מתוך משחק עם רצפי זמן. במבחן האחרון לאנליסטים שהזדמן לי לכתוב, שיניתי את הפורמט של חלק מעמודות התאריך לפורמטים שונים – למה? כי זאת בעיה אמיתית שיכולה להתרחש (לדוגמה, כאשר החברה משנה את מערכת המעקב שלה, ומסיימת מיגרציה ללא טיפול בדאטה קודם)
  • בחינת התפלגות הדאטה – בגדול, זה חלק מתהליך ה-EDA (Exploratory data analysis) – אבל אם לא עשיתם את זה שם (שיים און יו) – תעשו את זה בניקוי (אגב, זה מכסה גם חלק מסעיף הנתונים הלא הגיוניים החד מימדיים).
  • רשומות כפולות – אני מרשה לעצמי לומר בצורה ישירה למדיי – אם יצא לכם לעבוד עם דאטה – אתם וודאי לא מתפלאים שיש רשומות כפולות.
  • הסרת השלמות שהכנסתם מבעוד מועד – זוכרים את ראש הממשלה שלנו – "הסר"? אז זה. בדיוק זה. יש אנליסטים שאוהבים לסמן גילאים חסרים במספרים ממש גדולים ומזוהים – היתרון של זה הוא שמספרים כל כך גדולים משפיעים באופן ברור על המדדים השונים (אולי חוץ ממדדים מושפעי מיקום כמו חציון) ובוודאי על אלגוריתמים של לימוד מכונה, ככה שיותר קל לעלות על הטעות עוד לפני שמגיעים לשלב המצגות (זה לא עוצר את העובדה שבזבזנו זמן על לימוד מודל שגוי, אבל זה עדיף)

 

אז תכל'ס, איך לנקות דאטה?

  1. מחיקת\תיקון הדאטה הבעייתי – מחיקת הפיצ'ר או הדגימה.
  2. תיקון הדאטה הבעייתי – אם יש אפשרות (נגיד, לפעמים, לחזור אחורה לטבלת האם ולבדוק מה משכנו בפועל לעומת מה שהתכוונו יכול להיות משמעותי בהקשר הזה.
  3. תיקון שגיאות כתיב – במקרה של ערים, תצטרכו לייצר דרך סקיילבילית לעשות את זה –לא נראה לי שיש למישהו כוונה לייצר אין סוף שורות של if/elif
  4. סידור פורמט התאריכים – בין אם הפיכה ממחרוזות ל-Timestamps ובין אם התאמת כל ה-Timestamps לאותו הפורמט
  5. מחיקת רשומות כפולות

 

ולסיכום,

ניקוי דאטה הוא חלק מהותי מאוד מתוך תהליך של עיבוד מקדים של הדאטה והוצאת פיצ'רים מתוך הדאטה הקיים (מה שנקרא Feature Extraction)  – ובעיניי, כנראה החלק החשוב ביותר, והמקדים לעיבוד המקדים – כי בסוף, לא משנה כמה התחכמוית דאטה נשלוף, בכמה טכניקות השלמת מידע חסר נשתמש וכמה נעשיר את הדאטה שלנו ממקורות חיצוניים, אם נגלה שהלקוח הטוב ביותר עבורנו הוא בן 159 – כאילו לא עשינו כלום (תחת ההנחה שאין קהילת אנשים בגילאי 159 שאוהבים לקנות את הדבר הזה שאתם מוכרים).

לסיכום, לפעמים נראה לנו שכל מה שאנחנו עושים זה ניקיון דאטה, מה שיכול להביא אותנו להתמרמר על מתכנני הדאטה בייס, מנהלי המוצר, הלקוחות וכל העולם ואחותו – אבל אם בווקאנדה מנקים דאטה, מי אנחנו שנדלג מעל זה?

Black Panther - data cleaning

ניקוי דאטה – משימה שגם מלכים עושים

 

Leave a Reply