التنبؤ بأمراض القلب باستخدام التعلم الآلي | Heart Disease Prediction using Machine Learning

الخميس 30 رجب 1443ھ الخميس 3 مارس 2022م
فيسبوك
إكس
واتساب
تيليجرام
لينكدإن

1٬707 كلمة

29 دقيقة

المحتوى

مقدمة

يعد التنبؤ بأمراض القلب وتشخيصها أحد التحديات الكبرى في الصناعة الطبية حيث أنه يعتمد على عدة عوامل تشمل الفحص البدني وأعراض وعلامات مختلفة تظهر على المريض.

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

تشمل العوامل التي تؤثر على أمراض القلب مستويات الكوليسترول في الجسم ، عادات التدخين والسمنة ، التاريخ العائلي للأمراض ، ضغط الدم ، بيئة العمل وغيرها و تلعب خوارزميات التعلم الآلي ML Algorithms اليوم دورًا أساسيًا ودقيقًا في التنبؤ بأمراض القلب و تسمح التطورات المتسارعة في التكنولوجيا للغة الآلة Machine Language بالاندماج مع أدوات البيانات الضخمة Big Data لإدارة البيانات غير المهيكلة Unstructured Data والمتنامية بشكل كبير والتي تشمل البيانات الطبية للمرضى حول العالم.

يمكن التنبؤ بأمراض القلب بناءً على أعراض مختلفة مثل العمر ، الجنس، معدل ضربات القلب وما إلى ذلك و الذي يقلل بدوره من معدل الوفيات لمرضى القلب سنقوم في هذا الدرس التقني باستخدام خوارزميات التعلم الآلي ولغة باثيون لعمل ذلك !

1. التحليل الاستكشافي للبيانات EDA

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

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

1.1 استيراد المكتبات

https://gist.github.com/AI-MOO/e4773654fc2ab82b144214072fc2dcb1

يمكن تحميل مجموعة البيانات و الأكواد المستخدمة في هذا الدرس من خلال الرابط التالي : للتحميل📂

https://gist.github.com/AI-MOO/eda44ae16d4d554ec44d212fafbd40a1
image 9
1.1 إطار البيانات الخاص بتوقع أمراض القلب

1.2 الشرح الوصفي للبيانات :

  • age : العمر بالسنوات.
  • sex : الجنس.
    • القيمة 1 : ذكر.
    • القيمة 0 : أنثى.
  • cp : نوع ألم الصدر
    • القيمة 0 : بدون أعراض.
    • القيمة 1 : الذبحة الصدرية اللانمطية.
    • القيمة 2 : الألم غير الزاوي.
    • القيمة 3 : الذبحة الصدرية النموذجية.
  • trestbps : ضغط دم الشخص أثناء الراحة عند دخوله المستشفى (بالمليمتر الزئبقي mm Hg ).
  • chol : قياس الكوليسترول لدى الشخص بالملغرام/ديسيلتر mg/dL.
  • fbs : نسبة السكر في دم الشخص أثناء الصيام (نسبة السكر>120 بالملغرام/ديسيلتر 1= صحيح ؛ 0 = خطأ).
  • restecg : نتائج تخطيط القلب أثناء الراحة :
    • القيمة 0 : تضخم البطين الأيسر المحتمل أو المؤكد حسب معايير إستس Estes’ criteria
    • القيمة 1 : الوضع الطبيعي
    • القيمة 2 : وجود شذوذ في موجة ST-T (انقلاب الموجة T و / أو ارتفاع ST أو انخفاض> 0.05 mV)
  • thalach : الحد الأقصى لمعدل ضربات القلب للشخص
  • exang : الذبحة الصدرية الناتجة عن التمرين (1 = نعم ؛ 0 = لا).
  • oldpeak : انحسار ST الناجم عن التمرين المتعلق بالراحة يتعلق “ST” بالمواقع على مخطط ECG.
  • slope : ميل المستقيم لجزء الـ ST من تمرين الذروة
    • القيمة 0 : متصاعد upsloping.
    • القيمة 1 : مسطح flat.
    • القيمة 2 : منحدر downsloping.
  • ca : عدد الأوعية الدموية Vessels (0-3)
  • thal : اضطراب في الدم يسمى الثلاسيميا
    • القيمة 0 : NULL (تم إسقاطها من مجموعة البيانات سابقًا)
    • القيمة 1 : خلل ثابت (عدم تدفق الدم في جزء من القلب)
    • القيمة 2 : تدفق الدم الطبيعي
    • القيمة 3 : عيب قابل للانعكاس (لوحظ تدفق للدم ولكنه ليس طبيعيًا)
  • target : تمثل وجود مرض بالقلب من عدمه وهو المتغير المستهدف الذي نريد التنبؤ به
    • القيمة 0 : قلب سليم.
    • القيمة 1 : وجود مرض بالقلب.

لنبدأ الآن بتحليل البيانات من خلال الرسومات البيانية:

1.3 استخراج المعلومات الإحصائية للبيانات :

https://gist.github.com/AI-MOO/3411b8778d2a877d344b88e7d0e1679f
image 10
1.2 المعلومات الإحصائية للبيانات

من خلال هذا الجدول بإمكاننا استخراج معلومات إحصائية لكل ميزة من الميزات مثل المعدل mean ، الانحراف المعياري std أصغر قيمة min و أكبر قيمة max فعلى سبيل المثال نرى أن عدد الأشخاص في مجموعة البيانات 303 و معدل الأعمار لهم هو 54 سنة و متوسط نسبة الكولسترول mg/dL 246.26 وأعلى قيمة ضغط انقباضي trestbps هي 200 بينما أقل قيمة هي 126.

1.4 استعراض حالة الأشخاص في مجموعة البيانات:

https://gist.github.com/AI-MOO/4437f5f0868729874a53e66a6c440e11
image 11
1.3 عدد الأشخاص المصابين بأمراض القلب مقابل الأشخاص الغير مصابين.

لدينا 165 شخصًا يعانون من أمراض القلب و 138 شخصًا سليمًا ، لذا فإن بيانات المتغير المستهدف target الذي نريد توقعه هي بيانات متوازنة.

1.5 التحقق من القيم المفقودة مجموعة البيانات:

https://gist.github.com/AI-MOO/3cd845bf83a37931055e368af8b1187d
image 12
1.4 التحقق من وجود قيم مفقودة بكل ميزة

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

1.6 تحديد نوعية الميزات [فئوية Categorical ، رقمية متصلة Continuous ] و التحقق من قيم كل منها :

https://gist.github.com/AI-MOO/b267d4115bd1dcca5b217578bdb9048c
image 14
1.5 التحقق من القيم الممثلة لكل ميزة وتحديد نوع الميزة

1.7 دراسة علاقة الميزات الفئوية بأمراض القلب:

Categorical Features : ['sex', 'cp', 'fbs', 'restecg', 'exang', 'slope', 'ca', 'thal', 'target']
https://gist.github.com/AI-MOO/f9fc07432b90d855c1f0404b6d9a80f7
output
1.6 تصوير الميزات الفئوية بالنسبة لأمراض القلب

شرح الألوان في التصوير البياني:

  • 544FE5# : سليم
  • #F45F62 : مريض قلب
  • #BB2462 : سليم أو مريض حسب التصوير فعلى سبيل المثال : يشير الرقم 0.0 إلى الإناث في ميزة الجنس ، حوالي 22 منهن لا يعانين من أي أمراض بالقلب و أكثر من 70 هن بالفعل مريضات بالقلب بينما يشير الرقم 1.0 إلى الذكور ويوضح الرسم أن حوالي 90 منهم مرضى بالقلب و أكثر من 110 هم سليمون.
Code O2vP8WGVgs
1.7 شرح لكيفية قراءة التصوير البياني

الملاحظات المستخرجة من التصوير البياني :

cp (ألم الصدر): الأشخاص الذين يعانون من آلام في الصدر من نوع : cp : [1 ، 2 ، 3] يميلون للتعرض لأمراض القلب أكثر من الأشخاص الذين لا يعانون من أي آلام في الصدر cp : 0

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

exang (الذبحة الصدرية الناتجة عن التمرين): الأشخاص الذين يعانون من ذبحة صدرية ناتجة عن أمر غير التمرين والذين يحملون القيمة 0 هم أكثر عرضة لأمراض القلب من الذين لديهم ذبحة صدرية ناتجة عن التمرين القيمة 1.

slope (ميل المستقيم لجزء الـ ST من تمرين الذروة): الأشخاص الذين لديهم قيمة ميل منحدر downsloping بقيمة 2 لديهم علامات تدل على وجود قلب غير صحي وبالتالي هم أكثر عرضة للإصابة بأمراض القلب من الأشخاص الذين لديهم قيمة ميل متصاعد upsloping بقيمة 0 أو ميل مسطح flat بقيمة 1: الحد الأدنى من التغيير (قلب صحي نموذجي)).

ca (عدد الأوعية الدموية (0-3) ): كلما زادت حركة الدم كلما كان ذلك أفضل ، لذلك فإن الأشخاص الذين لديهم عدد أوعية أقل ca يساوي 0 هم أكثر عرضة للإصابة بأمراض القلب.

thal (اضطراب في الدم يسمى الثلاسيميا) : الأشخاص الذين لديهم قيمة thal = 2 هم أكثر عرضة للإصابة بأمراض القلب.

1.8 دراسة علاقة الميزات الرقمية المتصلة بأمراض القلب:

https://gist.github.com/AI-MOO/f9fc07432b90d855c1f0404b6d9a80f7
dd
1.8 تصوير الميزات الرقمية أو المتصلة بالنسبة لأمراض القلب

trestbps : عندما يكون قياس ضغط الدم أعلى من 130-140 mm Hg فذلك يتعبر أمرًا مثيرًا للقلق.

chol : عندما يكون قياس الكولسترول أعلى من 200 mg/dL فهو مؤشر شديد الخطورة كما هو موضح في التصوير البياني أعلاه.

thalach : الأشخاص الذين يزيد معدل ضربات القلب لديهم عن 140 هم أكثر عرضة للإصابة بأمراض القلب.

1.9 مصفوفة الارتباط Correlation Matrix

https://gist.github.com/AI-MOO/e1d7832aa250410e8b6a4b783791b27d

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

output 1
1.9 مصفوفة الارتباط التي تدرس العلاقة بين الميزات في مجموعة البيانات
https://gist.github.com/AI-MOO/039d88364703ef364b062fa9603da0df
output 2
1.10 دراسة العلاقة بين المتغير المستهدف وبقية الميزات

كيف يتم دراسة الترابط ؟

  • كلما كانت قيمة الارتباط أقرب إلى الصفر كلما كان الترابط بين الميزة والمتغير المستهدف ضعيفًا.
  • كلما كانت قيمة الارتباط أقرب لـ -1 أو 1 فهذا يدل على قوة العلاقة الترابطية.

ملاحظات الارتباط:

  • fbs و chol هي الميزات الأقل ارتباطًا بالمتغير المستهدف.
  • جميع الميزات الأخرى لها ارتباط كبير مع المتغير المستهدف.

2. التنبؤ بأمراض القلب باستخدام التعلم الآلي

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

بعد استكشاف مجموعة البيانات ، يمكننا ملاحظة أننا بحاجة إلى تحويل بعض المتغيرات الفئوية إلى متغيرات رقمية مرتبة dummy values وإعادة تقييس scaling جميع القيم قبل تدريب نماذج التعلم الآلي.

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

https://gist.github.com/AI-MOO/456a7807c69d010656dfd7925c902bf0
image 15
2.1 إطار البيانات الجديد بعد تحويل الميزات الفئوية وإعادة قياس الميزات الرقمية المتصلة.

2.2 تطبيق خوارزمية الانحدار اللوجستي

الآن ، سنقوم بتدريب نموذج التعلم الآلي على التنبؤ بأمراض القلب. وسنستخدم خوارزمية الانحدار اللوجستي للقيام بهذه المهمة.

ولكن قبل تدريب النموذج ، سأحدد أولاً دالة برمجية Function تساعد في طباعة تقرير عن أداء نموذج التصنيف الخاص بنا:

https://gist.github.com/AI-MOO/fea29026428030c5551dcbee749f50cd

لنقم الآن بتقسيم البيانات إلى مجموعات تدريب واختبار. سنقسم البيانات إلى 70٪ تدريب و 30٪ اختبار:

https://gist.github.com/AI-MOO/ca70c22aa023936364bd1f3cfcffa2fa

الآن سنبدأ بتدريب نموذج التعلم الآلي ونطبع تقرير التصنيف لنموذج الانحدار اللوجستي الخاص بنا:

https://gist.github.com/AI-MOO/f8737074bf13e48f3856920713dee55d
Code kKj9HFc60h
2.2 تقرير يقيس أداء نموذج الانحدار اللوجستي في التنبؤ بأمراض القلب.
  • نلاحظ أن ضبط النموذج Model’s Accuracy يساوي لــ 86.81 %
  • دقة النموذج Model’s Precision تساوي لـ 87 %
  • نتيجة إف F-score تساوي 87%

ملاحظات مصفوفة الدقة (الالتباس) Confusion Matrix

  • TN : 34
  • FP : 07
  • TP : 45
  • FN : 05

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

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

https://twitter.com/Science10S/status/1493508247638228997?s=20&t=HK8KnwI0Qb0pD64-ddDoZg

2.3 التنبؤ ببيانات جديدة

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

https://gist.github.com/AI-MOO/b80d74b70d57138f2fc5dea0a7168d34
image
2.3 إطار بيانات الأشخاص الذين دخلوا المستشفى حديثًا

ملائمة البيانات لتصبح كبيانات الاختبار تماماً من حيث تحويل البيانات الفئوية إلى رقمية و معايرة البيانات المستمرة كالعمر ومن ثم تعويض الأعمدة المفقودة من خلال عملية Right Join مع بيانات الاختبار حيث أن النموذج يستقبل بيانات بالأبعاد التالية : 1×30 أي يجب أن يكون هنالك 30 ميزة.

https://gist.github.com/AI-MOO/e5bbd24ffcf5b6d1f9ae950505a3e411
image 2
2.4 بيانات الأشخاص الجدد بعد ملائمتها مع بيانات الاختبار
https://gist.github.com/AI-MOO/2ed9daa71d63b70b92b2322e9e68d095
array([1, 0, 1], dtype=int64) 

النتائج التي توقعها النموذج:

  • المريض الأول : يعاني من مرض في القلب.
  • المريض الثاني : لا يعاني من أي مرض في القلب.
  • المريض الثالث : يعاني من مرض في القلب

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

المصادر

نـشـــرة فـهـــم البـريديـــة

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