רווחים:
- יכולת להגדיר את סוג הבעיה (סיווג, רגרסיה, אשכול) וקריטריונים להצלחה בהתאם לעלות האמיתית של המשרה
- יכולת לחלק את הנתונים בצורה כנה (מבלי לגעת במערך הבדיקה; כרונולוגית בסדרת הזמן) ולקבוע בסיס הערכה נטול דליפות
- יכולת לבחור מודל בר פרשנות על ידי התחלת קו בסיס פשוט והוספת מורכבות רק כאשר היא ראויה לכך.
עד כה אספנו נתונים, ניקינו אותם, חקרנו אותם ויצרנו תכונות. עכשיו אנחנו מגיעים לעבודה האמיתית, בניית מודל. מודל הוא מבנה מתמטי שלומד דפוס מנתונים ומייצר תחזיות למצבים חדשים. אבל החלק הקריטי ביותר בבניית מודל הוא לא הקוד עצמו, אלא שתי ההחלטות הקודמות לו: הגדרת הבעיה הנכונה ופיצול הנתונים בצורה נכונה. AI הוא יועץ רב עוצמה בבחירת אלגוריתמים, כתיבת קוד וכוונון פרמטרים; אבל זה תלוי באדם אחד להחליט מה לחזות ומה המשמעות של הצלחה. בעיה לא מוגדרת לא תעבוד אפילו עם מודל כתוב בצורה מושלמת.
ראשית הגדרת הבעיה: מה אנו צופים
כל עבודת דוגמנות מתחילה בשאלה, ושאלה זו קובעת את סוג הדגם. סיווג - הפלט הוא קטגוריה: "האם הלקוח הזה יעזוב או יישאר?", "האם העסקה הזו מזויפת?". רגרסיה (באנגלית רגרסיה - הפלט הוא מספר): "כמה שווה הבית הזה?", "כמה הזמנות יגיעו בחודש הבא?". אשכולות (חלוקת נתונים ללא תווית לקבוצות טבעיות): "לכמה מקטעים טבעיים מחולקים הלקוחות שלי?".
החלק השני של הצהרת הבעיה הוא קריטריון ההצלחה: מה המשמעות של המודל הזה להיות "טוב"? במודל הונאה, החמצה של רמאי היא הרבה יותר יקרה מחסימת לקוח ישר בטעות; לכן, לא "דיוק כללי" אלא "שיעור תפיסת הרמאים" בא לידי ביטוי. אם לא תגדירו את הקריטריון הזה מלכתחילה, יחד עם בעל העסק, תקבלו מודל "מאוד מדויק" שלא עובד (נעמיק במדדים ביחידה 7).
זהירות: "דיוק" יכול להטעות. אם 10 מתוך 1000 עסקאות הן הונאה, מודל מטופש שאומר "אף אחד אינו הונאה" ייתן דיוק של 99% אך לא יתפוס אפילו רמאי אחד. בחר קריטריונים להצלחה על סמך העלות האמיתית של הבעיה.
פיצול הדרכה/מבחן: בחינה כנה של הדגם
בדיקת מודל עם הנתונים שלמד זה כמו לשאול את התלמיד/ה את אותן שאלות שהוא/היא למד בבחינה; הוא מקבל ציונים גבוהים אבל לא מראה את מה שהוא באמת יודע. אז אנחנו מחלקים את הנתונים לשניים (לעיתים קרובות שלושה):
- סט אימונים (ערכת אימונים באנגלית, בדרך כלל 70-80%): המודל לומד על כך.
- סט מבחן (סט מבחן, בדרך כלל 20-30%): הדגם לא רואה זאת כלל; ביצועים אמיתיים נמדדים כאן.
- ערכת אימות: ערכת ביניים המשמשת להגדרת המודל (איזה פרמטר עדיף); כדי לשמור על ערכת הבדיקה "נקיה".
הכלל הבסיסי ביותר: בסט המבחן לעולם לא נוגעים במהלך האימון. קנה מידה, קידוד, בחירת תכונה - כולם פשוט נלמדים ממערכת ההדרכה, ואז מיושמים לבדיקה (עקרון הדליפה מיחידה 5). ערכת המבחן היא הפעם הראשונה שבה הדוגמנית רואה את העולם האמיתי; אם תפעיל אותו מוקדם מדי, לעולם לא תדע את הביצועים האמיתיים.
חריג סדרת זמן: אם הנתונים שלך תלויים בזמן (מכירות, שוק מניות, ביקוש), פיצול אקראי לא נעשה. מכיוון שפיצול אקראי גורם למודל לראות את העתיד ולחזות את העבר - זו דליפה. במקום זאת, חלקו כרונולוגית: התאמן עם התקופה הישנה, בדוק עם התקופה החדשה.
בחירת אלגוריתם: מפשוט למורכב
הטעות הנפוצה ביותר של מתחילים היא להתחיל עם הדגם המורכב ביותר. הגישה הנכונה היא הפוכה: תחילה קבע קו בסיס פשוט. "לנחש תמיד את מעמד הרוב" בסיווג; "העריך תמיד את הממוצע" ברגרסיה. המודל המטופש הזה נותן קו בסיס; אם הדגם האמיתי שלך לא יכול לעבור את זה, יש בעיה. לאחר מכן עברו למודלים פשוטים וניתנים לפירוש.
דגם
סוג הבעיה
נקודה חזקה
חולשה
קו בסיס (רוב/ממוצע)
שניהם
נותן אמת מידה
לא לומד
רגרסיה לוגיסטית
סיווג
פשוט, ניתן לפירוש
קשר ליניארי בלבד
רגרסיה לינארית
רגרסיה
פשוט, מהיר
הנחה לינארית
עץ ההחלטות
שניהם
ניתן לפרש
שינון קל
יער אקראי
שניהם
חזק, עמיד
פחות פרשנות
הגברת שיפוע (XGBoost וכו')
שניהם
חזק מאוד
קשה להתאים, סיכון לשינון
כלל: בחר את הדגם הפשוט ביותר "מספיק טוב". פרשנות חשובה יותר מכוח ברוב ההקשרים העסקיים; עדיף להסביר דחיית הלוואה "כי יחס החוב להכנסה שלך גבוה" מאשר "כי הקופסה השחורה אמרה זאת".
שלושה מיני תיקים
מקרה 1 - הגדרת בעיה שגויה. צוות בנה מודל סיווג המבוסס על "האם הלקוח מרוצה" אך בחר ב"דיוק" כקריטריון ההצלחה. בנתונים 88% מהלקוחות היו מרוצים; המודל קיבל דיוק של 88% בכך שכינה את כולם "מרוצים" ומעולם לא תפס את האנשים הלא מרוצים - למרות שהמטרה האמיתית הייתה למצוא אותם. שיעור: בחר קריטריונים להצלחה על סמך מטרה אמיתית.
מקרה 2 - דליפת זמן בתא. בפרויקט של חיזוי ביקוש, הנתונים פוצלו באופן אקראי. הדגם נתן דיוק של 93% אבל התרסק בייצור כי באימון הוא חזה את ינואר, ואז נובמבר, עם נתוני דצמבר - הוא ראה את העתיד. כאשר עברנו לחלוקה כרונולוגית, הביצועים בפועל עלו ל-74%. שיעור: חלוקה כרונולוגית בסדרות זמן.
מקרה 3 - מורכבות מיותרת. אנליסט אחד התחיל ישירות עם רשת עצבית עמוקה, כיוונן אותה במשך שבועות וקיבל דיוק של 81%. ואז עמית קיבל 80% עם 20 שורות של רגרסיה לוגיסטית - הרבה יותר מהיר, ניתן לפירוש וקל יותר לתחזוקה. לקח: התחל עם קו בסיס ומודל פשוט, הוסף מורכבות כשזה ראוי לכך.
ארבע תבניות הניתנות להעתקה
1) הבהרת הגדרת הבעיה:
תפקידך: יועץ דוגמנות. עזור לי להגדיר את התפקיד הזה: "אני רוצה להפחית את נטישת הלקוחות." שאלו אותי והבהירו: (1) האם מדובר בסיווג או רגרסיה, (2) מהו בדיוק משתנה היעד וכיצד יש להגדיר אותו, (3) מה צריכים להיות קריטריוני ההצלחה ומדוע. ההחלטה היא שלי; אתה מציג את השאלות והאפשרויות.
2) תא אימון/בדיקה בטוח:
חלק את ה-DF שלי לאימון/בדיקות 80%/20%. שמור על התפלגות מחלקות (שכבתי).random_state=42. זו לא סדרת זמן (תצפיות עצמאיות). הדפס את יחס הכיתה של כל סט לאחר החלוקה. פשוט תן את קוד הפיצול לקבוצת הבדיקות מבלי להחיל שום טרנספורמציה.
3) חלוקה כרונולוגית של סדרות זמן:
הנתונים תלויים בזמן (עמודת תאריך: order_date). לא אקראי, חלק כרונולוגית: 80% האימונים הוותיקים ביותר, 20% הבדיקות החדשות ביותר. הדפס את טווחי תאריכי ההדרכה והבדיקות כדי שאוכל לוודא שהעתיד לא דלף.
4) הגדרת קו בסיס:
יש לי בעיית סיווג (יעד: נטישה 0/1). ראשית קבע קו בסיס: מדוד את דיוק האימון/בדיקה עם DummyClassifier, שתמיד מנבא את שיעור הרוב. לאחר מכן אמנו רגרסיה לוגיסטית פשוטה והשוו אם היא מנצחת את קו הבסיס. הצג את המדדים של השניים זה לצד זה.
הנחיה חלשה / הנחיה חזקה
הנחיה חלשה:
בנה את המודל הטוב ביותר עם הנתונים האלה.
"הטוב ביותר" אינו מוגדר; אין סוג בעיה, אין מטרה, אין קריטריונים להצלחה ואין אסטרטגיית חלוקה. ה-AI מייצר דפוס אקראי, אולי דולף.
הנחיה עוצמתית:
תפקידך: עוזר דוגמנות. בעיה: סיווג, יעד "נטישה" (0/1), יש חוסר איזון בכיתה (~12% נטישה). קריטריון הצלחה: החזרת מי שמתנתקים היא בראש סדר העדיפויות. תצפית בלתי תלויה בנתונים (לא סדרות זמן). משימה: (1) פיצול שכבות של 80/20%, (2) קו בסיס DummyClassifier, (3) רגרסיה לוגיסטית, כל הטרנספורמציות בצנרת ונלמד רק מהדרכה. אל תיגע בערכת הבדיקה לפני הפיצול.
כאן ברורים סוג הבעיה, חוסר האיזון, הקריטריון ומדד הדליפה.
טעויות נפוצות
- לא בוחרים את קריטריוני ההצלחה לפי המטרה האמיתית. "דיוק" בנתונים לא מאוזנים מטעה; אם אתה רוצה ללכוד את מעמד המיעוט, היזכרות באה לידי ביטוי.
- נגיעה במערך המבחן במהלך האימון. ביצוע קנה מידה/קידוד לפני הפיצול דולף ומסתיר ביצועים אמיתיים.
- פיצול אקראי בסדרות זמן. הדגם רואה את העתיד, קורס בייצור; חלוקה כרונולוגית היא חיונית.
- קפיצה למודל מורכב מבלי לבסס קו בסיס. בלי אמות מידה אתה לא יכול לדעת אם דגם באמת טוב או לא.
- התעלמות מפרשנות. בהחלטות עסקיות, מודל פשוט שניתן להסביר הוא לרוב בעל ערך רב יותר מקופסה שחורה.
טיפ: לפני שתתחיל לבנות מודל, כתוב משפט אחד: "מודל זה ינבא _____, הצלחתו תימדד במדד _____, כי העלות האמיתית של העבודה היא _____." אם אינך יכול למלא את המשפט הזה, אתה עדיין לא מוכן לכתוב קוד.
לסיכום
החלק הקריטי ביותר בבניית מודל הוא לא הקוד, אלא ההחלטות שלפניו: הגדרת הבעיה הנכונה (סיווג או רגרסיה, מה המטרה, מהו קריטריון ההצלחה) ופיצול הנתונים בצורה הוגנת (מבלי לגעת במערך המבחנים; כרונולוגי בסדרת הזמן). התחל תמיד עם קו בסיס פשוט והוסף מורכבות רק כאשר זה ראוי לכך; הפרשנות מוערכת על פני כוח ברוב ההקשרים העסקיים. AI הוא יועץ רב עוצמה בבחירת אלגוריתמים וקוד, אבל האדם מחליט מה אתה חוזה ולמה.
משימת יישום
הגדירו בעיית חיזוי והשלימו את המשפט הבא בכתב: "מודל זה ינבא ___ (סיווג/רגרסיה), היעד הוא ___, קריטריון ההצלחה הוא ___ כי ___." לאחר מכן פצל את הנתונים עם האסטרטגיה הנכונה (כרונולוגית אם מדובר בסדרת זמן), קבע קו בסיס ומדוד אם דפוס פשוט שובר את קו הבסיס הזה.
רשימת בדיקה
- [ ] האם הגדרתי בבירור את סוג הבעיה (סיווג/רגרסיה) ואת היעד?
- [ ] האם בחרתי את קריטריוני ההצלחה על סמך העלות בפועל של העבודה?
- [ ] האם השארתי את ערכת המבחן ללא נגיעה במהלך האימון?
- [ ] אם זו סדרת זמן, האם חילקתי אותה כרונולוגית?
- [ ] האם קבעתי קו בסיס לפני המעבר למודל המורכב?