كيفية بناء وتطوير ونشر نموذج التعلم الآلي للتنبؤ بأسعار السيارات باستخدام الشبكات العصبية

المؤلفون: بيدرو كاستيلو ، اليساندرو ريجونيني.

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

نحن Frontier Car Group ، وهي شركة ناشئة مقرها برلين تركز على رقمنة قطاع مبيعات السيارات في الأسواق الحدودية. حاليًا ، نقوم بتشغيل أسواق السيارات المستعملة عبر الإنترنت في 8 دول ناشئة. أحد نماذج العمل الرئيسية لدينا هو C2B2B ، حيث نشتري السيارات المستعملة من المستهلكين وبعد إجراء فحص فني عميق نبيعها للربح إلى الوكلاء عبر بوابة مزاد عبر الإنترنت (تعرف على المزيد حول FCG).

التحدي

نعمل في البلدان التي توجد فيها تحديات فريدة:

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

كيف تسعير سيارة في سوق ناشئة ... ولا تموت في محاولة

كمشروع لعلوم البيانات ، نحاول التنبؤ بالسعر الذي من المحتمل أن يدفعه المتعاملون مقابل السيارة بناءً على تقرير الفحص. من حيث نطاق ML ، هذه مشكلة انحدار.

أثناء عملية التفتيش لدينا ، نحاول أن نكون سريعين وشاملين. نحن نفحص السيارة لمدة 30 دقيقة ونعمل على جمع قدر شامل من الميزات لكل سيارة - أكثر من 200 دقيقة. تخلق هذه الأهداف المتنافسة مجموعة بيانات فريدة حيث يمكنك أن تجد من الحقول المفقودة توزيعًا مثيرًا ، وفي بعض الأحيان تعسفيًا ، للحقول المفقودة.

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

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

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

ابدأ بأبسط طراز يمكنك ولا تخدع نفسك

لقد كنا متحمسين لاجتماعنا الأول مع Launchpad Mentors. لقد قدمنا ​​جميع تقارير EDA الخاصة بنا ، وكانت محطة SQL جاهزة للاستعلامات السريعة والإجابات السريعة ، ولكن النصيحة التي تلقيناها كانت بسيطة ولكنها ذات قيمة: "ابدأ بأبسط نموذج يمكنك ولا تخدعه بنفسك".

وفي جملة واحدة فقط سريعة ، تلقينا نصيحتين قيمتين بشكل لا يصدق:

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

ألهمتنا طريقة التفكير هذه لإنشاء ما أطلقنا عليه سجل التطوير ، وثيقة لتسجيل التقدم والأفكار الخاصة بالمشروع. أثبت هذا أنه مفيد في تتبع تفاعلاتنا وتعاوننا مع Launchpad Mentors.

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

بعد أسبوع واحد كانت تساهم بالفعل في المشروع وفي سجل التطوير نفسه.

أبسط نموذج ...

ما هو أبسط نموذج مع أقل تحيز؟ بالنسبة لنا ، تم تحقيق ذلك أولاً عن طريق:

  1. اسقاط جميع الأعمدة مع القيم المفقودة.
  2. اسقاط جميع المدخلات النصية المجانية دون نمط واضح.
  3. واحد الساخنة ترميز جميع الميزات الفئوية.
  4. اختيار عشوائي مجموعات التدريب والاختبار.
  5. القيام الانحدار الخطي البسيط.

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

بعد ترميز واحد ساخن ، انتهى بنا الأمر مع ميزات 3.2k لعينات 10k. لقد وجدنا أن هذه النتيجة أبعد ما تكون عن المستوى الأمثل ، لأنه مع تقنيات مثل التعلم العميق ، تحتاج إلى مزيد من العينات. لكننا لم ندع هذا يمنعنا من المحاولة.

وكانت النتيجة تحسين نموذجنا على النحو التالي:

  1. إسقاط جميع الأعمدة مع القيم المفقودة.
  2. شفر الابهام لأعلى / لأسفل الحقول: [ON ، OFF ، NotAvailable] -> [1 ، -1 ، 0]
  3. قم بإسقاط إدخال نص مجاني لم يكن له نمط واضح.
  4. واحد الساخنة ترميز جميع الميزات الفئوية.
  5. اختيار عشوائي مجموعات التدريب والاختبار.
  6. أداء الانحدار الخطي البسيط.

بعد تشغيل النموذج ، كانت هذه نتائجنا:

  • الانحدار الخطي البسيط: R² يسجل 0.830455
  • انحدار لاسو: R² يسجل 0.852544
  • غابة عشوائية: R² يسجل 0.616342

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

الواقع الصعب

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

العمل أكثر ذكاءً ، وليس أكثر صعوبة

بعد بضعة أسابيع ، أدركنا أن لدينا بالفعل 20 دفتر ملاحظات Jupyter مع تجارب مختلفة ، ولكن كان هناك دائمًا نمط: قراءة البيانات ، والمعالجة المسبقة ، والتدريب.

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

تحتوي المكتبة على المكونات التالية:

  1. قارئات البيانات.
  2. Preprocessors.
  3. نموذج المدربين.

قمنا بعد ذلك بتسجيل هذه المكونات وتوصيلها بتكوينات متعددة وقمنا بتشغيل خوارزميات متعددة بطرق معالجة متعددة متعددة. نظرًا لأن مجموعة البيانات الخاصة بنا كانت صغيرة نسبيًا ، فيمكننا تجربة كل المجموعات بين الطرق في وقت معقول ، وخاصة استخدام Docker و Dask لتشغيلهما بشكل متوازٍ.

الفكرة الرئيسية وراء المكتبة الداخلية

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

أضفنا الخطوات التالية في النهج الفائز:

  1. قياس القيم العددية.
  2. إنشاء ميزات الأسية للسنة والمسافة المقطوعة.
  3. حدد مجموعات التدريب والاختبار مع توزيع الشركة المصنعة باستخدام أخذ العينات الطبقية العشوائية.
  4. تدريب 5 نماذج مختلفة.
  5. التحقق من صحة النتائج مع بيانات جديدة ، مع الأخذ في الاعتبار الشهر الحالي.

بعد هذه التكرارات كانت النتائج التالية:

  • الانحدار الخطي البسيط: درجة R²: 3.0286 × 10 ⁻¹⁹
  • انحدار لاسو: درجة R²: 0.893110
  • غابة عشوائية: R² النتيجة: 0.790125
  • XGBoost: R² النتيجة: 0.778196
  • Tensorflow: درجة R²: 0.916127
  • لا مزيد من التوقعات السلبية.
  • كان التعلم العميق الخوارزمية الرائدة.

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

التحدث أكثر

في اجتماعنا الثاني مع Launchpad Mentors ، قدمنا ​​مكتبتنا الجديدة وناقشنا مواضيع مهمة لنجاح المشروع:

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

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

تنظيف كبيرة

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

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

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

أخيرًا ، بدا الهيكل العام كما يلي:

معمارية الحل المنشور

بعد التنظيف الكبير ، انتهى بنا الأمر بميزات 960 بعد ترميز واحد ساخن. تذكر أننا بدأنا 3.2k.

النتائج تبدو مثل هذا:

  • انحدار لاسو: درجة R²: 0.801170.
  • غابة عشوائية: R² النتيجة: 0.902150.
  • XGBoost: R² النتيجة: 0.889196.
  • Tensorflow: درجة R²: 0.925422.

لم تحسن النماذج هذا كثيرًا ، وذلك أساسًا بسبب عدم تغيير الميزات المهمة ، ولكنها كانت تعمل بشكل أسرع وكان من السهل شرحها.

كان للخطأ النسبي لسعر البيع الحقيقي التوزيع التالي:

خطأ في توزيع التنبؤ على مجموعة فحص التعقل.

وجود حوالي 50 ٪ من التوقعات أقل من 5 ٪ خطأ.

ماذا تفعل عندما تكون طبيعة البيانات هي المشكلة على الأرجح

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

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

وكان الخبر السار هو أن هذه المشاكل يمكن حلها من خلال جمع المزيد من البيانات وتوسيع ما تم جمعه بالفعل.

توصيات

  • إذا كنت تستخدم R ، فانتقل إلى Python! كل شيء في برنامج "شركاء Google المعتمدون" على استعداد للعمل مع بيثون ، مما يجعل عملية التطوير والتكامل أسهل.
  • الرافعة المالية BigQuery (ML). قم بتحميل مجموعة البيانات والتحقق من صحة الأفكار السريعة باستخدام استعلام SQL.
  • استخدم Dataprep لتنظيف مجموعة البيانات الخاصة بك ، ثم أصبح من السهل ترجمة منطق المعالجة المسبقة إلى Python.
  • استخدم محرك GCP ML بقدر ما تستطيع. محاولة تشغيل العديد من النماذج في وقت واحد!
  • أتمتة. بدلاً من نسخ شفرة اللصق بين دفاتر الملاحظات ، خصص وقتًا لتطوير مكتبة برامج تم اختبارها جيدًا. قم بإنشاء برامج نصية و Makefiles لنشر مهام التدريب الخاصة بك بسرعة.

الخطوات التالية

بعد حدث Google Cloud Next 19 ، تغير المشهد الكلي لـ ML في برنامج شركاء Google المعتمدين مع إدخال منتجات جديدة مثل AI Hub وخدمات ML الجديدة.

نحن متحمسون للإعلانات ونخطط الآن لتبسيط حلنا بشكل أكبر عن طريق:

  • تحسين مكتبتنا الداخلية مع Kubeflow.
  • توسيع استخدامنا لـ Cloud ML Engine للتدريب وضبط المعلمات المفرطة.
  • خفض حاجز الإدخال لـ ML باستخدام جداول AutoML.

بينما ننظر الآن إلى ما نأمل أن يكون مستقبلاً طويلاً ، مع المزيد من التغييرات في المشهد الطبيعي لـ ML ، نضع في اعتبارنا مقولة قصيرة: ابدأ بسيطة ولا تخدع نفسك.

بيدرو كاستيلو هو المهندس الرائد لشركة BI في Frontier Car Group ، حيث يقود مشاريع التحليلات والتعلم الآلي في المنظمة.

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