רווחים:
- יכולת להגדיר צינור נתונים (איסוף, אימות, ניקוי, טרנספורמציה, פיצול, גרסאות) והצבת אימות סכימה בתחילת הצינור
- יכולת קבלת ערך חסר והחלטות תיוג על סמך משמעות וחלוקה בשטח למניעת זליגת נתונים (קבוצתית וזמנית)
- יכולת ליצור בסיס נתונים שניתן לשחזור על ידי תיקון גרסת הנתונים וזרע האקראיות
הכוח האמיתי של כל מערכת למידת מכונה טמון בנתונים, לא במודל. מהנדסים מנוסים יודעים: "זבל פנימה, זבל החוצה" - אפילו הדגם המתקדם ביותר שמוזן בנתונים גרועים יניב תוצאות רעות. ביחידה זו, אנו מקימים את צינור הנתונים (צנרת הנתונים: שרשרת השלבים שהופכת את הנתונים הגולמיים למוכנים לאימון מודל) מקצה לקצה ולומדים באיזה שלב בקו זה נוכל להשתמש בבטחה בבינה מלאכותית.
שלבים של קו נתונים
קו נתונים עובר בדרך כלל דרך התחנות הבאות:
- איסוף (בליעה): שליפת נתונים ממקורות (בסיס נתונים, API, קבצי יומן, זרמי אירועים).
- אימות: בדיקה האם הנתונים תואמים את הסכימה, הסוגים והטווחים הצפויים.
- ניקוי: טיפול בערכים חסרים, רשומות כפולות, חריגים וחוסר עקביות.
- טרנספורמציה: הפיכת נתונים גולמיים לתכונות - כגון המרת משתנה קטגורי למספר, הפקת "יום בשבוע" מתאריך.
- פיצול: הפרדה למערכות הדרכה, אימות ובדיקות.
- גירסאות: רישום איזה דגם הוכשר עם איזה נתונים.
בינה מלאכותית חוסכת זמן על ידי יצירת טיוטות קוד ורעיונות, במיוחד בשלבים 2, 3 ו-4. אבל החלטות כמו איזו רשומה לבטל, איזה ערך חסר למלא ואיך, שייכות למהנדס שמכיר את הנתונים; כי ניקוי לא נכון יכול להחדיר הטיה נסתרת לדגם.
אימות נתונים: הגנה מוקדמת על הקו
השגיאות היקרות ביותר מתחילות לא בייצור, אלא היכן שמדלגים על שלב האימות. אימות סכימה בודק אוטומטית אם כל אצווה של נתונים נכנסת תואמת את המבנה הצפוי. לדוגמה, האם עמודת הגיל היא בין 0-120, האם שדה האימייל ריק, האם מספר העמודות השתנה?
טיפ: שים את האימות בתחילת השורה. ככל שייתפסו נתונים מושחתים מוקדם יותר, כך יהיה זול יותר לתקן אותם. שגיאת סכימה שנתפסה בייצור יקרה פי כמה מזו שנתפסה בשלב ההדרכה.
כתוב סכימת אימות עם pandera (או Great Expectations) עבור סכימת הנתונים הבאה. עמודות וכללים:- user_id: integer, לא יכול להיות null, unique- age: integer, לא יכול להיות מ-0-120- signup_date: date, לא יכול להיות בעתיד- country: categorical, מתוך הסט {TR, DE, US, UK}- איזון: עשרוני, לא יכול להיות שלילי הפק הודעת שגיאה משמעותית עבור כל הפרת כלל. הצג את הבדיקה עם קו שבור לדוגמה בסוף הקוד.
ניקיון: האדם הוא זה שמחליט
ערכים חסרים הם המציאות של כל מערך נתונים. דרכי טיפול:
- מחיקה: ביטול שורה/עמודה עם שיעור חסר גבוה מאוד. אבל יש סיכון לאובדן מידע והטיה.
- זקיפה: זקיפה עם ממוצע, חציון, הערך השכיח ביותר או חיזוי מבוסס מודל.
- דגל: אחסון מידע "היה חסר" בעמודת דגל נפרדת - לפעמים החסר עצמו הוא האות.
איזה מהם נכון תלוי בבעיה. במערך נתונים רפואיים, יש לשמר את המידע "ערך הדם לא נמדד" ולא למחוק אותו; כי גם סירובו של הרופא לבצע מדידות הוא איתות. AI יכול לתת לך אפשרויות וקוד; אתה בוחר איזה מהם מתאים למציאות של התחום.
הנחיה חלשה / הנחיה חזקה
הנחיה חלשה: "מלא ערכים חסרים".
הנחיה חזקה: "חסרים ערכים בעמודות הבאות: הכנסה (12% חסר, התפלגות מוטה ימינה), last_login (30% חסר). הצע מילוי הכנסה בחציון, אך הסביר מדוע חציון ולא ממוצע. עבור last_login, נניח שהערך החסר עשוי להיות משמעותי (ייתכן שהמשתמש מעולם לא נכנס לחשבון); כתוב את הגישה של add_logging כדי ליצור את הגישה של never_login. הדגם".
הבדל: הנחיה חזקה נותנת מידע הפצה ומשמעות אזור; בינה מלאכותית מייצרת תמיכת החלטות במקום מילוי מכני.
תיוג: איכות נמדדת
בלמידה מפוקחת (למידה שבה ניתנות דוגמאות עם התשובות הנכונות), מה שהמודל לומד הם תוויות (תוויות: התשובה הנכונה לכל דוגמה). איכות התווית קובעת תקרה - אם אנשים מתייגים בצורה לא עקבית, המודל לומד בצורה לא עקבית.
הסכם בין-מציין מודד את הקצב שבו אנשים שונים נותנים את אותה תווית לאותו מדגם; זה מתבטא על ידי מקדם כמו קאפה של כהן. תאימות נמוכה מצביעה על כך שהמשימה לא ברורה או שההוראה חלשה.
בינה מלאכותית מסייעת בתיוג בשתי דרכים: (1) ניסוח ההנחיות להערות, (2) תיוג מראש ושאדם רק יתקן אותה. אבל לתיוג מראש עם LLM יש מלכודת: שגיאה שיטתית של המודל עלולה לדלוף לתוך כל סט התוויות. זו הסיבה שבני אדם תמיד בודקים חלק מהתוויות של LLM.
שימו לב: אל תחשבו בתוויות המיוצרות על ידי LLM כ"אמת קרקעית". בדוק דגימה עם אדם ומדוד התאמה של LLM-אנושית. אם התאימות נמוכה, תיוג מוקדם יעשה יותר נזק מתועלת.
מחיצת נתונים: מניעת דליפה
הטעות המסוכנת ביותר בעת פיצול נתונים לאימון/תיקוף/בדיקה היא דליפת נתונים: ערבוב של מידע מבחן לאימון. דוגמאות:
- הרישומים של אותו משתמש נופלים הן לאימון והן לבדיקות (דליפה קבוצתית).
- שימוש בעתיד באימונים ובעבר בבדיקות בסדרות זמן (דליפה זמנית).
- חישוב פרמטרים של קנה מידה (נורמליזציה) מכל הנתונים ולאחר מכן חלוקה.
פיצול זמני חיוני לבעיות הכרוכות בזמן: להתאמן עם העבר, לבדוק בעתיד. פיצול אקראי נותן יתרון "עתידי" שלעולם לא יקרה בייצור ומנפח את המדדים.
גירסאות נתונים ושחזור
"עם אילו נתונים אימנו את המודל הזה?" היכולת לענות על השאלה חודשים לאחר מכן היא סימן ההיכר של הנדסת ML רצינית. ניהול גרסאות נתונים מאחסן כל תמונת מצב של נתונים עם מזהה (hash או תג גרסה). כלים כגון DVC (Data Version Control) נתוני גרסאות כמו קוד.
כדי לשחזר את התוצאה של מודל, יש לתקן שלושה דברים: גרסת הנתונים, גרסת הקוד והזריעה האקראית. אי אפשר להגיד "קיבלתי את אותה תוצאה" בלי השלישייה הזו. נעמיק את יכולת השחזור ביחידה 11; אבל תיקון ה-Seed בצנרת הנתונים מתחיל מכאן.
שלושה מיני תיקים
מקרה 1 - אימות סכימת היום נשמר. כאשר צוות המיר שדה מחיר של מערכת במעלה הזרם מפרוטות ללירות, כל המחירים ירדו פי 100. אימות הסכמה דחה את האצווה כ"מחיר מחוץ לטווח" והמודל לא הוכשר עם נתונים פגומים. ללא אימות, השגיאה תובחן רק בהפקה, עם תחזיות שגויות.
מקרה 2 - הטיה של מילוי שגוי. במודל אשראי, ערכי הכנסה חסרים מולאו בממוצע. אבל ההכנסות החסרות היו בעיקר בקבוצת ההכנסה הנמוכה; הממוצע "העשיר" באופן מלאכותי את הקבוצה הזו, והמודל הציע להם גבול גבוה באופן לא הוגן. תיקן את הבעיה עם דגל חציון + חסר.
מקרה 3 - דליפה זמנית. מודל חיזוי ביקוש נראה נהדר במערך המבחן (95% דיוק) אבל התרסק בייצור. למה: בגלל פיצול אקראי, המודל ראה את העתיד. המעבר ל-binning זמני הוריד את דיוק הבדיקה ל-78% - אבל זה היה ביצועים אמיתיים ושמר אותו בייצור.
תבניות הניתנות להעתקה
פצל את מערך הנתונים הבא לשלוש קבוצות: אימון/תיקוף/בדיקה. אילוץ: זוהי סדרת זמן; השתמש בפיצול TEMPORAL (תאמן בעבר, בדוק בעתיד). מניעת דליפת אצווה: יש את אותו `customer_id` רק באשכול אחד. חשב את פרמטרי קנה המידה רק מתוך ערכת האימונים, ולאחר מכן החל על כולם. הדפיסו כמה שורות נותרו בקוד בכל שלב והוסיפו טענה שבודקת שאין דליפות.
כתוב טיוטת הנחיות להערות עבור משימת תיוג זו. משימה: [למשל. תיוג ביקורת לקוחות חיובית/שלילית/נייטרלית]הבהרת מקרים גבוליים: סרקזם, רגשות מעורבים, כיצד לתייג ביקורת שאינה קשורה למוצר? תן 5 דוגמאות ו-3 מקרים קשים שיגדילו את העקביות בין המתגים.
הפק רשימת תיוג לשחזור עבור צינור נתונים זה:- כיצד יש לתקן את גרסת הנתונים?- אילו זרעי אקראיות יש להגדיר היכן?- אילו מטא נתונים (hash נתונים, ספירת שורות, תאריך) יש לרשום? בסיס הקוד שלי: [שפה/ספרייה]
בדוק את קוד הניקוי הזה לאיתור דליפת נתונים. תסתכל ספציפית על זה: האם פרמטרי קנה המידה/קידוד מחושבים לפני הפיצול? האם נתונים סטטיסטיים מחושבים מכל הנתונים או רק מאימונים? קוד: [קוד]
טבלת החלטות: אסטרטגיית ערך חסרה
סטטוס
גישה מומלצת
למה
התפלגות מספרית, מוטה
למלא בחציון
הממוצע מושפע מחריגים
מספרי, סימטרי
למלא בממוצע
מגן על מידע
החסר עשוי להיות משמעותי
עמודת דגל + מילוי
חוסר הוא אות
שיעור חסר > 60%
הערכת/בטל עמודה
רעש זה יותר מדי
קטגורי
קטגוריית "לא ידוע".
לא יוצר רוב מלאכותי
טעויות נפוצות
- דילוג על אימות. ללא בקרת סכימה, נתונים פגומים חומקים פנימה בשקט.
- קנה מידה לפני פיצול. זה מדליף סטטיסטיקות מבחנים לחינוך.
- שימוש בפיצול אקראי בסדרות זמן. זה מייצר מדדים גבוהים מזויפים.
- סומך באופן עיוור על תוויות LLM. שגיאה שיטתית מתפשטת בכל הנתונים.
- לא שומרת את גרסת הנתונים. אתה לא יכול לשחזר את התוצאה.
- מילוי מכני עם ממוצע. זה מתעלם ממשמעות השדה, מוסיף הטיה.
לסיכום
צינור הנתונים הוא הבסיס של מערכת ה-ML וראוי למאמץ רב יותר מהמודל. שים את האימות בראש; לקבל החלטות ניקוי ותיוג עם ידע בתחום; למנוע דליפה (קבוצתית וזמנית) בתא; תקן את גרסת הנתונים וה-Seed. בינה מלאכותית מייצרת קוד ורעיונות בקו הזה, אבל זה תלוי בך להחליט אילו נתונים לעבד ואיך - כי כל החלטה שגויה כאן עוברת למודל כפגם נסתר.
משימת יישום
כתוב סכימת אימות (pandera/Great Expectations) על מערך הנתונים שלך והוסף בכוונה שורה גרועה והראה שהיא נתפסה. לאחר מכן פצל את הנתונים באופן זמני או אצווה, חשב פרמטרי קנה מידה מאימון בלבד, וודא שאין דליפה באמצעות טענה. כתוב את גרסת הנתונים וספירת השורות לקובץ מטא נתונים.
רשימת בדיקה
- [ ] אימות סכימה פועל בראש השורה.
- [ ] בחרתי באסטרטגיית הערך החסר בהתבסס על משמעות השדה, לא מילאתי אותה בצורה מכנית.
- [ ] מדדתי את איכות התווית (תאימות); אני בדקתי תגיות LLM.
- [ ] מנעתי דליפה קבוצתית וזמנית בחלונית.
- [ ] קנה מידה/קידוד מחושב ממערכת ההדרכה בלבד.
- [ ] גרסת נתונים, מספר שורות וסיד שנרשמו.