חיזוי נטישה באמצעות אלגוריתמים טבלאיים מובנים של Amazon SageMaker LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

חיזוי נטישה באמצעות אלגוריתמים טבלאיים מובנים של Amazon SageMaker LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular

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

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

בפוסט זה, אנו מתאמנים ופורסים ארבעה אלגוריתמים של SageMaker שפורסמו לאחרונה- LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular - על מערך חיזוי נטישה. אנו משתמשים SageMaker כוונון דגם אוטומטי (כלי לאופטימיזציה של היפרפרמטרים) כדי למצוא את הפרמטרים הטובים ביותר עבור כל מודל, ולהשוות את הביצועים שלהם במערך נתונים של בדיקת holdout כדי לבחור את האופטימלי.

אתה יכול גם להשתמש בפתרון זה כתבנית כדי לחפש באוסף של אלגוריתמים טבלאיים חדישים ולהשתמש באופטימיזציה של היפרפרמטרים כדי למצוא את המודל הכולל הטוב ביותר. אתה יכול בקלות להחליף את מערך הנתונים לדוגמה בעצמך כדי לפתור בעיות עסקיות אמיתיות שבהן אתה מעוניין. אם אתה רוצה לקפוץ ישר לתוך קוד ה-SDK של SageMaker שאנו עוברים בפוסט הזה, אתה יכול להתייחס לפרטים הבאים מחברת Jupyter לדוגמא.

היתרונות של אלגוריתמים מובנים של SageMaker

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

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

הדמיית נתונים ועיבוד מקדים

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

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

חיזוי נטישה באמצעות אלגוריתמים טבלאיים מובנים של Amazon SageMaker LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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

כוונון דגם אוטומטי של אלגוריתמים טבלאיים

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

בואו נראה איך זה עובד בפועל.

LightGBM

אנו מתחילים בהפעלת כוונון דגמים אוטומטי עם LightGBM, ומתאימים את התהליך הזה לאלגוריתמים האחרים. כפי שמוסבר בפוסט מודלים ואלגוריתמים של אמזון SageMaker JumpStart זמינים כעת באמצעות API, החפצים הבאים נדרשים כדי להכשיר אלגוריתם בנוי מראש באמצעות ה-SDK של SageMaker:

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

תחילה אנו מאחזרים את החפצים הללו, התלויים ב- model_id (lightgbm-classification-model במקרה זה) וגרסה:

from sagemaker import image_uris, model_uris, script_uris
train_model_id, train_model_version, train_scope = "lightgbm-classification-model", "*", "training"
training_instance_type = "ml.m5.4xlarge"

# Retrieve the docker image
train_image_uri = image_uris.retrieve(region=None,
                                      framework=None,
                                      model_id=train_model_id,
                                      model_version=train_model_version,
                                      image_scope=train_scope,
                                      instance_type=training_instance_type,
                                      )                                      
# Retrieve the training script
train_source_uri = script_uris.retrieve(model_id=train_model_id,
                                        model_version=train_model_version,
                                        script_scope=train_scope
                                        )
# Retrieve the pre-trained model tarball (in the case of tabular modeling, it is a dummy file)
train_model_uri = model_uris.retrieve(model_id=train_model_id,
                                      model_version=train_model_version,
                                      model_scope=train_scope)

לאחר מכן אנו מקבלים את הפרמטרים ההיפר-פרמטרים המוגדרים כברירת מחדל עבור LightGBM, מגדירים חלק מהם לערכים קבועים נבחרים כגון מספר סבבי חיזוק ומדד הערכה על נתוני האימות, ומגדירים את טווחי הערכים שאנו רוצים לחפש אחר אחרים. אנו משתמשים בפרמטרים של SageMaker ContinuousParameter ו IntegerParameter לזה:

from sagemaker import hyperparameters
from sagemaker.tuner import ContinuousParameter, IntegerParameter, HyperparameterTuner

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(model_id=train_model_id,
                                                   model_version=train_model_version
                                                   )
# [Optional] Override default hyperparameters with custom values
hyperparameters["num_boost_round"] = "500"
hyperparameters["metric"] = "auc"

# Define search ranges for other hyperparameters
hyperparameter_ranges_lgb = {
    "learning_rate": ContinuousParameter(1e-4, 1, scaling_type="Logarithmic"),
    "num_boost_round": IntegerParameter(2, 30),
    "num_leaves": IntegerParameter(10, 50),
    "feature_fraction": ContinuousParameter(0, 1),
    "bagging_fraction": ContinuousParameter(0, 1),
    "bagging_freq": IntegerParameter(1, 10),
    "max_depth": IntegerParameter(5, 30),
    "min_data_in_leaf": IntegerParameter(5, 50),
}

לבסוף, אנו יוצרים א SageMaker Estimator, הזינו אותו לתוך א HyperarameterTuner, והתחל את עבודת כוונון ההיפרפרמטר עם tuner.fit():

from sagemaker.estimator import Estimator
from sagemaker.tuner import HyperParameterTuner

# Create SageMaker Estimator instance
tabular_estimator = Estimator(
    role=aws_role,
    image_uri=train_image_uri,
    source_dir=train_source_uri,
    model_uri=train_model_uri,
    entry_point="transfer_learning.py",
    instance_count=1,
    instance_type=training_instance_type,
    max_run=360000,
    hyperparameters=hyperparameters,
)

tuner = HyperparameterTuner(
            tabular_estimator,
            "auc",
            hyperparameter_ranges_lgb,
            [{"Name": "auc", "Regex": "auc: ([0-9.]+)"}],
            max_jobs=10,
            max_parallel_jobs=5,
            objective_type="Maximize",
            base_tuning_job_name="some_name",
        )

tuner.fit({"training": training_dataset_s3_path}, logs=True)

אל האני max_jobs פרמטר מגדיר כמה סה"כ עבודות יופעלו בעבודת כוונון הדגם האוטומטי, ו max_parallel_jobs מגדיר כמה עבודות הכשרה במקביל יש להתחיל. אנחנו גם מגדירים את המטרה “Maximize” ה-AUC של הדגם (אזור מתחת לעקומה). כדי לצלול עמוק יותר לתוך הפרמטרים הזמינים שנחשפו על ידי HyperParameterTuner, מתייחס Hyperparameter טונר.

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

CatBoost

התהליך לכוונון היפרפרמטרים באלגוריתם CatBoost זהה לקודם, למרות שעלינו לאחזר חפצי מודל תחת המזהה catboost-classification-model ושנה את בחירת הטווח של הפרמטרים:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)
# [Optional] Override default hyperparameters with custom values
hyperparameters["iterations"] = "500"
hyperparameters["eval_metric"] = "AUC"

# Define search ranges for other hyperparameters
hyperparameter_ranges_cat = {
    "learning_rate": ContinuousParameter(0.00001, 0.1, scaling_type="Logarithmic"),
    "iterations": IntegerParameter(50, 1000),
    "depth": IntegerParameter(1, 10),
    "l2_leaf_reg": IntegerParameter(1, 10),
    "random_strength": ContinuousParameter(0.01, 10, scaling_type="Logarithmic"),
}

Tab Transformer

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

אנחנו גם משנים את ההכשרה instance_type ל ml.p3.2xlarge. TabTransformer הוא מודל שנגזר לאחרונה ממחקר אמזון, אשר מביא את הכוח של למידה עמוקה לנתונים טבלאיים באמצעות מודלים של Transformer. כדי לאמן את המודל הזה בצורה יעילה, אנחנו צריכים מופע מגובה GPU. למידע נוסף, עיין ב הבאת הכוח של למידה עמוקה לנתונים בטבלאות.

from sagemaker import hyperparameters
from sagemaker.tuner import CategoricalParameter

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)
# [Optional] Override default hyperparameters with custom values
hyperparameters["n_epochs"] = 40  # The same hyperparameter is named as "iterations" for CatBoost
hyperparameters["patience"] = 10

# Define search ranges for other hyperparameters
hyperparameter_ranges_tab = {
    "learning_rate": ContinuousParameter(0.001, 0.01, scaling_type="Auto"),
    "batch_size": CategoricalParameter([64, 128, 256, 512]),
    "attn_dropout": ContinuousParameter(0.0, 0.8, scaling_type="Auto"),
    "mlp_dropout": ContinuousParameter(0.0, 0.8, scaling_type="Auto"),
    "input_dim": CategoricalParameter(["16", "32", "64", "128", "256"]),
    "frac_shared_embed": ContinuousParameter(0.0, 0.5, scaling_type="Auto"),
}

AutoGluon-Tabular

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

לכן, אנו מחליפים את model_id ל autogluon-classification-ensemble, ותקן רק את ההיפרפרמטר של מד ההערכה לציון ה-AUC הרצוי שלנו:

from sagemaker import hyperparameters

# Retrieve the default hyper-parameters for fine-tuning the model
hyperparameters = hyperparameters.retrieve_default(
    model_id=train_model_id, model_version=train_model_version
)

hyperparameters["eval_metric"] = "roc_auc"

במקום להתקשר tuner.fit(), אנו קוראים estimator.fit() להתחיל עבודת הכשרה אחת.

השוואת הדגמים המאומנים

לאחר שאנו פורסים את כל ארבעת המודלים, אנו שולחים את ערכת הבדיקות המלאה לכל נקודת קצה לצורך חיזוי ומחשבים דיוק, מדדי F1 ו-AUC עבור כל אחד מהם (ראה קוד ב- מחברת מדגם). אנו מציגים את התוצאות בטבלה הבאה, עם כתב ויתור חשוב: התוצאות והביצועים היחסיים בין המודלים הללו יהיו תלויים במערך הנתונים שבו אתה משתמש לאימון. תוצאות אלו מייצגות, ולמרות שהנטייה של אלגוריתמים מסוימים לביצועים טובים יותר מבוססת על גורמים רלוונטיים (לדוגמה, AutoGluon מאגדת בצורה חכמה את התחזיות של שני דגמי LightGBM ו-CatBoost מאחורי הקלעים), האיזון בביצועים עשוי להשתנות בהינתן מצב שונה הפצת נתונים.

. LightGBM עם כוונון דגם אוטומטי CatBoost עם כוונון דגם אוטומטי Tab Transformer עם כוונון דגם אוטומטי AutoGluon-Tabular
דיוק 0.8977 0.9622 0.9511 0.98
F1 0.8986 0.9624 0.9517 0.98
AUC 0.9629 0.9907 0.989 0.9979

סיכום

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

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


על המחברים

חיזוי נטישה באמצעות אלגוריתמים טבלאיים מובנים של Amazon SageMaker LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.ד"ר שין הואנג הוא מדען יישומי עבור אלגוריתמים מובנים של Amazon SageMaker JumpStart ו-Amazon SageMaker. הוא מתמקד בפיתוח אלגוריתמים של למידת מכונה ניתנים להרחבה. תחומי העניין שלו במחקר הם בתחום של עיבוד שפה טבעית, למידה עמוקה הניתנת להסבר על נתונים טבלאיים וניתוח חזק של צבירת מרחב-זמן לא פרמטרית. הוא פרסם מאמרים רבים בכנסים ACL, ICDM, KDD ובכתב העת Royal Statistical Society: Series A.

חיזוי נטישה באמצעות אלגוריתמים טבלאיים מובנים של Amazon SageMaker LightGBM, CatBoost, TabTransformer ו-AutoGluon-Tabular PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.ז'ואאו מורה הוא אדריכל פתרונות AI/ML מומחה בשירותי האינטרנט של אמזון. הוא מתמקד בעיקר במקרי שימוש ב-NLP ובעזרה ללקוחות לייעל את ההדרכה והפריסה של מודל למידה עמוקה. הוא גם חסיד פעיל של פתרונות ML בעלי קוד נמוך וחומרה מתמחה ב-ML.

בול זמן:

עוד מ למידת מכונות AWS