امروزه عبارت های علم داده(Data Science) هوش مصنوعی(Artificial Intelligence) و یادگیری ماشین(Machine learning) رو تقریبا همه جا میشنویم. احتمالا همه ما هم تا حدودی مفهموم این عبارت ها میدونیم.
اینجا من نمی خوام رو مفاهیم این عبارت ها صحبت کنم و بیشتر می خوایم در مورد کاربرد این موارد در بازاریابی صحبت کنم. به نظرم هم بهترین راه یادگیری این مطالب اینه که یه مثال واقعی رو با این روش ها حل کنیم.
اما مسائل بازاریابی که از این روشها حل میشند خیلی گسترده و متنوع هستند و مسلما حل مثال برای هر کدوم خودش میشه چند تا کتاب. به همین دلیل تصمیم گرفتم این کاربردها روتو چند سری مقاله بنویسم و هر مقاله تمرکزش روی یکی از کاربردهای ML باشه.
مساله اولی رو که برای این مورد اتخاب کردم مساله پیش بینی قیمت ملک بود که تو لینک زیر می تونید مطالعش کنید.
مساله بعدی، مساله بهینه سازی نرخ بازگشت مشتری(Customer Retention Optimization-CRO) است. البته وقتی در مورد این موضوع جستجو می کنید احتمالا بعضی جاها این موضوع را با عنوان رویگردانی مشتری(Customer Churn) هم معرفی کردند.
حالا هدف این مساله حل چه موضوعی هست؟ هدف اینه که ما توی کسب و کارمون متوجه بشیم که چه مشتری ای احتمال داره از ما رویگردان بشه. یا احتمال اینکه مشتری دیگه از ما خرید نکنه چقدره. در واقع وقتی ما قبل از اینکه مشتری تصمیم بگیره دیگه از ما خرید نکنه، این موضوع رو بفهمیم و از اون بهتر اگه دلیلش رو بفهمیم، می تونیم بریم سراغش و از دلش در بیاریم. حالا چطور بفهمیم: از تجربه و رفتار گذشته مشتری به این تشخیص میریسم.
حالا که مساله رو فهمیدیم برسیم سراغ نحوه حل این مساله با استفاده از ML. قبل از شروع، باید پایپلاین یه پروژه ML رو باید بدونیم. در مورد جزییات این پایپلاین بعدا حتما یه مقاله دیگه می نویسم. ولی فعلا بیایید رو پروژه خودمون تمرکز کنیم. شکل زیر مسیر پروژه ما رو مشخص می کنه.
هدف اصلی هر مهندس ماشین لرنینگ ایجاد یه مدل برای اجرا در سیستم و کمک به بهبود فرایند ها است. یعنی ما یه مدل میسازیم (Data Modeling) تا در سیستم خودمون پیاده سازیش(Deployment) کنیم. ولی برای ساخت مدل ما نیاز به جمع آوری دیتا (Data Collection) داریم. همونطور که تو شکل می بینیم این سه بخش به صورت رفت و برگشت با هم در ارتباط هستند و ممکنه بعد از پیاده سازی مدل به این نتیجه برسیم که مدل ساخته شده دچار مشکله و باید اصلاحش کنیم و یا دیتاهای جدید به سیستم اضافه کنیم که کارمون رو بهتر کنه. فرایندی که در بخش روشن شکل نشون داده شده کل فرایند مدلسازی داده هاست. تو اینجا می خواهیم در مورد تک تک بخش ها برای مساله خودمون پبش بریم.
خوب خوب. بالاخره کار شما به عنوان یک مهندس ML شروع شد. شما وارد یه شرکت اپراتور تلفن همراه شدید. مدیر بازاریابی شما رو تو دفترش می خواد و میگه ما دچار یه نگرانی شدیم. بعضی از مشتری های ما بعد از یه مدت استفاده از سرویس ما، میرند و از سرویس های رقبا مثل همراه اول و ایرانسل استفاده می کنند. حالا ما میخوایم قبل از اینکه مدت اشتراک مشتری هامون تموم بشه، بفهمیم که آیا قراره سرویس ما رو دوباره استفاده کنند یا نه. اگه ما قبل از اتمام اشتراکشون بفهمیم که اونها قراره دیگه از ما نخرند با یه سری کارای تبلیغاتی و پروموشنی نظرشون رو برگردونیم. حالا شما به عنوان مهندس ML شرکت باید اینکار رو برای ما بکنید.
پس مساله ما مشخص شد. آیای یک مشتری که در حال حاضر داره از سرویس تلفن همراه شما استفاده می کنه ، دوباره اشتراکشو تمدید کنه و یا از رقبا خرید کنه؟
حالا که مساله ما مشخص شد باید داده های مورد نظر آماده کنیم. صادقاته بگم، سخت ترین و اعصاب خورد کن ترین فاز هر پروژه ماشین لرنینگ، جمع آوری داده و آماده سازی اونهاست. شاید 50 درصد زمان پروژه های ماشین لرنینگ روی تعریف مساله و جمع آوری داده می گذره.
فرض کنید تو همین پروژه شما از مدیر مارکتینگ می پرسید که چه داده هایی از مشتری ها در دسترس دارید. احتمالا تو بعضی از شرکت ها این جوابو به شما میدن. "از اون بابت خیالت راحت باشه. ما هر داده ای که لازم دارید رو به شما می دیدم". اما واقعیت اینه؟ درصد زیادی از مواقع اینطور نیست و شاید مجبور باشید از زمان شروع این فاز از مدیر مارکتینگ بخواید که لطفا از این به بعد داده های لازم رو جمع آوری کنید.
حالا داده های لازم رو چطور شناسایی کنیم؟ ما باید ببینیم چه ویژگی هایی(features) از مشتری به ما کمک می کنه که به بهترین شکل ممکن رفتار آینده اون رو شناسایی کنیم.
این موضوع نیاز به کمی تجربه داره. تو طول زمان ما کم کم یاد میگیریم که هر مساله با توجه به ماهیتش چه برداری از ویژگی ها رو لازم داره. برای مساله خودمون من یه سرچ انجام دادم و تو مقالات مختلف به مجموعه های مختلفی رسیدم. تو شکل زیر ستون فاکتورها بخشیه که تقریبا می تونه در تمام مسایل یکسان باشه. درواقع برای هر مساله شما این فاکتورها رو لازم دارید و برای تعیین هر کدوم از این فاکتورها باید یسری فیچر تعریف کنید که نشون دهنده اون فاکتورها باشه. نمونه های این فیچر ها تو ستون example اومده.
برای مساله فعلی ما داده ها رو از سایت kaggle.com استخراج می کنیم. اگه این سایت رو نمیشناسید پیشنهاد می کنم حتما بررسیش کنید، چون کمک های خوبی تو پروژه های یادگیری ماشین به شما بکنه. داده ها رو می تونید از اینجا دانلود کنید.
خوب الان ما فاز یک و دو رو به پایان رسوندیم. بیش تر از این نمی تونم تاکید کنم که زمان بر ترین فازهای هر پروژه یادگیری ماشین فاز یک و دو خواهد بود. پس برای یه مهندس یادگیری ماشین، بزرگترین چالشش، پیاده سازی سیستمیه که بتونه خیلی بهینه به داده ها دسترسی داشته باشه.
تو این بخش پارامترهایی که مدل مارو ارزیابی می کنند تعریف می کنیم. در واقع چطور بفهمیم که یک مدل بهتر از مدل دیگه است. این پارامترها بعضی اوقات از پیش تعریف شده اند و بعضی اوقات باید با توجه به مساله خودمون تعریفشون کنیم.
با توجه به نوع مساله ای که ماداریم احتمال باید از یکی از مدلهای طبقه بندی استفاده کنیم. پارامترهای زیادی هم برای بررسی عملکرد یه مدل طبقه بندی تعریف شده.
چهار پارامتری که ما در موردش صحبت خواهیم کرد شامل دقت(Precision)، یادآوری(Recall)، صحت(Accuracy) و آماره اف (F-Score) خواهد بود.
برای محاسبه این پارامترها باید مفاهیمTrue Positive(TP)، False Positive(FP)، True Negative(TN) و False Negative(FN) رو بدونیم.
جدول بالا نشون دهنده تعریف این مفاهیمه. مثلا در صورتی که مدل ما یک داده متعلق به کلاس یک رو در کلاس یک پیش بینی کنه اونقت مقدار TP یک واحد افزایش می کنه.
بر اساس این موارد چهار پارامتر ارزیابی ما به صورت زیر تعریف میشه.
مسلما هر مدلی که پارامتر های بالا در اون اندازه بهتری داشت مدل بهینه تری خواهد بود. تو لینک زیر می تونید در مورد مفاهیم این پارامترها و چند تا پارامتر دیگه که ممکنه برای ارزیابی مدل های طبقه بندی استفاده بشه بیشتر بخونید.
از اینجا به بعد کار ما برای بررسی داده ها و احتمالا کمی کد نویسی شروع میشه. تو بخش بعدی باقی مراحل و نحوه مدلسازی تو پایتون رو با هم انجام خواهیم داد.