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

تغییرات پروژه از تاریخ 1394/08/30 تا تاریخ 1394/10/05
طبق اصول مشتری مداری، وفاداری برای هر ســازمانی اهمیت استراتژیک دارد. اﻣﺮوزه، ﺷﻨﺎﺧﺖ و پیش بینی ﻧیازﻫﺎی ﻣﺸﺘﺮﻳﺎن ﺑﺮای سازمان ها از اهمیت ﺧﺎﺻـی ﺑﺮﺧﻮردار اﺳﺖ. ﻣﺸﺘﺮی ﺑﻪ ﻋﻨﻮان عاملی ﻛلیدی و ﻣﺤﻮری در ﺑﻘﺎی آﻧﻬﺎ اﻳﻔﺎی ﻧﻘﺶ می ﻛﻨﺪ وجهت گیری کلیه اهداف، اﺳﺘﺮاﺗﮋی ﻫﺎ و ﻣﻨﺎﺑﻊ ﺣﻮل ﻣﺤﻮر ﺟﺬب  و ﻧﮕﻬﺪاری مشتری می ﺑﺎﺷﺪ. ﺣﻔﻆ و ﺗﻘﻮﻳﺖ وفاداری ﻣﺸﺘﺮﻳﺎن ﺑﺮای ﺷﺮﻛﺖ هایی ﻛﻪ دﻏﺪﻏﻪ ﺣﻔﻆ و ﺗﻮﺳﻌﻪ ﺟﺎﻳﮕﺎه رﻗـﺎبتی ﺧﻮﻳﺶ را در ﺑﺎزار دارﻧﺪ، ﭼﺎﻟش اﺳﺘﺮاﺗﮋﻳﻚ
تلقی می ﺷﻮد؛ چالشی که با پیش بینی مشتری های وفادار می تواند تا حدی هموار گردد. بی تردید، مهم ترین وجه تمایز یک مشتری وفادار از یک خریدار عادی از دید فروشنده این است که مشتری برای خرید همواره به او مراجعه نماید. در این جا نشان داده می شود که چگونه از تکنیک های یادگیری ماشین و پیش بینی مبتنی بر یادگیری برای دستیابی به این مهم استفاده می شود.
#مقدمه
در سال های اخیر توجه به وفاداری مشتری به طور قابل توجهی افزایش یافته است به طوری که امروزه وفاداری مشتری به عنوان دستورالعملی برای افزایش کیفیت و درآمد مطرح است. نگهداری مشتریان موجود سودآورتر از جذب مشتریان جدید است. در طول توسعه نرمال روابط مشتری، هزینه بازاریابی و فروش به مشتریان موجود به تدریج کاهش می یابد و حاشیه کلی توسعه به طور بالقوه افزایش می یابد. چنین مواردی اهمیت پیش بینی مشتریان وفادار را دو چندان کرده است.

به طور کلی پیش بینی مشتریان وفادار با توسعه یک مدل پیش گو [^1] آغاز می شود.  اولین گام در توسعه چنین مدلی جمع آوری داده هایی خاص در مورد هر مشتری است که ماهیت این داده ها در بخش ۱.۳ توضیح داده خواهد شد. داشتن چنین داده هایی می تواند برای برآورد احتمال آنکه مشتری  مجددا در یک بازه زمانی معین در آینده از فروشنده ای خاص خرید کند، کفایت نماید.

## بررسی مسئله
###هدف
هدف مسئله پیش بینی آن است که چه مشتریانی برای خرید مجددا به یک فروشنده خاص باز می گردند.
توجه شود که در این مسئله تعیین نوع وفاداری مشتری بخشی از هدف نیست، بلکه هدف آن است که وفادار بودن یا نبودن یک مشتری بررسی شود. برای آنکه منظور از  نوع وفاداری مشخص شود، ذکر این نکته ضروری است که همواره وفاداری به صورت پیوستاری در نظر گرفته می شود که از وفاداری با ثبات تا وفاداری بی ثبات گسترده است. این موضوع در مثال زیر به خوبی بیان شده است. 

فرض کنید دو محصول مختلف A,B در یک فروشگاه وجود دارد.
**۱ –  وفاداری با ثبات : **مشتریانی که در تمام اوقات یک محصول یکسان را می خرند : A,A,A,A ، نشان دهنده این نوع وفاداری است. 
**۲ –  وفاداری نسبی یا موقت : **خریدارانی که به دو یا سه محصول وفادار می مانند :  A ، A ، B ، A ، B ، نشان دهنده این نوع رفتار خرید است. 
**۳ –  وفاداری بی ثبات : **مشتریانی که پس از چند بار خرید از یک مارک یا محصول ، محصول یا مارک دیگر را خریداری می کنند A ، A ، A ، B ، B ، B
 
در واقع در این مسئله تنها مشخص می گردد که آیا یک مشتری وفادار است یا خیر (و به عبارت دقیق تر ، میزان احتمال وفاداری برای یک فرد با روش های موجود تعیین می گردد)، اما آنکه اگر مشتری وفادار است کدام یک از رفتار های وفاداری را داراست (و به عبارتی به چه احتمالی خریدار از نوع  وفادار با ثبات ، نسبی و بی ثبات است)  جزئی از هدف در این مسئله نیست. در حالت کلی، این موضوع می تواند مسئله ای پیچیده تر و چالش بر انگیز تر از مسئله کنونی باشد و در حوزه مدل های توصیفی [^2] پیشگو قرار می گیرد.

###مدل
* به طور کلی هر دو مدل توصیفی و پیشگو در حوزه [فرگشاشناسی پیشگو](https://en.wikipedia.org/wiki/Predictive_analytics) [^3] قرار دارند. همان طور که پیشتر نیز اشاره شد، پیدا کردن مشتریان وفادار با توسعه یک مدل پیشگو صورت خواهد گرفت. در این قسمت به اختصار به تفاوت چنین مدلی با یک مدل توصیفی پرداخته می شود.
**۱ –  مدل پیشگو: **فرآیند به کارگیری یک مدل آماری یا یک الگوریتم داده کاوی بر روی یک داده خاص که با هدف پیش گویی مشاهدات آینده صورت گیرد. در واقع صرف نظر از دیدگاه پایه روش ها،  هر روشی ( مانند بیز ) که در مورد خروجی مطلوبمان پیشگویی داشته باشد یک مدل پیشگو است. در این مدل ها، در حالت خاص بر پیش بینی غیرتصادفی[^34] تاکید می شود که در آن هدف پیش بینی مقدار متغیر خروجی فرضی y با در دست داشتن متغیر ورودی فرضی x برای مشاهدات جدید است[5].
**۲ – مدل توصیفی: **این مدل ها ارتباط بین داده ها را کمی می کنند به طوری که معمولا از آنها برای دسته بندی مشتریان استفاده می شود. بر خلاف مدل های پیشگو که بر آنالیز رفتاری یک مشتری خاص تمرکز دارند، مدل های توصیفی هرگونه ارتباط موجود میان مشتریان و محصولات را شناسایی می کنند. همچنین بر خلاف مدل های پیشگو، در مدل توصیفی این گونه نیست که هر مشتری بر اساس احتمال انجام یک عمل خاص ( مثلا خرید مجدد ) ارزش گذاری یا رتبه بندی شود. در عوض، از چنین مدل هایی به عناون مثال برای دسته بندی مشتریان بر اساس نوع محصولات مورد علاقه استفاده می شود[5].

###دادگان
بدیهی است که از دادگان موجود در صفحه مسابقه در این جا استفاده خواهیم کرد. البته با این تغییر که حجم بالای داده های مربوط به تراکنش ها که حدود 22 گیگابایت در حالت غیر فشرده و برابر 350 میلیون سطر است، به حدود 1.6 گیگابایت و 1527 میلیون سطر کاهش می یابد. این کار با استفاده از یک [کد](https://www.kaggle.com/c/acquire-valued-shoppers-challenge/forums/t/7666/getting-started-data-reduction/) پایتون صورت می گیرد. 

## اصطلاحات
پیش از هر چیز، توجه به واژگان و اصطلاحات زیر حائز اهمیت است:
* **نرخ ریزش[^45]: **میزان درصد مشتری را که یک موسسه در طول  یک مدت معین ( عموما یک سال ) از دست می دهد نشان می دهد.
به عنوان مثال زمانی که یک موسسه با نرخ ریزش ۲۰ درصد عمل می کند ( نرخ جذب ۸۰ درصد است )، به معنی جانشین شدن یک مشتری در هر ۵ سال است.  به عبارت دیگر، تمام مشتریان درعرض یک مقطع ۵ سالــــه جایگزین می گردند.
* **ارزش طول عمر[^56]: **مقطعی که در طول آن موسسه قادر به تولید درآمد از مشتری است ارزش طول عمر مشتری نامیده می شود و گاهی به اختصار آن را عمر [^67] مشتری می نامند. بدیهی است که این مقدار در مثال فوق برابر ۵ سال است[10].
* **نرخ تراکنش [^78]: **منظور از نرخ تراکنش همان میزان خرید ( نرخ خرید ) است.

## داده های اساسی[^8]
به طور کلی، برای انجام پیش بینی در مورد وفاداری مشتریان دانستن دو چیزداده اساسی[^9] در مورد آنها پر اهمیت است:

** ۱ – تاخر یا تازگی[^910]خرید: **آخرین تراکنشی که خریدار انجام داده است چه زمانی بوده است. 
** ۲ – دفعات یا فرکانس[^101] خرید: **در یک بازه زمانی مشخص،خریدار چه تعداد تراکنش انجام داده است.

تجربه نشان داده است که رفتار گذشته مصرف کننده بهترین پیش بینی کننده رفتار آینده وی است. خریداری که رفتار خرید خود را تکرار می کند یعنی بطور مثال  برای چندمین بار از یک فروشگاه خرید می کند  به احتمال بیشتری  مجددا رفتار خود را تکرار خواهد کرد نسبت به فردی که تنها یک بار خرید داشته و تاکنون آن را تکرار نکرده است. در واقع فرکانس یا تعداد دفعات خرید می تواند عاملی مهم در تعیین احتمال مربوط به خرید مجدد باشد.اما اگر بخواهیم اقدامات آینده مشتری و ارزش وی را با دقت بیشتری پیش بینی نماییم، لازم است زمان انجام آخرین تراکنش ( خرید ) را نیز در نظر بگیریم. در نظر گرفتن عامل تاخر همیشه به ما این قابلیت را خواهد داد تا بفهمیم اکنون چه می گذرد چرا که آن چه که از همه چیز مهم تر است وضعیت فعلی است. در واقع می توان این گونه گفت که با ارزش ترین مشتری ها کسانی هستند که اخیرا خرید کرده اند و نیز رفتار تکرار خرید را دارا بوده اند. خریدارانی که پیشتر رفتار خرید تکراری خود را داشته اند اما اخیرا خرید نکرده اند، از نظر ارزش در رده بعدی  قرار می گیرند[14,3]. 

# کارهای مرتبط
تا به این جا سعی شد مسئله، هدف و اهمیت آن به خوبی تشریح گردد. همچنین مدل و داده های اساسی برای حل مسئله بیان شد. اکنون به معرفی روش های مختلفی می پردازیم که مسئله مورد نظر به کمک آنها حل خواهد شد.

## روش پارتو - توزیع دو جمله ای منفی[^11]
یکی از رایج ترین و البته پیچیده ترین روش هایی که برای پیدا کردن مشتریان وفادار وجود دارد، استفاده از چارچوبی به نام پارتو- توزیع دو جمله ای منفی[^12] است که در سال 1987 توسط شخصی به نام اشمیت لین[^123] مطرح شد. بی تردید این روش یکی از قدرتمند ترین چارچوب ها برای  انجام پیش بینی های لازم در زمینه وفاداری مشتریان است، اما پیاده سازی این مدل به ویژه به هنگام تخمین پارامتر ها بسیار دشوار و  چالش برانگیز است و شاید به همین دلیل باشد که تا به امروز کمتر کسانی روی به پیاده سازی کامل این روش آورده اند[1].
###بررسی روش
در این چارچوب رفتار خرید مشتری مدل می شود ولی ریزش مشتری نادیده گرفته می شود. بدین معنا که در این چارچوب فرض بر این است که مشتریان در یک بازه
زمانی مشخص با یک نرخ ثابت اما به صورت تصادفی[^134] خرید می کنند و سپس غیر فعال می شوند. منظور از غیر فعال شدن مشتری در این روش آن است که فرآیند خرید با یک نرخ ثابت از این پس ادامه پیدا نمی کند. بدیهی است که در مقابل فعال بودن مشتری به معنای آن است که مشتری از دست نرفته است و هنوز عمل خرید را با یک نرخ معینی انجام می دهد.
لازم به ذکر است که در این روش زمان از دست رفتن یا ریزش با استفاده از مدل زمانی پارتو (ترکیب نمایی-گاما ) بیان می شود. همیچنین رفتار خرید مکرر به هنگام فعال بودن با استفاده  از مدل شمارشی توزیع دوجمله ای منفی ( ترکیب پواسن- گاما ) شبیه سازی می گردد. به بیان ساده تر، در این روش برای آنکه مشخص شود آیا مشتری از دست رفته است یا خیر از یک سکه استفاده می کنیم و سپس از یک تاس تا مشخص شود که یک مشتری چه تعداد از اجناس یا اقلام را سفارش خواهد داد[1].
###فرض ها
مدل پارتو – توزیع دوجمله ای منفی مبتنی بر پنچ فرض اساسی است که درک آنها کمک زیادی به حل مسئله خواهد کرد:
**1)** تا زمانی که یک مشتری فعال است، تعداد تراکنش هایی که در یک بازه زمانی به طول $t$ انجام می دهد یک توزیع پواسن با میانگین $\lambda t$ است.
**2)** ناهمگنی[^145] در نرخ ترکنش $\lambda $ در بین مشتریان دارای یک توزیع گاما با پارامتر شکل[^156]  $r$ و پارامتر مقیاس[^167]  $\alpha   $ است.
**3)** هر مشتری طول عمری برابر با $\tau$ دارد. این نقطه از زمان که مشتری در آن غیر فعال می شود یک توزیع نمایی با  نرخ ریزش ای برابر $\mu$ است.
**4)** ناهمگنی در نرخ های ریزش در بین مشتریان دارای یک توزیع گاما با پارمتر شکل $s$ و پارامتر مقیاس $\beta$ است.
**5)** نرخ تراکنش $\lambda $ و نرخ ریزش $\mu$ به طور مستقل از هم در بین مشتریان تغییر می کنند.

###شرح روش
همانطور که در بخش ۱.۳ نیز اشاره شد، در هر مدلی از جمله مدل پارتو- توزیع دو جمله ای منفی دانستن آنکه در یک بازه معین، زمان آخرین تراکنش چه زمانی بوده و نیز چه تعداد تراکنش در آن بازه انجام شده است الزامی است.
نمادی که برای نشان دادن این موضوع استفاده می شود به صورت $(X = x, t_{x} , T )$ است که در آن $x$  تعداد تراکنش های انجام شده در بازه زمانی $(0-T]$ می باشد  و ($ t_{x}$  ($ T \ge t_{x} > 0 $  زمان انجام آخرین تراکنش است . با در دست داشتن این اطلاعات می توان موارد زیر را به بدین صورت تعریف کرد و آنها را محاسبه نمود:

**۱) **مقدار  $E(x(t))$ برابر است با تعداد تراکنش های مورد انتظار در یک بازه زمانی به طول $t$
**۲) **مقدار $P(X(t)=x)$ برابر است با احتمال آنکه در یک بازه زمانی به طول  $t$، تعداد تراکنش هایی برابر $x$ انجام شود. در واقع احتمال آنکه در زمان  $x$ ،$t$ تراکنش انجام شود.
**۳) **مقدار $E(Y(t) | X=x, t_{x}, T)$ برابر است با تعداد تراکنش های مورد انتظار در یک بازه زمانی به طول $(T, T + t]$ برای یک نفر با رفتار $(X = x, t_{x} , T )$

در ادامه با در دست داشتن مقادیر فوق و انجام محاسبات ریاضی مربوطه[2]،  تابع احتمال مدل پارتو - توزیع دو جمله ای منفی بصورت رابطه زیر  بدست خواهد آمد:

$$L(r,\alpha,s,\beta|x,t_{x},T)=\frac{\Gamma(r+x)\alpha^r\beta^s}{\Gamma(r)}(\frac{1}{(\alpha+T)^{r+x}(\beta+T)^s}+(\frac{s}{r+s+x})A_{0})$$

توجه نمایید که هر یک از پارامتر های موجود در رابطه فوق، در قسمت ۲.۱.۲ ( فرض ها ) بیان شده است. اکنون لازم است تا ضریب $A_{0}$  مشخص شود. در صورتی که $\alpha \ge \beta$  آنگاه ضریب  $A_{0}$ به صورت زیر خواهد بود[2]:

$$A_{0}=(\frac{F_{1}(r+s+x,r+x;r+s+x+1;\frac{\beta-\alpha}{\beta+t_{x}})}{(\beta+t_{x})^{r+s+x}}) - (\frac{F_{1}(r+s+x,r+x;r+s+x+1;\frac{\beta-\alpha}{\beta+T})}{(\beta+T)^{r+s+x}}) (*) $$
همچنین در صورتی که $\alpha \le \beta$  آنگاه ضریب  $A_{0}$ به صورت زیر می باشد[2]:

$$A_{0}=(\frac{F_{1}(r+s+x,s+1;r+s+x+1;\frac{\alpha-\beta}{\alpha+t_{x}})}{(\alpha+t_{x})^{r+s+x}}) - (\frac{F_{1}(r+s+x,s+1;r+s+x+1;\frac{\alpha-\beta}{\alpha+T})}{(\alpha+T)^{r+s+x}}) (**) $$

بدیهی است که در حالت تساوی متغیر های $\alpha$ و $\beta$، هر دو رابطه مربوط به محاسبه ضریب $A_{0}$ با یکدیگر برابر خواهند شد. در  هر یک از روابط $(*)$ و $(**)$ تابع $F_{1}$ ، تابع فوق هندسی گاوس [^178] است که در منبع [2] در معادله شماره (1)  بیان شده است. همانطور که مشاهده می کنید، تابع احتمال مدل پارتو - توزیع دو جمله ای منفی بسیار پیچیده و شامل چندین تقریب از تابع هندسه فضایی گاوس است.به همین دلیل امروزه، عموما از  این روش در عمل استفاده نمی شود. در واقع، اگر چه این روش یکی از قدرتمند ترین روش ها برای انجام پیش بینی های لازم در زمینه وفاداری مشتریان است، اما پیاده سازی این مدل به دلیل پیچیدگی فرمول هایش بسیار دشوارتر از سایر روش های موجود است. در این میان، برخی از این روش ها می توانند با همان دقت و در عین حال با پیچیدگی کمتری خروجی را تولید کنند. در ادامه چنین روش هایی بیان خواهند شد.

شایان ذکر است که در همه ی روش هایی که در ادامه مطرح می شود، بسیاری از فرض های موجود در روش پارتو - توزیع دو جمله ای منفی باز هم صادق است و بنابراین از تکرار توضیح آنها پرهیز می شود.در واقع، در هر روش ضمن تبیین نکات متمایز، نکات مشابه نیز بیان می شود اما تنها موارد اختلافی توضیح داده خواهند شد. 
## روش بتا ژئومتریک - توزیع دو جمله ای منفی[^18]
روش بتاژئومتریک – توزیع دو جمله ای منفی[^19] به طور کلی بیشتر جنبه های پارتو – توزیع دو جمله ای منفی را داراست و تنها تغیرات کوچکی اعمال شده است. اما همین تغییرات کوچک باعث می شود که فرمول ها بسیار ساده تر از روش قبل گردند و پارامتر های مختلف به آسانی بدست آیند. با این حال عموما نتایج گرفته شده بسیار به روش قبل نزدیک اند که شاید همین موضوع دلیلی بر ترجیج این روش بر روش قبلی باشد[1].
###بررسی روش
تنها تفاوت با روش پارتو- توزیع دو جمله ای منفی در این جاست که چگونه و چه زمانی مشتری ها غیر فعال می شوند. همان طور که پیشتر نیز توضیح داده شد، منظور از غیر فعال شدن مشتری در یک زمان خاص آن است که از آن زمان به بعد مشتری به انجام خرید با یک نرخ ثابت ادامه نمی دهد چرا که اصولا در این دو روش فرض بر این است که همواره مشتری با یک نرخ معین و ثابت به طور مداوم ( هر چند به صورت تصادفی ) اقدام به خرید می کند. در واقع، در مدل پارتو-توزیع دو جمله ای منفی فرض می شود که ریزش در هر نقطه ای از زمان، مستقل از زمان رخداد واقعی خرید ها، می تواند روی دهد. حال اگر در عوض فرض کنیم که ریزش بلافاصله پس از هر خرید روی می دهد می توانیم این فرآیند را با استفاده از یک مدل بتا ژئومتریک شبیه سازی کنیم.
###فرض ها
مدل بتاژئومتریک - توزیع دوجمله ای منفی مبتنی بر پنچ فرض زیر اساسی است:
**۱)** تا زمانی که یک مشتری فعال است، تعداد تراکنش هایی که در یک بازه زمانی به طول $t$ انجام می دهد یک توزیع پواسن با نرخ تراکنش $\lambda $ است. این معادل آن است که فرض کنیم زمان بین تراکنش ها دارای توزیع نمایی با نرخ تراکنش $\lambda $ است. یعنی:
$$ f(t_{i} | t_{i-1} , \lambda) = \lambda e^{-\lambda(t_{i}-t_{i-1}) }        , t_{i}> t_{i-1} \ge 0    $$
**۲)** ناهمگنی در $\lambda $ دارای یک توزیع گاما به صورت زیر است:
$$f(\lambda | r , \alpha) = \frac{\alpha^r\lambda^{r-1}e^{-\lambda\alpha}}{\Gamma(r)}        , \lambda > 0$$
**۳)** پس از هر تراکنش، مشتری با احتمال $p$ غیر فعال می شود. به عبارتی، احتمال آنکه بلافاصله پس از تراکنش $j $ ام مشتری غیر فعال شود به صورت زیر است:
                                                                                       $$P(inactive-immediately-after- j_{th}-transaction) = p(1-p)^{j-1} , i = 1,2, 3, ... $$
** ۴)** ناهمگنی در  $p$  دارای یک توزیع بتا به صورت زیر است:
$$f(p | a ,b ) =\frac{p^{\alpha-1}(1-p)^{b-1}}{B(a,b)} , 0 \le p \le 1 $$
که در آن $B$، همان تابع بتا است و برابر $\frac{\Gamma(a)\Gamma(b)}{\Gamma(a+b)}$  می باشد.

** ۵)** نرخ تراکنش $\lambda$ و احتمال ریزش $p$ به طور مستقل از هم در بین مشتریان تغییر می کنند.
 ###شرح روش
 فرض کنید یک مشتری $x$ تراکنش در بازه زمانی $(0-T]$ انجام داده باشد به طوری که تراکنش ها به ترتیب در زمان های $t_{1},t_{2},...,t_{x}$       انجام شده باشند. شکل ۱-۲ به خوبی چنین موضوعی را نشان می دهد.
 ![ شکل ۱-۲ تراکنش ها در بازه زمانی مفروض ](https://boute.s3.amazonaws.com/202-bg-nbd.png)
حال با در نظر گرفتن موارد زیر تابع احتمال، به سادگی بدست خواهد آمد:
* احتمال آنکه اولین تراکنش در زمان $t_{1}$ رخ دهد، یک توزیع نمایی استاندارد به صورت  $\lambda e^{-\lambda t_{1}}$ است.
* احتمال وقوع دومین تراکنش در زمان $t_{2}$ برابر احتمال فعال باقی مانده در $t_{1}$، ضرب در توزیع نمایی استاندارد مربوطه است که برابر است با:
$$(1-p)\lambda e^{-\lambda(t_{2} - t_{1})}$$
و این روند همین طور برای هر تراکنشی ادامه می یابد تا آنکه به تراکنش $x$ ام می رسیم:
* احتمال آنکه تراکنش $x$ ام در مکان $t_{x}$  روی دهد برابر احتمال فعال باقی مانده در $t_{x}$، ضرب در توزیع نمایی استاندارد مربوطه است که برابر است با: $$(1-p)\lambda e^{-\lambda(t_{x} - t_{x-1})}$$

* در نهایت، احتمال آنکه در بازه زمانی $(t_{x} - T]$  هیچ خریدی صورت نگیرد برابر احتمال آن است که یا مشتری در زمان $t_{x}$ غیر فعال شود و یا آنکه فعال بماند، اما در این بازه خریدی انجام ندهد که برابر است با:
$$p + (1-p)e^{-\lambda(T-t_{x})}$$
در این روش نیز همانند روش پارتو - توزیع دو جمله ای منفی، فرض می شود که همه مشتریان در ابتدای کار فعال هستند لذا تابع احتمال برای خریداری که در بازه $(0-T]$ هیچ خریدی انجام نمی دهد به صورت تابع بقا[^1920] نمایی استاندارد یعنی $e^{-\lambda t}$ است. از این رو، طبق آنچه که گفتیم می توان نتیجه گرفت تابع احتمال در روش بتاژئومتریک - توزیع دو جمله ای منفی به صورت زیر خواهد بود[1]:

$$L(\lambda, p | X=x, T)=(1-p)^x\lambda^xe^{-\lambda T}+\delta_{x>0}p(1-p)^{x-1}\lambda^xe^{-\lambda t_{x} }$$

در رابطه فوق برای هر $ x > 0 $  داریم $\delta_{x>0} = 1$  و در غیر این صورت مقدار $\delta_{x>0}$ صفر است.

## مدل مرتبه ای بیز[^20]
مدل مرتبه ای بیز[^21] یک مدل آماری است که در چند سطح مختلف به صورت سلسله مراتبی نوشته می شود و اصولا  هدفش آن است که پارامتر های توزیع شرطی [پسین](https://en.wikipedia.org/wiki/Posterior_probability)     [^212]را به کمک تئوری بیز برآورد کند. در واقع در این روش، زیر مدل ها با یکدیگر ترکیب می شوند تا یک مدل سلسله مراتبی ایجاد گردد. سپس از الگوریتم بیز برای همگام سازی آنها با داده های مشاهده شده استفاده می شود که در نتیجه ی آن توزیع احتمال پسین ایجاد می گردد که  گاه از آن تحت عنوان برآورد احتمال بروز رسانی شده[^223] نیز یاد می شود. ذکر این نکته نیز خالی از لطف نیست که عموما مدلسازی مرتبه ای هنگامی استفاده می شود که اطلاعات در سطوح مختلف واحد های مشاهده قرار داشته باشند. در چنین شرایطی، تجزیه و تحلیل سلسله مراتبی به درک بهتر مسئله به ویژه مسئله های چند پارامتری کمک خواهد کرد[7].

### مراحل
به طور کلی برای نگرش بیزی به مسئله، نخست باید مراحل زیر در نظر گرفته شود:
* دانش موجود در مسئله را به طور احتمالاتی فرموله کنیم. برای این کار باید مقادیر کیفی دانش را به صورت توزیع احتمال، فرضیات استقلال و غیره  مدل کرد. چنین مدلی دارای پارامتر های ناشناخته ای خواهد بود که برای هر یک از مقادیر ناشناخته توزیع احتمال اولیه ای در نظر گرفته می شود که بازگو کننده باور ما به محتمل بودن هر یک از این مقادیر بدون دیدن داده است. این توزیع احتمال اولیه را در اصطلاح توزیع احتمال [پیشین](https://en.wikipedia.org/wiki/Prior_probability)     [^234] می نامند. 
*  سپس با جمع آوری داده، بررسی و مشاهده آن مقدار توزیع احتمال ثانویه که توزیع احتمال پسین  نیز نامیده می شود محاسبه می گردد. 
* حال با استفاده از توزیع احتمال پسین به یک نتیجه گیری در مورد [عدم قطعیت](https://en.wikipedia.org/wiki/Uncertainty) می رسیم و با میانگین گیری روی مقادیر احتمال ثانویه پیش بینی انجام می دهیم. 

###اجزا
مدل مرتبه ای بیز از دو مفهوم مهم در استخراج توزیع پسین یا ثانویه استفاده می کند:
* ** ابر  پارامتر[^245]:**  پارامتر موجود در  توزیع پیشین را ابر پارامتر می نامند.
* ** توزیع احتمال ابر پیشین[^256]:**  توزیع پارامتر موجود در  توزیع پیشین را  توزیع احتمال ابر پیشین گویند.

فرض کنید متغیر تصادفی $Y$ دارای یک توزیع نرمال با میانگین $\theta$ و واریانس یک باشد. به عبارتی  $Y |  \theta- has- N(0,1)$ .حال هنگامی که می گوییم پارامتر $\theta$ یک توزیع پیشین دارد بدان معناست که دارای یک توزیع نرمال با میانگین $\mu$ و واریانس یک است یعنی $\theta | \mu -has- N(\mu,1)$. از طرفی پارامتر $\mu$ دارای یک توزیع دیگر است برای مثال توزیع نرمال $N(0,1)$. در چنین شرایطی پارامتر  $\mu$ ابر پارامتر نامیده می شود و توزیع آن، که در این حالت همان $N(0,1)$ است را توزیع احتمال ابر پیشین می گویند.

###چارچوب
اکنون به تشریح چارچوب کلی مورد استفاده در مدل مرتبه ای بیز می پردازیم.
فرض کنید $Y_{j}$ یک مشاهده و $\theta_{j}$ پارامتر کنترل کننده فرآیند تولید $Y_{j}$ باشد. همچنین فرض کنید $\theta_{1}$،$\theta_{2}$،...، $\theta_{j}$  به طور تصادفی و جابجا پذیر از  یک جامعه آماری مشترک با توزیع کنترل شونده توسط ابر پارامتر $\phi$  انتخاب گردند. توجه شود که در اینجا پارامتر های $\phi$ و $\theta$ همانند هر پارامتر دیگری تنها دو متغیر تصادفی هستند. در این صورت مدل مرتبه ای بیز شامل سلسله مراتب زیر خواهد بود:
$$Stage-1: y_{j} |\theta_{j}, \phi - has - P(y_{j}| \theta_{j},\phi)$$
$$Stage-2: \theta_{j}|\phi - has - P(\theta_{j}|\phi)$$
$$Stage-3: \phi-has-P(\phi)$$
در مراحل فوق احتمال $P(y_{j}| \theta_{j},\phi)$ همان احتمال مطلوب می باشد و منظور از  $P(\theta_{j},\phi)$ همان توزیع احتمال پیشین یا اولیه مربوطه است. بدیهی است که تابع احتمال مطلوب تنها از طریق متغیر تصادفی $\theta_{j}$ به $\phi$ وابسته است. حال با استفاده از قضیه بیز می دانیم: $$P(\theta_{j},\phi) =P(\theta_{j}|\phi)P(\phi)$$
که در آن $\phi$ ابر پارامتر و  $P(\phi)$ توزیع احتمال ابر پیشین می باشد. لذا احتمال پسین یا ثانویه به صورت زیر خواهد بود:
$$P(\phi,\theta_{j}|y)= P(y_{j}|\theta_{j}) P(\theta_{j},\phi)$$همانگونه که در قسمت ۲.۳.۱ نیز توضیح داده شد، اکنون که احتمال ثانویه بدست آمده است با میانگین گیری روی مقادیر احتمال آن می توان پیش بینی های لازم را انجام داد.
###بررسی و شرح روش
 پیش از آنکه ادامه دهیم، ابتدا لازم است با زنجیره مارکوف - مونت کارلو[^267] آشنا شویم.
 زنجیره مارکوف – مونت کارلو روشی است که از آن برای نمونه برداری از یک توزیع احتمال استفاده می شود که در آن یک [زنجیره مارکوف](https://en.wikipedia.org/wiki/Markov_chain) که دارای توزیع مورد نظر است طی چندین مرحله ساخته می شود. گفتنی است که این توزیع مورد نظر را در اصطلاح [توزیع تعادل](https://en.wikipedia.org/wiki/Markov_chain#Steady-state_analysis_and_limiting_distributions) زنجیره می نامند. در نهایت حالت زنجیره پس از چندین مرحله به عنوان نمونه ای از توزیع مطلوب در نظر گرفته می شود و هر چه تعداد گام های بیشتری برای نمونه برداری طی شود، کیفیت تقریب افزایش خواهد داشت[11]. در شکل ۱-۳، زنجیره مارکوف – مونت کارلو،  توزیع آبی رنگ را با توزیع نارنجی تقریب می زند.
 ![شکل۱-۳ تقریب با استفاده از زنجیره مارکوف - مونت کارلو](https://boute.s3.amazonaws.com/202-MCMC.jpg)

همانگونه که مشاهده می شود، با افزایش تعداد نمونه ها، تعداد گام های بیشتری در زنجیره طی می شود و بنابراین خطای تقریب کاهش می یابد. 

اکنون که با مفهوم زنجیره مارکوف - مونت کارلو آشنا شدیم، شرح مدل مرتبه ای بیز را ادامه می دهیم. همانگونه که پیشتر نیز توضیح داده شد، تعداد تراکنش های انجام شده توسط مشتری $j$ ام دارای یک توزیع پواسن با نرخ $\lambda_{j}$ است. همچنین فرض کنید احتمال ریزش پس از هر بار خرید برابر $p_{j}$  در نظر گرفته شود.
 ایده کلی مدل مرتبه ای بیز برای پیدا کردن مشتری های وفادار در شکل ۲-۳ نشان داده شده است[4].
 
 ![شکل ۲-۳ مدلسازی فرکانس تراکنش ها](https://boute.s3.amazonaws.com/202-BHM.png)

در شکل فوق، $t_{1}$ زمان وقوع اولین تراکنش، $t_{x}$ زمان وقوع آخرین تراکنش و $x$ تعداد تراکنش های انجام شده است. گفتنی است که این سه داده می توانند برای نمونه گیری از توزیع های شرطی در زنجیره مارکوف - مونت کارلو کافی باشند[4]. بدیهی است که هر یک از داده های اخیر به راحتی از داده های مربوط به پیشینه تراکنش های مشتریان قابل استخراج می باشد. اکنون با میانگیری روی مقادیر احتمال پسین یا ثانویه (که پیشتر در قسمت ۲.۳.۳ بدست آمد) و نمونه گیری به کمک زنجیره مارکوف - مونت کارلو، هر یک از مقادیر  $p_{j}$ و $\lambda_{j}$  برآورد می گردند. بنابراین احتمال آنکه مشتری $j$ ام در $k$ بازه زمانی بعدی خریدی انجام دهد برابر است با:

$$(1-p_{j})(1-e^{-k\lambda_{j}})(B.H.M)$$
شایان ذکر است که مدل مرتبه ای بیز می تواند با دقتی خوب مشتریانی که مجددا  برای خرید باز می گردند را شناسایی کند. با این حال هنگامی که تعداد مشتریان بسیار زیاد شود، این روش در عمل کارایی خود را ز دست می دهد زیرا برای هر مشتری، زنجیره مارکوف - مونت کارلو باید صد ها بار تکرار شود[4]. به همین دلیل معمولا از این روش هنگامی استفاده می شود که تعداد مشتریان چندان زیاد نباشد.
اما در صورتی که تعداد مشتریان بسیار زیاد باشد، روش مرتبه ای بیز با استفاده از [تقریب مبتنی بر رگرسیون](https://en.wikipedia.org/wiki/Regression_analysis)     [^27] توسعه داده می شود. در مدل توسعه یافته دو چند جمله ای با استفاده از اصول رگرسیون ساخته می شوند و از آنها برای تخمین پارامتر های $p_{j}$ و $\lambda_{j}$ استفاده می گردد. بدین منظور، ابتدا پارمتر های $p_{j}$ و $\lambda_{j}$ با استفاده از مدل مرتبه ای بیز برای تعدادی معین و محدود از مشتری ها تخمین زده می شوند و سپس لگاریتم برآورد این پارامتر ها به عنوان ورودی در چند جمله های یاد شده قرار می گیرد. هنگامی که مقادیر پارامتر های $p_{j}$ و $\lambda_{j}$ برای هر مشتری به صورت منحصر به فرد از مدل مرتبه ای بیز توسعه یافته با تقریب رگرسیون بدست آمد، به طور مشابه در رابطه (B.H.M) قرار می گیرند تا احتمال آنکه هر مشتری در k بازه زمانی بعدی حداقل یک خرید انجام دهد بدست آید. لازم به ذکر است که استفاده از تقریب مبتنی بر رگرسیون در حالتی که جامعه آماری مورد مطالعه بسیار بزرگ باشد، می تواند حدود 180 برابر سریع تر از مدل مرتبه ای بیز ابتدایی عمل کند[4].
 

# آزمایش‌ها

# کارهای آیندهاز دست می دهد زیرا برای هر مشتری، زنجیره مارکوف - مونت کارلو باید صد ها بار تکرار شود[4]. به همین دلیل معمولا از این روش هنگامی استفاده می شود که تعداد مشتریان چندان زیاد نباشد.
اما در صورتی که تعداد مشتریان بسیار زیاد باشد، روش مرتبه ای بیز با استفاده از [تقریب مبتنی بر رگرسیون](https://en.wikipedia.org/wiki/Regression_analysis)     [^28] توسعه داده می شود. در مدل توسعه یافته دو چند جمله ای با استفاده از اصول رگرسیون ساخته می شوند و از آنها برای تخمین پارامتر های $p_{j}$ و $\lambda_{j}$ استفاده می گردد. بدین منظور، ابتدا پارمتر های $p_{j}$ و $\lambda_{j}$ با استفاده از مدل مرتبه ای بیز برای تعدادی معین و محدود از مشتری ها تخمین زده می شوند و سپس لگاریتم برآورد این پارامتر ها به عنوان ورودی در چند جمله های یاد شده قرار می گیرد. هنگامی که مقادیر پارامتر های $p_{j}$ و $\lambda_{j}$ برای هر مشتری به صورت منحصر به فرد از مدل مرتبه ای بیز توسعه یافته با تقریب رگرسیون بدست آمد، به طور مشابه در رابطه (B.H.M) قرار می گیرند تا احتمال آنکه هر مشتری در k بازه زمانی بعدی حداقل یک خرید انجام دهد بدست آید. لازم به ذکر است که استفاده از تقریب مبتنی بر رگرسیون در حالتی که جامعه آماری مورد مطالعه بسیار بزرگ باشد، می تواند حدود 180 برابر سریع تر از مدل مرتبه ای بیز ابتدایی عمل کند[4].
 

# آزمایش‌ها
تا به این جا سعی شد مسئله و راهکار های معمول حل آن به خوبی تشریح گردد. همچنین چالش های موجود در هر روش ( از جمله تخمین پارامتر ها ) بیان شد. اکنون به ارائه روش پیشنهادی خود و مراحل انجام آن می پردازیم و در این راستا کارکرد هر یک از روش های پیشنهادی با پیاده سازی آن روش ارزیابی می گردد. کد پیاده‌ سازی و جزئیات اجرایی مربوط به آن از طریق [این لینک](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge) در گیت‌هاب قابل مشاهده است.

## دادگان 
همانطور که پیشتر در قسمت  ۱.۱.۳  نیز مطرح شد، برای پیاده سازی از [دادگان مسابقه](https://www.kaggle.com/c/acquire-valued-shoppers-challenge/data) استفاده خواهیم، البته با اعمال تغییراتی که این تغییرات در ادامه توضیح داده می شوند.
###بررسی داده
دادگان مسابقه شامل 4 فایل تراکنش ها، پیشنهادات و داده های مربوط به تست و یادگیری می باشد. همچنین یک فایل نمونه برای آشنایی با فرمت ارسال خروجی ها نیز قرار داده شده است. پیش از ادامه کار، لازم است به اختصار با محتوای هر یک از این فایل ها آشنا شویم:
- فایل تراکنش ها: شامل تمام تراکنش هایی است که  یک مشتری خاص حداقل یک سال پیش از دریافت پیشنهاداتی برای خرید از یک فروشگاه خاص، انجام داده است.
- فایل پیشنهادات: شامل کل پیشنهادات ارائه شده به همراه جزئیات مربوط به آن مانند کمپانی پیشنهاد دهنده سرویس و یا نوع محصول پیشنهادی می باشد.
-  فایل های تست و یادگیری: فایل یادگیری شامل پیشنهادات ارائه شده به هر مشتری به همراه واکنش آن مشتری نسبت به آن پیشنهاد می باشد. فایل تست فقط شامل پیشنهادات ارائه شده به یک مشتری است و واکنش آن مشتری به آن پیشنهاد باید تخمین زده شود.

### استراتژی کاهش داده
حجم بالای داده های مربوط به تراکنش ها که حدود 22 گیگابایت در حالت غیر فشرده و برابر 350 میلیون سطر است، به حدود 1.6 گیگابایت و 27 میلیون سطر به کمک [این کد](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge/blob/master/utils/reduceData.py) کاهش می یابد. استراتژی کاهش داده ها اینگونه است که در داده های مربوط به تراکنش ها، سطر مربوط به تراکنش‌هایی که پیشنهاد مربوط به آنها دارای نام کمپانی یا نوع محصول نیست، حذف می شوند. به عبارتی می دانیم در فایل پیشنهادات، هر پیشنهاد دارای یک نام کمپانی و یک نوع محصول است. حال با ادغام فایل تراکنش ها و پیشنهادات، تراکنش هایی که پیشنهاد مربوط به آنها دارای یکی از این دو مورد نیست، مشخص شده و لذا سطر مربوط به آن  حذف می گردد. البته می توان از هر نوع استراتژی دیگری نیز برای کاهش داده های مربوط به تراکنش ها استفاده نمود. چنین روش هایی در [این لینک](https://www.kaggle.com/c/acquire-valued-shoppers-challenge/forums/t/7666/getting-started-data-reduction/) مطرح شده اند.

##مدل
همانطور که در قسمت ۱.۳ توضیح داده شد، فرکانس خرید ها در یک بازه زمانی معین و نیز زمانی که خریدار  آخرین تراکنش خود را انجام می دهد، دو داده اساسی برای حل این مسئله است. در این جا ما علاوه بر این دو، معیار هزینه[^29] را نیز در نظر می گیریم. معیار هزینه در واقع مشخص کننده ارزش مشتری است و منظور از آن میزان پولی است که مشتری در یک بازه زمانی مشخص خرج می کند. چنین مدلی که سه معیار تاخر خرید، فرکانس خرید و هزینه مربوط به خرید در آن در نظر گرفته  می‌شود را در اصطلاح مدل RFM [^30] می گویند و ما برای پیاده سازی از چنین مدلی استفاده خواهیم کرد. سپس در کنار استفاده از این سه معیار، با بکارگیری برخی مشخصه ها و معیار هایی خاص به صورت هیوریستیک، کارایی این مدل بهبود داده می شود و چنین مدلی را به عنوان یک راه حل قابل قبول از نظر کارایی مطرح خواهیم کرد.

###شاخص های مدل
شاخص های مدل  RFM و نحوه  تاثیر هر شاخص در مدل به طور خلاصه به صورت زیر می باشد: 
** تازگی تراکنش:** اﻳﻦ  شاخص اﺷﺎره دارد ﺑﺮ ﻓﺎﺻﻠﻪ زﻣﺎنی بین آﺧﺮﻳﻦ ﺧﺮﻳﺪ ﺻﻮرت ﮔﺮﻓﺘﻪ ﺗﻮﺳﻂ ﻣﺸﺘﺮی ﺗﺎ ﭘﺎﻳﺎن ﻣﺤﺪوده زﻣﺎنی ﻣﻮرد بررسی. ﻛﻤﺘﺮ ﺑﻮدن اﻳﻦ ﻓﺎﺻﻠﻪ ﻧﺸﺎﻧﮕﺮ ﺑﺎﻻ ﺑﻮدن ارزش اﻳﻦ ﺷﺎﺧﺺ در ﻣﺪل میﺑﺎﺷﺪ.
** فرکانس تراکنش:** اﻳﻦ ﺷﺎﺧﺺ بیانگر تعداد تراکنش هایی است ﻛﻪ ﻳﻚ ﻣﺸﺘﺮی در یک دوره زﻣﺎنی خاص اﻧﺠﺎم داده است. بیشتر ﺑﻮدن ﺗﻌﺪاد ﻣﺒﺎدﻻت، ﻧﺸﺎﻧﮕﺮ ﺑﺎﻻ ﺑﻮدن ارزش اﻳﻦ ﺷﺎﺧﺺ در ﻣﺪل میﺑﺎﺷﺪ.
** ارزش پولی تراکنش:** این ﺷﺎﺧﺺ ﻧﺸﺎن دﻫﻨﺪه مقدار ﭘﻮلی است ﻛﻪ ﻳﻚ ﻣﺸﺘﺮی در ﻳﻚ دوره زﻣﺎنی ﺧﺎص ﺟﻬﺖ ﻣﺒﺎدﻻت، ﺻﺮف نموده اﺳﺖ . بیشتر ﺑﻮدن ﻣﻘﺪار ﭘﻮل خرج ﺷﺪه، بیانگر ﺑﺎﻻ ﺑﻮدن ارزش اﻳﻦ ﺷﺎﺧﺺ در ﻣﺪل می ﺑﺎﺷﺪ.    

### شرح مدل
پیشتر گفتیم که در مدل RFM، حرف F معرف فرکانس خرید، حرف R نشان دهنده  تازگی خرید و حرف M نمایانگر ارزش پولی خرید است. باید توجه داشت که هر چه F و R بیشتر باشند احتمال آنکه تراکنش جدیدی با مشتری صورت بگیرد بیشتر است و همچنین اگرM نیز بزرگتر باشد احتمال بازگشت مشتری برای خرید بیشتر است. در مدل RFM فرض بر این است که مشتریانی که در هر یک از متغیرهای مدل دارای ارزش بالاتری هستند جز بهترین مشتریان هستند، البته تا زمانی که فرض شود آنها در آینده نیز همانند گذشته رفتار نمایند که در این صورت اعتقاد بر این است که این مشتریان نسبت به دیگران برای شرکت سودآوری بالاتری دارند. لذا فرض اساسی مدل این است که الگوهای آینده مبادله و خرید مشتری، همانند الگوهای گذشته و حال هستند. راحتی محاسبه، قابل درک بودن و توانایی RFM در پیش بینی رفتار آینده مشتری برخی از مزایای این مدل است به طوری که آن را به عنوان راهی برای اندازه گیری ارزش طول عمر مشتری مطرح کرده است. 
![شکل ۱-۴ پیش بینی با مدل RFM ](http://s1.upload7.ir/uploads/tHWms3O2.jpg/process.jpg)
روند کلی کار تا رسیدن به خروجی با استفاده از یک مدل RFM  در شکل ۱-۴ مشخص شده است.

### بهبود مدل 
در نظر گرفتن برخی معیار های خاص دیگر در کنار استفاده از مدل RFM می تواند عملکرد این مدل را بهبود دهد. این معیار ها در واقع نقش هیوریستیکی دارند و در صورتی که خوب در نظر گرفته شوند، می توانند کارایی و دقت پیش بینی را بالا برند. برای مثال این که آیا یک مشتری از یک کمپانی خاص تا به حال خرید کرده است  یا خیر و  یا این که آیا یک مشتری یک نوع محصول خاص را تا به حال خریده است یا خیر می تواند دو معیار باشد. حال سوال اصلی این جاست که در نظر گرفتن دو معیار اخیر به حل مسئله کمکی خواهد کرد یا خیر. این که چه معیار هایی در نظر گرفته شده است و دقت و ارتباط آنها با داده ها کدام است و ابزار سنجش این دقت یا ارتباط چیست در بخش های بعد توضیح داده می شود.  پس می توان گفت بخش مهم این مسئله مهندسی معیار ها یا همان خصوصیات [^31]است که هر چه دقیق تر باشند خروجی از دقت بهتری برخوردار خواهد بود.

## اعمال معیار ها 
 با استفاده از  معیار ها و مشخصه های در نظر گرفته شده، با به کار گیری یک اسکریپ مجموعه های  تست و یادگیری به گونه ای  بدست می آیند که این معیار ها نیز در آنها اعمال شده است، سپس برای یادگیری و تست مدل با استفاده از مجموعه های بدست آمده از کتابخانه  VW یا همان [Vowpal Wabbit](https://github.com/JohnLangford/vowpal_wabbit/wiki) استفاده می کنیم. VW در واقع  یک کتابخانه متن باز یادگیری است که با سرعتی قابل قبول می تواند مدل را ترین کند و یا آنکه آن را تست نماید. یکی از مزایای مهم آن این است که دارای خطای محاسباتی کمی است به طوری که در این مسئله میزان داده های از دست رفته در مرحله یادگیری تنها در حدود  0.156 است. همچنین قابلیت دیگر مهم این کتابخانه آن است که می تواند میزان ارتباط معیار ها یا مشخصه های در نظر گرفته شده را با یک مجموعه دادگان ورودی بسنجد. برای مثال میزان دقت یا ارتباط برخی از معیار های در نظر گرفته شده در پیاده سازی پس از بکارگیری خروجی vw-varinfo و ارسال آن به عنوان ورودی به یک [اسکریپ پایتون](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge/blob/master/histogram.py) به صورت شکل ۲-۴ می باشد.

![ شکل ۲-۴ میزان ارتباط معیار های استخراج شده با دادگان](http://s1.upload7.ir/uploads/ojzrNS2S.png/featureplot.png)
در واقع دستور vw-varinfo از کتابخانه VW، اطلاعاتی را در مورد میزان ارتباط معیار ها با مجموعه دادگان ورودی در اختیار می گذارد. بدیهی است که این اطلاعات را می توان به هر شکلی تصویر نمود. برای نمونه، شکل ۲-۴ نمایی از میزان ارتباط معیار ها را نشان می دهد. در شکل فوق، رنگ آبی میزان ارتباط مثبت  و رنگ قرمز میزان ارتباط منفی را نشان می دهد. هر چه طول مربوط به رنگ آبی بیشتر باشد، بدان معناست که کتابخانه VW، آن معیار را مرتبط تر به مجموعه داده ورودی تخمین می زند و بالعکس هر چه طول رنگ قرمز بیشتر باشد، بدان معناست  که کتابخانه VW، آن معیار را نامربوط تر نسبت به دادگان ورودی برآورد می کند. پس می توان نتیجه گرفت مشخصه هایی که طول رنگی آبی مربوط به آنها بیشتر است از دید VW بهترند.

### تشریح معیار ها
در این قسمت نحوه طراحی معیار های نشان داده شده در شکل ۲-۴ به اختصار توضیح داده می شود. فرض کنیم اینکه یک مشتری از یک کمپانی تا به حال خرید کرده است یاخیر، را  یک معیار در نظر بگیریم. در این صورت این معیار به وضوح یک مقدار دودویی خواهد داشت. اما می توان این معیار را از حالت دودویی خارج کرد به گونه ای که حاوی اطلاعات بیشتری باشد. برای مثال آنکه  اگر مشتری از کمپانی خرید کرده است، در کل چند قلم کالا خریده است و یا  چه میزان پول خرج کرده است، معیاری کامل تر نسبت به حالت قبل است که اطلاعات بیشتری را در خود نهفته است. از طرفی پارامترهای زمانی نیز  می تواند به این معیار اضافه شود. برای مثال آنکه در مدت 3 ماه، 6 ماه یا 9 ماه، مشتری چند قلم کالا از یک کمپانی خریده است و یا آنکه در همین مدت چه میزان هزینه کرده است، به‌وضوح  یک معیار کامل تر نسبت به هر دو حالت قبل می باشد. حال اگر میزان هزینه خرج شده را با حرف a و تعداد اقلام خرید شده را با حرف q نشان دهیم و پارامتر زمان را نیز بر حسب روز در نظر بگیریم، معیار هایی مانند شکل ۲-۴ خواهیم داشت. در این شکل  حرف a در حقیقت نمایانگر مقدار و q نمایانگر تعداد است.

###بررسی کارایی معیارها
در این قسمت کارایی برخی از معیارهای در نظر گرفته شده با یکدیگر مقایسه می شوند. اکنون برای مثال یک معیار مقدار هزینه ای است که یک مشتری در مدت یک ماه برای خرید یک برند خاص صرف کرده است و یا معیار دیگر مقدار هزینه ای است که همان مشتری این بار در مدت سه ماه برای خرید همان برند صرف کرده است. طبق آنچه گفتیم معیار اول را با   has-bought-brand-a-30 نشان می دهیم و معیار دوم با has-bought-brand-a-90 مشخص می شود. در مقایسه کارایی این دو معیار، همانگونه که از شکل ۲-۴ نیز مشخص است، به وضوح معیار اول کارایی بهتری نسبت به معیار دوم خواهد داشت. یکی از دلایل این امر آن است که معیار اول عامل تاخر یا تازگی تراکنش ها را به نسبت معیار دوم بهتر در نظر می گیرد. به عبارت دیگر، اگر چه تمام تراکنش هایی که در معیار اول در نظر گرفته می شوند، در معیار دوم نیز در نظر گرفته می شوند اما میانگین زمانی تمام تراکنش های انجام شده در معیار اول در زمان نزدیک تری نسبت به میانگین زمانی تمام تراکنش های معیار دوم  می باشد و بنابراین تراکنش های معیار اول تازگی بیشتری دارند. در واقع اگر مشتری در یک ماه گذشته هیچ تراکنشی انجام نداده باشد، در معیار اول مشخص می شود ولی در معیار دوم مشخص نمی گردد چراکه ممکن است مشتری در دو ماه قبل تراکنشی انجام داده باشد و لذا مقدار این معیار نمی تواند عدم وجود خرید یا تراکنش را در یک ماه قبل نشان دهد. اکنون به وضوح کارایی سایر معیار های موجود نیز با استدلال هایی مشابه قابل بررسی و توجیه است.

## مراحل
در این قسمت روند کلی پیاده سازی مسئله به اختصار توضیح داده می شود. 

- بارگذاری داده ها: در ابتدا مجموعه داده های موجود در برنامه بارگذاری می شود.
- استخراج معیار ها: در حالت ابتدایی، استخراج معیار ها تنها مبتنی بر مدل RFM صورت می گیرد که این حالت را آزمایش اول در نظر می گیریم. اما همانطور که پیشتر گفته شد، با اعمال برخی از معیار های دیگر می توان کارایی این مدل را افزایش داد. این معیار ها در قسمت ۳.۳.۱ توضیح داده شدند. چنین حالتی به عنوان آزمایش دوم بررسی می شود.
- بررسی معیار ها: معیار های در نظر گرفته شده به کمک vw-varinfo قابل بررسی است. در بخش  ۳.۳ این مطلب بیان شد.
- ترین مدل: در این قسمت مدل با استفاده از VW ترین می شود.
- تست مدل: اکنون به کمک مدل ترین شده و با استفاده از VW، مدل تست گشته و خروجی تولید می گردد.
- تغییر فرمت خروجی: با بکارگیری یک اسکریپت خروجی بدست آمده به فرمت نمونه قرار داده شده در مجموعه دادگان تبدیل می شود. این فرمت اینگونه است که در هر سطر دو ستون قرار می گیرد به طوری که در ستون اول شناسه خریدار و در ستون دوم احتمال انجام تراکنش ( خرید ) توسط خریدار قرار می گیرد.

##ارزیابی
در این قسمت، ضمن معرفی بهترین روش ارزیابی مسئله با توجه به چالش های موجود، نتایج حاصل از هر یک از آزمایش های صورت گرفته با روش‌هایی که در ادامه برای ارزیابی مطرح می کنیم نشان داده می شوند. لازم به ذکر است که برای ارزیابی، داده های مربوط به قسمت یادگیری به دو قسمت تقسیم می شود و از نیمی از آن برای تست و از نیم دیگر آن برای یادگیری استفاده می کنیم. علت اینکار آن است که داده های مربوط به تست در مسابقه دارای خروجی صحیح نیستند. بنابراین برای ارزیابی نتایج، مراحل قبل با دادگان جدید تکرار خواهند شد. کد مربوط به ارزیابی نتایج در [این قسمت ](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge/tree/master/Evaluation) قرار دارد. 

###چالش های ارزیابی
یکی از چالش های ارزیابی نتایج حاصل شده از مراحل قبل آن است که این نتایج به صورت احتمال هستند و مقادیری پیوسته دارند در حالی که خروجی در واقعیت حالتی گسسته دارد. به عبارت دیگر، فرض کنید خروجی بدست آمده برای یک مشتری با شماره شناسه مفروض 25 برابر 0.43 باشد. این بدان معناست که مشتری
شماره 25 به احتمال 0.43 مجددا برای خرید باز خواهد گشت. اما بدیهی است که آنچه که در واقعیت رخ می دهد دو حالت بیشتر ندارد و یا آن است که مشتری مجددا برای خرید باز می گردد و یا آنکه دیگر برای خرید بر نخواهد گشت یعنی در واقعیت خروجی یک مقدار دودویی دارد. حال سوال اینجاست که احتمال 0.43 برابر کدام حالت در نظر گرفته شود( یک یا صفر). یک روش ساده برای رفع این مشکل آن است که یک احتمال خاص را به عنوان یک برش [^32] و یا در اصطلاح آستانه تمایز [^33]در نظر بگیریم و تمام احتمالات بیشتر از آن یک و احتمالات کمتر از آن صفر فرض شوند. روش دیگر آن است که نتایج به ازای چندین برش خاص بدست آیند و از آنها میانگین گرفته شود. بدیهی است که دو روش ارزیابی اخیر دقیق نیستند و  نمی توانند به خوبی میزان دقت نتایج بدست آمده را برآورد کنند. راهکاری که به وسیله آن می توان میزان دقت چنین داده هایی را بررسی نمود استفاده از منحنی ROC [^34] است که در ادامه تشریح می گردد.

###شاخص های ارزیابی
شاخص های ارزیابی خروجی ها به همراه روابط محاسبه آنها به صورت زیر می باشد.   

1- $Precision={\frac{tp}{tp+fp}}$ 
2 - $ Recall={\frac{tp}{tp+fn}}$ 

3 - $F1=2{\frac{Precision*Recall}{Precision+Recall}}$ 

4 - $TrueNegativeRate={\frac{tn}{tn+fp}}$
5 - $Accuracy={\frac{tp+tn}{tp+tn+fp+fn}}$ 


در روابط فوق F1 در واقع میانگین هارمونیک دقت و فراخوانی است که می تواند این دو شاخص را به طور  هم زمان نشان دهد. در واقع می دانیم هر روش خوب باید هم دقت خوبی داشته باشد و هم فراخوانی آن بالا باشد و لذا می توان گفت در مجموع  F1 هر دو شاخص اخیر را به طور متعادل در نظر می گیرد.
در روابط فوق منظور از tp تعداد حالاتی است که به درستی صحیح  و منظور از fp تعداد حالاتی است که به غلط، صحیح تشخیص داده شده‌اند. همچنین منظور از fn تعداد حالاتی است که به غلط نادرست و tn تعداد حالاتی است که به درستی غلط تشخیص داده شده اند. جدول زیر به وضوح این چهار مفهوم را در خود خلاصه کرده است.


| MEANING| SYMBOL| 
|:-----------:|:-----------:| 
| eqv. with hit| tp |
| eqv. with correct rejection| tn |
|  eqv. with false alarm| fp |
| eqv. with miss | fn | 


بدیهی است که هر روش خوب، باید هر یک از پنچ شاخص یاد شده را  به طور همزمان افزایش دهد.
 
###روش های ارزیابی
دو روش مناسب برای برآورد میزان دقت خروجی ها به اختصار به صورت زیر می باشد:

**۱) میانگین گیری برش ها: **در این روش نتایج به ازای همه برش های بین 1 تا 99 حساب می شود و هر یک از معیار های مورد نیاز برای ارزیابی در هر حالت بدست آمده و سپس از آنها میانگین گرفته می شود. اگر چه این روش به نسبت آنکه تنها یک یا چندین برش خاص در نظر گرفته شود بهتر است اما باز هم میزان دقت روش بعد را ندارد. 

**۲) سطح زیر منحنی: ** در این روش نموداری  با استفاده از  دو نرخ  tp و fp و با تغییر آستانه تمایز( حد برش )  بدست خواهد آمد به طوری که نرخ tp در محور عمودی و نرخ fp در محور افقی قرار می گیرد. منحنی بدست آمده از این نمودار را [ROC](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) می نامند. اکنون سطح زیر این منحنی میزان دقت خروجی را مشخص خواهد کرد. از این رو این روش ارزیابی  در اصطلاح AUC[^35] نامیده می شود. این روش دقیق ترین راهکار ارزیابی خروجی ها می باشد.

![شکل ۳-۴ منحنی ROC و سطح زیر آن ( AUC )](http://uupload.ir/files/icli_rsz_auc.png)

در شکل ۳-۴  نمونه ای از منحنی ROC  نشان داده شده است.

### نتایج ارزیابی
در این قسمت نتایج حاصل از بکارگیری هر یک از  مدل هایی که در قسمت  ۳.۲  بیان شد، در قالب جداولی نشان داده می شود. در هر قسمت هر دو روش ارزیابی ذکر شده و نیز تمام شاخص ها برای هر روش در نظر گرفته خواهد شد اما در نهایت، نتایج حاصل از AUC ملاک عمل خواهد بود چرا که می تواند دقیق تر از روش میانگین‌گیری  میزات دقت خروجی ها را ارزیابی  کند.

** آزمایش اول**
آزمایش اول مربوط به حالتی است که از مدل RFM ( غیر بهبود یافته )  به تنهایی برای تولید خروجی استفاده شده است. نتایج حاصل از این حالت پس از طی مراحلی که پیشتر در قسمت ۳.۴ بیان شد، در جدول  ۱-۴ خلاصه شده است.

|Accuracy | True Negative Rate |F-Score | Recall | Precision | Method |
|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|
| 67.2 |68.172 | 67.460 | 66.276 | 68.686 | AUC |
| 71.2 | 70.312 | 70.967 | 72.131 | 69.841 | Average Of Cuts |
||| جدول ۱-۴ |||||

همانگونه که از جدول فوق مشخص است، مقدار F1 با بکارگیری این نوع مدل طبق AUC  برابر 67.46 % است. بدیهی است که چون AUC  دقیق ترین نوع ارزیابی برای این مسئله است، نتایج حاصل از آن بر نتایج حاصل از روش میانگین گیری ترجیح داده خواهند شد.

** آزمایش دوم**
آزمایش دوم مربوط به حالتی است که از مدل RFM بهبود یافته ( با اعمال معیار های ۳.۳ ) برای تولید خروجی استفاده شده است. نتایج حاصل از این حالت پس از طی مراحلی که پیشتر در قسمت ۳.۴ بیان شد، در جدول  ۲-۴ خلاصه شده است.

|Accuracy | True Negative Rate |F-Score | Recall | Precision | Method |
|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|:-----------:|
| 86.6 | 85.826 | 86.519 | 87.398 | 85.657 | AUC |
| 78.9 | 78.388 | 78.708 | 79.429 | 78 | Average Of Cuts |
||| جدول ۲-۴ |||||

همانگونه که از جدول فوق مشخص است، مقدار F1 با بکارگیری این نوع مدل طبق AUC  برابر 86.51 % است. 

** بررسی و مقایسه نتایج **
با مقایسه نتایج بدست آمده از جداول ۱-۴ و ۲-۴، به وضوح مشخص است که شاخص F1  در روش دوم رشدی 19 درصدی نسبت به روش اول داشته است و این موضوع  از دقت بیشتر و کارآمدی این روش نسبت به روش اول حکایت دارد. همچنین با دقت بر روی جداول می توان دریافت که در آزمایش دوم، مقادیر فراخوانی و دقت، هر دو نسبت به آزمایش اول بهبود داده شده اند.  نکته ی جالب آنکه اگر حتی از نتایج ارزیابی دیگر ( یعنی میانگیری نتایج در برش ها ) استفاده کنیم، در این حالت برای آزمایش دوم نتایج بدتر ( به نسبت نتایج AUC ) را انتخاب کرده ایم و برای آزمایش اول نتایج بهتر ( به نسبت نتایج AUC ) انتخاب شده است و در این حال باز هم نتایج مربوط به آزمایش دوم بهتر از نتایج آزمایش اول می باشد. بنابراین روش مطرح شده در آزمایش دوم یعنی استفاده از یک مدل RFM توسعه یافته با معیار هایی همانند معیار های بخش ۳-۳، به عنوان یک راه حل کارا و با دقت مناسب برای حل مسئله مشتری وفادار مطرح می شود. 
در مقایسه چنین روشی با روش های مطرح شده در بخش های ۱- ۲ و ۲- ۲ که در منابع [1,2,9] بیان شده بود باید خاطر نشان کرد که آن روش ها اگر  چه ممکن است دقت خوبی داشته باشند اما پیاده سازی آنها به ویژه به هنگام تخمین پارامتر ها بسیار دشوار و  چالش برانگیز است تا آنجا که تا به امروز کمتر کسانی روی به پیاده سازی کامل آنها آورده اند[1]. همچنین در مقایسه این روش با روش مطرح شده در بخش ۳- ۲ یعنی استفاده از مدل مرتبه ای بیزی باید گفت که در صورتی که تعداد مشتریان بسیار زیاد شود، مدل مرتبه ای بیزی در عمل کارایی خود را از دست خواهد داد چرا که برای هر مشتری، زنجیره مارکوف - مونت کارلو باید صد ها بار تکرار شود و این خود نیاز به زمان زیادی دارد. همچنین در صورتی که در این روش از تکنیک تقریب مبتنی بر رگرسیون  برای کاهش زمان اجرا استفاده گردد، اگر چه ممکن است زمان اجرا کاهش یابد، اما چون از تقریب استفاده می شود در عمل میزان دقت و کارایی کاهش خواهد داشت. همه آنچه گفته شد نشان از برتری روش ارائه شده نسبت به روش های دیگر دارد.

# کارهای آینده
در بازار رقابتی امروز نباید از ریزش مشتریان غافل شد اما واقعیت آن است که  ریزش امری اجتناب ناپذیر است که نمی توان آنرا به صفر رساند ولی می توان آنرا مدیریت کرد و کاهش داد. برای نیل به چنین هدفی، گام اول شناسایی مشتریانی است که با احتمال بیشتری امکان ریزش دارند و با آشکار نمودن علت ریزش آنها می توان سعی در حفظ آنها داشت. بنابراین پیش بینی مشتریان وفادار برای یک سازمان نه تنها از جهت حفظ مشتریان وفادار حائز اهمیت است بلکه از جهت کاهش نرخ ریزش نیز اهمیت دارد. روشی که در این مقاله برای پیش بینی مشتریان وفادار مطرح شد، استفاده از یک مدل RFM توسعه یافته به کمک برخی معیارهایی بود که در بخش ۳-۳ نشان داده شد. آنچه لازم است در ادامه بررسی شود آن است که آیا می توان معیار هایی بهتر و کارآمد تر برای این مدل پیدا کرد یا خیر؟ آیا استفاده از این مدل در کنار روش های دیگری از جمله تقریب مبتنی بر رگرسیون و سپس میانگین گیری از احتمالات دو روش بدست آمده و استفاده از مقدار میانگین به عنوان خروجی باعث بهتر شدن نتایج می گردد یا خیر؟ اگر در چنین روشی به جای میانگین گیری به صورت تصادفی یکی از احتمالات هر بار انتخاب شوند در دقت روش چه تاثیری خواهد گذاشت؟ به طور کلی ادغام مدل RFM مطرح شده با سایر روش ها، آیا می تواند میزان دقت خروجی را افزایش دهد و یا خیر؟ این ها همگی سوالات و ایده هایی هستند که در آینده نیاز به بررسی دارند چرا که هر یک ممکن است منجر به روشی کارآمد تر و با دقت بیشتر نسبت به روش کنونی مطرح شده گردند.

# مراجع

[1] Peter.S.Fader , Bruce Hardie , Ka Lok Lee. (Vol. 24:No. 2, Spring 2007, pp. 275-284). “Counting your customers” the Easy Way: An alternative to thePareto/NBD model. Marketing Science. 
[2] Peter S. Fader,  Bruce G.S. Hardie. ( November 2005 ). A Note on Deriving the Pareto/NBD Model and Related Expressions
[3] Babak Sohrabi, Amir Khanlari. ( Spring 2007,Vol. 14 No. 47, pp 7- 20 ) Customer lifetime value (CLV) measurement based on RFM model
[4] Biswajit Pal , Ritwik Sinha , Abhishek Saha , Peter Jaumann  and Subhasish Misra1.(2012 ). Customer Targeting Framework: Scalable Repeat Purchase Scoring Algorithm for Large Databases - Proceedings of  4th International Conference on Machine Learning and Computing
[5] Galit Shmueli. (2010, Vol. 25, No. 3, 289–31). To Explain or to Predict?
[6] Andrew S. C. Ehrenberg. (2000). Repeat Buying ( part two , chapter 3): "The repeat-buying structure of a market" 
[7] Jayanta Kumar Pal, Abhisek Saha, Subhasish Misra.(No 85, July 2010). Customer repeat purchase modeling- A Bayesian HierarchicalFramework. HP Labs technical report. 
[8] Ehrenberg, A (2000) "Repeat Buying", Journal of Empirical Generalisations in Marketing Science, Vol 5, No.2
[9] Andrew S. C. Ehrenberg. (2000). Repeat Buying ( part four, chapter 7): "The NBD Theory" 
[10] Berger, P. D. and Nasr, N. I. (1998). "Customer lifetime value: marketing models and applications", Journal of Interactive Marketing, 12(1), pp.17- 30.
[11] Pfeifer, P. E. and Carraway, R. L. (2000). "Modeling customer relationships as Markov Chains", Journal of Interactive Marketing, 14(2), pp.43- 55.
[12] Gupta, S. and Lehmann, D. R. (2003). "Customers as assets", Journal of Interactive Marketing, 17(1), pp.9- 24. 
[13] Peter S. Fader Bruce G.S. Hardie Ka Lok Lee. (July 2004 ).RFM and CLV: Using Iso-value Curves for Customer Base Analysis
[14] Wu, Couchen, Hsiu-Li Chen.(2000). Counting your customers: Compounding customer’s in-store decisions, interpurchase time, and repurchasing behavior. Eur. J. Oper. Res. 127(1) 109–119.




**پیوندهای مفید**
+ [Kaggle Acquire Valued Shoppers Challenge](https://www.kaggle.com/c/acquire-valued-shoppers-challenge)
+ [Predicting repeat buyers using purchase history](http://mlwave.com/predicting-repeat-buyers-vowpal-wabbit/)
+ [Scoring your customers](http://www.thearling.com/text/scoring/scoring.htm)


[^1]:Predictive Model
[^2]:Descriptive Model
[^3]:Non-Stochastic
[^4]:Dropout/Churn Rate
[^5]:Customer Lifetime Value
[^6]:Customer Lifetime
[^7]:Transaction Rate
[^8]:Essential Data
[^9]:Recency
[^10]:Frequency
[^11]:Pareto/NBD (Negative Bionomial Distribution )
[^12]:Schmittlein
[^13]:Stochastic
[^14]:Heterogeneity
[^15]:Shape Parameter
[^16]:Scale Parameter
[^17]:Gaussian Hyper-Geometric Function
[^18]:BG/NBD (Beta-Geometric / Negative Bionomial Distribution) 
[^19]:Survival Function
[^20]:Bayesian Hierarchical Model(B.H.M) 
[^21]:Posterior Distribution
[^22]:Updated Probability Estimate
[^23]:Prior Distribution
[^24]:Hyper-parameter
[^25]:Hyper-prior Distribution
[^26]:Markov chain Monte Carlo
[^27]:Regression based Approximation----------
**لینک پیاده سازی**: کد پیاده‌ سازی از طریق [این لینک](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge) در گیت‌هاب قابل مشاهده است. جزئیات  مربوط به نصب ماژول های لازم و نیز اجرای کد به صورت مرحله به مرحله در گیت‌هاب وجود دارد. لطفا در صورت وجود هرگونه نظر، پیشنهاد و یا مشکل در مورد کد، آن را در این [Issue](https://github.com/SoheilKhodayari/Kaggle-aquire-valued-shoppers-challenge/issues/1) مطرح کنید. 

[^1]:Predictive Model
[^2]:Descriptive Model
[^3]:Predictive Analytics
[^4]:Non-Stochastic
[^5]:Dropout/Churn Rate
[^6]:Customer Lifetime Value
[^7]:Customer Lifetime
[^8]:Transaction Rate
[^9]:Essential Data
[^10]:Recency
[^11]:Frequency
[^12]:Pareto/NBD (Negative Bionomial Distribution )
[^13]:Schmittlein
[^14]:Stochastic
[^15]:Heterogeneity
[^16]:Shape Parameter
[^17]:Scale Parameter
[^18]:Gaussian Hyper-Geometric Function
[^19]:BG/NBD (Beta-Geometric / Negative Bionomial Distribution) 
[^20]:Survival Function
[^21]:Bayesian Hierarchical Model(B.H.M) 
[^22]:Posterior Distribution
[^23]:Updated Probability Estimate
[^24]:Prior Distribution
[^25]:Hyper-parameter
[^26]:Hyper-prior Distribution
[^27]:Markov chain Monte Carlo
[^28]:Regression based Approximation
[^29]:Monetary
[^30]:Recency - Frequency - Monetary
[^31]:Feature Engineering
[^32]:Cut-off
[^33]:Discrimination Threshold
[^34]:Receiver operating characteristic
[^35]: Area under the curve