שיטות מומלצות ליצירת נתוני אימון בפורמט טבלאי

נתונים שמעוצבים היטב משפרים את האיכות של מודל הלמידה הממוחשבת שמתקבל. ההנחיות שבדף הזה יעזרו לכם לשפר את האיכות של נתוני האימון והמודל.

הנושאים שמוסברים במאמר הזה:

שיטות מומלצות לכל המודלים של נתונים טבלאיים

השיטות המומלצות הבאות רלוונטיות גם אם יוצרים מודל AutoML וגם אם יוצרים מודל שאומן בהתאמה אישית ומשתמש בנתונים טבלאיים.

מניעת דליפת נתונים

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

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

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

איך להימנע מ-training-serving skew

הטיה בין אימון להצגה מתרחשת כשיוצרים את נתוני האימון באופן שונה מזה שבו יוצרים את הנתונים שמשמשים לבקשת מסקנות.

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

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

הטיה בין אימון להצגה והתפלגות נתונים

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

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

בנוסף, ההבדל בין נתוני הייצור לבין נתוני האימון צריך לבוא לידי ביטוי בהבדל בין פיצול נתוני האימות לבין פיצול נתוני האימון, ובין פיצול נתוני הבדיקה לבין פיצול נתוני האימות.

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

באופן דומה, אם רוצים שהמודל יותאם כדי להסיק מסקנות כלליות לגבי משתמשים חדשים, צריך לוודא שנתונים ממשתמש ספציפי כלולים רק בחלק אחד של נתוני האימון. לדוגמה, כל השורות שקשורות ל-user1 נמצאות בפיצול של נתוני האימון, כל השורות שקשורות ל-user2 נמצאות בפיצול של נתוני האימות, וכל השורות שקשורות ל-user3 נמצאות בפיצול של נתוני הבדיקה.

הוספת אות זמן

במקרה של מודלים של סיווג ורגרסיה, אם סביר שהדפוס הבסיסי בנתונים ישתנה עם הזמן (הוא לא מפוזר באופן אקראי לאורך זמן), צריך לספק את המידע הזה ל-Agent Platform. יש כמה דרכים לספק אות זמן:

  • אם לכל שורת נתונים יש חותמת זמן, צריך לוודא שהעמודה הזו נכללת, שסוג ההמרה שלה הוא Timestamp ושהיא מוגדרת כעמודה Time כשמאמנים את המודל. הסדר הזה משמש לפיצול הנתונים, כשהנתונים העדכניים ביותר הם נתוני הבדיקה והנתונים המוקדמים ביותר הם נתוני האימון. מידע נוסף

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

  • אם פרטי הזמן לא מופיעים בעמודה אחת, אפשר להשתמש בפיצול נתונים ידני כדי להשתמש בנתונים העדכניים ביותר כנתוני הבדיקה, ובנתונים המוקדמים ביותר כנתוני האימון.

הפיכת המידע לברור במקומות שבהם צריך

בחלק מהפרימיטיבים של הנתונים, אפשר לשפר את איכות המודל באמצעות תכנון תכונות.

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

חלק מסוגי הנתונים שעשויים לדרוש הנדסת תכונות:

  • קו אורך/קו רוחב
  • כתובות URL
  • כתובות IP
  • כתובות אימייל
  • מספרי טלפון
  • קודים גיאוגרפיים אחרים (לדוגמה, מיקודים)

הכללת נתונים מחושבים או מצטברים בשורה

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

לדוגמה, אם רוצים לחזות את הביקוש למוצר בשבוע הבא, אפשר לשפר את איכות ההסקה על ידי הכללת עמודות עם הערכים הבאים:

  • המספר הכולל של פריטים במלאי מאותה קטגוריה של המוצר.
  • המחיר הממוצע של פריטים במלאי מאותה קטגוריה של המוצר.
  • מספר הימים לפני חג ידוע שבו מתבצעת הבקשה להסקת מסקנות.

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

  • שיעור ההמרה או שיעור הקליקים ההיסטוריים הממוצעים של המשתמש הספציפי.
  • מספר המוצרים שנמצאים כרגע בעגלת הקניות של המשתמש.

הימנעות מהטיה

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

שיטות מומלצות לשימוש במודלים של AutoML בפורמט טבלאי

השיטות המומלצות הבאות מתייחסות ליצירת נתוני אימון בפורמט טבלאי עבור מודלים טבלאיים של AutoML.

ייצוג נכון של ערכי null

אם מייבאים מ-CSV, צריך להשתמש במחרוזות ריקות כדי לייצג ערכי null. מ-BigQuery, משתמשים בערך NULL.

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

כדאי להימנע ככל האפשר מציון ערכים חסרים

בודקים אם חסרים ערכים בנתונים ומתקנים אותם אם אפשר. אחרת, אפשר להשאיר את הערך ריק, והוא ייחשב כערך null.

שימוש ברווחים כדי להפריד בין הטקסטים

Agent Platform מבצעת טוקניזציה של מחרוזות טקסט ויכולה להפיק אותות אימון ממילים בודדות. הוא משתמש ברווחים כדי להפריד בין מילים. מילים שמופרדות על ידי תווים אחרים נחשבות לישות אחת.

לדוגמה, אם תספקו את הטקסט 'אדום/ירוק/כחול', הוא לא יפורק לטוקנים 'אדום', 'ירוק' ו'כחול'. אם המילים הבודדות האלה חשובות לאימון המודל, צריך להפוך את הטקסט ל-"red green blue" לפני שכוללים אותו בנתוני האימון.

חשוב לוודא שהתכונות הקטגוריות מדויקות ונקיות

חוסר עקביות בנתונים עלול לגרום לפיצול שגוי של קטגוריות. לדוגמה, אם הנתונים שלכם כוללים את הערכים Brown ו-brown, Agent Platform משתמשת בערכים האלה כקטגוריות נפרדות, למרות שאולי התכוונתם שהם יהיו זהים. טעויות איות יכולות להשפיע באופן דומה. לפני שיוצרים את נתוני האימון, חשוב להסיר את אי-ההתאמות האלה מהנתונים הקטגוריים.

שימוש זהיר במיוחד בכיתות לא מאוזנות במודלים של סיווג

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

מספקים מספיק נתוני אימון עבור המחלקה המיעוטית

אם יש מעט מדי שורות נתונים לסיווג מסוים, איכות המודל נפגעת. אם אפשר, כדאי לספק לפחות 100 שורות נתונים לכל סוג אחסון.

כדאי להשתמש בחלוקה ידנית

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

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

ציון מספיק נתוני אימון

אם לא מספקים מספיק נתונים לאימון, יכול להיות שהמודל שיתקבל לא יפעל בצורה טובה. ככל שמשתמשים ביותר עמודות כדי לאמן את המודל, צריך לספק יותר נתונים.

מערך הנתונים חייב לכלול תמיד לפחות 1,000 שורות.

בטבלה הבאה מפורטים כמה כללי אצבע לגבי כמות נתוני האימון שצריך לספק, בהתאם למטרה שלכם.

מטרה הכמות המינימלית המומלצת של נתוני אימון
סיווג לפחות פי 10 יותר שורות ממספר העמודות.
תחזיות לפחות 10 סדרות זמן לכל עמודה שמשמשת לאימון המודל.
רגרסיה לפחות פי 50 יותר שורות ממספר העמודות.

כל שאר הפעולות של עיבוד מקדים והמרות מתבצעות ב-Agent Platform

אלא אם צוין אחרת, כדאי לאפשר ל-Agent Platform לבצע את הנדסת התכונות בשבילכם כשמאמנים מודל AutoML. השימוש ב-AutoML הכי יעיל כשיש לו גישה לנתונים הבסיסיים שלכם. רשימה של כל השינויים ש-AutoML מבצע לפי סוג השינוי זמינה במאמר בנושא שינויים בפלטפורמת הסוכן.

שיטות מומלצות למודלים של תחזיות טבלאיות

יש כמה דברים חשובים שצריך לזכור לגבי נתוני אימון של מודלים לחיזוי.

שיקולים לבחירת רמת הפירוט של הנתונים

כשמאמנים מודל חיזוי, מציינים את רמת הפירוט של הנתונים, או את מרווח הזמן בין השורות של נתוני האימון. התדירות יכולה להיות שעתית, יומית, שבועית, חודשית או שנתית. בנוסף, אפשר להגדיר את התזכורת לכל דקה, 5 דקות, 10 דקות, 15 דקות או 30 דקות.

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

בדרך כלל, רמת הפירוט של הנתונים נקבעת לפי שיטות איסוף הנתונים שלכם.

איך מוצאים ערך טוב לחלון ההקשר

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

כדי למצוא ערך טוב לנתונים שלכם, אפשר לנסות את השלבים הבאים:

  1. באיטרציה הראשונה של ההדרכה, מגדירים את חלון ההקשר ואת אופק התחזית לאותו ערך, ומגדירים את תקציב ההדרכה ל-6 שעות לפחות.

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

  3. אם מדדי ההערכה של המודל השני מראים שיפור משמעותי, מאמנים את המודל שוב ומגדילים את חלון ההקשר פי 5 מגודל אופק התחזית. כדאי להגדיל באופן יחסי את תקציב ההדרכה (אם תקציב ההדרכה היה 10 שעות בשלב הראשון, כדאי להגדיל אותו ל-50 שעות).

  4. ממשיכים להגדיל את חלון ההקשר עד שמדדי ההערכה לא משתפרים יותר או עד שאתם מרוצים מהתוצאות. חוזרים לערך הנמוך ביותר של חלון ההקשר שהניב תוצאות מקובלות.

להגדלת חלון ההקשר יש את ההשפעות הבאות:

  • הגדלת זמן האימון

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

  • הגדלת כמות ההיסטוריה הנדרשת לנתוני הסקה

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

שיטות מומלצות לפורמט נתונים

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

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

הנה דוגמה (פשוטה ומקוצרת) לנתוני אימון:

תאריך Widget_1_Demand Widget_2_Demand Widget_3_Demand מבצע אזור
01/01/2019 112 241 0 0 CA
01/02/2019 141 219 0 1 CA
01/03/2019 149 244 0 0 CA
01/01/2019 52 0 43 0 IL
01/02/2019 81 0 26 1 IL
01/03/2019 89 0 86 0 IL

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

אפשר להמיר את הטבלה הזו לפורמט הבא:

תאריך מוצר Region_CA_Demand Region_IL_Demand מבצע
01/01/2019 Widget_1 112 52 0
01/02/2019 Widget_1 141 81 1
01/03/2019 Widget_1 149 89 0
01/01/2019 Widget_2 241 0 0
01/02/2019 Widget_2 219 0 1
01/03/2019 Widget_2 244 0 0
01/01/2019 Widget_3 0 43 0
01/02/2019 Widget_3 0 26 1
01/03/2019 Widget_3 0 86 0

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

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

תאריך ביקוש מזהה מבצע
01/01/2019 112 Widget_1_CA 0
01/02/2019 141 Widget_1_CA 1
01/03/2019 149 Widget_1_CA 0
01/01/2019 52 Widget_1_IL 0
01/02/2019 81 Widget_1_IL 1
01/03/2019 89 Widget_1_IL 0
01/01/2019 241 Widget_2_CA 0
01/02/2019 219 Widget_2_CA 1
01/03/2019 244 Widget_2_CA 0
01/01/2019 0 Widget_2_IL 0
01/02/2019 0 Widget_2_IL 1
01/03/2019 0 Widget_2_IL 0
01/01/2019 0 Widget_3_CA 0
01/02/2019 0 Widget_3_CA 1
01/03/2019 0 Widget_3_CA 0
01/01/2019 43 Widget_3_IL 0
01/02/2019 26 Widget_3_IL 1
01/03/2019 86 Widget_3_IL 0

עכשיו יש לנו מזהה של סדרת זמן (ID), עמודת יעד (ביקוש) ועמודת זמן (תאריך). בנוסף, כל שורה מבוססת על תצפית אחת, שאפשר להשתמש בה כדי לחזות את ערך היעד. העמודה Promo משמשת כמאפיין לאימון המודל.

בפועל, יהיו לכם הרבה יותר שורות והרבה יותר עמודות מאשר בדוגמאות האלה. אבל אתם צריכים לפעול לפי ההנחיות שבהמשך כדי לבנות את הנתונים בצורה שתמנע דליפת נתונים.

המאמרים הבאים