سینا مفتاح
سینا مفتاح
خواندن ۱۵ دقیقه·۲۵ روز پیش

تحلیلی بر نظرات اسنپ فود با کمک نرم افزار Power BI

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

هشدار اسپویل: اگر حوصله ی خوندن مقاله رو ندارید همون اول میتونم بگم این حرف درست نیست ولی پیچیدگی های خاصی داره که بهتره مقاله رو مطالعه کنید. همچنین اگر میخواید صرفا نتایج تحلیل رو ببینید میتونید به آخر صفحه و قسمت جمع بندی برید.

یه دیسکلیمر! در مورد داده ها باید این نکته رو بگم که داده های من صرفا مرتب شده ی داده های عمومی اسنپ فوده و به همین دلیل من به دیتای محرمانه ی شرکت از قبیل اطلاعات شخصی کاربران و میزان فروش دسترسی ندارم و این تحلیل صرفا بر روی نظرات کاربرانی هست که شما هم میتونید اون ها رو در سایت اسنپ فود ببینید. همچنین مطمئنا دیتابیس ما شامل همه ی رکوردهای اسنپ فود نمیشه و صرفا شامل بخشی - ولی تعداد خوبی (شامل تقریبا 2 میلیون نظر) - از نظرات میشه. خب، این مساله ام که حل شد و حالا بریم سراغ اصل مطلب!

1-تعریف مساله:

این جمله که "افراد ناراضی بیشتر نظر میدهند" به نظر ساده میاد ولی باید حواسمون باشه که دچار خطای شناختی نشیم و چند مساله ی مرتبط با این موضوع رو از هم تفکیک کنیم. تفکیک کردن این موضوعات باعث میشه به تحلیل درست تری از داده هامون برسیم. اما این مسائل چیان؟

الف) ما از تعداد واقعی افراد راضی یا ناراضی که از اسنپ فود سفارش داشتن خبر نداریم. بنابراین ما واقعا نمیتونیم بفهمیم چه بخشی از افراد (نا)راضی میان و نظر میدن. اگر بخوایم این موضوع رو بفهمیم باید یک نمونه رندوم از افرادی که غذا سفارش دادن انتخاب کنیم و بعد ببینیم اونهایی که نظرشون رو در سایت ثبت نکردن چه نظری نسبت به سفارششون داشتن و بعد با یک تحلیل بیزی -Bayesian- اون رو به جامعه آماریمون تعمیم بدیم. این مساله شاید در نگاه اول به نظر مهم نیاد. ولی بیایم یه مثال بزنیم تا دید بهتری پیدا کنیم. فرض کنید از اپلیکیشن اسنپ فود، هزار نفر غذا سفارش دادن. از این هزار نفر 500 نفر نظرشون رو در سایت ثبت کردن و ما برای راحتی مثال فرض میکنیم هر نفر یک سفارش داشته و یک نظر ثبت کرده. از 500 نظر ثبت شده 300 نظر ناراضی داریم (این که ناراضی یعنی چی خودش بحث جدایی ست). در این مرحله اگر بیایم دیتای نظراتمون رو تحلیل کنیم ممکنه نتیجه بگیریم که "افراد ناراضی بیشتر نظر میدهند". اما یک اشتباه در تحلیل ما وجود داره. ما دو مفهوم رو باهم اشتباه گرفتیم. نتیجه ای که اینجا باید بگیریم اینه که: "بیشتر نظرات ثبت شده مربوط به افراد ناراضی ه". ممکنه الان از نظر شما این دو جمله باهم فرق نکنن. اما چرا تفکیک این دو جمله از هم مهمه؟ بیاید به ادامه مثال بپردازیم. بعد از نظرسنجی از همه ی 1000 نفر سفارش دهنده متوجه میشیم که از 500 نفری که نظرشون رو ثبت نکردن، 400 نفرشون ناراضی ان. پس تا اینجا که دیتامون کامل تر شد این رو داریم که: از 1000 نفر سفارش دهنده، 300 نفر راضی ان که 200 نفر از اونها نظرشون رو ثبت کرده اند. از 1000 نفر سفارش دهنده 700 نفر ناراضی اند که 300 نفر نظرشون رو ثبت کرده اند. حالا با این اطلاعات دو جمله ی بالا شروع میکنن به تمایز داشتن. حالا جمله ی "افراد ناراضی بیشتر نظر میدهند" نقض میشه چون مشخص شده که کمتر از نصف افراد ناراضی نظرشون رو ثبت کردن در حالیکه بیشتر از دو سوم افراد راضی نظرشون رو ثبت کرده اند. اما جمله دوم ما یعنی اینکه "بیشتر نظرات ثبت شده مربوط به افراد ناراضی ه" کماکان درسته و به قوت خودش باقی.

پس در این مقاله چون ما نه تعداد سفارش ها رو داریم و نه دسترسی و امکان نظرسنجی از سفارش دهنده ها، تحلیل ما محدود به نظرهای ثبت شده خواهد بود.

ب) باید در نظرهای ثبت شده بین تمامی موارد زیر تمیز قائل بشیم:

  • افرادی که زیاد نظر میدهند، شمار بیشتری ناراضی اند یا راضی؟
  • افرادی که زیاد نظر میدهند، شمار بیشتر نظرات راضی است یا ناراضی؟
  • تعداد افراد ناراضی بیشتره یا تعداد افراد راضی؟
  • تعداد نظرهای ناراضی بیشتره یا تعداد نظرهای راضی؟
  • تعداد نظرهای افراد ناراضی بیشتره یا تعداد نظرهای افراد راضی؟
در این مقاله تمرکز اصلی ما بر روی دو مورد اول هست. یعنی بررسی پراکندگی کاربران پرنظر و بررسی نظرهای آنها.

البته درمورد آیتم های 3 تا 5 هم بحث خواهیم کرد و تحلیل اونها رو هم خواهیم دید.

برای قضاوت بهتر در مورد سوالات بالا بهتره اول بیایم یه EDA روی داده هامون انجام بدیم تا به شناخت بهتری از کانتکست کار و داده هایی که داریم برسیم.

2- تحلیل داده اکتشافی:

در مرحله ی اول بیایم یک نمای کلی از کل بانک نظرات ببینیم و یکم در موردش صحبت کنیم.

Analysis of all comments
Analysis of all comments


همونظور که میبینید ما تقریبا 1 میلیون و 800 هزار نظر در بانک اطلاعاتیمون داریم که شامل حدودا 800 هزار کاربر میشه. در نمودار بالا میتونین میانگین امتیازهای همه ی کاربران اسنپ فود رو در طول سالهای گذشته ببینید که به نظر میاد به طور کلی نظرات بهتر شدن ولی تعداد نظرات دو سال اخیر میزانی افت داشته. باید این نکته رو بگم که نظراتی که ما اینجا داریم نظراتی هست که شامل امتیازدهی و نظر نویسی هست. و غیر از این ما به داده ی دیگری دسترسی نداریم.

در نمودار پایین میتونید تعداد نظرات رو بر اساس امتیاز داده شده توسط کاربران مشاهده کنید. همونطور که اینجا مشخصه تعداد نظرهای با امتیاز کامل یعنی 10، با اختلاف زیادی از بقیه بیشتره. و اگر بخوایم رو این داده قضاوت کنیم اینجا میتونیم پاسخ یکی از پرسش هامون رو بگیریم که یعنی:

تعداد نظرهای رضایتمندانه از تعداد نظرهای نارضایتمندانه خیلی بیشتره

اما در نمودار آبی رنگ پایین شاید تعداد کم امتیازهای 0، 1، 3، 5، 7 و 9 توجه شما رو هم جلب کرده باشه که منجر به شکل دندانه ای و پرنوسان نمودار شده. در نگاه اول این موضوع برای من هم جالب بود. پس اومدم این مقادیر رو در Power BI جدا کردم و اونها رو بررسی کردم. در عکس پایین میتونید نتیجه رو ببینید:

Analysis of Ratings {0,1,3,5,7,9}
Analysis of Ratings {0,1,3,5,7,9}

با دقت به نمودار بالا متوجه میشیم نظرات با امتیازهای بالا محدود به سال های 2016 تا 2018 هستند. یعنی در فاصله سالهای 1394 تا 1397. همچنین اگر شما الان در سایت اسنپ فود نظر بدین متوجه خواهید شد که نظر شما محدود به اعداد 1 تا 5 هست در صورتی که امتیازهای نمودارهای بالا در مقیاس 0 تا 10 هست. هنوز هم نظر شما تبدیل میشه به مقیاس 0 تا 10 و سپس در دیتابیس اسنپ فود ذخیره میشه. اما دلیلش چیه؟ نتیجه گیری من اینه که قبلا که اسم این شرکت زودفود بوده مقیاس امتیازدهی از 0 تا 10 بوده و بعد که از حوالی سال 1397 اسنپ اون رو خریداری میکنه مقیاس نظردهی به 1 تا 5 تغییر میکنه ولی چون امتیازهای قبلی در مقیاس 0 تا 10 بوده دیگه اسنپ رو همون فرمون میره جلو و در فرانت پروژه میاد امتیازها رو تقسیم بر 2 میکنه و به مقیاس 1 تا 5 تبدیل میکنه. برای همین هم من نام این فیلتر رو در Power Bi گذاشتم نظرهای قدیمی مربوط به زودفود. بنابراین شما در نظرات جدید مربوط به اسنپ فود فقط امتیازهای زوج رو خواهید داشت و امکان امتیاز 0 دادن رو ندارید. برای همین هم وقتی فقط نظرات مربوط به اسنپ فود رو فیلتر میکنیم نمودار آبی رنگ پایین از حال دندانه ای خارج میشه و شکل منطقی تری پیدا میکنه. البته این چیزیه که من فکر میکنم و ممکنه اشتباه باشه.

Analysis of even number ratings
Analysis of even number ratings

در هر صورت با در نظر گرفتن توضیحات بالا من تحلیلم رو محدود به نظرات جدیدتر نمیکنم و همه نظرات موجود در دیتابیسم رو در تحلیل لحاظ میکنم و همچنین بر همین اساس مقیاس ثبت شده در دیتابیس یعنی 0 تا 10 تحلیل رو انجام میدم.

اما بیاید ببینیم که دیگه چه نتیجه ای میشه از تصویر اول گرفت (من برای راحتی دوباره همون تصویر رو در پایین میارم).

Analysis of all comments
Analysis of all comments

از کارت های سمت چپ این رو متوجه میشیم که در نظرهای ثبت شده - اگر معیار رضایت رو بالا یا پایینتر بودن از عدد 5 برای میانگین کل نظراتی که یک کاربر داده در نظر بگیریم - تعداد افراد ناراضی (163k~) به مراتب از تعداد افراد راضی (662k~) کمتره. حتی اگر معیار رو سخت گیرانه کنیم و عدد 6 یا 7 رو به عنوان میزان رضایتمندی در نظر بگیریم این گفته کماکان درسته. پس:

در میان کسانی که نظرشون رو ثبت میکنند، تعداد افراد راضی بسیار بیشتر از تعداد افراد راضی است.

با نگاه به دو کارت دیگه متوجه میشیم که تعداد نظرات ثبت شده توسط افراد راضی (1.6M~) هم از تعداد نظرات ثبت شده توسط افراد ناراضی (222k~) بسیار بیشتره. نتیجه گیری بعدی ما میتونه این باشه:

در میان نظرهای ثبت شده، تعداد نظرهای افراد راضی از تعداد نظرهای افراد ناراضی بسیار بیشتر است.

تا اینجا ما به سوالهای 3 تا 5 نکته ب از بخش 1 پاسخ دادیم. اما اگر تعداد نظرات رو تقسیم بر تعداد نفرات کنیم به چه نتیجه ای می‌رسیم؟ با انجام این تقسیم متوجه میشیم که افراد راضی به طور میانگین 2.416 نظر و افراد ناراضی 1.36 نظر ثبت کرده اند. پس میتونیم بگیم:

در میان نظرهای ثبت شده، به طور میانگین هر فرد راضی تعداد نظرهای بیشتری از هر فرد ناراضی ثبت کرده است.

تا اینجا دید خوبی نسبت به مساله ی مورد بررسی پیدا کردیم. در گام بعد میریم سراغ افرادی که خیلی نظر ثبت میکنن. اینکه نظر زیاد ثبت کردن یعنی چی میتونیم مثلا بگیم هرکس که از 90 درصد (یا هر درصد) بقیه افراد بیشتر نظر ثبت کرده باشه یعنی کاربر پرنظر. اما اگر پرسنتایل 90 رو حساب کنیم به 4 نظر میرسیم و در این صورت تعداد کاربر پرنظر ما به 100 هزار کاربر میرسه که تعداد خیلی زیادی برای تحلیله و دید خیلی خوبی به ما نمیده. بنابراین پرسنتایل 99.9 رو با کمک Power BI از طریق فرمول زیر حساب میکنیم که به عدد 46 نظر میرسیم و همین رو مبنای تحلیلمون قرار میدیم:

99.9% percentile = PERCENTILE.EXC(UserRatingCounts[Rating Count], 0.999)

با دونستن این موضوع میریم سراغ بخش بعدی و اصلی تحلیل.

3- تحلیل کاربران پرنظر:

برای این تحلیل، میریم سراغ برگه بعدی ریپورت Power BI. اول یک نگاه به کلیت این ریپورت بکنیم:

Analysis of top commenters
Analysis of top commenters

من در تصویر بالا آیدی کاربرها رو پاک کردم که حریم خصوصی کاربران حفظ شه.

خب بیایم ببینیم چه نتیجه ای از این تصویر میتونیم بگیریم. همونطور که اینجا هم میبینیم وضعیت فرق خاصی با بررسی همه ی کاربران نداره. در بررسی کاربران پرنظر هم میبینیم که تعداد نظرات با امتیاز بسیار بالا خیلی بیشتره. همچنین در بین این کاربران، تعداد افراد ناراضی بسیار کمتره (7 در برابر 818). اگر هم به هیستوگرام تعداد کاربران بر اساس میانگین امتیازهای داده شده توسط هر کاربر نگاه میبینیم که میانگین امتیازهای داده توسط اکثریت کاربران پرنظر در محدوده ی 7، 8 و 9 قرار داره. بنابراین میشه تا اینجا دو نتیجه زیر را میشه گرفت:

اکثریت افراد پرنظر را کاربران راضی تشکیل میدهند.
اکثر نظرات افراد پرنظر، نظرات مثبت و رضایتمندانه ست.

پس تا اینجا به تمامی پرسش های نکته ب بخش 1 پاسخ دادیم.

اما از تحلیل هایی که در بخش 1 و همچنین در این بخش بهتون نشون دادم یک نکته ی خیلی جالب رو میشه متوجه شد. این نکته هم در مورد تمامی کاربران صادقه و هم با شدت بیشتری در میان کاربران پرنظر صادقه. اگر به نمودار میانگین طول متن نظرات بر اساس امتیاز (نمودار قرمز رنگ) نگاه بکنید متوجه میشید که وقتی کاربرهایی که نظر میدن ناراضی هستن، بازخورد طولانی تری مینویسند تا زمانی که راضی هستند. مثلا بیاید به عنوان نمونه یه نگاهی به نظرات سیامک داشته باشیم. سیامک کاربری ه که 4 ساله داره نظرش رو در اسنپ‌فود ثبت میکنه. بسیار هم خوش نمرست و به همه 10 داده، و 146 تا نظر هم ثبت کرده.

Siamak comments
Siamak comments

اگر یک نیم نگاهی به جدول پایین سمت راست بندازید میبینید که اکثر نوشته ها بسیار خلاصه ست و در حد خوب بود، عالی بود، با تشکر و اصطلاحاتی از این دست هست. حالا بیاین یه نگاهی به نظرهای علی به عنوان یه کاربر مشکل پسند بندازیم.

Ali comments
Ali comments

علی در مورد 14 تا رستوران نظر داده، 57 نظر در طول 6 سال ثبت کرده و میانگین نظراتش 4.21 هست. همونطور که میبینید نظرهای علی مخصوصا وقتی امتیازهای پایین تری داره بسیار طولانی تره. شاید نظرات امتیازهای 6 و 8 علی خیلی کوتاهتر نباشه ولی باید توجه کنیم که تعداد نظرات با نمره 2 علی خیلی زیادتره.

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

وقتی افراد ناراضی اند، نظرات طولانی تری مینویسند.

شاید برای همین هم باشه که ما فکر میکنیم افراد ناراضی بیشتر نظر میدن چون نظرات طولانی تر بیشتر نظر ما رو جلب میکنه و این در ذهن ما باعث یک خطای شناختی به اسم خطای دسترسی پذیری میشه. یعنی ما استدلالمون رو بر اساس چیزهایی بنا میکنیم که بیشتر نظرمون رو جلب کرده و بنابراین بیشتر در یاد ما مونده.

خب. حالا این تحلیل ها جدا از رفع کنجکاوی ما چه سودی برای بیزینسمون میتونه داشته باشه؟

4- پیشنهاد تحلیل داده برای بیزینس:

با استفاده از این تحلیل‌ها می‌تونیم چند اقدام زیر رو انجام بدیم:

الف) حواسمون به میزان رضایت و تعداد نظرات کاربران در طول سالها باشه. اینکه چرا مثلا کاربران در دو سال اخیر در اسنپ فود نظرات کمتری ثبت کردن. من اینجا به دیتای فروش دسترسی ندارم ولی آیا این به خاطر کمتر شدن فروشه؟ اگر میزان فروش ثابت بوده چرا افراد کمتر نظر دادن. آیا هرچه جلوتر میریم با توجه به همه‌گیرتر شدن استفاده از اینترنت و خدمات برخط نباید کاربرانمون بیشتر شده باشن و در نتیجه تعداد نظرات ثبت شده هم بیشتر شده باشه؟ علت چیست؟

ب) همونطور که در بخش اول بحث کردیم بیایم یک نمونه انتخاب کنیم و از کاربران نظر سنجی کنیم و ببینیم که کاربرانی که نظر نمیدن به چه علت این کار رو انجام نمیدن؟ چی باعث میشه یک کاربر بیاد و نظرش رو ثبت کنه و یک کاربر دیگه این کار رو نکنه. میزان رضایت در کاربرانی که نظر نمیدن چطوره؟ و اصلا کسانی که در سایت نظر دادن و ما بر اساس امتیاز نظرهایی که دادن اونها رو به راضی و ناراضی تقسیم کردیم آیا واقعا نتیجه ی درستی گرفتیم؟ آیا کاربری که 50 تا نظر ثبت کرده با میانگین 8 یعنی کاربر راضی؟ چرا برای مثلا 400 تا سفارش دیگرش نظر ثبت نکرده و نظرش در مورد اون سفارشها چیه؟ آیا ممکنه کاربری که در نظرات ثبت شده به نظر کاربر راضی میاد در حقیقت کاربری ناراضی باشه و صرفا وقتی ناراضی هست نظرش رو اعلام نمیکنه؟ پراکندگی رضایت واقعی در افرادی که نظرشون رو ثبت کردن چگونه است؟

پ) استفاده از یک مدل زبانی بزرگ مثل ChatGPT میتونه به تحلیل ما عمق بیشتری بده. ما میتونیم با استفاده از RAG (Retrieval-Augmented Generation) نظرات ناراضی طولانی رو تحلیل کنیم و ببینیم آیا میشود الگویی در این نظرات پیدا کرد یا خیر. و این مورد موضوع مقاله ی آینده ما خواهد بود و بررسی بیشتری بر روی متن نظرات خواهیم داشت. همچنین با استفاده از مدل زبانی شما میتونید یک نظررو به چند امتیاز تقسیم بندی کنید. مثلا در اسنپ شما برای سبد سفارش نظر مینویسید. یعنی امتیازی که شما میدید برای کل اقلام سبد لحاظ میشه در حالی که شاید شما از یک قلم راضی باشید و از یک قلم دیگه ناراضی و با استفاده از مدل زبانی شما میتونید اینها رو از هم تفکیک کنید و سیستم امتیازی دقیق تری برای نتیجه گیری و قضاوت داشته باشید.

ت) میشه از کاربران پرنظر راضی به عنوان سفیر محصول استفاده کرد. میشه به کاربران Badge داد تا نظراتشون در سایت بولدتر نشون داده بشه. شاید اینکه کاربرها در اسنپ بی نام و نشانند خیلی مورد خوبی نباشه. میشه قدرت اینفلوئنس کردن کاربرهای پرنظرمون رو از راه های مختلف افزایش بدیم. شاید بقیه ی مردم هم به نظر کسی که 1000 تا سفارش ثبت کرده بیشتر اعتماد داشته باشن تا به نظر کسی که 2 سفارش و 1 نظر ثبت کرده.

ث) با استفاده از تحلیل های داده دیدیم که بیشتر نظرات مربوط به افراد راضی ه. بنابراین شاید مهم ترین اقدام ما راضی نگه داشتن کاربر باشه تا اینکه بخوایم کاربران ناراضی رو به کاربران راضی تبدیل کنیم. بنابراین میتونیم به شیوه های گوناگون رضایت کاربران پرنظر و راضیمون رو بیشتر کنیم تا بتونیم نقدهای مثبت بیشتری هم در سایتمون بگیریم.

5- خلاصه و جمع بندی:

تا اینجا صحبت های زیادی کردیم و نتایج زیادی گرفتیم و بهتره برای جمعبندی اونها رو یکجا ببینیم:

تعداد نظرهای رضایتمندانه از تعداد نظرهای نارضایتمندانه خیلی بیشتره
در میان کسانی که نظرشون رو ثبت میکنند، تعداد افراد راضی بسیار بیشتر از تعداد افراد ناراضی است.
در میان نظرهای ثبت شده، تعداد نظرهای افراد راضی از تعداد نظرهای افراد ناراضی بسیار بیشتر است.
در میان نظرهای ثبت شده، به طور میانگین هر فرد راضی تعداد نظرهای بیشتری از هر فرد ناراضی ثبت کرده است.
اکثریت افراد پرنظر را کاربران راضی تشکیل میدهند.
اکثر نظرات افراد پرنظر، نظرات مثبت و رضایتمندانه ست.
وقتی افراد ناراضی اند، نظرات طولانی تری مینویسند.

امیدوارم تو این مقاله هم دید بهتری نسبت به کاربرها در سایت اسنپ فود به عنوان یک سایت شاخص کسب کرده باشین و بتونین از این دید در بیزینس خودتون استفاده بکنید. و هم مقداری با Power BI و قابلیت هاش آشنا شده باشید.

اسنپ فودpower bisnappfoodsentiment analysisنظرات
من سینا هستم و در حوزه تحلیل داده و پردازش متن با کمک هوش مصنوعی فعالیت میکنم.
شاید از این پست‌ها خوشتان بیاید