منحنيات بيانية بواسطة بايثون

الكود المستخدم:

import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

sns.set_style("darkgrid")
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

plt.figure(figsize=(12,6))

s = [2005, 2008, 2010, 2012, 2014, 2015]
p = [50.59, 94.1, 77.38, 109.45, 96.29, 52.78]

plt.plot(s, p,'s--r')

s = get_display( arabic_reshaper.reshape(u'السنة'))
y = get_display( arabic_reshaper.reshape(u'سعر البرمـيل بالدولار'))
t = get_display( arabic_reshaper.reshape(u' منحنى بياني يمثّل تطور أسعار البترول لدول منظمة الأوبيك ما بين 2005 و 2015 \n'))

plt.xlabel(s)
plt.ylabel(y)

plt.title(t)
plt.legend()
plt.show();
import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

plt.figure(figsize=(12,6))

s = [1980, 1990, 2000, 2005]
p = [540, 1832, 1773, 2073]
q = [90, 150, 286, 370]

plt.plot(s, p,'s-b')
plt.plot(s, q,'s--r')

s = get_display( arabic_reshaper.reshape(u'السنوات'))
y = get_display( arabic_reshaper.reshape(u'المؤشر بالمليار دولار'))
l1 = get_display( arabic_reshaper.reshape(u'الدَّين الخارجي'))
l2 = get_display( arabic_reshaper.reshape(u'خدمة الدَّين'))
t = get_display( arabic_reshaper.reshape(u' منحنى بياني يمثّل تطور مؤشرات الدَّيـن الخارجي ببلدان الجنوب من 1980 إلى 2005 \n'))

plt.xlabel(s)
plt.ylabel(y)

plt.title(t)
plt.legend([l1, l2], bbox_to_anchor = (1, 0.6))

plt.axhspan(0, 2080, facecolor='lightpink', alpha=0.1)

plt.minorticks_on()
plt.grid(which='major', linestyle='-', linewidth='0.2', color='red')
plt.grid(which='minor', linestyle=':', linewidth='0.1', color='black')
plt.tick_params(which='both', top='off', left='off', right='off', bottom='off')

plt.show()
import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

plt.figure(figsize=(12,6), dpi=200)

s = [2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 
     2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]
ex = [23.05, 20.09, 20.15, 25.96, 34.18, 48.71, 57.12, 63.47, 82.04, 48.53,
      61.96, 77.67, 77.11, 69.65, 65.20, 38.55, 33.39, 38.51, 45.23, 39.00]
im = [11.39, 12.05, 14.55, 16.20, 21.88, 24.84, 25.65, 33.54, 49.10, 49.33,
      50.64, 57.45, 59.60, 63.76, 68.28, 60.76, 56.08, 55.62, 56.33, 50.01]
p = [11.66, 8.03, 5.61, 9.75, 12.29, 23.87, 31.47, 29.93, 32.94, -0.8, 11.32, 
     20.23, 17.51, 5.89, -3.08, -22.21, -22.69, -17.11, -11.09, -11.01]

plt.plot(s, ex,'x-b')
plt.plot(s, im,'*--r')
plt.plot(s, p,'>:k')

s = get_display( arabic_reshaper.reshape(u'\n السنوات'))
y = get_display( arabic_reshaper.reshape(u'القـيـم بالمليار دولار'))
l1 = get_display( arabic_reshaper.reshape(u'الصادرات الجزائرية'))
l2 = get_display( arabic_reshaper.reshape(u'الواردات الجزائرية'))
l3 = get_display( arabic_reshaper.reshape(u'الميــزان التجــاري'))
t = get_display( arabic_reshaper.reshape(u' منحنى بياني يوضح تطور الميزان التجاري وقيمة الصادرات والواردات الجزائرية من عام 2000 إلى 2019 \n'))

plt.xlabel(s)
plt.ylabel(y)
plt.title(t)
plt.legend([l1, l2, l3], bbox_to_anchor = (1, 0.6))

plt.axhspan(0, 90, facecolor='lightgreen', alpha=0.1)
plt.axhspan(-30, 0, facecolor='lightpink', alpha=0.1)

plt.minorticks_on()
plt.grid(which='major', linestyle='-', linewidth='0.2', color='red')
plt.grid(which='minor', linestyle=':', linewidth='0.1', color='black')
plt.tick_params(which='both', top='off', left='off', right='off', bottom='off')
  
plt.show()
نُشِرت في تصوير بياني | الوسوم: , , , | أضف تعليق

أعمدة بيانية بواسطة بايثون

أ/ أعمدة بيانية تمثل ظاهرة واحدة

الكود (Code) المُستخدم:

import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

plt.figure(figsize=(12,6))

x1 = get_display( arabic_reshaper.reshape(u'الو.م.أ'))
x2 = get_display( arabic_reshaper.reshape(u'السعودية'))
x3 = get_display( arabic_reshaper.reshape(u'روسيا'))
x4 = get_display( arabic_reshaper.reshape(u'الصين'))
x5 = get_display( arabic_reshaper.reshape(u'العراق'))
x6 = get_display( arabic_reshaper.reshape(u'إيران'))
x7 = get_display( arabic_reshaper.reshape(u'الإمارات'))

t = get_display( arabic_reshaper.reshape(u'أعمدة بيانية توضح الإنتاج اليومي للبترول في بعض دول العالم عام 2017'))

x = [x1, x2, x3, x4, x5, x6, x7]
y = [14.86, 12.39, 11.24, 4.87, 4.48, 4.0, 3.75]

xlbl = get_display( arabic_reshaper.reshape(u'الدول'))
ylbl = get_display( arabic_reshaper.reshape(u'الانتاج اليومي/ بالمليون برميل يوميا'))

plt.title(t)
plt.bar(x, y, label='Bar', color='indianred')
plt.xlabel(xlbl, fontdict=None, labelpad=None)
plt.ylabel(ylbl, fontdict=None, labelpad=None)
plt.show()

الكود المُستخدم:

import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

sns.set_style("darkgrid")
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

plt.figure(figsize=(12,6))

x1 = get_display( arabic_reshaper.reshape(u'قطر'))
x2 = get_display( arabic_reshaper.reshape(u'أستراليا'))
x3 = get_display( arabic_reshaper.reshape(u'روسيا'))
x4 = get_display( arabic_reshaper.reshape(u'ماليزيا'))
x5 = get_display( arabic_reshaper.reshape(u'إندونيسيا'))
x6 = get_display( arabic_reshaper.reshape(u'الجزائر'))
t = get_display( arabic_reshaper.reshape(u'أعمدة بيانية توضح نسب إنتاج بعض دول العالم للغاز المسال بالنسبة للإنتاج العالمي سنة 2017'))

x = [x1, x2, x3, x4, x5, x6]
y = [29.9, 17.2, 4.2, 9.7, 6.4, 4.5]

xlbl = get_display( arabic_reshaper.reshape(u'الدولة'))
ylbl = get_display( arabic_reshaper.reshape(u'نسبة الإنتاج %'))
plt.title(t)
plt.bar(x, y, label='Bar', color='deepskyblue')
plt.xlabel(xlbl, fontdict=None, labelpad=None)
plt.ylabel(ylbl, fontdict=None, labelpad=None)
plt.show()

ب/ أعمدة بيانية تمثل ظاهرتين

الكود المستخدم:

import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

sns.set_style("darkgrid")
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

x1 = get_display( arabic_reshaper.reshape(u'كندا والمكسيك'))
x2 = get_display( arabic_reshaper.reshape(u'الاتحاد الأوربي'))
x3 = get_display( arabic_reshaper.reshape(u'اليابان'))
x4 = get_display( arabic_reshaper.reshape(u'الصين'))
x5 = get_display( arabic_reshaper.reshape(u'بقية بلدان العالم'))

s1 = get_display( arabic_reshaper.reshape(u'الصــادرات'))
w1 = get_display( arabic_reshaper.reshape(u'الـــواردات'))
y1 = get_display( arabic_reshaper.reshape(u'القـــيـــم بالـ %'))
t = get_display( arabic_reshaper.reshape(u'أعمدة بيانية توضح نسب التوزيع الجغرافي لصادرات وواردات الولايات المتحدة الأمريكية عام 2017 \n'))

labels = [x1, x2, x3, x4, x5]
s = [34, 18.3, 4.4, 8.4, 34.9]
w = [25.9, 18.5, 5.8, 21.8, 28]

x = np.arange(len(labels))  # the label locations
width = 0.35  # the width of the bars

fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, s, width, label= s1, color='mediumturquoise')
rects2 = ax.bar(x + width/2, w, width, label= w1, color='lightsalmon')

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel(y1)
ax.set_title(t)
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend()


def autolabel(rects):
    """Attach a text label above each bar in *rects*, displaying its height."""
    for rect in rects:
        height = rect.get_height()
        ax.annotate('{}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),  # 3 points vertical offset
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)

fig.tight_layout()
plt.show()

الكود المستخدم:

import pandas as pd
from bidi.algorithm import get_display
import arabic_reshaper
import matplotlib
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
%matplotlib inline

sns.set_style("darkgrid")
matplotlib.rcParams['font.size'] = 14
matplotlib.rcParams['figure.figsize'] = (9, 5)
matplotlib.rcParams['figure.facecolor'] = '#00000000'

x1 = get_display( arabic_reshaper.reshape(u'الو.م.أ'))
x2 = get_display( arabic_reshaper.reshape(u'منطقة اليورو'))
x3 = get_display( arabic_reshaper.reshape(u'اليابان'))
x4 = get_display( arabic_reshaper.reshape(u'الصين'))

s1 = get_display( arabic_reshaper.reshape(u'2019'))
w1 = get_display( arabic_reshaper.reshape(u'2020'))
y1 = get_display( arabic_reshaper.reshape(u'القـــيـــم بالـ %'))
t = get_display( arabic_reshaper.reshape(u' أعمدة بيانية تمثل النمو الاقتصادي لبعض مناطق دول العالم \n'))

labels = [x1, x2, x3, x4]
s = [2.3, 1.3, 0.8, 6.1]
w = [-8, -10.2, -5.8, 1]

x = np.arange(len(labels))  # the label locations
width = 0.35  # the width of the bars

fig, ax = plt.subplots()
rects1 = ax.bar(x - width/2, s, width, label= s1, color='limegreen')
rects2 = ax.bar(x + width/2, w, width, label= w1, color='lightsalmon')

# Add some text for labels, title and custom x-axis tick labels, etc.
ax.set_ylabel(y1)
ax.set_title(t)
ax.set_xticks(x)
ax.set_xticklabels(labels)
ax.legend(bbox_to_anchor = (1, 0.3))


def autolabel(rects):
    """Attach a text label above each bar in *rects*, displaying its height."""
    for rect in rects:
        height = rect.get_height()
        ax.annotate('{}'.format(height),
                    xy=(rect.get_x() + rect.get_width() / 2, height),
                    xytext=(0, 3),  
                    textcoords="offset points",
                    ha='center', va='bottom')

autolabel(rects1)
autolabel(rects2)

fig.tight_layout()
plt.show()

نُشِرت في تصوير بياني | الوسوم: , , , | أضف تعليق

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

الأعداد الأولية هي تلك الأعداد الصحيحة التي لا تقبل القسمة إلاَّ على نفسها والـ 1. مثل: 2، 3، 5، 7، 11، 13، 17

رسم توضيحي لغربال إراتوستينس المصمم لالتقاط الأعداد الأولية. يمكنك معرفة المزيد عنه مــن هــنــا

أما الأعداد الصحيحة الموجبة الأخرى فيمكن كتابتها كجداء أعداد أولية بطريقة وحيدة، مثل 5\times 3\times 2=30 ، أي أنّ الأعداد الأولية مثل اللبنات الأساسية التي يُمكن بناء الأعداد الصحيحة الأخرى منها. الأمر الذي جعلها محطّ فضول وتساؤل دائم.

منذ آلاف السنين، اُكتشفت حقيقة ” أن هناك عددًا لا نهائيا من الأعداد الأولية” (يمكنك قراءة إثبات ذلك في مقال رياضيات في دقيقة: كم عدد الأعداد الأولية ؟) لكن لا توجد -إلى الآن- صيغة رياضية بسيطة تُحصيها جميعها. على الرغم من أنّ خوارزميات الحاسوب القوية قد مكنتنا من إيجاد أعداد أولية أكبر وأكبر، لكن إمكانية تدوينها جميعها؛ تظل أمراً مُستعصيا.

تكشف مبرهنة الأعداد الأولية شيئا عن كيفية توزيع الأعداد الأولية بين الأعداد الصحيحة الأخرى. وتحاول أن تُجيب على السؤال التالي: “ليكن n عدداً صحيحاً ما، كم عدد الأعداد الصحيحة المحصورة بين 1 و n  أعداد أولية ؟”

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

هي تقدير جيد لعدد الأعداد الأولية المحصورة بـين 1 و n والمُتضمنة n . ويصبح التقدير أفضل كلما كانت n أكبر. حيث \textup{ln}(n) هو اللوغاريتم الطبيعي لـ n .

كمثال على ذلك، ليكن n=1,000 . إنّ العدد الفعلي للأعداد الأولية المحصورة بـين 1 و 1,000 والمتضمنة الرقم 1,000 (يمكنك الاطّلاع عليها في هذه القائمة) هو 168. أما تقديرنا فهو:

وهو تقدير تقريبي جيد جداً.

مع ذلك، ولنكون مُنصفين بشأن ما تُطلعنا عليه مبرهنة الأعداد الأولية، فالأمر يتطلب تحديد ما نعنيه بعبارة “تقدير جيد”. لا تنص مبرهنة الأعداد الأولية على أنَّه بالنسبة للقيم الكبيرة لـ n فإن الفرق بين القيمة الحقيقية والتقريبية يقترب من الـ 0 . لكنها -بدلاً من ذلك- تكشف لنا شيئا عن سؤال “ما التقدير التقريبي كنسبة مئوية من القيمة الحقيقية” ؟

بالرجوع إلى مثالنا السابق n=1,000 كانت القيمة الحقيقية 168 والقيمة التقريبية 145. وبالتالي، فإن التقريب يُشكل نسبة: 

من النتيجة الحقيقية، أي 86 ٪. (ليست سيئة)

من أجل n=100,000  فإن العدد الفعلي للأعداد الأولية المحصورة بين 1 و 100,000 والمتضمنة الرقم 100,000 هو 9,592 . وهي القيمة الحقيقية، أما التقريبية فهي:

وبالتالي، فإن التقدير في هذه الحالة يُشكل نسبة:

من القيمة الحقيقية. أي 90%. ومنه فإن التقدير هنا أفضل من حالة n=1,000

بصفة عامة، تُطلعنا مبرهنة الأعداد الأولية أنّه من أجل n كبير، فإنّ التقريب n/\textup{log}(n) يكون قريباً إلى الــ 100% من القيمة الحقيقية. في الواقع، يمكنك جعلها أقرب للــ 100% بالقدر الذي تريده لأجل n كبير بما فيه الكفاية.

يوضح المنحنى الأحمر عدد الأعداد الأولية المحصورة بين 1 و n وتتضمن الرقم n، حيث يتم تمثيل n على المحور الأفقي. يعطي المنحنى الأزرق قيمة n / ln(n). يزداد الفرق بين النتيجة الحقيقية والتقريبية مع نمو n، لكن النسبة بين القيمتين تؤول إلى 1.

لتدوين مبرهنة الأعداد الأولية في كامل تألقها باستخدام الرموز الرياضية، لنكتب أولاً \pi (n) لعدد الأعداد الأولية الأصغر من، أو تساوي، n . تنص المبرهنة على الآتي: (1)

بالاستفادة من بعض خصائص التفاضل والتكامل فإنّ (1) تُعادل (2) كما يلي:

غالباً ما يتم توضيح مبرهنة الأعداد الأولية باستخدام العبارة الثانية (2). كما قد تُكتب أحياناً كالآتي:

التي تعني “أنّ \pi (n) مُقارب لـ n/\textup{log}(n) عندما تؤول n إلى اللانهاية”.


المقال الأصلي

Maths in a minute: The prime number theorem

نُشِر بتاريخ: August 25, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , , | أضف تعليق

رياضيات في دقيقة: خوارزميات الانحدار المتدرج

تخيّل أنك في جبل، وقد حلّ ضباب كثيف يمنعك من رؤية مسار العودة، فما العمل ؟ لا تجزع أبداً، فالرياضيات ستنقذك ! إنَّ بوسعك استخدام خوارزمية الانحدار المُتدرج: وهي تقنية رياضية لإيجاد القيم الصغرى في الدوال الناعمة (القابلة للاشتقاق) !!

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

يمكن للرياضيات أن تجد المسار !!

نقطة سرجية على سطح ما، يتتبع الخط الأحمر تقدم خوارزمية انحدار متدرج.

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

على السفح الجبلي – ثنائي الأبعاد- عدد محدود من الاتجاهات التي يتعين عليك الاختيار من بينها: شمال، جنوب، شرق، غرب ولواحقهم، على عكس الفضاءات ذات الأبعاد الأعلى التي تتيح إمكانية الاشتغال على اتجاهات أكثر. لكن لحسن الحظ، فقد تبين أن بوسعك أن تُظهر رياضيا، أنّه حتى وإن انتهى بك المطاف عند قيمة صغرى محلية: أين تبدو جميع الاتجاهات وكأنك في حفرة، فإنَّ من المُؤكد -على نحو ما- أنّ واحداً على الأقل من هذه الاتجاهات العديدة سيقودك إلى منحدر السفح (مما يعني أنك في ما يُدعى نقطةً سرجية، وليس في حفرة) لتواصل السير بعدها إلى غاية بلوغ مأمنِك عند أسفل الجبل. تتيحُ خوارزمية الانحدار المُتدرج فرصة كبرى لقيادتك نحو القيمة الصغرى المطلقة.

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

إنّ اعتماد خوارزمية الانحدار المُتدرج في “أبعاد أعلى” هو الحل لما يُدعى لعنة الأبعاد. تحدثنا إلى يوشوا بنجيو – Yoshua Bengio أحد رواد ما يُسمى التعلم العميق، حيث تكون الشبكات العصونية معقدة للغاية ولها العديد من الطبقات، مما يتطلب استكشاف فضاءات متجهية ذات أبعاد أعلى، لإيجاد أفضل دالة رياضية لأداء مهمة التعلم الآلي.

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

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

اقرأ المزيد عن التعلم الآلي وتطبيقاته العديدة على مجلة Plus.


المقال الأصلي

Maths in a minute: Gradient descent algorithms

نُشِر بتاريخ: August 10, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , | تعليق واحد

رياضيات في دقيقة: التعلم الآلي والشبكات العصبونية

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

يُعد التعلم الآلي أحد أهم التطورات الحديثة للذكاء الاصطناعي الضعيف، فبدلاً من تعليم آلة كيفية القيام بمهمة معقدة ما بوضوحٍ (بمعنى برنامج كمبيوتر تقليدي)، فإن الآلة ستتعلم مباشرة من تجربة القيام بالمهمة  -نفسها- مراراً وتكراراً.

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

يمكن لخوارزميات التعلم الآلي أن تتعلم كيفية التمييز بين صورة قط وصورة كلب.

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

الفكرة الرئيسية للتعلم الآلي، أنَّ الإنسان لم يحدد دالّة “قط أو كلب” الرياضية هذه، إنَّما الآلة هي من تعلمت بمفردها تحديد الدالة الرياضية الأنسب للتمييز بين القطط والكلاب. وفعلت ذلك من خلال النظر إلى (معالجة) الكثير والكثير من صور القطط والكلاب (بيانات التدريب)، واستخدام عملية التحسين لمعرفة الدالة الرياضية الأفضل.

تُستخدم، في الغالب، دوالٌ ذات بارامترات: المعادلة العامة لمستقيم f(x)=ax+b مثلاً، بها البارامتر a الذي يحدد ميل المستقيم، والبارامتر b موضع تقاطع المستقيم مع المحور العمودي. وبالمِثل، فإن الدوال الناتجة عن خوارزميات التعلم الآلي لها بنية عامة ما تتماشى والبارامترات، لكن هذه الدوال أكثر تعقيدا ولها العديد والعديد من البارامترات.

في بداية عملية التعلم، يتم تثبيت البارامترات عند قيم ما، لتقوم الخوارزمية بعد ذلك بمعالجة بيانات التدريب، ومن ثم إرجاع الإجابة “قط” أو “كلب” لكل صورة. إنَّ من المرجح أن تكون الكثير من هذه الإجابات خاطئة في البداية، وستدرك الخوارزمية ذلك عند مقارنة إجاباتها مع تلك الواردة في بيانات التدريب. ثم تبدأ الخوارزمية في تعديل البارامترات إلى أن تجد قيماً تُرجع – وفق احتمال كبير- الإجابات الصحيحة.

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

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

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

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

يمكنك قراءة مقدمة أكثر تفصيلاً عن التعلم الآلي مع هذه المجموعة الرائعة من المقالات التي كتبها كريس بود (والتي تستند هذه المقالة جزئيًا عليها). واكتشاف المزيد من تطبيقات التعلم الآلي على مجلة Plus.


المقال الأصلي

Maths in a minute: Machine learning and neural networks

نُشِر بتاريخ: August 10, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , , | تعليق واحد

رياضيات في دقيقة: المُبسَّطات – ذرات الطوبولوجيا


المُبسَّط-3 رباعي الأوجه، كل وجه عبارة عن مُبسَّط-2. وبطريقة مماثلة، فإن “وجوه” المُبسّط-2 (المثلث) عبارة عن مُبسّط-1 (قطع مستقيمة). بهذه الطريقة يمكنك إنشاء مُبسَّطات ذات أبعاد أعلى من مُبسّطات ذات أبعاد أقل.

هل أنتَ من أولئك الذين يحبون المثلثات بقدر ما نُحب؟ إن كُنت كذلك فلدينا لك أخبار سارة – يمكنك إنشاؤها في أي بُعد تُريد !!

يمكن تعميم [توسيع] تمثيل المثلثات ثنائية الأبعاد لتشمل مُستوى الـ 0 بُعد، 1 بُعد، 3 أبعاد أو أي عدد من الأبعاد تُريده. ويُدعى هذا التعميم بــ المُبسَّط (simplex أو سمبليكس). يُمثل المُبسَّط-0 نقطة، المُبسَّط -1 قطعة مُستقيمة، المُبسَّط-2 مثلث، المُبسَّط-3 رباعي الأوجه، والمُبسَّط -4 خماسي، …. وتستخدم هذه المُبسَّطات لوصف وفهم الفضاءات الرياضية المختلفة.

بالإمكان إنشاء أي فضاء أو شكلٍ ثنائي الأبعاد من مُبسَّطين اثنين فقط (مثل المثلثات)، وتخضع هذه المثلثات الرياضية لقواعد محددة تتعلق بالزوايا والحواف بحيث لا تشترك مُطلقاً في أكثر من زاويتين أو حافة واحدة.


كرة جيوديسية

الكرة الجيوديسية هي تثليث السطح ثنائي الأبعاد للكرة. مع أنَّ أوجهها المسطحة لا تبدو تماما مثل الكُرة، إلاّ أنهما -رياضيا- متماثلان؛ إلى حدٍّ ما.

يتماثل –طوبولوجياً– كائنان، إذا كان بإمكانك ثنّي، شدّ أو كمشُ [تقليص] أحدهما إلى الآخر دون قطع أحدهما أو تمزيقه. والمثال الكلاسيكي -الذي يتكرر في هذا السياق دائما- أنَّ كوب القهوة مثله مثل الدونات (من الناحية الطوبولوجية). من ناحية أخرى، فإنَّ تحويل الكرة إلى دونات يُحتّمُ عليك خلق ثقب بها، الأمر الذي ترفضه الطوبولوجيا. لذا فإن الكرة والدونات (أو كوب القهوة) ليسا متماثلين طوبولوجيا.


يمكنك قراءة المزيد عن الرياضيات الكامنة وراء هذا الشكل من هذا الرابط

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

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

عمليات التثليث أساسية في تاريخ الطوبولوجيا. من خلال التثليث، يمكننا حساب مميزة أويلر. وهي الرقم V – E + F حيث V هو عدد الرؤوس (أو المُبسَّطات-0) و E عدد الأضلاع (أو المُبسَّطات-1) و F عدد الوجوه (في حالة التثليث، الوجوه عبارة عن المُبسَّطات-2). بحيث إذا تماثل كائنان طوبولوجيا فسيكون لهما أيضا نفس مميزة أويلر.

يمكنك استكشاف فضاءات ذات أبعاد-أعلى بهذه الطريقة أيضا. تُظهر إحدى النظريات (على غرار نتيجة رادو للأسطح ثنائية الأبعاد) أنّ كل الأسطح ثلاثية الأبعاد يمكن تثليثها باستخدام المُبسّطات-3 (رباعيات الأوجه). لَـــدى عمليات تثليث الأسطح ثلاثية الأبعاد هذه أيضاً مميزة أويلر مكـــافئة مقدارها: V – E + F – T حيث T عدد رباعيات الأوجه في عملية التثليث. وبهذا يمكننا أن نرى كيف باستطاعتنا أن نعمّم مميزة أويلر على أي بُعد، وذلك بإضافة أو طرح عدد المُبسّطات-0 (الرؤوس)، المُبسّطات-1 (الأضلاع)، المُبسّطات-2 (الوجوه)، المُبسّطات-3. وما إلى ذلك.

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

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


المقال الأصلي

Maths in a Minute: Simplices – the atoms of topology

نُشِر بتاريخ: July 13, 2021

ترجمة: مديحة حوري. 

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , | أضف تعليق

رياضيات في دقيقة: نموذج ويلز- رايلي

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

تهوية أفضل؛ عدوى أقل

حيث S هو عدد الأشخاص المُعرضين للإصابة بهذا المرض في الغرفة. \Gamma (غاما) المعدل الإجمالي لانبعاث الجسيمات المُعدية من الأشخاص المُصابين في الغرفة، أما q فهو متوسط معدل التنفس للشخص الواحد، و t الفترة الزمنية التي يتقاسم فيها هؤلاء الأشخاص الغرفة. وأخيرا Q معدل تهوية الغرفة، أي معدل دخول الهواء النقي إليها.

تكشف المعادلة أن عدداً أكبر سيُصاب بالعدوى (أي أن I سيزيد) كلما طال مكوث هؤلاء الأشخاص في الغرفة (كلما زاد الزمن t ) أو زادت الجُسيمات المُعدية المنبعثة (كلما زادت \Gamma ). كما قد تنبعث المزيد من الجُسيمات المُعدية بسبب وجود المزيد من الأشخاص المصابين في الغرفة، أو لأن الأشخاص المُصابين -في حد ذاتهم- قد أصبحوا أكثر عدوى.

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

يمكنك قراءة المزيد عن كيفية استخدام نموذج ويلز-رايلي مــن هــنــا أو هــنــا


المقال الأصلي

Maths in a minute: The Wells-Riley model

نُشِر بتاريخ: June 11, 2021

ترجمة: مديحة حوري. 

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , | أضف تعليق

رياضيات في دقيقة: العصبونات الاصطناعية

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

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

الهيكلُ النموذجي للعصبون ومكوناته

يحتوي الدماغ البشري على ما يُقارب 86 مليار عصبون وما بين 100 و 300 تريليون وصلة بين هذه العصبونات. تعمل أدمغتنا من خلال النبضات التي تنتقل عبر هذه الشبكة الواسعة من العصبونات.

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

إذن؛ كيف يبدو العصبون الاصطناعي ؟ من الأمثلة البسيطة عنه البيرسيبترون، الذي استحدثه فرانك روزنبلات عام 1962. ويتكون من عقدة تتوافق مع جسم خلية عصبون حقيقي. يمكن للعقدة أن تستقبل عدداً من المُدخلات من العقد الأخرى، أو حتى من خارج الشبكة العصبونية التي تنتمي إليها. ويتم تمثيل كل مُدخل برقم. بحيث إذا كان عددُ المُدخلات n فيمكننا عندئذ أن نكتب X2 ، X1 ، X3 … إلخ للــ n مُدخل.

بمجرد وصول المدخلات إلى العقدة يتم دمجها لإعطاء رقم واحد. وأبسط طريقة للقيام بذلك تكون بأخذ جميع الــ n مُدخل (أي X3 ، X2 ، X1 وصولاً إلى Xn ) ثم ضرب كل مُدخل Xi بــ مُرجح ما Wi ومِن ثَمّ جمعُ جداء جميع المُدخلات والمرجحات للحصول على المجموع المُرجح (weighted sum) كالآتي:

w_{1} X_{1} + w_{2} X_{2} + ... + w_{n} X_{n}.

ضرب المُدخل بعدد موجب صغير يعني أن تأثير هذا المُدخل صغيرٌ في النتيجة النهائية (ذو أهمية ضئيلة) وضربه بعدد موجب كبير يعني أنَّ تأثيره كبير في النتيجة النهائية (ذو أهمية بالغة).

بيرسيبترون

إذا كان المجموع المرجح أكبر من عتبة ما C فإن البيرسيبترون سيُرجع الــ (قرار) 1

w_{1} X_{1} + w_{2} X_{2} + ... + w_{n} X_{n} - C > 0

وإلا فهو الــ (قرار) 0، إذا كان

w_{1} X_{1} + w_{2} X_{2} + ... + w_{n} X_{n} - C \leq 0

أي ما يُقابل إطلاق العصبون نبضةً تامةً أو ألاَّ يُطلق أبداً.

وعلى غرار مفهوم العصبون الاصطناعي؛ فإن شبكات العصبونات هذه يُمكنها تأدية المهام المُعقدة بشكل مذهل ــ بل إنها تستطيع أن “تتعلم” كيفية أداء هذه المهام بمفردها. لمعرفة المزيد، عليك قراءة مقال ما هو التعلم الآلي ؟


المقال الأصلي

Maths in a minute: Artificial neurons

نُشِر بتاريخ: July 8, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , | تعليق واحد

رياضيات في دقيقة: ديناميكا الموائع الحسابية

لنفترض أنَّك تريدُ تصميم أسرع مركبة، هندسة صمّامِ قلبٍ بديلٍ، أو مُحاكاة تدفق الهواء في مبنى للحدّ من خطر الأمراض المُعدية. فالأمر يعتمد على ديناميكا الموائع، ما قد يُحيلُك إلى رياضيات صعبة جداً.

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

حيث ρ هي كثافة الهواء، و uvw مركبات سرعة الهواء، E مقياس الطاقة الداخلية للهواء (ما يسمح لنا بحساب درجة حرارته) و p الضغط. معادلات نافييه-ستوكس

إذا كانت رغبتك استخدام هذه المعادلات لمحاكاة تدفق مائعٍ حول مركبة، صمّام قلب، أو مبنى، فعليك حلّها للسيناريو المُحدّد الخاص بك: أي أنك في حاجةٍ إلى صيغة رياضية تعطيك سرعة وضغط المائع عند كل نقطة في منظومتك. لكن العائق؛ أنَّه لا توجد حلول دقيقة لمعظم الأشكال العامة لمعادلات نافييه-ستوكس، والحلول الدقيقة الموجودة هي لمسائل مُبسطة غير مفيدة عمليا.

لحسن الحظ، فقد أصبح تطبيق ديناميكا الموائع في الواقع أمراً مُمكنًا بفضل ديناميكا الموائع الحسابية. كما أوضح بن إيفانز في مقالته Supersonic Bloodhound؛ عليك تفكيك المسألة إلى أجزاءٍ أصغر وأكثر سهولة ويُسراً، باستخدام طريقة تعرف باسم طريقة العناصر المنتهية. “في الأساس، يتم تقسيم المساحة المحيطة بالمركبة إلى تشكيلة هائلة من العناصر الصغيرة جدًا (100,000 مليون عنصر !!)، نُسَميها شبكة. ثم نعالج المسألة عنصرًا تلو الآخر، بحيث يُعطينا كل عنصرٍ تقريبا مُبسطا للحل، إلى أن نحصل – في نهاية المطاف – على الحل الكامل. ومن هذا الحل نحصل على كثافة، سرعة، درجة حرارة، وضغط الهواء في جميع النقاط المحيطة بالمركبة “.

شبكة لحل معادلات نافييه-ستوكس.

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

كَــنتورات الضغط والانسيابية عبر Bloodhound SSC

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

تستند هذه المقالة على Supersonic Bloodhoud. بقلم بن إيفانز.


المقال الأصلي

Maths in a Minute: Computational fluid dynamics

نُشِر بتاريخ: June 11, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , , | أضف تعليق

رياضيات في دقيقة: القيمة التنبؤية الإيجابية

من المُتعارف عليه؛ أنَّ الاختبارات المستخدمة في التشخيص الطبي ليست دقيقة بنسبة 100٪. أي عندما تتلقى نتيجة اختبار إيجابية لمرض ما، فلا يزال هناك احتمال أنك غير مُصاب بالمرض نهائيا، بمعنى آخر، أن تكون إيجابية زائفة.

تُدعى احتمالية إصابتك الفعلية بالمرض عند تلقِّي نتيجة اختبار إيجابية بالقيمة التنبؤية الإيجابية للاختبار المعني. بحيث كلما زادت القيمة التنبؤية الإيجابية، زادت احتمالية إصابتك بالمرض فعليا.

من الواضح أن القيمة التنبؤية الإيجابية لاختبار ما تعتمد على مدى دقة الاختبار في حد ذاته. لكن من المثير للاهتمام؛ أن الأمر يعتمد أيضًا على عدد الأشخاص الذين يُعانون من هذا المرض. بحيث كلما زاد انتشار المرض (زاد تفشِّ المرض)، زادت القيمة التنبؤية الإيجابية.

ولتوضيح ذلك، تخيل أنَّ اختباراً ما يُحدد بشكل صحيح 80% من الأشخاص المصابين بالمرض، كما يُحدد بشكل صحيح 99.9% من الأشخاص غير المصابين به. (نفترض أن الاختبار يُعطي دائما نتيجة إيجابية أو سلبية كإجابة قاطعة). تخيل أيضاً أنَّ 2% من السكان يُعانون من المرض الذي صُمِمَ له هذا الاختبار.

وبالتالي، إذا كان عدد السكان يتألف من 100,000 شخص، فهذا يعني أن 2,000 منهم مُصابون بالمرض و98,000 غير مصابين به. بحيث إذا ما تم اختبار كل شخص، فمن بين 2,000 مُصاباً بالمرض، فإن 80% منهم سيتلقَّى -بشكل صحيح- نتيجة اختبار إيجابية، أي 1,600 مُصاباً. أما نتائج الـ 400 الباقبن، فستكون سلبيات زائفة. (أنظر المُخطط أدناه)

ومن بين الـ 98,000 غير المصابين بالمرض، فإن 99.9% سيتلقّون -بشكل صحيح- نتيجة اختبار سلبية، أي 97,902 شخصًا. أما نتائج الـ 98 الباقبن، فستكون إيجابيات زائفة.

هذا يعني أنَّ في إجمالي

1600 + 98 = 1698

شخصا قد تلقَّوا نتيجة اختبار إيجابية. لأجلِ نسبةٍ من

0.94 = \frac{1600}{1698}

تكون فيها نتيجة الاختبار صحيحة. فإن احتمالية أن يكون الشخص مُصابا فعليا بالمرض هي 0.94 أي 94%.

استمراراً مع نفس المثال؛ أنَّ اختباراً ما يُحدد بشكل صحيح 80% من الأشخاص المصابين بالمرض، كما يُحدد بشكل صحيح 99.9% من الأشخاص غير المصابين به. لنفترض الآن أن 0.2٪ فقط من السكان يعانون من المرض الذي صُمم له الاختبار. بحيث إذا كان عدد السكان يتألف من 100,000 شخصا، فهذا يعني أن 200 منهم يعانون من المرض و99,800 لا يعانون منه. بحيث إذا ما تم اختبار كل شخص، فمن بين الـ 200 مصابا بالمرض، سيتلقَّى 80٪ نتيجة اختبار إيجابية بشكل صحيح، أي ما يُعادل 160 شخصًا. أما نتائج الـ 40 الباقين فستكون سلبيات زائفة. (أنظر المُخطط أدناه)

ومن بين الـ 99,800 شخصا غير المصابين بالمرض، فإن 99.9% سيتلقّون -بشكل صحيح- نتيجة اختبار سلبية، أي 99,700 شخصًا. أما نتائج الـ 100 الباقين، فستكون إيجابيات زائفة.

هذا يعني أنَّ في إجمالي

160 + 100 = 260

شخصا قد تلقَّوا نتيجة اختبار إيجابية. لأجلِ نسبةٍ من

0.61 = \frac{160}{260}

تكون فيها نتيجة الاختبار صحيحة. فإن احتمالية أن يكون الشخص مُصابا فعليا بالمرض هي 0.61 أي 61%

خلاصة كل ما سبق، أنَّ القيمة التنبؤية الإيجابية [في هذا المثال] هي 94٪ بالنسبة لانتشار مقداره 2٪ ولكن بالنسبة لانتشار أقل (مقداره 0.2٪) فإن القيمة التنبؤية الإيجابية هي 61٪ فقط. يوضح هذا أنه كلما زاد انتشار المرض، زادت احتمالية أن تكون نتيجة الاختبار الإيجابية تعني إصابتك فعليا بالمرض.

هناك أيضًا مقدارٌ أخر يدعى القيمة التنبؤية السلبية: وهي احتمالية ألاَّ يكون الشخص الذي تلقَّى نتيجة اختبار سلبية مصابًا فعليا بالمرض. بالنسبة لاختبار ما، تعتمد هذه القيمة أيضًا على مدى انتشار المرض بين السكان، ولكن هذه المرة بالعكس. أي كلما زاد معدل الانتشار، انخفضت القيمة التنبؤية السلبية. [تُتركُ لك مسألة (تمرين) التحقق من مدى صحة ذلك]

يُمكنك قراءة المزيد في رياضيات في دقيقة: الإيجابيات الزائفة وفي هذا المقال.


المقال الأصلي

Maths in a minute: The positive predictive value

نُشِر بتاريخ: June 10, 2021

ترجمة: مديحة حوري.

نُشِرت في رياضيات في دقيقة | الوسوم: , , , , | 2 تعليقان