اذهب إلى المحتوى

السؤال

نشر

مرحبًا فريق أكاديمية حسوب،

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

رابط التطبيق على Streamlit Cloud:
https://ml-app-010.streamlit.app/

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

مميزات التطبيق باختصار:

رفع ملفات CSV، Excel، أو JSON.

تنظيف البيانات (duplicates، missing values، outliers) سواء يدويًا أو أوتوماتيكيًا باستخدام توصيات ذكية.

اختيار نوع المشكلة (تصنيف أو انحدار).

دعم لمجموعة من النماذج (Sklearn، XGBoost، LightGBM، CatBoost... إلخ).

إمكانية التدريب باستخدام cross-validation أو AutoML.

عرض تقييم شامل للنماذج المختارة.

دعم أدوات شرح النماذج مثل SHAP وLIME.

تصدير الخطوات المنفذة إلى Jupyter Notebook تلقائيًا.

ملاحظات مهمة للمستخدمين:

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

بعد خطوة الـ Split: بيظهر في الـ Sidebar اختيارات لScoring Metric زي Accuracy، F1، AUC لو كانت المهمة Classification، أو R²، MSE لو كانت Regression. فلازم المستخدم ينزل في الـ Sidebar بعد الـ Split عشان يظبط إعدادات التقييم.

خيار Stratify: متاح فقط لو كانت المشكلة تصنيف (Classification)، فلو بتتعامل مع انحدار (Regression) من الأفضل تشيل التحديد من عليه.

التطبيق غير مناسب لبيانات الـ Time Series في الوقت الحالي.

استخداماته المحتملة:

أداة تعليمية  للمبتدئين.

تسريع خطوات النمذجة للمشاريع الصغيرة و المتوسطه

فهم خطوات ML بشكل تفاعلي بدل كتابة كود طويل.

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

Recommended Posts

  • 0
نشر

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

الكود منظم بشكل جيد ويتبع تسلسل منطقي لخطوات المشروع وهي تحميل -> تنظيف -> EDA -> تقسيم -> تدريب -> تقييم -> تفسير -> تصدير.

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

والكود الخاص بالتصدير للـ Notebook معقد ولكنه مكتوب بشكل جيد، حيث حاولت إعادة بناء الخطوات التي قام بها المستخدم في شكل كود Python داخل Notebook، بما في ذلك تنظيف البيانات، التقسيم، بناء الـ Pipeline، والتدريب مع مراعاة Hyperparameter Tuning في حال تم استخدامه.

للتحسين، كبداية في واجهة المستخدم، القوائم المنسدلة لها نفس لون الخلفية ولا يظهر بشكل واضح هل تم الضغط على القائمة أم لا، لأنّ الخيارات لا تظهر بشكل واضح:

Snag_6487ee7.png.40d74141a6762fd5eeb49fe824164731.png

وحاليًا يستطيع المستخدم تطبيق التوصيات ثم تطبيق طريقة يدوية،والكود لا يمنعه، من الأفضل إضافة st.radio بدلاً من زرين منفصلين وليكن اختر طريقة التعامل: توصيات آلية | طريقة يدوية، أو بعد الضغط على أحد الأزرار، يتم تعطيل disabled=True في الخيارات الأخرى لتلك الخطوة المفقودات أو القيم المتطرفة حتى يتم إعادة تحميل الصفحة أو إضافة زر Reset Cleaning Step.

أيضًا أنت تضع الـ cv_scoring في الـ Sidebar، ومن الأفضل نقله إلى قسم Model Selection & Training الرئيسي ليظهر بشكل أوضح بعد خطوة الـ Split وقبل التدريب.

و لتحسين الـ UI أكثر في الـ Sidebar اجعل خيار stratify معطلاً disabled=True) في حال

 st.session_state.problem_type == "Regression"

ويا حبذا لو قمت بالتوجيه البصري للمستخدم، من خلال st.info, st.warning, st.success, st.error بشكل أكثر فعالية لتوجيهه خلال الخطوات، مثلاً، بعد الـ Split، اعرض st.info(الخطوة التالية: قم بتحديد مقاييس التقييم من الشريط الجانبي، ثم اختر النماذج وقم بالتدريب).

وكذلك مؤشرات تقدم أفضل للمهام الطويلة مثل AutoML, GridSearch، حساب SHAP، اعتمد على st.spinner مع رسائل واضحة، ولو أمكن، حاول تحديث شريط التقدم بشكل أكثر دقة.

والإعتماد على st.tabs لتقسيم الأقسام الكبيرة ومنها EDA أو التقييم إلى أجزاء أصغر.

أيضًا فكر في كيفية السماح للمستخدم بالعودة لخطوة سابقة وتعديلها دون الحاجة لإعادة كل الخطوات التالية، وذلك تحدٍا في Streamlit ويتطلب تخطيطاً دقيقاً لـ session_state.

وحاليًا التطبيق يدعم PolynomialFeatures و OneHotEncoder، حاول إضافة خيارات أخرى شائعة ومنها LabelEncoder مع تحذير بشأن استخدامه، أو ربما طرق Binning للمتغيرات الرقمية.

أيضًا السماح للمستخدم بتحديد الأعمدة التي يريد تطبيق Scaling عليها أو Encoding عليها بشكل أدق بدلاً من تطبيقها على كل الأعمدة الرقمية/الفئوية المكتشفة تلقائياً، فحالياً يتم تحديد num_cols و cat_cols تلقائياً.

وفي EDA حاول إضافة خيار لعرض توزيع المتغيرات الفئوية Bar plots، وإضافة خيار لرسم العلاقة بين كل متغير مستقل والمتغير التابع Scatter plot للـ Regression، Box plot/Violin plot للـ Classification.

أيضًا عليك التعامل مع الأعمدة في الـ Pipeline، حاليًا يوجد st.session_state.num_cols و st.session_state.cat_cols التي يتم تحديدها بعد الـ Split، وذلك جيد.

لكن المتغيرات true_num_cols و true_cat_cols هي للتعامل مع الأعمدة الرقمية التي ربما تكون فئوية أي عدد قليل من القيم الفريدة، وهي لتصدير الـ Notebook، من الأبسط والأوضح إعادة تحديد num_cols و cat_cols المستخدمة في ColumnTransformer بناءًا على X_train.dtypes مباشرًة قبل تعريف preprocessor في قسم التدريب، للتأكد من أنها تعكس الحالة الحالية للبيانات بعد كل خطوات التنظيف.

وزر Finalize Cleaning، لا ينفذ أي عملية تغيير بيانات إضافية، عليك إما إزالته، أو إعطاؤه وظيفة واضحة كتأكيد أن المستخدم انتهى من التنظيف والانتقال للخطوة التالية، ربما عن طريق إخفاء خيارات التنظيف.

وللعلم نماذج مثل CatBoost تستطيع التعامل مع المتغيرات الفئوية مباشرة وأحياناً بشكل أفضل من One-Hot Encoding، والـ Pipeline الحالي يقوم بعمل OHE لكل الأعمدة الفئوية، بإمكانك إضافة خيار للسماح لـ CatBoost بالتعامل مع الأعمدة الفئوية مباشرة إن تم اختياره، لكن ذلك يتطلب تعديل الـ preprocessor لـ CatBoost.

  • 0
نشر

اولا احب اشكرك علي اهتمامك و توصياتك و انا لسه مبداء هتفديني كتير . في حاجات مش واضحه لي  

بتاريخ 4 ساعة قال Mustafa Suleiman:

لتحسين، كبداية في واجهة المستخدم، القوائم المنسدلة لها نفس لون الخلفية ولا يظهر بشكل واضح هل تم الضغط على القائمة أم لا، لأنّ الخيارات لا تظهر بشكل واضح:

Snag_6487ee7.png.40d74141a6762fd5eeb49fe824164731.png

هل هي مش واضحه غير عندي بس زي ما موجود في الصوره 

 

background.png.332b446dc236c895e2f186c6817c056b.png

بالنسبه لfinalize ده باكد لمستخدم علي الخطوات الي عمله (action log)finaliz.png.3cb68a2315371c095eb6e8edd7784342.png

وانا شاء الله همشي علي التوصيات دي و اعدل في الكود  و شكرا

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...