پیش‌بینی با استفاده از الگوریتم‌های جدولی داخلی Amazon SageMaker، LightGBM، CatBoost، TabTransformer، و AutoGluon-Tabular PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

پیش‌بینی خرابی با استفاده از الگوریتم‌های جدولی داخلی Amazon SageMaker LightGBM، CatBoost، TabTransformer و AutoGluon-Tabular

آمازون SageMaker مجموعه ای از الگوریتم های داخلی, مدل های از پیش آموزش دیدهو الگوهای راه حل از پیش ساخته شده برای کمک به دانشمندان داده و متخصصان یادگیری ماشین (ML) برای شروع آموزش و به کارگیری سریع مدل‌های ML. این الگوریتم ها و مدل ها را می توان هم برای یادگیری نظارت شده و هم برای یادگیری بدون نظارت استفاده کرد. آنها می توانند انواع مختلفی از داده های ورودی، از جمله جدول، تصویر و متن را پردازش کنند.

ریزش مشتری مشکلی است که طیف وسیعی از شرکت ها با آن مواجه هستند، از مخابرات گرفته تا بانکداری، جایی که مشتریان معمولاً به دست رقبا از دست می روند. حفظ مشتریان فعلی به جای جذب مشتریان جدید به نفع یک شرکت است، زیرا معمولاً جذب مشتریان جدید هزینه بیشتری دارد. اپراتورهای تلفن همراه دارای سوابق تاریخی هستند که در آن مشتریان همچنان به استفاده از این سرویس ادامه می دهند یا در نهایت سرگردان می شوند. ما می‌توانیم از این اطلاعات تاریخی مربوط به چرخش یک اپراتور تلفن همراه برای آموزش یک مدل ML استفاده کنیم. پس از آموزش این مدل، می‌توانیم اطلاعات پروفایل یک مشتری دلخواه (همان اطلاعات پروفایلی که برای آموزش مدل استفاده کردیم) را به مدل منتقل کنیم و آن را پیش‌بینی کنیم که آیا این مشتری قرار است ریزش کند یا خیر.

در این پست به آموزش و استقرار می پردازیم چهار الگوریتم SageMaker به تازگی منتشر شده است—LightGBM، CatBoost، TabTransformer، و AutoGluon-Tabular—بر روی یک مجموعه داده پیش بینی ریزش. ما استفاده می کنیم تنظیم خودکار مدل SageMaker (ابزاری برای بهینه سازی هایپرپارامتر) برای یافتن بهترین هایپرپارامترها برای هر مدل، و مقایسه عملکرد آنها بر روی مجموعه داده آزمایشی نگهدارنده برای انتخاب بهینه.

همچنین می‌توانید از این راه‌حل به‌عنوان الگویی برای جستجوی مجموعه‌ای از پیشرفته‌ترین الگوریتم‌های جدولی استفاده کنید و از بهینه‌سازی هایپرپارامتر برای یافتن بهترین مدل کلی استفاده کنید. شما به راحتی می توانید مجموعه داده نمونه را با مجموعه داده خود جایگزین کنید تا مشکلات واقعی کسب و کار مورد علاقه خود را حل کنید. اگر می خواهید مستقیماً به کد SageMaker SDK که در این پست بررسی می کنیم، بروید، می توانید به موارد زیر مراجعه کنید. نمونه نوت بوک Jupyter.

مزایای الگوریتم های داخلی SageMaker

هنگام انتخاب یک الگوریتم برای نوع خاص مشکل و داده خود، استفاده از الگوریتم داخلی SageMaker ساده ترین گزینه است، زیرا انجام این کار مزایای عمده زیر را به همراه دارد:

  • کد نویسی کم - الگوریتم‌های داخلی برای شروع آزمایش‌ها به کدگذاری کمی نیاز دارند. تنها ورودی هایی که باید ارائه دهید داده ها، فراپارامترها و منابع محاسباتی است. این به شما امکان می‌دهد آزمایش‌ها را سریع‌تر اجرا کنید، با هزینه اضافی کمتری برای ردیابی نتایج و تغییرات کد.
  • پیاده سازی الگوریتم های کارآمد و مقیاس پذیر - الگوریتم‌های داخلی با موازی‌سازی در چندین نمونه محاسباتی و پشتیبانی از GPU برای همه الگوریتم‌های قابل‌اجرا می‌آیند. اگر داده‌های زیادی برای آموزش مدل خود دارید، اکثر الگوریتم‌های داخلی می‌توانند به راحتی برای پاسخگویی به تقاضا مقیاس شوند. حتی اگر از قبل یک مدل از پیش آموزش دیده دارید، باز هم ممکن است استفاده از نتیجه آن در SageMaker و وارد کردن هایپرپارامترهایی که از قبل می شناسید آسان تر باشد تا اینکه آن را بر روی آن پورت کنید و خودتان یک اسکریپت آموزشی بنویسید.
  • شفافیت - شما مالک مصنوعات مدل به دست آمده هستید. می‌توانید آن مدل را بگیرید و آن را در SageMaker برای چندین الگوی استنتاج مختلف مستقر کنید (همه موارد را بررسی کنید انواع استقرار موجود) و مقیاس‌بندی و مدیریت نقطه پایانی آسان، یا می‌توانید آن را در هر کجا که به آن نیاز دارید مستقر کنید.

تجسم و پیش پردازش داده ها

ابتدا، مجموعه داده های ریزش مشتری خود را جمع آوری می کنیم. این مجموعه داده نسبتاً کوچکی با 5,000 رکورد است که در هر رکورد از 21 ویژگی برای توصیف مشخصات مشتری یک اپراتور تلفن همراه ناشناخته در ایالات متحده استفاده می شود. این ویژگی‌ها از ایالت ایالات متحده که مشتری در آن اقامت دارد، تعداد تماس‌هایی که با خدمات مشتری برقرار می‌کنند، تا هزینه‌ای که برای تماس‌های روزانه دریافت می‌شود، متغیر است. ما در حال تلاش برای پیش بینی این هستیم که آیا مشتری ریزش می کند یا خیر، که یک مشکل طبقه بندی باینری است. زیر مجموعه ای از این ویژگی ها با برچسب به عنوان آخرین ستون است.

در زیر برخی از بینش ها برای هر ستون، به ویژه آمار خلاصه و هیستوگرام ویژگی های انتخاب شده ارائه شده است.

پیش‌بینی با استفاده از الگوریتم‌های جدولی داخلی Amazon SageMaker، LightGBM، CatBoost، TabTransformer، و AutoGluon-Tabular PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.

سپس داده‌ها را از قبل پردازش می‌کنیم، آن‌ها را به مجموعه‌های آموزشی، اعتبارسنجی و آزمایش تقسیم می‌کنیم و داده‌ها را در آن آپلود می‌کنیم. سرویس ذخیره سازی ساده آمازون (Amazon S3).

تنظیم خودکار مدل الگوریتم های جدولی

فراپارامترها نحوه عملکرد الگوریتم های اساسی ما را کنترل می کنند و بر عملکرد مدل تأثیر می گذارند. این ابرپارامترها می‌توانند تعداد لایه‌ها، نرخ یادگیری، نرخ پوسیدگی وزن، و حذف برای مدل‌های مبتنی بر شبکه عصبی، یا تعداد برگ‌ها، تکرارها و حداکثر عمق درخت برای مدل‌های مجموعه درختی باشند. برای انتخاب بهترین مدل، ما تنظیم خودکار مدل SageMaker را برای هر یک از چهار الگوریتم جدولی آموزش دیده SageMaker اعمال می کنیم. شما فقط باید هایپرپارامترها را برای تنظیم و محدوده ای برای هر پارامتر برای بررسی انتخاب کنید. برای اطلاعات بیشتر در مورد تیونینگ مدل اتوماتیک به ادامه مطلب مراجعه کنید تنظیم خودکار مدل Amazon SageMaker: استفاده از یادگیری ماشین برای یادگیری ماشین or تنظیم خودکار مدل Amazon SageMaker: بهینه سازی بدون گرادیان مقیاس پذیر.

بیایید ببینیم این در عمل چگونه کار می کند.

LightGBM

ما با اجرای تنظیم خودکار مدل با LightGBM شروع می کنیم و این فرآیند را با الگوریتم های دیگر تطبیق می دهیم. همانطور که در پست توضیح داده شده است مدل‌ها و الگوریتم‌های Amazon SageMaker JumpStart اکنون از طریق API در دسترس هستندبرای آموزش یک الگوریتم از پیش ساخته شده از طریق SageMaker SDK، مصنوعات زیر مورد نیاز است:

  • تصویر ظرف مخصوص چارچوب آن، حاوی تمام وابستگی‌های مورد نیاز برای آموزش و استنتاج
  • اسکریپت های آموزش و استنتاج برای مدل یا الگوریتم انتخاب شده

ما ابتدا این مصنوعات را که به 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، آن را به a 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)

La max_jobs پارامتر تعیین می کند که تعداد کل کارها در کار تنظیم خودکار مدل اجرا می شود و max_parallel_jobs تعریف می کند که چند شغل آموزشی همزمان باید شروع شود. ما همچنین هدف را تعریف می کنیم “Maximize” AUC مدل (منطقه زیر منحنی). برای غواصی عمیق تر در پارامترهای موجود در معرض HyperParameterTuner، رجوع شود به HyperparameterTuner.

اتمام نمونه دفترچه یادداشت تا ببینیم چگونه به استقرار و ارزیابی این مدل در مجموعه آزمایشی ادامه می دهیم.

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"),
}

تب ترانسفورماتور

روند تنظیم هایپرپارامتر در مدل TabTransformer مانند قبل است، اگرچه ما نیاز داریم که مصنوعات مدل را تحت شناسه بازیابی کنیم. pytorch-tabtransformerclassification-model و انتخاب محدوده هایپرپارامترها را تغییر دهید.

آموزش را هم تغییر می دهیم instance_type به ml.p3.2xlarge. TabTransformer مدلی است که اخیراً از تحقیقات آمازون مشتق شده است که با استفاده از مدل های ترانسفورماتور قدرت یادگیری عمیق را به داده های جدولی می آورد. برای آموزش این مدل به شیوه ای کارآمد، به یک نمونه پشتیبانی شده از 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 با تنظیم خودکار مدل TabTransformer با تنظیم خودکار مدل 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. جستجوی عمودی Ai.دکتر شین هوانگ یک دانشمند کاربردی برای آمازون SageMaker JumpStart و آمازون SageMaker الگوریتم های داخلی است. او بر روی توسعه الگوریتم های یادگیری ماشینی مقیاس پذیر تمرکز می کند. علایق تحقیقاتی او در زمینه پردازش زبان طبیعی، یادگیری عمیق قابل توضیح بر روی داده های جدولی و تجزیه و تحلیل قوی خوشه بندی ناپارامتریک فضا-زمان است. او مقالات زیادی را در کنفرانس‌های ACL، ICDM، KDD و مجله Royal Statistical Society: Series A منتشر کرده است.

پیش‌بینی با استفاده از الگوریتم‌های جدولی داخلی Amazon SageMaker، LightGBM، CatBoost، TabTransformer، و AutoGluon-Tabular PlatoBlockchain Data Intelligence. جستجوی عمودی Ai.ژائو مورا یک معمار راه حل های تخصصی AI/ML در خدمات وب آمازون است. او بیشتر روی موارد استفاده NLP و کمک به مشتریان در بهینه سازی آموزش و استقرار مدل یادگیری عمیق متمرکز است. او همچنین یکی از حامیان فعال راه حل های ML با کد پایین و سخت افزار تخصصی ML است.

تمبر زمان:

بیشتر از آموزش ماشین AWS