المكاسب:
- القدرة على تمييز سبب القيم المفقودة (عشوائية، منهجية، ذات معنى) واختيار الاستراتيجية المناسبة وحساب قيمة التعبئة من التدريب وحده
- القدرة على فحص القيم المتطرفة قبل حذفها والتمييز بين خطأ البيانات والحدث النادر الحقيقي
- القدرة على منع الخسارة الصامتة من خلال مراقبة تأثير كل خطوة على عدد الأسطر/الفراغات مع جلب عدم تناسق النوع والتنسيق إلى المعيار
ما يقرب من 60-80 بالمائة من وقت عالم البيانات يذهب إلى التنظيف؛ في الصناعة، يُطلق على هذا اسم "مجادلة البيانات" (مجادلة البيانات أو تنظيف البيانات) بشكل نصف مازح. نظرًا لأن بيانات العالم الحقيقي لا تأتي أبدًا جاهزة للتحليل: فالتواريخ تكون بتنسيقات مختلطة، ويتم تخزين الأرقام كنص، وبعض الخلايا فارغة، ويظهر العميل ثلاث مرات في نفس الجدول مع تهجئتين مختلفتين. سنغطي في هذه الوحدة ثلاثة جوانب أساسية للتنظيف: القيم المفقودة، والقيم المتطرفة، وتحويل النوع/التنسيق. ويعد الذكاء الاصطناعي مساعدًا سريعًا للغاية في هذا العمل؛ لكنك أنت من يقرر ما يجب تنظيفه وكيف، لأن كل خيار تنظيف يغير التحليل.
القاعدة الذهبية للتنظيف: كل تغيير هو قرار
حذف خلية، وملء قيمة مفقودة بالمتوسط، وتقليص القيمة المتطرفة - لا تعتبر أي من هذه العمليات "محايدة". كل يغير البيانات ويؤثر على النتيجة. لذا فإن القاعدة الذهبية للتنظيف: اكتب كل تغيير في الكود، ولاحظ الأساس المنطقي، ولا تستبدل البيانات الأصلية أبدًا. يمنحك الذكاء الاصطناعي كود تنظيف سريع، ولكن تقع على عاتقك مسؤولية فهم ما يفعله هذا الكود؛ لا تقم بتشغيله دون معرفة عدد الأسطر التي اختفت عندما تقول "احذف الأسطر الفارغة".
تحذير: لا تقم أبدًا بتعديل البيانات الأولية الأصلية. اكتب النسخة المنظفة في ملف/جدول منفصل. بهذه الطريقة، إذا اكتشفت خطأ ما، يمكنك العودة إلى المربع الأول والحفاظ على إمكانية تكرار النتائج.
القيم المفقودة: لماذا هي فارغة، ماذا تفعل
القيمة المفقودة (تظهر عادةً كـ NaN — "ليس رقمًا" في الباندا) تكون عندما تكون الخلية فارغة. لكن سبب الفجوة هو الذي يحدد الحل. هناك ثلاث حالات نموذجية. مفقود عشوائي: المستشعر لم يعمل للحظة؛ قد يكون من المعقول ملء ذلك. مفقود بشكل منهجي: حقل النموذج مطلوب فقط لعملاء محددين؛ الفجوة هنا هي في الواقع المعلومات. مفقود مهم: إذا كان "تاريخ الإرجاع" فارغًا، فهذا يعني أن العميل لم يعد؛ هذه المساحة تعني 0 أو "لا شيء"، وهي غير ممتلئة.
الاستراتيجيات الرئيسية:
استراتيجية
متى يكون ذلك مناسبا؟
خطر
حذف الصف
معدل المفقودين منخفض جدًا (<5٪) وعشوائي
فقدان البيانات والتمثيل
حذف عمود
معظم العمود فارغ (>60%)
فقدان المعلومات
متوسط/متوسط التعبئة
رقمية، مفقودة بشكل عشوائي
فهو يقلل من التباين ويشوه التوزيع
فئة "غير معروف"
فقدان قاطع ومنهجي
يولد فئات إضافية
التنبؤ مع النموذج
عمود معقد وثمين
خطر التسرب والتعقيد
النقطة الحرجة: يجب حساب قيمة التضمين فقط من بيانات التدريب ويجب تطبيق نفس القيمة على بيانات الاختبار. إذا قمت بتضمين متوسط بيانات الاختبار، فإنك تقوم بإنشاء تسرب (الوحدة 10). غالبًا ما يُفضل الوسيط (القيمة الوسطى للبيانات الترتيبية) على المتوسط لأنه أكثر قوة بالنسبة للقيم المتطرفة من المتوسط.
القيم المتطرفة: خطأ أم حقيقي؟
يمكن أن تكون القيمة المتطرفة أحد أمرين: خطأ في البيانات (999 في عمود العمر) أو حدث حقيقي ولكنه نادر (طلب العميل بقيمة 2 مليون دولار). الخلط بين الاثنين أمر كارثي: احذف القيمة المتطرفة الحقيقية وستتخلص من المعلومات المهمة؛ إذا تركت الخطأ، فسوف تعاني معدلاتك. لذلك، من الضروري فحص القيمة المتطرفة أولاً، وليس حذفها تلقائياً.
طرق الكشف الشائعة: طريقة IQR (المدى الربيعي؛ القيم التي تزيد عن 1.5 مرة الفرق بين 25% و75% من البيانات تعتبر قيمًا متطرفة) وz-score (عدد الانحرافات المعيارية بعيدًا عن متوسط القيمة؛ عادةً ما تكون قيمة متطرفة إذا كانت أكبر من 3). ويكتب الذكاء الاصطناعي الكود الخاص بهذه الحسابات في ثوانٍ؛ ولكن قبل أن تقول "حذف"، تحقق من ماهية تلك القيم.
تحويل النوع والتنسيق: مصدر خطأ صامت
أحد أكثر المشاكل التي تسبب الصداع هو الارتباك في نوع البيانات. إذا تم تخزين عمود "المبلغ" كنص، فلا يمكنك إضافته؛ يقرأ البرنامج بشكل غير صحيح رقمًا منسقًا باللغة التركية مثل "1,250.50" بدلاً من "ألف ومائتين وخمسين". التواريخ ("01/03/2024" يوم-شهر أم شهر-يوم؟)، والفئات ("ذكر"/"ذكر"/"M" هي نفس الشيء؟) والوحدات (TL أو kuruş؟) تنتج نتائج غير صحيحة بصمت. جزء كبير من عملية التنظيف هو سحب هذه التناقضات إلى المعيار: التواريخ في تنسيق واحد، والفئات في تهجئة واحدة، والأرقام في وحدة واحدة.
ثلاث حالات صغيرة
الحالة 1 - المصيدة المتوسطة. قام الفريق بملء 320 قيمة مفقودة في عمود الدخل بمتوسط (48500 دولار). لكن أوجه القصور كانت منهجية: كانت هذه هي الشريحة ذات الدخل المنخفض التي لم تعلن عن دخلها قط. إن معدل الملء جعل هذه المجموعة غنية بشكل مصطنع، وكان النموذج الائتماني خاطئا. الدرس المستفاد: اسأل "لماذا هو فارغ" قبل ملئه.
الحالة 2 - القيم المتطرفة التي لا ينبغي حذفها. قام أحد محللي التجزئة بحذف 4 طلبات ضخمة (1.8 مليون ليرة تركية لكل منها) في بيانات المبيعات، معتقدًا أنها كانت "أخطاء". ومع ذلك، كانت هذه طلبات شركات حقيقية وكانت تمثل 22% من إجمالي حجم التداول. لقد أخطأ نموذج توقعات ما بعد الحذف الطلب المؤسسي تمامًا. الدرس: افحص القيمة المتطرفة قبل حذفها.
الحالة 3 - كارثة تنسيق التاريخ. في ملف CSV، تم خلط التواريخ في كل من "2024-03-01" و"01.03.2024". عندما تم تحليل الكود الذي كتبه YZ وفقًا للتنسيق الأول، أصبح 6400 سطرًا NaT كـ "تاريخ غير صالح" وتم استبعادهم بصمت من التحليل. ولم يلاحظ المحلل ذلك إلا عندما انخفض عدد الخطوط. الدرس: تحقق دائمًا من عدد الأسطر والفراغات بعد التحويل.
أربعة قوالب قابلة للنسخ
1) خريطة القيمة المفقودة:
لدي الباندا مدافع. اكتب كودًا يُنتج جدولًا يوضح عدد ونسبة المفقودين (NaN) لكل عمود. ثم قم بإدراج الأعمدة التي بها معدل مفقود يتجاوز 40% والأعمدة التي بها معدل مفقود أقل من 5% بشكل منفصل. ما عليك سوى إنشاء رمز التشخيص هذا، وليس الاستراتيجية التي تقترحها؛ سأتخذ القرار.
2) التفتيش الخارجي (وليس الحذف):
اكتب رمزًا يكتشف (وليس يحذف!) القيم المتطرفة لعمود "المبلغ" الخاص بي باستخدام طريقة IQR. ضع الصفوف البعيدة في ملف df منفصل حتى أتمكن من فحصها يدويًا. قم أيضًا بطباعة عدد القيم المتطرفة وحصتها في الإجمالي.
3) توحيد النوع/التنسيق:
اكتب التعليمات البرمجية التي توحد الأعمدة التالية: - "التاريخ": يمكن أن تكون تنسيقات مختلطة ("2024-03-01" و"01.03.2024")؛ قم بتحويلها جميعًا إلى تاريخ/وقت، واحسب العناصر غير القابلة للترجمة وقم بالإبلاغ عنها (تخلص منها بصمت). - "الجنس": "ذكر"/"ذكر"/"M" -> "M"، "أنثى"/"أنثى"/"F" -> "K". - "المبلغ": نص منسق بالتركية ("1.250,50") -> رقم عشري. اطبع عدد الصفوف المتأثرة بعد كل تحويل.
4) التحقق قبل/بعد التنظيف:
اكتب تعليمات برمجية تقارن df.shape والعدد المفقود وإحصائيات الملخص (المتوسط والوسيط والحد الأدنى والحد الأقصى) للأعمدة المحددة قبل خطوة التنظيف وبعدها. الغرض: معرفة التغييرات في التنظيف.
موجه ضعيف / موجه قوي
حث ضعيف:
امسح هذه البيانات.
"واضح" غامض. لا يعرف الذكاء الاصطناعي ما هي الأجزاء المفقودة التي يجب حذفها، وما الذي يجب ملؤه، وما هو العمود الذي يجب معالجته وكيف. النتيجة: تغييرات عمياء لا رجعة فيها.
مطالبة قوية:
دورك: مساعد تنظيف البيانات. أعمدة df: معرف_الزبون (int)، تاريخ_التسجيل (نص بتنسيق مختلط)، الإيرادات_tl (نص، "1,200.00")، المدينة (نص، إملائي غير متناسق). القواعد: - تغيير المدافع الأصلي؛ العمل على النسخة المسماة df_clean. - تحويل الدخل إلى رقم، عد ما لا يمكن ترجمته. - تغيير سجل_التاريخ إلى وقت التاريخ، الإبلاغ عن الخطأ. - لا تحذف أي صفوف دون موافقتي؛ عرض المرشحين بشكل منفصل. بعد كل خطوة، قم بطباعة df_temiz.shape والرقم المفقود.
هنا المصدر محمي، كل تحويل محسوب، والحذف متروك للإنسان.
الأخطاء الشائعة
- ملء الفجوات دون السؤال "لماذا هو فارغ؟" يؤدي ملء النقص المنهجي/الكبير بالمتوسط إلى تشويه البيانات.
- حذف القيمة المتطرفة دون فحصها. إن تجاهل الأحداث الحقيقية والنادرة يؤدي إلى تدمير المعلومات المهمة.
- حساب قيمة الحشو من كافة البيانات. يؤدي تضمين بيانات الاختبار إلى حدوث تسرب؛ فقط احسب من التدريب.
- عدم التحقق من عدد الصفوف/الفراغات بعد التحويل. يتم استبعاد الصفوف التي تكون NaT/NaN بصمت من التحليل.
- الكتابة فوق البيانات الأصلية. يتم فقدان العودة والاستنساخ.
نصيحة: قم بإجراء عملية التطهير من خلال مقارنة "قبل-بعد". قم بطباعة df.shape والعدد المفقود وإحصائيات ملخص الأعمدة المهمة بعد كل خطوة. لذلك ترى على الفور أن خطوة واحدة تدمر بشكل غير متوقع 6000 صف.
باختصار
تعد عملية التطهير هي المرحلة الأكثر استهلاكًا للوقت وتتطلب اتخاذ قرار في علم البيانات. كل تغيير يغير البيانات، لذلك كل تغيير هو قرار واعي. بالنسبة للقيم المفقودة، اسأل "لماذا هو فارغ؟" قم بمراجعة أي قيم متطرفة قبل حذفها؛ جلب النوع والشكل إلى المعيار. احسب قيمة التعبئة من بيانات التدريب فقط، واحتفظ بالأصل، وتتبع تأثير كل خطوة من خلال عدها. يعد الذكاء الاصطناعي عامل تسريع هائل في هذا المجال، لكن البشر هم من يقررون ما الذي تقوم بتنظيفه ولماذا.
مهمة التطبيق
خذ (أو أنشئ) جدولًا صغيرًا وأدخل فيه ثلاث مشكلات عمدًا: مجموعة قيمة مفقودة، وقيمة متطرفة، وتنسيق تاريخ مختلط. طلب رمز التشخيص والتوحيد من الذكاء الاصطناعي باستخدام القوالب المذكورة أعلاه؛ قارن عدد الصفوف والفراغات قبل/بعد كل خطوة. حاول التقاط "خسارة صامتة" واحدة على الأقل ولاحظ كيف لاحظتها.
قائمة مرجعية
- [ ] هل احتفظت بالبيانات الأولية الأصلية وعملت على النسخة؟
- [ ] هل طرحت السؤال "لماذا هو فارغ" لكل عمود مفقود؟
- [ ] هل قمت بمراجعة القيم المتطرفة قبل حذفها؟
- [ ] هل قمت بحساب قيمة الحشو من بيانات التدريب فقط؟
- [ ] هل أقوم بالتحقق من عدد الأسطر/الفراغات بعد كل خطوة والقضاء على الخسارة الصامتة؟