بلد در جست‌وجوی شلوغی!

این محدوده‌‌های قرمزرنگ مناطق پرتردد تهران هستن. جاهایی که در دوره شیوع کرونا بهتره کمتر توشون رفت‌وآمد کنیم.
این محدوده‌‌های قرمزرنگ مناطق پرتردد تهران هستن. جاهایی که در دوره شیوع کرونا بهتره کمتر توشون رفت‌وآمد کنیم.


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

همیشه وقتی به تاثیر داده‌ها روی زندگی عادی فکر می‌کردم یا وقتی بین یک دنیا داده چرخ می‌زدم به این فکر می‌کردم که چطور می‌تونم این اطلاعات رو طوری که به یک دردی بخوره استفاده کنم. با هم تیمی‌هام در تیم زیرساخت دادهٔ بلد هم که صحبت می‌کردم ایده‌های جالب و تاثیرگذاری مطرح می‌شد.

از تقریباً ۳ هفتهٔ پیش که شیوع کرونا شروع شد؛ ما هم مثل هر کسب و کار دیگه‌ای به این فکر می‌کردیم که چطور می‌تونیم در برابر این بحرانی که به‌وجود اومده، تاثیرگذار باشیم و حرکت مثبتی در این زمینه انجام بدیم.

از کارهایی که تیم‌های مختلف بلد در مورد نمایش مراکز ویژهٔ کرونا و داروخانه‌ها و نمایش مراکز اهدای خون انجام دادند، این جریان شروع شد و ما هم خب دست به کار شدیم و شروع کردیم به سرچ کردن و دیدیم کشورهایی که زودتر از ما دچار این بحران شده بودند چه کارهایی انجام داده‌اند. محصول‌‌هایی که در زمینهٔ مشابه ما کار می‌کنند، یک سری اقدامات انجام داده بودند. یکی از اون‌ها Corona Maps در کره جنوبی بود که با استفاده از داده‌هایی که از دولت کره جنوبی گرفته بودند، بر روی نقشه محل بیمارها رو نشون می‌دادند و به مردم کمک می‌کردند که از جاهای پرخطر پرهیز کنند.

ولی خب ما دسترسی به اطلاعات بیماران نداشتیم، در نتیجه سراغ داده‌های خودمون رفتیم. ایدهٔ ما این بود که بررسی کنیم که چه جاهایی در یک شهر نسبت به جاهای دیگه شلوغ هستند و احتمال مبتلا شدن به این بیماری در اون محدوده‌ها بیشتر می‌تونه باشه.

خب ببینیم چی داریم؟!

قدم اول این بود که از کدام منابع دیتایی‌مون استفاده کنیم. چندتا منبع خیلی واسمون جذاب بودند:

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

دوم، داده‌های درخواست‌های مسیریابی‌ بلد بود که به ما می‌گه کاربرها از کجا به کجا مسیریابی می‌کنند.

و در آخر هم داده‌های مربوط به سرچ کاربرهامون.

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

در این منبع هم، انتخاب منطقی‌تر این بود که روی داده‌های مقصد، تحلیل‌هامون رو انجام بدیم. پس شروع کردیم!

بریم تو دل شلوغی!

از آنجایی که داده‌های ما از تهران بیشتر از هر شهر دیگه‌ای بود، برای شروع تهران رو انتخاب کردیم. اینطوری می‌تونستیم تحلیل‌های مطمئن‌تری رو برای موضوع کرونا در تهران انجام بدیم.

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

در گام بعدی تصمیم گرفتیم روی این داده‌ها یک الگوریتم خوشه‌بندی پیاده کنیم. منظورمون از خوشه، نقاطی هستند که داده‌های اون، دارای چند ویژگی‌ مشخص مشترکی هستند، در این مدل ویژگی‌هایی که ما بررسی می‌کنیم، تراکم نقاط در طول و عرض جغرافیایی‌شون هست.
با یکی از معروف‌ترین الگوریتم‌ها یعنی K-means شروع کردیم و بعد چند خوشه‌ای که بیشترین داده رو در خودشون دارند بررسی کردیم. خروجی‌ قابل قبول بود چون ما می‌دیدیم که مناطق مرکز شهر، عموما در خوشه‌های متراکم قرار دارند.

نمایش محدوده بزرگ برای کاربران خیلی کاربردی نیست، پس سراغ نقاط کوچک و متراکم رفتیم.
نمایش محدوده بزرگ برای کاربران خیلی کاربردی نیست، پس سراغ نقاط کوچک و متراکم رفتیم.
اینجا بود که با خودمون فکر کردیم باید برگردیم خونهٔ اول و ببینیم که ما دقیقا چه خروجی‌ای ‌می‌خواهیم؟ خودمون رو جای کاربرامون گذاشتیم. این که خیلی کلی بگیم این مناطق که محدودهٔ بزرگی دارند شلوغ و خطرناک هستند خیلی کاربردی نیست. به این نتیجه رسیدیم که بهتره یک سری نقاط کوچک و متراکم رو در بیاریم که افراد اگر هم مجبور به سفر به حوالی اون نقاط بودند، از اون نقاط متراکم عبور نکنند. یکم بیشتر فکر کردیم و دیدیم الگوریتم کلاسیک و محبوب DBSCAN اینجا خیلی به کارمون میاد. حالا این مدل چیکار می‌کنه؟

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

در نتیجه سعی کردیم بهترین عددها رو با کمک یک سری مصورسازی و الگوریتم‌ها برای اون انتخاب کنیم و مدل‌مون رو اجرا کردیم.


این بار خروجی‌هامون کاربردی‌تر شدند. با استفاده از این خروجی، مکان‌هایی مثل یک سری بیمارستان‌ها، میدان‌های بزرگ مانند فاطمی، ونک، ولیعصر، ترمینال غرب و… در خروجی‌مون دیده می‌شدند و کاربرها اگر مجبور به ترک خونه‌شون بودند با استفاده از محل‌هایی که ما مشخص کردیم می‌تونستند از اون نواحی عبور نکنند یا اگه خواستند به بیمارستانی مراجعه کنند،‌ بیمارستانی رو انتخاب کنند که طبق آخرین نتایج ما نسبت به سایرین کمتر شلوغ هستند.

هدف ما از نمایش مناطقی که احتمال ابتلا به کرونا زیاد است این بود که هر فردی اگر به هر دلیلی نیاز ضروری به خروج از خانه داشت و باید کار اداری، بانکی یا خرید ضروری انجام می‌داد، بتونیم به وسیلهٔ این لایهٔ کرونا (که روی بلد به اسم نقاط پرتردد هست) روی نقشه از محدوده‌های پرتردد عبور نکنه و مسیرهای جایگزین رو انتخاب کنه. این اطلاعات در کنار 50 جست و جوی اول بلد که چند روز پیش تیم سرچ ارائه دادند هماهنگه. مثلا اطراف خیلی از داروخانه‌ها و بیمارستان‌ها، احتمال میره جاهای پرخطرتری باشه.

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

بلد رو می‌تونید از کافه بازار و گوگل پلی نصب کنید و صفحهٔ اینستاگرام بلد رو از اینجا دنبال کنید.