پیدا کردن یک شغل خوب در حوزه «داده‌کاوی» (Data Mining) کار ساده‌ای نیست. دانستن چگونگی کار با کتابخانه‌هایی مانند «سایکیت‌لِرن» (scikit-learn) و «ggplot2» برای کسب یک فرصت شغلی مناسب کفایت نمی‌کند. پرسشی که در این وهله مطرح می‌شود این است که راهکار پیدا کردن یک شغل خوب در زمینه داده‌کاوی چیست؟! راه حل، انجام پروژه‌های عملی است که بتوانند مهارت فرد را در تحلیل داده و کار با ابزارها نشان دهند. یکی از گزینه‌های خوب در این راستا انجام تحلیل جهت نشان دادن «تاثیر کسب‌و‌کار» (Business Impact) است. منظور از «تاثیر کسب‌و‌کار» چیست؟ هر کسب‌و‌کاری در پایان روز روی چیزی کار می‌کند که مربوط به بخش تجاری کارهای آن است. این موضوع می‌تواند کاهش هزینه‌ها، افزایش درآمد، بهبود تجربه مشتریان و مواردی مانند این‌ها باشد. در این مطلب چگونگی ساخت یک مدل «پیش بینی ریزش مشتریان» (Customer Churn) که مساله مهمی در تاثیر کسب‌و‌کار محسوب می‌شود، به صورت گام به گام آموزش داده خواهد شد. مباحثی که در ادامه مورد بررسی قرار می‌گیرند به شرح زیر هستند:

زمینه کسب‌و‌کار

در آغاز هر پروژه «علم داده» (Data Science) جهان واقعی، نیاز به پرسیدن چند سوال است. برخی از آن‌ها در ادامه بیان شده‌اند.

  • مساله‌ای که برای حل آن تلاش می‌شود چیست؟
  • راهکار بالقوه برای انجام این کار چیست؟
  • چگونه می‌توان مدل را ارزیابی کرد؟

اکنون، در ادامه موضوع رویگردانی مشتریان، فرض می‌شود که داده‌کاو در یک شرکت مخابراتی کار می‌کند. یک روز رئیس شرکت از او می‌پرسد: «چگونه می‌توانیم کسب‌و‌کار خودمان را با استفاده از داده‌های موجود ارتقا دهیم؟».

پیش‌بینی رویگردانی مشتریان با داده‌کاوی

مساله‌ای که قرار است حل شود چیست؟

داده‌کاو پس از بررسی داده‌های موجود، متوجه می‌شود به دست آوردن مشتری جدید نسبت به حفظ مشتریان موجود پنج برابر هزینه بیشتری برای سازمان در پی دارد. اکنون سوالی که بیشتر روی آن متمرکز می‌شود این است که: «چگونه می‌توان نرخ حفظ مشتری را افزایش داد تا هزینه‌ها کاهش پیدا کنند؟».

راهکار بالقوه چیست؟

برای دسترسی داشتن به داده‌های مشتریان، می‌توان یک مدل یادگیری ماشین را ساخت که «رویگردانی مشتریان» را پیش‌بینی کند. برای ممانعت از پیچیده شدن مسائل با چیزی که بسیار خلاصه و قابل ارائه به مدیر است، داده‌کاو از مدل «رگرسیون لجستیک» (Logistic Regression) استفاده می‌کند.

چگونه می‌توان مدل را ارزیابی کرد؟

در اینجا از یک سری از سنجه‌های ارزیابی مدل از جمله «منحنی مشخصه عملکرد سیستم» (Receiver Operating Characteristic | ROC)، «ناحیه زیر نمودار» (Area Under the Curve | AUC)، «حساسیت» (Sensitivity) و «ویژگی» (Specificity) و سنجه‌های مرتبط با کسب‌و‌کار (صرفه‌جویی در هزینه‌ها) استفاده می‌شود.

پیش‌بینی رویگردانی مشتریان با داده‌کاوی و R

رگرسیون لجستیک

اکنون آشنایی با زمینه کسب‌و‌کار حاصل و بر همین اساس دامنه مساله تعیین شد. مدل‌های «یادگیری ماشین» (Machine Learning) متعددی وجود دارند که می‌توان از آن‌ها استفاده کرد. همه این روش‌ها مزایا و معایب خود را دارند. برای ساده نگه‌داشتن مسائل، در اینجا از رگرسیون لجستیک استفاده می‌شود. رگرسیون لجستیک یک «دسته‌بند خطی» (Linear Classifier) محسوب می‌شود. با توجه به اینکه هدف تعیین این است که کدام مشتریان رویگردان هستند و کدام نیستند، دسته‌بندی دقیقا رویکرد مورد نیاز این مساله محسوب می‌شود.

پیش‌بینی رویگردانی مشتریان با داده‌کاوی

این مدل عالی است به این دلیل که «تفسیر» آن نسبت به بسیاری از دیگر مدل‌ها مانند «جنگل تصادفی» (Random Forest) ساده‌تر خواهد بود. منظور از تفسیر، آن است که می‌توان به سادگی رابطه بین ویژگی‌ها و خروجی را دید. ویژگی منفی رگرسیون لجستیک، دارا بودن «سوگیری» (Bias | بایاس) به سمت برازش‌های خطی است. اگر مرزهای تصمیم خطی نباشند، عملکرد این روش ممکن است به خوبی جنگل تصادفی نباشد. اساسا، باید موازنه‌ای بین تفسییرپذیری و انعطاف‌پذیری مدل وجود داشته باشد. این موضوع همیشه هنگام پیاده‌سازی مدل‌های یادگیری ماشین در نظر گرفته می‌شود.

آماده‌سازی داده‌ها

گام بعدی آماده‌سازی داده‌ها است. این جریان کاری از پروژه‌ای به پروژه دیگر متفاوت است، در مثال این مطلب، از جریان کاری زیر استفاده خواهد شد.

۱. ایمپورت کردن داده‌ها

کار با ایمپورت کردن داده‌ها (+) آغاز می‌شود. در اینجا از کتابخانه Tidyverse استفاده خواهد شد. این کتابخانه از جمله مواردی است که دانشمندان داده‌ای که با R کار می‌کنند باید با آن آشنا باشند.

در قطعه کد بالا، «مسیر» (PATH) در آغاز کار روی دایرکتوری سیستم کاربر تنظیم شده. نکته‌ای که باید به آن توجه کرد آن است که متغیر path_loc را باید به دایرکتوری در حال کار، یعنی جایی که کد و مجموعه داده قرار می‌گیرند تغییر داد. از آنجا که این یک فایل CSV است، تابع read_csv برای خواندن داده‌ها در یک دیتافریم df مورد استفاده قرار گرفته.

۲. نگاه کلی به داده‌ها

پس از آنکه داده‌ها ایمپورت شدند، بهتر است نگاه کلی به آن‌ها انداخته شود. در همین راستا، ابعاد و نام ستون‌های ویژگی‌ها مورد بررسی قرار می‌گیرند.

می‌توان مشاهده کرد که ۲۱ ویژگی و ۷۰۴۳ سطر وجود دارد. ویژگی‌های متنوعی مانند TotalCharges و tenure موجود هستند. خروجی که مقرر شده پیش‌بینی شود، «churn» (رویگردانی) است. در این راستا، دیگر تابعی که مورد استفاده قرار می‌گیرد glimpse است که امکان بررسی سریع ویژگی‌ها را همراه با جزئیات بیشتر می‌دهد.

۳. پاک‌سازی داده‌ها

پیش از آنکه از مدل رگرسیون لجستیک استفاده شود، نیاز به انجام پاک‌سازی‌های کوچکی است. این کار با تغییر دادن متغیرهای «کاراکتر» (character) به «فاکتور» (factor) آغاز می‌شود.

در این کد از تابع mutate_if بسته dplyr (+) برای تغییر متغیر کاراکترها به نوع فاکتورها استفاده می‌شود. %>% تحت عنوان متغیر پایپ شناخته شده است. این متغیر از کتابخانه magrittr (+) می‌آید که بخشی از Tidyverse محسوب می‌شود. ایده اصلی این عملگر آن است که کد را خواناتر کند. اکنون می‌توان متغیر SeniorCitizen را از «صحیح» (integer) به «فاکتور» (factor) تغییر داد.

سپس، «مقادیر ناموجود» (missing values) مورد بررسی قرار می‌گیرند. این کار با تابع map از کتابخانه purrr (+) انجام می‌شود. purrr نیز یکی از کتابخانه‌های مجموعه بسته‌های Tidyverse است.

می‌توان مشاهده کرد که TotalCharges به تعداد ۱۱ مقدار ناموجود دارد. برای جایگزینی این مقادیر ناموجود، می‌توان آن‌ها را با «میانه» (median) جایگزین کرد.

البته این علمی‌ترین و بهترین رویکرد برای جایگزین مقادیر ناموجود نیست. راهکارهای متعدد و بهتری موجود هستند که امکان بررسی آن‌ها در این مطلب وجود ندارد. در این گام، آخرین چیزی که باید حذف کرد، ویژگی CustomerID است. این ویژگی، یک شناساگر یکتا برای هر مشتری است، و احتمالا هیچ اطلاعات مفیدی در اختیار مدل قرار نمی‌دهد.

۴. بخش‌بندی داده‌ها

برای حصول اطمینان از اینکه مدل دچار بیش‌برازش نمی‌شود، داده‌ها به دسته‌های «تست» (Test) و «آموزش» (Train) تقسیم می‌شوند. به این کار «اعتبارسنجی متقابل» (Cross Validation) گفته می‌شود. مدل روی یک مجموعه آموزش تحت آموزش قرار می‌گیرد و سپس کارایی آن با استفاده از مجموعه تست ارزیابی می‌شود. به طور تصادفی ٪۷۵ از داده‌ها برای مجموعه داده آموزش انتخاب می‌شوند و ٪۲۵ داده‌ها برای تست خواهند بود. آزمودن نسبت درصدهای گوناگون برای مقایسه نتایج، به علاقمندان توصیه می‌شود (مثلا نسبت ٪۸۰ به ٪۲۰ و ٪۶۰ به ٪۴۰ برای مجموعه‌های آموزش و تست). برای تقسیم داده‌ها، از بسته Caret (+) استفاده می‌شود. اکنون کار با ایمپورت کردن Caret آغاز و یک seed تنظیم می‌شود تا قابلیت تولید مجدد نتایج مورد بررسی قرار بگیرد.

سپس، از تابع createDataPartition برای انتخاب ٪۷۵ از داده‌ها برای استفاده در مجموعه آموزش استفاده می‌شود. این امر منجر به انتخاب یک نمونه تصادفی از ٪۷۵ سطرها می‌شود.

در نهایت، دیتافریم‌های آموزش و تست با استفاده از نمونه سطرها از بالا ساخته می‌شوند.

روش‌های دیگری مانند «اعتبارسنجی متقابل K-fold» وجود دارد. برای کسب اطلاعات بیشتر پیرامون چگونگی پیاده‌سازی k-fold در Caret، کافی است دستور (”help(“createFolds در کنسول R وارد شود.

برازش مدل

اکنون که مدل به دو بخش داده‌های تست و آموزش تقسیم بندی شد، زمان برازش مدل فرا رسیده است. برای پیاده‌سازی رگرسیون لجستیک، از تابع glm مربوط به «مدل‌های خطی عمومی شده» (Generalized Linear Models | GLM) استفاده می‌شود. انواع متفاوتی از GLM‌ها وجود دارند که رگرسیون لجستیک نیز از این جمله است. برای تعیین اینکه قصد اجرای رگرسیون لجستیک دودویی وجود دارد، از آرگومان family=binomial استفاده می‌شود. در ادامه کد کامل برازش مدل رگرسیون لجستیک آورده شده است.

در بخش بعدی، پیش‌بینی انجام و مدل ارزیابی می‌شود.

انجام پیش‌بینی

اکنون که مدل برازش شد، زمان بررسی چگونگی عملکرد آن فرا رسیده است. برای انجام این کار، پیش‌بینی‌ها با استفاده از مجموعه داده test انجام می‌شوند. این مجموعه داده به مدل fit از بخش قبل پاس داده می‌شود. برای پیش‌بینی احتمال‌ها ”type=”response تعیین می‌شود.

اکنون، این احتمال‌ها به پاسخ‌های دودویی تبدیل می‌شوند، زیرا متغیر Churn که قصد پیش‌بینی آن وجود دارد، «بلی» یا «خیر» است. این مورد با استفاده از تابع contrasts به سرعت انجام می‌شود.

با توجه به نتایج، می‌توان مشاهده کرد که Yes با استفاده از ۱ رمزنگاری شده. حالا که رمزنگاری پاسخ مشخص است، می‌توان نتایج پیش‌بینی شده را به پاسخ‌های Yes و No تبدیل کرد. آستانه پاسخ روی 0.5 تنظیم می‌شود، بنابراین، اگر یک احتمال پیش‌بینی شده بالاتر از ۰.۵ باشد، می‌توان پاسخ را به Yes تبدیل کرد. گام نهایی، تبدیل کردن پاسخ‌های کاراکتری به «انواع فاکتور» (Factor Types) است. بدین ترتیب، رمزنگاری برای مدل رگرسیون لجستیک صحیح است.

بعدا نگاهی عمیق‌تر به آستانه می‌شود، بنابراین جای نگرانی پیرامون چرایی قرار دادن این مقدار برابر با ۰.۵ وجود ندارد. در حال حاضر این مقدار با توجه به هدف این مثال، برابر با این عدد قرار داده شده است. بخش مهمی از انجام پیش‌بینی «ارزیابی» (Evaluating) و «اعتبارسنجی» (Validating) مدل انجام پیش‌بینی است. اکنون نگاهی همراه با جزئیات به برخی از سنجه‌های ارزیابی انداخته و از یک روش دقیق با نام «اعتبارسنجی متقابل k-fold» برای اعتبارسنجی مدل استفاده می‌شود.

ارزیابی مدل

پس از آنکه پیش‌بینی انجام شد، زمان ارزیابی مدل فرا می‌رسد. یک ابزار مناسب برای انجام سریع این کار، استفاده از تابع confusionMatrix از Caret است. همچون نتایج واقعی، از test$Churn به آرایه پیش‌بینی‌های glm.pred خوراک داده می‌شود. در نهایت، کلاس مثبت با استفاده از ”positive=”Yes به صورت «Yes» تعیین می‌شود.

این تابع، «ماتریس درهم‌ریختگی» (Confusion Matrix) و دیگر موارد آماری را تولید می‌کند. یک ماتریس در هم‌ریختگی، نشان می‌دهد که چه تعداد پیش‌بینی صحیح و غلط برای هر کلاس انجام شده. در ادامه چشم‌اندازی از ماتریس درهم‌ریختگی برای مدل موجود، ارائه شده است.

می‌توان مشاهده کرد که مدل به درستی «۱۱۶۵» بار، «No» را پیش‌بینی کرده و ۲۰۵ بار در حالیکه پاسخ صحیح «Yes» بوده، مدل به غلط «No» پیش‌بینی کرده است. به همین ترتیب، ۲۶۲ بار هنگامی که پاسخ صحیح «Yes» بوده به درستی پیش‌بینی کرده و ۱۲۸ بار به اشتباه پاسخ را «No» پیش‌بینی کرده است. صحت کلی برابر با ۸۱٪ است. یک مدل پایه ساده، پیش‌بینی دسته اکثریت محسوب می‌شود که در این مثال «No» است. اگر فقط کلاس اکثریت پیش‌بینی شود، صحت ٪۷۳ می‌شود. ۱۷۶۰ مشاهده در مجموعه تست و ۱۲۹۳ مورد «No» وجود دارد. اگر ۱۲۹۳ تقسیم بر ۱۷۶۰ شود، صحت به ۷۳٪ می‌رسد.

از دیگر سنجه‌های مفید می‌توان به «حساسیت» (Sensitivity) و «ویژگی» (Specificity) اشاره کرد. از آنجا که کلاس‌ها اندکی نامتوازن هستند، $$\text{~73%=”No”,~27%=”Yes”}$$ این سنجه‌ها می‌توانند مفیدتر واقع بشوند. حساسیت نرخ «مثبت صحیح» (True Positive) را نشان می‌دهد. این مقدار، سنجه‌ای از میزان صحت پیش‌بینی کلاس‌های مثبت (در این مثال کلاس «Yes») است. تابع «confusionMatrix» این میزان را به طور مستقیم گزارش می‌کند. اما اگر کاربر تمایل داشته باشد این میزان را خودش محاسبه کند، باید «مثبت صحیح» (True Positive) را بر مجموع «مثبت صحیح» (True Positives) و «منفی غلط» (False Negatives) تقسیم کند. در ادامه چگونگی انجام این کار نمایش داده شده است.

حساسیت برای ارزیابی مدل داده‌کاوی

دیگر سنجه مفید، «ویژگی» (Specificity) است که نرخ «منفی صحیح» را نشان می‌دهد. این مقدار سنجه‌ای از میزان پیش‌بینی صحیح کلاس منفی است. در ادامه، چگونگی انجام این کار شرح داده شده.

ویژگی برای ارزیابی مدل در داده‌کاوی

و سنجه دیگری که در این راستا مفید به شمار می‌آید، «ناحیه زیر منحنی مشخصه عملکرد سیستم» (Area Under the Receiver Operating Characteristic | ROC) است که AUC نیز نامیده می‌شود. در این روش که برای اولین بار در طول جنگ جهانی دوم برای تحلیل سیگنال‌های رادارها پیاده‌سازی شد، ROC نمودار نرخ مثبت صحیح و نرخ مثبت غلط بود. اکنون به مدل اصلی که ۰.۵ در آن به عنوان آستانه «Yes» (یا مثبت) پیش‌بینی‌ها در نظر گرفته شده بازگشته و پیرامون آن صحبت می‌شود. حقیقتا توجیه خوبی برای انتخاب ۰.۵ وجود ندارد. ROC ابزار خوبی است، زیرا TPR را در قیاس با FPR از آنجا که آستانه متنوع است، ترسیم می‌کند. می‌توان نموداری از منحنی ROC را با استفاده از کتابخانه ROCR ترسیم کرد. کد کامل به زبان R برای این کار، در ادامه آمده است.

ناحیه زیر منحنی مشخصه عملکرد سیستم

چنانچه پیش‌تر بیان شد، دیگر سنجه مفید ناحیه زیر منحنی ROC است. AUC می‌تواند مقداری بین ۰ و ۱ داشته باشد که در آن ۱ بهترین مقدار است. این راهکاری مناسب برای تبدیل ROC به یک عدد یکتا به منظور ارزیابی مدل است. کد R برای ارزیابی مدل در ادامه آمده.

مدل دارای AUC برابر با 0.85 است که بسیار خوب به حساب می‌آید. اگر فقط حدس‌های تصادفی زده شود، ROC  یک خط ۴۵ درجه می‌شود. این مقدار در واقع یعنی AUC برابر با 0.5 است. عملکرد مدل موجود فراتر از حدس‌های تصادفی است و این یعنی دستکم مدل اندکی ارزش ایجاد می‌کند.

اعتبارسنجی متقابل K-fold

اکنون که مدل آموزش دید، تست و ارزیابی شد، زمان آن رسیده که با دقتی بیشتر ارزیابی شود. از همین رو، مجموعه داده را به دو بخش داده‌های تست و آموزش تقسیم کرده تا بتوان مدل را مورد ارزیابی قرار داد. این کار راهی مناسب برای آزمودن مدل و پیشگیری از «بیش‌برازش» (Overfitting) است. و رویکرد بهتر برای تقسیم داده‌ها روش «اعتبارسنجی متقابل K-Fold» یا «K-fold Cross Validation» است.

در این روش ارزیابی مدل، داده‌ها به طور تصادفی با انتخاب تعداد مشخصی «Fold» به مجموعه‌های تست و آموزش تقسیم می‌شوند. در مثال بالا، تعداد fold‌ها برابر با k = ۴ است. پس از آنکه مدل روی هر fold اجرا شد، میانگین سنجه ارزیابی از هر یک محاسبه می‌شود. بنابراین، میانگین هر یک از چهار مقدار ROC با یکدیگر محاسبه می‌شوند. این راهکاری مناسب برای امتحان کردن و پیش‌گیری از بیش‌برازش در مدل است. یک تعداد متداول برای fold‌ها ۱۰ است، بنابراین در اینجا از این عدد استفاده می‌شود. همچنین، این فرآیند سه بار تکرار می‌شود تا دقت فنی رویکرد اندکی افزایش یابد. کد کامل نوشته شده به زبان R برای این کار در ادامه آمده است.

در قطعه کد بالا، کار با تنظیم کردن تنظیمات k-fold CV با استفاده از تابع trainControl آغاز می‌شود. همه ورودی‌ها کاملا سر راست هستند. همانطور که پیش‌تر بیان شد، از ۱۰ fold که سه بار تکرار می‌شوند استفاده خواهد شد. در گام بعدی مدل آموزش داده می‌شود. همانطور که پیش‌تر این کار انجام شد، از خانواده «binomial» از متد «glm» برای انجام آن استفاده می‌شود. برای ارزیابی مدل، از «ROC» استفاده می‌شود. مدل در واقع AUC را گزارش می‌دهد، اما روشی که باید آن را در تابع train تعیین کرد، استفاده از ”metric=”ROC است. دیگر نکته‌ای که ممکن است توجهات را به خود جلب کند، تغییر دادن کلاس مثبت به «Yes»، درست پیش از کد برای تابع trainControl است. این کار با هدف مقایسه حساسیت و ویژگی برای نتایج پیشین انجام می‌شود. این مورد صرفا یک تغییر کوچک در تابع است و نیاز نیست بیش از اندازه روی آن وقت گذاشت. نتایج مشابه آنچه هستند که پیش‌تر حاصل شد. همچون قبل، AUC برابر با ۰.۸۵ است. این مورد در خروجی به عنوان ROC ارائه شده، در حالیکه در حقیقت AUC است. «نرخ مثبت صحیح» (true positive rate) (همان حساسیت یا sensitivity) برابر با ۰.۵۵ و نرخ منفی صحیح (true negative rate) (همان ویژگی یا specificity) برابر با ۰.۹۰ است.

تاثیر کسب‌و‌کار

تا این لحظه از اعتبارسنجی متقابل k-fold و رگرسیون لجستیک برای پیش‌بینی رویگردانی مشتریان استفاده شده است. همچنین، نگاهی به سنجه‌های مفید ارزیابی مانند AUC، حساسیت و ویژگی انداخته شد. همه این موارد خوب است، اما حالا چه؟ اگر داده‌کاوی با این نتایج نزد مدیرعامل برود و نتایج را به تنهایی ارائه کند او خواهد گفت: «خب که چی؟». هدف نهایی از توسعه این مدل، نشان دادن تاثیر کسب‌و‌کار است. در این مثال، این کار منجر به «صرفه‌جویی در هزینه‌ها» می‌شود. در ادامه، چگونگی صرفه‌جویی در هزینه‌ها به صورت گام به گام تشریح خواهد شد. در این راستا مفروضاتی پیرامون هزینه‌های گوناگون در نظر گرفته می‌شود. فرض می‌شود که «هزینه جلب مشتری» (customer acquisition cost) در صنعت مخابرات تقریبا ۳۰۰ دلار است.

اگر پیش‌بینی شود که یک مشتری رویگردان نیست، اما او این کار را در واقعیت انجام دهد (منفی غلط یا false negative)، سازمان باید ۳۰۰ دلار برای به دست آوردن جایگزینی برای مشتری از دست رفته هزینه کند. اکنون، فرض می‌شود که به دست آوردن مشتری جدید، پنج برابر پرهزینه‌تر از حفظ مشتری کنونی است. بنابراین اگر سازمان پیش‌بینی کند که مشتری رویگردانی خواهد کرد، باید ۶۰ دلار برای آن هزینه شود. گاهی، مشتریانی که رویگردانی خواهند کرد به درستی پیش‌بینی می‌شوند (مثبت صحیح یا True Positive | TP)، و گاهی به اشتباه پیش‌بینی می‌شود که مشتری ممکن است رویگردانی داشته باشد (مثبت غلط یا False Positive | FP). در هر دو شرایط، ۶۰ دلار برای باقی ماندن مشتری هزینه خواهد شد. در نهایت، سناریو این است که به درستی پیش‌بینی شود که مشتری رویگردان نیست (منفی صحیح یا True Negative | TN). در این سناریو هیچ پولی خرج نخواهد شد. این‌ها مشتریان خوشحالی هستند که به درستی به عنوان خوشحال تعیین شده‌اند. در ادامه خلاصه‌ای از هزینه‌ها بیان شده است.

  • FN (پیش‌بینی اینکه یک مشتری رویگردان نیست، اما مشتری در حقیقت رویگردان است): ۳۰۰ دلار
  • TP (پیش‌بینی اینکه یک مشتری رویگردان است و آن مشتری در واقعیت نیز رویگردان باشد): ۶۰ دلار
  • FP (پیش‌بینی اینکه یک مشتری رویگردان است، در حالیکه واقعا رویگردان نیست): ۶۰ دلار
  • TN (پیش‌بینی اینکه یک مشتری رویگردان نیست، و در حقیقت نیز رویگردان نباشد): ۰ دلار

اگر تعداد هر نوع پیش‌بینی (FP ،TP، FP و TN) در هزینه مربوط به هر یک از آن‌ها ضرب و مجموع آن‌ها محاسبه شود، می‌توان هزینه مربوط به مدل را به دست آورد. معادله انجام این محاسبات مطابق فرمول زیر است.

(Cost = FN($300) + TP($60) + FP($60) + TN($0

به عنوان مثال، فرض می‌شود که تعداد پیش‌بینی‌های هر مورد به شرح زیر است:

  • FN = 10
  • TP = 5
  • FP = 5
  • TN = 5

10*($300) + 5*($60) + 5*($60) + 5*($0) = $3600

بنابراین، هزینه کلی ۳۶۰۰ دلار خواهد بود. اکنون، این ارزیابی هزینه روی مدل اعمال خواهد شد. کار با برازش مدل و انجام پیش‌بینی به شکل احتمال انجام می‌شود.

سپس، یک بردار آستانه و یک بردار هزینه ساخته خواهد شد.

بردار آستانه، مقدار آستانه را برای هر مدل نگه‌داری می‌کند. پیش‌تر از ۰.۵ به عنوان آستانه استفاده شد، اما اکنون، نگاهی به آستانه‌ها مختلف با افزایش پلکانی ۰.۱ بین ۰ و ۱ (برای مثال ۰.۱، ۰.۲، ۰.۳، ۰.۴، ۰.۵، …، ۰.۹ و ۱.۰) انداخته می‌شود. بردار هزینه، برداری به طول ۱۰ با مقادیر صفر در آغاز است. این بردار با حلقه‌ای از طریق تابع تکمیل و هر آستانه در حین پیش رفتن محاسبه می‌شود. برای ارزیابی هزینه‌ها، از معادله هزینه‌ای مشابه با آنچه پیش‌تر بیان شد، استفاده می‌شود. اکنون، یک حلقه for برای انجام پیش‌بینی با استفاده از آستانه‌های مختلف مورد استفاده قرار می‌گیرد و هزینه هر مورد محاسبه می‌شود.

به جای استفاده از تعداد کل هر خروجی برای FN ،FP ،TN و TP، از درصد به جای آن استفاده خواهد شد. به همین دلیل است که مقادیر که از ماتریس درهم‌ریختگی دریافت و بر ۱۷۶۰ تقسیم شده‌اند. ۱۷۶۰ مشاهده در مجموعه تست وجود دارد، و بنابراین عددی که برای مخرج کسر استفاده شد، از اینجا آمده است. با انجام چنین کاری، «هزینه به ازای هر مشتری» (Cost Per Customer) محاسبه می‌شود. اکنون، فرض می‌شود که شرکت در حال حاضر از چیزی استفاده می‌کند که داده‌کاو آن را «مدل ساده» نامیده است و مقدار پیش‌فرض آستانه آن ۰.۵ است. می‌توان گامی جلوتر رفت و مدل را برازش کرد، پیش‌بینی انجام داد و هزینه را محاسبه کرد. به این مدل cost_simple گفته می‌شود.

در نهایت، می‌توان کل نتایج را در یک دیتافریم قرار داد و نمودار آن‌ها را ترسیم کرد.

محاسبه تاثیر کسب و کار

با نگاهی به نتایج، می‌توان فهمید که حداقل هزینه به ازای هر مشتری در آستانه ۰.۲ حدود ۴۰.۰۰ دلار است. مدل «ساده»، که شرکت در حال حاضر پیاده‌سازی کرده، در آستانه ۰.۵۰ حدود ۴۸.۰۰ دلار به ازای هر مشتری هزینه دارد. اگر فرض شود که شرکت در حال حاضر تقریبا ۵۰۰٬۰۰۰ مشتری دارد، جا‌به‌جایی بین مدل ساده به مدل بهینه، ۴ میلیون دلار صرفه‌جویی در هزینه‌ها را به همراه دارد.

چنین صرفه‌جویی در هزینه‌ها بسته به سایز کسب‌و‌کار می‌تواند تاثیر کسب‌و‌کار قابل توجهی داشته باشد.

نتیجه‌گیری

در این مطلب، یک مدل یادگیری ماشین برای پیش‌بینی رویگردانی مشتریان ارائه شده است. مراحل زیر به این منظور انجام شده:

  • زمینه کسب‌و‌کار
  • رگرسیون لوجستیک
  • آماده‌سازی داده‌ها
  • برازش مدل
  • انجام پیش‌بینی
  • تاثیر کسب‌و‌کار

در نهایت، یک مدل رگرسیون لجستیک بهینه شده برای مساله رویگردانی مشتریان (ریزش مشتریان) حاصل شد. با این فرض که شرکت از مدل رگرسیون لوجستیک با مقدار آستانه پیش‌فرض ۰.۵ استفاده می‌کند، می‌توان فهمید که مقدار بهینه واقعی ۰.۲ است. این کار هزینه به ازای مشتری را از ۴۸.۰۰ دلار به ۴۰.۰۰ دلار کاهش می‌کند. با یک پایگاه مشتریان ۵۰۰۰۰۰ نفری، این کار منجر به صرفه‌جویی سالانه ۴ میلیون دلار می‌شود. اگرچه مساله مطرح شده، یک مثال کاملا فرضی بود، اما بسیار شبیه به چیزی است که در جهان واقعی به وقوع می‌پیوندد.

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

الهام حصارکی (+)

«الهام حصارکی»، فارغ‌التحصیل مقطع کارشناسی ارشد مهندسی فناوری اطلاعات، گرایش سیستم‌های اطلاعات مدیریت است. او در زمینه هوش مصنوعی و داده‌کاوی، به ویژه تحلیل شبکه‌های اجتماعی، فعالیت می‌کند.

بر اساس رای 1 نفر

آیا این مطلب برای شما مفید بود؟

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *