این یک پست مهمان توسط ویکتور انریکو جنی، مهندس ارشد یادگیری ماشین در Adspert است.
Adspert یک ISV مستقر در برلین است که یک ابزار مدیریت پیشنهاد طراحی شده برای بهینه سازی خودکار عملکرد بازاریابی و کمپین های تبلیغاتی را توسعه داده است. اصل اصلی این شرکت به حداکثر رساندن سود تبلیغات تجارت الکترونیک با کمک هوش مصنوعی است. توسعه مداوم پلتفرمهای تبلیغاتی راه را برای فرصتهای جدیدی هموار میکند که Adspert به طور ماهرانه از آنها برای موفقیت مشتریان خود استفاده میکند.
هدف اصلی Adspert ساده کردن فرآیند برای کاربران در عین بهینه سازی کمپین های تبلیغاتی در پلتفرم های مختلف است. این شامل استفاده از اطلاعات جمعآوریشده در پلتفرمهای مختلف میشود که در برابر بودجه بهینه تنظیم شده در سطح بالاتر از هر پلتفرم متعادل میشود. تمرکز Adspert بر روی بهینه سازی دستیابی به هدف مشتری است، صرف نظر از اینکه از چه پلتفرمی استفاده می شود. Adspert همچنان به افزودن پلتفرمها در صورت لزوم ادامه میدهد تا به مشتریان خود مزایای قابل توجهی بدهد.
در این پست، نحوه ایجاد ابزار قیمت گذاری توسط Adspert را با استفاده از سرویس های مختلف AWS از ابتدا به اشتراک می گذاریم آمازون SageMaker و نحوه همکاری Adspert با آزمایشگاه داده AWS به سرعت بخشیدن به این پروژه از طراحی تا ساخت در زمان رکورد.
ابزار قیمتگذاری، یک محصول انتخابشده توسط فروشنده را در یک بازار تجارت الکترونیک بر اساس دید و حاشیه سود مجدداً قیمتگذاری میکند تا سود را در سطح محصول به حداکثر برساند.
به عنوان یک فروشنده، ضروری است که محصولات شما همیشه قابل مشاهده باشند زیرا این کار باعث افزایش فروش می شود. مهمترین عامل در فروش تجارت الکترونیک این است که پیشنهاد شما به جای پیشنهاد رقیب برای مشتریان قابل مشاهده باشد.
اگرچه مطمئناً به پلتفرم خاص تجارت الکترونیک بستگی دارد، اما متوجه شده ایم که قیمت محصول یکی از مهمترین ارقام کلیدی است که می تواند بر روی دید تأثیر بگذارد. با این حال، قیمت ها اغلب و سریع تغییر می کنند. به همین دلیل، ابزار قیمتگذاری باید در زمان تقریباً واقعی عمل کند تا دید را افزایش دهد.
بررسی اجمالی راه حل
نمودار زیر معماری راه حل را نشان می دهد.
محلول حاوی اجزای زیر است:
- سرویس پایگاه داده رابطه ای آمازون (آمازون RDS) برای PostgreSQL منبع اصلی داده است که حاوی اطلاعات محصول است که در پایگاه داده RDS برای Postgres ذخیره می شود.
- اطلاعات تغییرات فهرست محصولات در زمان واقعی در یک صفحه می رسد سرویس صف ساده آمازون صف (Amazon SQS).
- اطلاعات محصول ذخیره شده در Amazon RDS در زمان واقعی در لایه خام با استفاده از الگوی ضبط داده تغییر (CDC) موجود در سرویس مهاجرت پایگاه داده AWS (AWS DMS).
- اعلانهای فهرست محصولات که از Amazon SQS میآیند، در زمان واقعی با استفاده از یک لایه خام وارد لایه خام میشوند. AWS لامبدا تابع.
- داده های منبع اصلی در ذخیره می شود سرویس ذخیره سازی ساده آمازون سطل لایه خام (Amazon S3) با استفاده از قالب داده پارکت. این لایه تنها منبع حقیقت برای دریاچه داده است. پارتیشن بندی مورد استفاده در این ذخیره سازی از پردازش تدریجی داده ها پشتیبانی می کند.
- چسب AWS کارهای استخراج، تبدیل و بارگذاری (ETL) دادههای محصول را پاک میکنند، موارد تکراری را حذف میکنند، و ادغام دادهها و تبدیلهای عمومی را به کار میبرند که به یک مورد تجاری خاص مرتبط نیستند.
- لایه مرحله آمازون S3 داده های آماده شده را دریافت می کند که در قالب پارکت آپاچی برای پردازش بیشتر ذخیره می شود. پارتیشن بندی مورد استفاده در استیج استور از پردازش تدریجی داده ها پشتیبانی می کند.
- کارهای چسب AWS ایجاد شده در این لایه از داده های موجود در لایه مرحله آمازون S3 استفاده می کنند. این شامل اعمال قوانین تجاری و محاسبات خاص مورد استفاده است. نتایج حاصل از این مشاغل در لایه تجزیه و تحلیل آمازون S3 ذخیره می شود.
- لایه تجزیه و تحلیل آمازون S3 برای ذخیره داده هایی استفاده می شود که توسط مدل های ML برای اهداف آموزشی استفاده می شود. پارتیشن بندی مورد استفاده در فروشگاه انتخاب شده بر اساس میزان مصرف داده مورد انتظار است. این ممکن است با پارتیشن بندی مورد استفاده در لایه مرحله متفاوت باشد.
- مدل ML قیمت گذاری مجدد یک پیاده سازی Scikit-Learn Random Forest در حالت SageMaker Script است که با استفاده از داده های موجود در سطل S3 (لایه تجزیه و تحلیل) آموزش داده شده است.
- یک کار پردازش داده AWS Glue داده ها را برای استنتاج بلادرنگ آماده می کند. این کار داده های دریافت شده در سطل S3 (لایه مرحله) را پردازش می کند و نقطه پایانی استنتاج SageMaker را فراخوانی می کند. داده ها برای استفاده توسط مدل قیمت گذاری مجدد SageMaker آماده شده است. چسب AWS به Lambda ترجیح داده شد، زیرا استنتاج به عملیات پردازش داده های پیچیده مختلف مانند اتصالات و عملکردهای پنجره در حجم بالایی از داده (میلیاردها تراکنش روزانه) نیاز دارد. نتایج حاصل از فراخوانی های مدل قیمت گذاری مجدد در سطل S3 (لایه استنتاج) ذخیره می شود.
- کار آموزش SageMaker با استفاده از نقطه پایانی SageMaker مستقر شده است. این نقطه پایانی توسط پردازنده استنتاج AWS Glue فراخوانی میشود و توصیههای قیمتی تقریباً واقعی را برای افزایش دید محصول ایجاد میکند.
- پیش بینی های ایجاد شده توسط نقطه پایانی استنتاج SageMaker در لایه استنتاج Amazon S3 ذخیره می شود.
- تابع بهینهساز پیشبینیهای لامبدا، توصیههای تولید شده توسط نقطه پایانی استنتاج SageMaker را پردازش میکند و یک توصیه قیمت جدید ایجاد میکند که بر به حداکثر رساندن سود فروشنده تمرکز میکند و یک مبادله بین حجم فروش و حاشیه فروش اعمال میکند.
- توصیههای قیمتی که توسط بهینهساز پیشبینی لامبدا ایجاد میشود به API قیمتگذاری مجدد ارسال میشود که قیمت محصول را در بازار بهروزرسانی میکند.
- توصیه های قیمت به روز شده تولید شده توسط بهینه ساز پیش بینی لامبدا در لایه بهینه سازی آمازون S3 ذخیره می شود.
- کار لودر پیشبینی چسب AWS، پیشبینیهای تولید شده توسط مدل ML را برای اهداف حسابرسی و گزارش در منبع RDS برای پایگاه داده Postgres SQL بارگذاری میکند. برای پیاده سازی این کامپوننت از AWS Glue Studio استفاده شده است. این یک رابط گرافیکی است که ایجاد، اجرا و نظارت بر کارهای ETL را در AWS Glue آسان می کند.
آماده سازی داده ها
مجموعه داده برای مدل دید Adspert از یک صف SQS ایجاد شده و در لایه خام دریاچه داده ما در زمان واقعی با Lambda وارد می شود. پس از آن، داده های خام با انجام تبدیل های ساده، مانند حذف موارد تکراری، پاکسازی می شوند. این فرآیند در چسب AWS پیاده سازی شده است. نتیجه در لایه مرحله بندی دریاچه داده ما ذخیره می شود. اعلانها به رقبا برای یک محصول معین، قیمت، کانالهای تکمیل، زمان ارسال و بسیاری از متغیرهای دیگر را ارائه میکنند. آنها همچنین یک معیار دید وابسته به پلت فرم را ارائه می دهند که می تواند به عنوان یک متغیر بولی (قابل مشاهده یا غیر قابل مشاهده) بیان شود. هر زمان که تغییر پیشنهادی اتفاق بیفتد، اعلان دریافت میکنیم، که به چندین میلیون رویداد در ماه روی همه محصولات مشتریان ما اضافه میشود.
از این مجموعه داده، داده های آموزشی را به صورت زیر استخراج می کنیم: برای هر اعلان، پیشنهادات قابل مشاهده را با هر پیشنهاد غیر قابل مشاهده جفت می کنیم و بالعکس. هر نقطه داده نشان دهنده رقابت بین دو فروشنده است که در آن یک برنده و بازنده آشکار وجود دارد. این کار پردازشی در یک کار چسب AWS با Spark پیاده سازی شده است. مجموعه داده آموزشی آماده شده به سطل تجزیه و تحلیل S3 منتقل می شود تا توسط SageMaker استفاده شود.
مدل را آموزش دهید
مدل ما برای هر جفت پیشنهاد طبقه بندی می کند، در صورتی که یک پیشنهاد مشخص قابل مشاهده باشد. این مدل ما را قادر می سازد تا بهترین قیمت را برای مشتریان خود محاسبه کنیم، دید را بر اساس رقابت افزایش دهیم و سود آنها را به حداکثر برسانیم. علاوه بر آن، این مدل طبقهبندی میتواند بینش عمیقتری در مورد دلایل قابل مشاهده بودن یا غیرقابل مشاهده بودن فهرستهای ما به ما بدهد. ما از ویژگی های زیر استفاده می کنیم:
- نسبت قیمت ما به قیمت رقبا
- تفاوت در کانال های تحقق
- مقدار بازخورد برای هر فروشنده
- رتبه بازخورد هر فروشنده
- تفاوت در حداقل زمان حمل و نقل
- تفاوت در حداکثر زمان حمل و نقل
- در دسترس بودن محصول هر فروشنده
Adspert از SageMaker برای آموزش و میزبانی مدل استفاده می کند. ما از پیادهسازی جنگل تصادفی Scikit-Learn استفاده میکنیم حالت اسکریپت SageMaker. ما همچنین برخی از پیش پردازش ویژگی را مستقیماً در خط لوله Scikit-Learn در اسکریپت آموزشی قرار می دهیم. کد زیر را ببینید:
یکی از مهمترین عملکردهای پیش پردازش است transform_price
، که قیمت را بر حداقل قیمت رقیب و یک ستون قیمت خارجی تقسیم می کند. ما متوجه شدیم که این ویژگی تأثیر مرتبطی بر دقت مدل دارد. ما همچنین از لگاریتم استفاده می کنیم تا به مدل اجازه دهیم بر اساس تفاوت قیمت نسبی تصمیم بگیرد، نه تفاوت قیمت مطلق.
در training_script.py
اسکریپت، ابتدا نحوه ساخت Scikit-Learn را تعریف می کنیم ColumnTransformer
برای اعمال ترانسفورماتورهای مشخص شده بر روی ستون های یک دیتافریم:
در اسکریپت آموزشی، داده ها را از پارکت در یک دیتافریم Pandas بارگذاری می کنیم، خط لوله را تعریف می کنیم. ColumnTranformer
و RandomForestClassifier
، و مدل را آموزش دهید. سپس با استفاده از مدل سریالی می شود joblib
:
در اسکریپت آموزشی نیز باید توابع را برای استنتاج پیاده سازی کنیم:
- input_fn – مسئول تجزیه داده ها از بدنه درخواستی محموله است
- model_fn – مدلی که در قسمت آموزش اسکریپت ریخته شده است را بارگذاری و برمی گرداند
- predict_fn - شامل اجرای ما برای درخواست پیشبینی از مدل با استفاده از دادههای بارگذاری است
- predict_proba - برای ترسیم منحنیهای دید پیشبینیشده، احتمال کلاس را با استفاده از عبارت برمیگردانیم
predict_proba
تابع، به جای پیش بینی باینری طبقه بندی کننده
کد زیر را ببینید:
شکل زیر اهمیت ویژگی های مبتنی بر ناخالصی را نشان می دهد که توسط طبقه بندی جنگل تصادفی.
با SageMaker، ما توانستیم این مدل را بر روی حجم زیادی از داده ها (تا 14 میلیارد تراکنش روزانه) آموزش دهیم، بدون اینکه روی نمونه های موجود خود بارگذاری کنیم یا مجبور باشیم یک ماشین جداگانه با منابع کافی راه اندازی کنیم. علاوه بر این، از آنجایی که نمونه ها بلافاصله پس از کار آموزشی خاموش می شوند، آموزش با SageMaker بسیار مقرون به صرفه بود. استقرار مدل با SageMaker بدون هیچ بار کاری اضافی کار کرد. یک فراخوانی یک تابع در Python SDK برای میزبانی مدل ما به عنوان یک نقطه پایانی استنتاج کافی است و میتوان آن را به راحتی از سرویسهای دیگر با استفاده از SageMaker Python SDK نیز درخواست کرد. کد زیر را ببینید:
مصنوع مدل در آمازون S3 توسط تابع fit ذخیره می شود. همانطور که در کد زیر مشاهده می شود، مدل را می توان به صورت a بارگذاری کرد SKLearnModel
شی با استفاده از مصنوع مدل، مسیر اسکریپت و برخی پارامترهای دیگر. پس از آن، می توان آن را به نوع نمونه و تعداد نمونه مورد نظر مستقر کرد.
مدل را در زمان واقعی ارزیابی کنید
هر زمان که اعلان جدیدی برای یکی از محصولات ما ارسال می شود، می خواهیم قیمت بهینه را محاسبه و ارسال کنیم. برای محاسبه قیمتهای بهینه، یک مجموعه داده پیشبینی ایجاد میکنیم که در آن پیشنهاد خودمان را با پیشنهاد هر رقیب برای طیف وسیعی از قیمتهای ممکن مقایسه میکنیم. این نقاط داده به نقطه پایانی SageMaker ارسال میشوند، که احتمال پیشبینیشده قابل مشاهده بودن در برابر هر رقیب را برای هر قیمت داده شده برمیگرداند. ما به احتمال قابل مشاهده بودن می گوییم دید پیش بینی شده. همانطور که در شکل زیر نشان داده شده است، نتیجه را می توان به عنوان یک منحنی برای هر رقیب تجسم کرد، که رابطه بین قیمت ما و دید را به تصویر می کشد.
در این مثال، دید در برابر رقیب 1 تقریباً یک تابع ثابت تکهای است، که نشان میدهد که ما عمدتاً باید قیمت را به زیر یک آستانه خاص، تقریباً قیمت رقیب، کاهش دهیم تا قابل مشاهده باشد. با این حال، دید در مقابل رقیب 2 به شدت کاهش نمی یابد. علاوه بر این، ما هنوز 50% شانس قابل مشاهده بودن را حتی با قیمت بسیار بالا داریم. تجزیه و تحلیل داده های ورودی نشان داد که رقیب دارای رتبه های پایینی است که اتفاقاً بسیار ضعیف است. مدل ما متوجه شد که این پلتفرم خاص تجارت الکترونیک ضرری برای فروشندگان با رتبهبندی بازخورد ضعیف دارد. ما اثرات مشابهی را برای سایر ویژگیها، مانند کانال تکمیل و زمان ارسال، کشف کردیم.
تبدیل داده ها و استنتاج های لازم در برابر نقطه پایانی SageMaker در چسب AWS پیاده سازی شده است. کار چسب AWS در ریز دسته ها بر روی داده های بلادرنگ مصرف شده از لامبدا کار می کند.
در نهایت، میخواهیم منحنی دید جمعی را محاسبه کنیم، که دید پیشبینیشده برای هر قیمت ممکن است. پیشنهاد ما در صورتی قابل مشاهده است که از همه پیشنهادات دیگر فروشندگان بهتر باشد. با فرض استقلال بین احتمالات قابل مشاهده بودن در برابر هر فروشنده با توجه به قیمت ما، احتمال قابل مشاهده بودن در برابر همه فروشندگان حاصل ضرب احتمالات مربوطه است. این بدان معناست که منحنی دید جمعی را می توان با ضرب همه منحنی ها محاسبه کرد.
شکلهای زیر نمایانهای پیشبینیشده بازگشتشده از نقطه پایانی SageMaker را نشان میدهند.
شکل زیر منحنی دید جمعی را نشان می دهد.
برای محاسبه قیمت بهینه، منحنی دید ابتدا صاف شده و سپس در حاشیه ضرب می شود. برای محاسبه مارجین از هزینه های کالا و کارمزد استفاده می کنیم. هزینه کالاهای فروخته شده و کارمزدها اطلاعات ثابت محصول هستند که از طریق AWS DMS همگامسازی میشوند. Adspert بر اساس تابع سود، قیمت بهینه را محاسبه کرده و از طریق API پلتفرم به پلتفرم تجارت الکترونیک ارسال می کند.
این در بهینه ساز پیش بینی AWS Lambda پیاده سازی شده است.
شکل زیر رابطه بین دید پیش بینی شده و قیمت را نشان می دهد.
شکل زیر رابطه بین قیمت و سود را نشان می دهد.
نتیجه
رویکرد موجود Adspert برای به حداکثر رساندن سود بر مدیریت پیشنهاد برای افزایش بازده از تبلیغات متمرکز است. با این حال، برای دستیابی به عملکرد برتر در بازارهای تجارت الکترونیک، فروشندگان باید هم تبلیغات و هم قیمت رقابتی محصولات خود را در نظر بگیرند. با استفاده از این مدل جدید ML برای پیشبینی قابلیت مشاهده، میتوانیم عملکرد خود را برای تنظیم قیمتهای مشتری نیز گسترش دهیم.
ابزار قیمت گذاری جدید باید قادر به آموزش خودکار مدل ML بر روی حجم زیادی از داده ها و همچنین تبدیل داده ها، پیش بینی ها و بهینه سازی قیمت در زمان واقعی باشد. در این پست، مراحل اصلی موتور بهینهسازی قیمت و معماری AWS را که با همکاری آزمایشگاه داده AWS برای رسیدن به این اهداف پیادهسازی کردیم، طی کردیم.
استفاده از مدلهای ML از مفهوم تا تولید معمولاً پیچیده و زمانبر است. برای آموزش مدل باید حجم زیادی از داده ها را مدیریت کنید، بهترین الگوریتم را برای آموزش آن انتخاب کنید، ظرفیت محاسباتی را در حین آموزش مدیریت کنید و سپس مدل را در محیط تولید مستقر کنید. SageMaker این پیچیدگی را با سادهتر ساختن و استقرار مدل ML کاهش داد. پس از اینکه الگوریتمها و چارچوبهای مناسب را از میان طیف وسیعی از گزینههای موجود انتخاب کردیم، SageMaker تمام زیرساختهای زیربنایی را برای آموزش مدل ما و استقرار آن در تولید مدیریت کرد.
اگر می خواهید با SageMaker آشنا شوید، کارگاه روز غوطه وری می تواند به شما کمک کند تا درک کاملی از نحوه ساخت موارد استفاده ML از مهندسی ویژگی، الگوریتم های مختلف داخلی، و نحوه آموزش، تنظیم و استقرار مدل ML در سناریویی شبیه تولید به دست آورید. این شما را راهنمایی میکند تا مدل خود را بیاورید و یک افزایش و جابجایی بار کاری ML را به پلتفرم SageMaker انجام دهید. همچنین مفاهیم پیشرفته ای مانند اشکال زدایی مدل، نظارت بر مدل، و AutoML را نشان می دهد و به شما کمک می کند حجم کاری ML خود را از طریق لنز AWS ML Well-Architected ارزیابی کنید.
اگر میخواهید برای تسریع اجرای موارد استفاده که شامل دادهها، تجزیه و تحلیل، هوش مصنوعی و ML، بدون سرور و مدرنسازی کانتینر هستند، کمک کنید، لطفاً با آزمایشگاه داده AWS.
درباره نویسندگان
ویکتور انریکو جنی یک مهندس ارشد یادگیری ماشین در Adspert مستقر در برلین، آلمان است. او راه حل هایی را برای مشکلات پیش بینی و بهینه سازی به منظور افزایش سود مشتریان ایجاد می کند. ویکتور سابقه ای در ریاضیات کاربردی دارد و عاشق کار با داده است. در اوقات فراغت از یادگیری زبان مجارستانی، تمرین هنرهای رزمی و نواختن گیتار لذت می برد.
انیو پاستوره یک معمار داده در تیم آزمایشگاه داده AWS است. او مشتاق همه چیز مربوط به فناوری های جدید است که تأثیر مثبتی بر مشاغل و معیشت عمومی دارد. Ennio بیش از 9 سال تجربه در تجزیه و تحلیل داده ها دارد. او به شرکتها کمک میکند تا پلتفرمهای داده را در صنایع مختلف مانند مخابرات، بانکداری، بازی، خردهفروشی و بیمه تعریف و پیادهسازی کنند.