كيف تنشئ مشروع تحليل بيانات ضخمة من الصفر؟

------

تتوفر على شبكة الإنترنت العديد من الدورات التدريبية الخاصة بعلوم البيانات والتعلم الآلي التي تقدم إرشادات نظرية وبعض الأمثلة البرمجية لتحليل بيانات نظيفة وجاهزة مسبقا.

لكن هل جربتم مواجهة مشكلة تحليل بيانات حقيقية؟ هل تعرفتم على مراحل وصعوبات مشروع تحليل بيانات ضخمة على أرض الواقع؟

هذا ما سنقدمه لكم من خلال هذا المقال. سنرشدكم من خلال هذا المقال إلى الخطوات الرئيسية لبناء مشروع علوم بيانات من البداية. يعالج هذا المشروع مشكلة حقيقية:  ما هي المحركات الرئيسية لأسعار الإيجارات في برلين؟سنقوم بجمع البيانات حول هذه المشكلة ومن ثم تحليلها. سوف نسلط الضوء أيضًا على الأخطاء الشائعة التي يرتكبها المبتدئين عندما يتعلق الأمر بالتعلم الآلي.

وهذه هي الخطوات التي سيتم مناقشتها بالتفصيل:

  • العثور على المشكلة أو الوضعية التي نود دراستها
  • استخراج البيانات من الويب وتنظيفها
  • استخراج رؤى وتحليلات عميقة
  • هندسة العوامل باستخدام APIs خارجية
  • الأخطاء الشائعة أثناء تطبيق التعلم الآلي
  • الميزة الأهم: العثور على العوامل والدوافع التي تتحكم في أسعار الإيجار
  • بناء نماذج التعلم الآلي

البحث عن موضوع دراسة أو تحليل

هناك العديد من المواضيع والمشكلات التي يمكن حلها عن طريق تحليل البيانات، ولكن من الأفضل دائمًا العثور على مشكلة تهتم بها وتحفزك. ولكن لا يجب أن يقتصر تفكيرك على اهتماماتك. يمكنك أيضًا الاستماع إلى ما يتحدث عنه الأشخاص من حولك. ما الذي يزعجهم؟ ما الذي يشكون منه؟ هذا يمكن أن يكون مصدرا جيدا آخر للأفكار لمشروع تحليل بيانات. ففي الحالات التي يشك الناس فيها حول البيانات والتحليلات المتوفرة حول موضوع ما، فهذا يعني أن المشكلة لم يتم حلها بشكل صحيح في المرة الأولى. وبالتالي، يمكنك تقديم حل أفضل والتأثير في كيفية إدراك هذا الموضوع.

يبدو هذا الكلام نظريا ومبهما. لكننا سنحاول توضيحه من خلال المثال الذي نعمل عليه في هذا المقال. سنبين لكم الأسباب التي جعلتنا نختار تحليل أسعار الإيجارات في برلين.

في الحقيقة٬ إن أسعار الإيجارات المرتفعة هي أحد التشكيّات التي سمعتها من أشخاص انتقلوا مؤخرا إلى برلين للعمل. فمعظم القادمين الجدد لم يتخيلوا أن برلين باهظة بهذا الشكل. إذ لا توجد إحصائيات دقيقة حول نطاق الأسعار المحتملة للشقق.

وقد صرح أغلبهم بأنهم لو علموا بذلك مسبقا لكانوا طالبوا بالحصول على راتب أعلى أثناء عملية التقديم للوظيفة أو فكروا في خيارات أخرى.  

لقد قمنا بالبحث في جوجل ودققنا في العديد من مواقع تأجير الشقق وسألنا العديد من الأشخاص. لكننا لم نجد أي إحصائيات أو تصورات معقولة عن أسعار سوق إيجار الشقق. وهكذا توصلنا إلى موضوع هذا التحليل.

أردنا جمع البيانات وبناء لوحة تحكم تفاعلية تمكن المستخدمين من تحديد خيارات مختلفة. مثل تحديد نطاق الأسعار المطلوبة بالنسبة لشقة مساحتها 40 متر مربع موجودة في برلين وتحتوي على شرفة ومطبخ مجهز. وهذا من شأنه أن يساعد الناس على فهم أسعار الشقق في برلين. كذلك سنعمل على تحديد الأسباب والعوامل المتحكمة في أسعار الإيجار من خلال استخدام خوارزميات التعلم الآلي.

استخراج البيانات من الويب وتنظيفها

تجميع البيانات

الآن بعد أن أصبحت لديك فكرة عن مشروع تحليل البيانات الخاص بك، يمكنك البدء في البحث عن البيانات. هناك الكثير من مستودعات البيانات الكبيرة والمذهلة مثل Kaggle أو UCI ML Repository أو محركات البحث الخاصة بمجموعات البيانات dataset search engines وكذلك مواقع الويب التي تحتوي على أوراق أكاديمية تتضمن مجموعات من البيانات. كما يمكنك أيضا استخدام تقنية web scraping.

ولكن كن حذرا٬ فالبيانات القديمة تملأ صفحات الويب. عندما كنا نبحث عن معلومات حول أسعار الإيجارات في برلين، وجدنا العديد من البيانات والرسومات التوضيحية  لكن أغلبها إما كانت قديمة أو دون تحديد أي تاريخ.

كما أن بعض الإحصائيات كانت محددة وخاصة جدا فمثلا يضعون أسعارا خاصة بالشقق غير المؤثثة والتي مساحتها 50 متر مربع وتتضمن غرفتين. ولكن ماذا لو كان الشخص يبحث عن شقة أصغر مع مطبخ مؤثث؟

نظرًا لأننا لم نجد سوى البيانات القديمة، فقد قررنا أن نقوم بكشط web scrape المواقع التي توفر شققًا للإيجار. كشط الويب Web scraping هي تقنية تستخدم لإستخراج البيانات من مواقع الويب من خلال المعالجة الآلية.

تنظيف البيانات

بمجرد البدء في الحصول على البيانات، من المهم للغاية إلقاء نظرة عليها في أقرب وقت ممكن لكي تتفطّن لأي مشاكل محتملة.

أثناء عملية كشط البيانات المتعلقة بتأجير الشقق من مواقع الويب، قمنا بتضمين بعض الاختبارات الصغيرة على البرنامج مثل مراقبة عدد البيانات المفقودة لجميع العوامل.

بعد أن استوفينا جميع الشروط والجوانب التقنية اللازمة لعملية كشط البيانات من الويب٬ اعتقدنا أن هذه البيانات ستكون مثالية تقريبا. ولكن٬ في نهاية الأمر٬ احتجنا إلى أسبوع كامل من العمل من أجل تنظيفها وذلك بسبب البيانات المتكررة.

من المشاكل الأخرى التي يمكن أن تواجهها عند تنظيف البيانات هي الحقول أو البيانات المفقودة.  كذلك٬ إذا كنت تستخدم فاصلة للفصل بين البيانات أثناء حفظها في ملف وكان أحد الحقول يحتوي أيضًا على فواصل، فيمكن أن تحصل على ملفات غير منظمة ومقسمة بطريقة جيدة.

يوجد العديد من الأسباب التي تولد التكرار:

  • شقق متكررة لأنها كانت على الإنترنت لفترة طويلة من الوقت.
  • الأخطاء التي تقع فيها وكالات استئجار الشقق عند إدخال البيانات. وهم يقومون بتصحيحها في وقت لاحق أو يقومون بتنزيل اعلان جديد يتضمن البيانات الصحيحة وتعديلات أخرى.
  • تغيير بعض الأسعار (زيادة أو نقصان) بعد شهر لنفس الشقة.

اضطررنا لإستخراج العديد من القواعد المنطقية لتصفية البيانات من التكرار. وبمجرد التأكد من أن البيانات الخاصة بهذه الشقق هي بيانات مكررة مع تعديلات طفيفة٬ نقوم بفرزها حسب التواريخ مع الاحتفاظ بالبيانات التي تحمل التواريخ الأكثر حداثة.

علاوة على ذلك ، فإن بعض الوكالات تزيد أو تنقص سعر الشقة نفسها بعد شهر.

فإن كان الطلب على هذه الشقة كبيرا٬ فإن سعرها يزيد. وإن حصل العكس٬ فإن وكالة الإستئجار تقوم بخفض سعرها. وهذا تفسير منطقي للغاية.

استخراج التحليلات والرؤى العميقة

الآن وبعد أن أصبح كل شيء جاهزًا، يمكننا البدء في تحليل البيانات. أعلم أن أغلب العاملين في علم البيانات يفضلون استخدام seaborn و ggplot2 لاستخلاص بعض التحليلات والاستنتاجات. ولكننا نرى أن لوحات البيانات التفاعلية هي الحل الأفضل. أنها تساعد على استخلاص تحليلات مفيدة وعميقة. وتتوفر العديد من الأدوات الفعالة والقوية التي تمكننا من إنشاء مثل هذا النوع من اللوحات التفاعلية مثل Tableau و Microstrategy.

لقد استغرق الأمر أقل من 30 دقيقة لإنشاء لوحة بيانات تفاعلية تمكن المستخدم من تحديد جميع العوامل المهمة ومعرفة تأثيراتها المحتملة على السعر.

نستطيع أن نلاحظ من خلال الرسوم البيانية التي تحصلنا عليها أن أسعار الشقق المتكونة من 2.5 غرفة أقل من أسعار الشقق المكونة من غرفتين. والسبب في ذلك هو أن معظم الشقق المكونة من 2.5 غرفة لا تقع في وسط المدينة مما يقلل بالطبع من السعر.

هندسة العوامل باستخدام APIs خارجية

تساعد الرسومات التوضيحية على تحديد العوامل التي يجب استخدامها في خوارزميات التعلم الآلي. فإذا كانت العوامل التي نستخدمها غير رقمية، فإن أي خوارزميات ستنتج تنبؤات سيئة. أما٬ إذا كانت العوامل قوية وصحيحة٬ فإن التنبؤات ستكون مرضية وفعالة إلى حد كبير حتى مع استخدام خوارزميات بسيطة.

السعر هو المتغير المستمر في مشروع تحليل بيانات سعر إيجار الشقق ببرلين. لذا فهو يمثل مشكلة نموذجية. سنحاول فيما يلي استخراج جميع العوامل المؤثرة في السعر ونستخدمها في عملية التنبؤ به.

العوامل المؤثرة في السعر

عدد الغرف

المساحة الجملية

العنوان

مفروشة أم لا؟

تحتوي على مطبخ أم لا؟

شرفة؟

نوع الشقة

طابق داخل مبنى

نوع التدفئة

مرحاض الضيوف

عدد غرف الحمام

حالة تجديد الشقة

المصعد

سنة البناء

بعد ذلك٬ تعرضنا لمشكلة كبيرة في عامل العنوان. لقد كان لدينا حوالي 6600 شقة وحوالي 4400 عنوان. كان هناك حوالي 200 من الرموز البريدية غير المتكررة والتي يمكن تحويلها إلى متغيرات ولكن بعد ذلك سيتم فقدان معلومات ثمينة للغاية.

ماذا تفعل عندما تحصل على عنوان جديد؟

من المؤكد أنك ستبحث عنه في جوجل أو ستبحث عن طريقة الوصول إليه.

قمنا باستخدام API خارجية أتاحت لنا أربع ميزات إضافية تمكنا من خلالها من احتساب عنوان الشقة:

  1. مدة رحلة القطار من الشقة إلى S-Bahn Friedrichstrasse (المحطة المركزية)
  2. المسافة من الشقة إلى U-Bahn Stadtmitte (وسط المدينة) بالسيارة
  3. مدة الرحلة سيرا على الأقدام من الشقة إلى أقرب محطة مترو
  4. عدد محطات المترو على بعد كيلومتر واحد من الشقة

لقد عززت هذه الميزات الأربعة الأداء بشكل كبير.

الأخطاء الشائعة عند استخدام التعلم الآلي وعلوم البيانات

بعد تجميع البيانات، هناك العديد من الخطوات لإنجازها قبل تطبيق نموذج التعلم الآلي.

إنك تحتاج أولا إلى رسم تصور لكل المتغيرات لمعاينة كيفية توزّعها. كما تحتاج كذلك إلى الكشف عن القيم المتطرفة outliers ومعرفة الأسباب التي أدت إلى خروج مثل هذه القيم.

ماذا يمكنك أن تفعل مع القيم المفقودة في بعض العوامل؟

ما هي أفضل طريقة لتحويل العوامل الفئوية  categorical إلى عوامل رقمية؟

في الحقيقة٬ هناك العديد من هذه الأسئلة ولكننا سنحاول أن نقدم بعض التفاصيل والحلول عن أهم الأخطاء التي يواجهها المبتدئون.

  1. التصور Visualization

أولاً ، يجب أن تبني تصورا لتوزّع العوامل اللامتناهية continuous featuresلمعرفة ما إذا كان هناك العديد من القيم المتطرفة ومعاينة ما سيكون عليه التوزّع والتأكد ممّا إذا كان منطقيًا أم لا.

هناك العديد من الطرق لإنشاء تصور بنّاء للبيانات، على سبيل المثال مخططات الصندوق box plots، الرسوم البيانية histograms وظائف التوزيع التراكمي cumulative distribution functions وما يسمى ب violin plots. ولكن ينبغي لنا اختيار الطريقة التي تقدّم لنا أكبر قدر من المعلومات حول البيانات.

لمعاينة التوزّع (سواءً أكان عاديّا أو ثنائي النسق)فإنّ الرسوم البيانية هي الأفضل والأكثر إفادة. على الرغم من أن الرسوم البيانية تمثل نقطة انطلاق جيدة، إلا أن مخططات الصندوق قد تكون متفوقة في تحديد عدد القيم المتطرفة.

بناءً على المخططات والرسوم البيانية السابقة، سيكون السؤال الأكثر إثارة للاهتمام هو: هل ترى ما تتوقع رؤيته؟ الإجابة على هذا السؤال سوف تساعدك إما في العثور على تحليلات أو في العثور على أخطاء في البيانات.

للحصول على مصدر للإلهام وتحديد المخطّط الذي يقدّم قيمة أكبر، ننصحكم باستخدام  Python’s seaborn gallery. يمكنكم أيضا الإستعانة ب:kernels on Kaggle. فهي مصدر آخر للإلهام وبناء التصورات واستخراج التحليلات.

في سياق تحليل أسعار الإيجارات، قمنا بإنشاء الرسوم البيانية لكل العوامل اللانهائية وتوقعنا رؤية ذيل طويل في رسوم توزّع الإيجار بدون فواتير وإجمالي مساحة.

هل نقوم بإسناد القيم بناءً على مجموعة البيانات بأكملها؟

في كثير من الأحيان٬ نتحصّل على بيانات تحتوي على الكثير من القيم المفقودة. إذا قمنا باستبعاد كل سطر بياني أو معلومة تحتوي على قيمة مفقودة واحدة على الأقل٬ فقد ينتج عن ذلك نقص كبير في مجموعة البيانات.

ويوجد العديد من الطرق لإسناد قيم لهذه البيانات المفقودة. الأمر متروك لك في اختيار كيفية القيام بذلك ولكن تأكد من حساب إحصاءات التضمين فقط على البيانات المعنية لتجنب تسرب البيانات من مجموعة الاختبار الخاصة بك.

في مشروع تحليل بيانات أسعار الإيجار، اعتمدنا كثيرا على الحقل الخاص بوصف الشقة. فكلما كانت جودة الشقة مفقودة أو نوعها أو حالتها٬ نقوم بإسناد قيمة لهذه الحقول المفقودة بالإعتماد على المعلومات الموجودة في حقل الوصف.

كيف يمكننا تحويل المتغيرات الفئوية؟

إن الكثير من برامج التعلم الآلي لا تعمل مباشرة مع القيم الفئوية. لذلك نحتاج إلى تحويلها إلى قيم رقمية.

هناك العديد من الطرق لتحويل القيم الفئوية إلى قيم رقمية، مثل Label Encoder و One Hot Encoding و bin encoding و hashing encoding. ولكن معظم الناس يقومون باستخدام  Label Encoder في الوقت الذي كان يجب عليهم استخدام One Hot Encoding.

والآن سنقوم بتغيير القيم الفئوية في مشروع تحليل بيانات أسعار الإيجار إلى قيم رقمية. لدينا عمودًا في عامل نوع الشقة يحتوي على القيم التالية: [الطابق الأرضي ، دور علوي ، بيت صغير ، دور علوي ، دور علوي ، الطابق الأرضي]. يمكن لـ LabelEncoder تحويل هذا إلى [3،2،1،2،2،1]. مما يعني أن طابق الطابق الأرضي> دور علوي> بيت صغير. بالنسبة لبعض الخوارزميات والبرامج مثل decision trees فإن هذا النوع من الترميز مقبول وجيد. لكن برامج مثل applying regressions و SVM لا تقبل هذا النوع من التحويل.

في مجموعة البيانات الخاصة بأسعار إيجار الشقق، قمنا بتشفير حالة الشقة على النحو التالي:

  • جديدة: 1
  • تمّ تجديدها: 2
  • تحتاج إلى تجديد: 3

أما بالنسبة إلى جودة الشقة فقد تمّ تشفيرها على النحو التالي:

  • مترفة:1
  • أحسن من العادية: 2
  • عادية:3
  • بسيطة:4
  • غير معروفة:5

هل أحتاج إلى توحيد المتغيرات؟

تجمع عملية التوحيد القياسي جميع المتغيرات اللانهائية على نفس المقياس. مما يعني أنه إذا كان أحد المتغيرات يحتوي على قيم من 1000 إلى 1 مليون والآخر من 0.1 إلى 1، فإنهما سيصيران على نفس النطاق بعد عملية التوحيد القياسي.

تعد عمليات L1 أو L2 هي الطريقة الشائعة لتقليل  overfitting ويمكن استخدامها في العديد من خوارزميات regression. ولكن، من المهم تطبيق توحيد العوامل قبل L1 أو L2.

يتم احتساب سعر الإيجار باليورو، لذلك سيكون fitted coefficient أكبر بنحو 100 مرة من fitted coefficient إذا كان السعر بالسنت. تقوم عمليات L1 و L2 بمعاقبة المعاملات الأكبر حجمًا، وبالتالي فإنها تعاقب العوامل ذات النطاقات الصغيرة أكثر وأكثر. لمنع هذا ، يجب توحيد العوامل قبل تطبيق L1 أو L2.

التعلم الآلي

بعد أن تفهم البيانات بشكل جيد وتنظفها من القيم المتطرفة، يصبح الوقت مناسبا لاستخدام التعلم الآلي. هناك العديد من الخوارزميات التعلم الآلي التي يمكن استخدامها.

لقد رغبنا في استكشاف ثلاث خوارزميات مختلفة ومقارنة الخصائص المميزة لها مثل الأداء والسرعة. وقد شملت المقارنة كل من gradient boosted trees وتطبيقاته المختلفة (XGBoost  و LightGMB) و Random Forest وتطبيقاته (FR و scikit-learn ) و3-layer Neuronal Networks وتطبيقاته ( NN و Tensorflow ). لقد اخترنا RMSLE ليكون مقياس لتحسين العملية.

أظهرت المقارنة أن أداء XGBoost و LigthGBM متماثل تقريبا. أما أداء RF فكان أقل منهما. بينما كان NN الأسوأ.

في الحقيقة٬ إن الخوارزميات المستندة إلى شجرة القرار Decision tree-based algorithms جيدة جدًا في تفسير العوامل. إذ تحدد العديد من الميزات التي من بينها درجة أهمية العامل.

الميزة المهمة: تحديد العوامل المتحكمة في أسعار الإيجار

بعد تطبيق نموذج شجرة الإختيار، يمكنك تحديد العوامل المتحكمة بالأسعار أو القادرة على التنبؤ بالأسعار.

توفر الخاصية المهمة Feature importance مجموعة نقاط تشير إلى مدى تدخل كل عامل في بناء أشجار القرار داخل النموذج. إحدى الطرق لحساب هذه الخاصية المهمة هي عدد المرات التي يتم فيها استخدام عامل ما لتقسيم البيانات عبر جميع الأشجار. و يمكن حسابها بطرق مختلفة.

بالنسبة لأسعار إيجار الشقق في برلين، لم نستغرب أن تكون المساحة الجملية هي العامل الأكثر تحكما في السعر. ولكن ما أثار اهتمامنا أن بعض العوامل التي تم تصميمها باستخدام APIs خارجية كانت هي الأخرى من العوامل المهمة.

وقد ظهرت نتائج تحليل بيانات أسعار الإيجار بالشكل التالي:

وقد أثار اهتمامنا أيضا تأثير العوامل التالية:

  • مدة الرحلة إلى أقرب محطة مترو.
  • عدد المحطات في حدود 1 كم.

المدة إلى أقرب محطة مترو

يبدو أنه بالنسبة لبعض الشقق، تشير القيمة العالية لهذه العامل إلى ارتفاع السعر. والسبب في ذلك هو أن هذه الشقق تقع في مناطق سكنية ثرية للغاية خارج برلين.

يمكن للمرء أن يرى أيضًا أن القرب من محطة المترو له انعكاسان: إنه يخفض ويزيد من سعر بعض الشقق. قد يكون السبب هو أن الشقق القريبة جدًا من محطة المترو ستعاني أيضًا من الضوضاء أو الاهتزازات التي تسببها القطارات. ولكن من ناحية أخرى، ستكون متصلة وقريبة جدا لوسائل النقل العام.

عدد المحطات في حدود 1 كم

الأمر نفسه ينطبق على عدد من المحطات في حدود 1 كلم من الشقة. العديد من محطات المترو في جميع أنحاء تعني بشكل عام زيادة سعر الإيجار. ومع ذلك، فإن لها أيضا تأثير سلبي : المزيد من الضوضاء.

الجمع بين النتائج

بعد استخدام نماذج مختلفة ومقارنة أدائها، يمكنك الآن الجمع بين نتائج كل نموذج وإنشاء مجموعة.

Bagging هي نموذج مجموعة التعلم الآلي الذي يستخدم تنبؤات العديد من الخوارزميات لحساب التنبؤات الإجمالية النهائية. وهي مصممة لمنع التحايل وتقليل تباين الخوارزميات.

نظرًا لأن لدينا بالفعل تنبؤات من الخوارزميات المذكورة أعلاه ، قمنا بدمج جميع النماذج الأربعة بكل الطرق الممكنة واخترنا أفضل سبعة نماذج منفردة ومجمعة استنادًا إلى RMSLE لمجموعة التحقق من الصحة.

يمكنك أيضًا إنتاج مجموعة من النماذج غير المتكافئة حيث يتم إعطاء وزن أكبر  لنموذج الذي تفضله.

في الواقع، لن يعرف المرء أي عمليات الجميع أفضل دون تجربة ذلك.

Stacked models

ليست طريقة التجميع حسب المعدل أو التجميع حسب وزن النموذج الطرق الوحيدة للجمع بين نماذج التنبؤ المختلفة. فعلماء البيانات يعتمدون أيضا على stacked models.

الخلاصة والملاحظات النهائية

  • استمع إلى ما يتحدث عنه الناس من حولك٬ فيمكن أن تشكل شكواهم نقطة انطلاق جيدة لمشروع تحليل بيانات كبير.
  • اترك المجال للناس لإستخراج تحليلاتهم الخاصة من خلال توفير لوحات تحكم تفاعلية
  • لا تقيد نفسك بالمناهج والخوارزميات الشائعة. حاول العثور على مصادر إضافية للبيانات والتفسيرات.
  • جرب استخدام تجميع نماذج التنبؤات وخوارزميات Stacked models فإنها تحسن الأداء بشكل كبير.

المصدر: https://medium.freecodecamp.org/how-to-build-a-data-science-project-from-scratch-dc4f096a62a1