close menu

למה מערכות לומדות לא עובדות במציאות?

מערכות לומדות "בקושי עובדות עולם האמיתי" – האידיוט מהביזנס, et al.
כולנו שמענו את האמירה הזו כמה וכמה פעמים.

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

ולמרות שאלו המתעסקים במערכות לומדות אנו בדרך כלל מתייחסים לאמירות כאלו כהפשטה, בורות, חוסר ניסיון (וגם חוסר מקצועיות),
מערכות לומדות כן כושלות לעיתים תכופות יותר בעולם האמיתי.
וכן מגיעות לתוצאות לא אופטימליות בהשוואה לתנאי המעבדה.
אבל למה?
זה לא בגלל שהמודלים מסובכים מדי, לדאטהסטים שלנו אין מספיק נתונים, או שאנחנו פשוט צריכים יותר GPUs. [ואנחנו צריכים]
ואם עשינו הכל נכון?
אם עשינו הכל נכון מבחינת הוולידציה, הסיבה העיקרית לבעיות אלו היא "הטיית חשיפה".
הבעיה:
אתם משפיעים על הדאטה
לפעמים גם כשאתם חושבים שלא
מערכות לומדות רגישות מאוד לאופן איסוף הנתונים.
בעולם האמיתי, נתונים הנאספים למטרות עסקיות לפעמים נאספים ממקורות דינאמים כגון התנהגות משתמשים או קמפיין פרסום ומקורות אלו מכילים בהרבה מהמקרים הטיה אינהרנטית.
או במילים פשוטות: בעיית ה"אתם משפיעים על העתיד".

מה היא הטיית חשיפה? (Exposure Bias)
הטיית חשיפה נובעת מהנחה נסתרת שאנחנו לוקחים בחשבון כשאנחנו מאמנים מודלים על דאטהסט מסוים: הנחה זו קובעת שהנתונים שנאספים חסרים באופן אקראי, במקרים שתיארנו הנחה זו לא מתקיימת והנתונים הנאספים "חסרים" לפי דפוס כלשהו הנגזר מחשיפות קודמות (מחוץ למערכת).
שימו לב, לא מדובר על NaN או ערכים חסרים – מדובר על נתונים חסרים: "שורות שלמות" שלא נקבל בדאטהסט [ולכן גם לא "נעלה עליהן" עם EDA, ויזואליזציות, מחקר ובטח שלא עם המודל].
הטיית החשיפה יוצרת הטיה גם בתהליך האימון ויש לה השלכות פוטנציאליות בכמעט כל הבעיות אותן ניתן לפתור עם מערכות לומדות.
ניקח לדוגמה: מערכות המלצה.
במערכות המלצה, לעתים אנו מסתמכים על איסוף נתונים מאינטראקציה עם ה משתמשים (כי אנחנו ממליצים להם). משתמש מבקר באתר ומקיים אינטראקציה עם פריטים שונים, ובכך משאיר לנו אינפורמציה לגבי הפריטים שאותם אהב (או לא אהב).
אבל מה עם הפריטים שהוא בכלל לא ראה ולא היה מודע לקיומם? אותם הוא אהב?
במקרים רבים, לאחר האינטרקציה אנו מחמירים את הבעיה וגם ממליצים על פריט מסוים למשתמש זה על סמך אותה האינפורמציה החסרה שנאספה.
ולסיכום: האינטראקציות של המשתמשים תלויות במידה רבה בחשיפות קודמות של אותם המשתמשים לפריטים מסוימים – משתמש לא יכול לקיים אינטראקציה עם פריט אם לא נחשף לאותו הפרט מלכתחילה.
אז נתוני הפריטים אותם למשתמש "לא יוצא לראות" (המשתמש אפילו לא יודע עליהם) יחסרו מהדאטהסט באופן לא אקראי (כי למשתמש יש העדפות).
ובמה זה שונה ממה שאנחנו "בדרך כלל" עושים?
סביבה זו שונה משמעותית מSupervised Learning קלאסי אותו אנו מכירים בכך מכייון שבSupervised Learning אנו מניחים שאנו יכולים לשלוט ברוב ההנחות שלנו לגבי משתנה המטרה. (נתונים מאוזנים, תיוג נכון, דוגמאות מתפלגות iid..)
אבל בסביבה זו: הנתונים עצמם נוצרים באופן חלקי והם מוטים על ידי החשיפה הקודמת של המשתמש וזה פוגע ברוב ההנחות הקלאסיות של Supervised Learning.
הסבר: משתמש אינו יכול לקיים אינטראקציה עם פריט כלשהו מבלי לראות אותו קודם -> נתוני המשתמשים שנאספו תלויים בחשיפה הקודמת של אותם המשתמשים לחלק מהפריטים.
אבל מה ה-בעיה?
הטיה זו מטה את המטריקות שאנו משתמשים בהן על מנת להעריך את ביצועי המודל (ובאותה מידה גם את הלוס של המודל).
במצב זה אנחנו כבר לא יכולים לסמוך על כך שהלוס שחישבנו אינו מוטה ומכאן שהוא יגרום למודל להתנהג בצורה מוטה שתבוא לידי ביטוי גם בעולם האמיתי.
כי בעולם האמיתי, אנו לפעמים מקבלים משתמשים שונים לגמרי מאלו שהיו באימון – לא בגלל שהמודל שלנו "גרוע" ולא הצלחנו ללמוד אותם, אלא פשוט בגלל שהמשתמש החדש פשוט נחשף לפריטים מסוימים רק בסט הבדיקה ואותה התופעה שאותה ניסינו ללכוד (העדפת המשתמש) מעולם לא באה לידי ביטוי בסט האימון.
משתמש הטסט הוא משתמש מסוג שונה מאשר המשתמש בסט האימון. יש לכך השלכות מרחיקות לכת על התוצאות שאותן נקבל ממודלים הלמדו ממשתמשים אלו.
מאמר טוב על הנושא ניתן למצוא כאן: https://arxiv.org/abs/1602.05352
פתרונות?
בעיה זו קשה ביותר והיא דורשת הרבה הנחות והבנה עמוקה של עולם הבעיה.
בזמן האימון – אפשר לנסות ולהפחית את השפעת ההטיה על ידי שימוש בטכניקות דגימה וולידציה המתאימות במיוחד לעולם הבעיה.
בזמן ההפעלה – כדאי להסתכל על טכניקות כמו: importance sampling, stratified sampling, negative sampling.
אבל בסוף, בזמן הטסט איך אנחנו יודעים שחוסר המלצתנו על פריט מסוים למשתמש מסוים הוא נכון בלי להציג אותו למשתמש קודם?
מה עושים בעולם האמיתי:
האמת, בחיים האמיתיים אפשר לפתור את הבעיה הזו בקלות: בדיקות A/B משמשות בעולם האמיתי בפתרון בעיה זו (גם מפן ההמלצה למשתמשים וגם מצד בדיקות המודלים) וכדי לאמוד את הביצועים של מודלים חדשים במציאות.
אבל בפוסט זה הינו רוצים לפתור את הנושא הזה ברמת הדאטה ולא ברמה העסקית.
כי אז נאלץ להודות שהביזנס צדק והאופציה הזו לא על השולחן.
ברמת הדאטה הינו רוצים לקבל איזשהו מדד להערכה לא מקוונת

(גם אם מדד לא מושלם)

מכיוון שאיננו יכולים "לחשוף" את המשתמשים בזמן האימון ליותר פריטים: נחשוף אותם ל"פחות" פריטים בזמן האימון: טריקים מסוג זה לצורך הערכה Offline הם לא פשוטים כי אנחנו לא תמיד לא באמת נדע אם אנחנו יוצרים הטיה חדשה לכיוון השני.
כל זאת ועוד בפוסט ההמשך:
"שיטות וולידציה לסדרות זמן שכלום לא באמת עובד בהן"
רוצים לקרוא עוד על בעיה זו?
מאמרים רבים נכתבו על בעיה זו ומציעים טכניקות מדידה שיכולות לעזור:
עוד בנושא: