البرمجة

دوال الكثافة الاحتمالية بايثون

مقدمة حول مفهوم دوال الكثافة الاحتمالية

تُعَدّ دوال الكثافة الاحتمالية (Probability Density Functions – PDF) حجر الزاوية في علم الإحصاء والاحتمالات. فهي تصف كيفية توزّع القيم العشوائية المستمرة، وتساعد على استنتاج الخصائص الأساسية للبيانات، من متوسط وتباين واحتمالات وقوع الأحداث ضمن نطاقات محدَّدة. في بيئة بايثون، برزت مكتبات مثل NumPy‏ و SciPy‏ و pandas‏ و Matplotlib‏ لتُسهِّل نمذجة هذه الدوال وتمثيلها رسوميًّا ومعالجتها عدديًّا بكفاءة عالية. سيستعرض هذا المقال، بصورة موسَّعة ومفصَّلة، كل ما يحتاجه المبرمج أو الباحث لإتقان العمل مع دوال الكثافة الاحتمالية في بايثون، انطلاقًا من المبادئ النظرية ووصولًا إلى التطبيقات العملية، مرورًا بخوارزميات التقدير والمحاكاة والتحقّق الإحصائي.


1. الأساس الرياضي لدوال الكثافة الاحتمالية

1‑1. المتغير العشوائي المستمر

المتغير العشوائي المستمر XX هو دالة تُسند لكل مخرَج في فضاء العينة عددًا حقيقيًّا، بحيث يمكنه أخذ أي قيمة في مجال متصل. يشترط أن تكون دالة الكثافة الاحتمالية fX(x)f_X(x) غير سالبة، وتحقّق التكامل:

fX(x)dx=1.\int_{-\infty}^{\infty} f_X(x)\,dx = 1.

1‑2. العلاقة مع دالة التوزيع التراكمي

دالة التوزيع التراكمي (CDF) تُعرَّف بـ

FX(x)=Pr(Xx)=xfX(t)dt.F_X(x)=\Pr(X\le x)=\int_{-\infty}^{x} f_X(t)\,dt.

باشتقاق FXF_X نحصل على PDF:

fX(x)=ddxFX(x).f_X(x)=\frac{d}{dx}F_X(x).

1‑3. اللحظات الإحصائية

  • المتوسط الرياضي: μ=E[X]=xfX(x)dx\mu=\operatorname{E}[X]=\int_{-\infty}^{\infty} x\,f_X(x)\,dx.

  • التباين: σ2=Var[X]=(xμ)2fX(x)dx.\sigma^{2}=\operatorname{Var}[X]=\int (x-\mu)^2 f_X(x)\,dx.


2. البنية البرمجية في بايثون لمعالجة PDF

المكتبة الدور الرئيس مميزات أساسية
NumPy إنشاء بيانات عددية، توليد عينات عشوائية كفاءة عالية في العمليات المتجهية
SciPy.stats دوال PDF/CDF جاهزة، تقدير المعلمات أكثر من 100 توزيع مستمر ومنفصل
pandas تحليل بيانات جدوليّة تكامل مع NumPy وسهولة معالجة السلاسل
Matplotlib / Seaborn التصوير البياني الرسم ثنائي وثلاثي الأبعاد

3. توليد البيانات العشوائية وتقدير الكثافة

3‑1. عينات من توزيعات معروفة

python
import numpy as np from scipy import stats np.random.seed(0) sample = stats.norm.rvs(loc=0, scale=1, size=10_000) # عيّنة من التوزيع الطبيعي

3‑2. التقدير البارامتري للمعلمات

python
mu_hat, sigma_hat = stats.norm.fit(sample)

ترجع fit تقديرَي الوسط والانحراف المعياري بالحد الأقصى للاحتمالية (MLE).

3‑3. التقدير غير البارامتري (KDE)

تقدير كثافة النواة (Kernel Density Estimation) يتيح الحصول على تقريب سلس لكثافة مجهولة الشكل.

python
kde = stats.gaussian_kde(sample, bw_method='scott') density = kde(np.linspace(-4, 4, 1000))

4. تمثيل دوال الكثافة رسوميًّا

python
import matplotlib.pyplot as plt x = np.linspace(-4, 4, 1000) plt.plot(x, stats.norm.pdf(x, mu_hat, sigma_hat), label='PDF نظرية') plt.plot(x, kde(x), linestyle='--', label='KDE') plt.hist(sample, bins=50, density=True, alpha=0.3, label='هيستوغرام') plt.legend(); plt.xlabel('x'); plt.ylabel('الكثافة'); plt.title('تمثيل كثافة التوزيع الطبيعي') plt.show()

5. تصميم خوارزميات مخصَّصة لدوال كثافة معقَّدة

5‑1. دوال كُسرية (فركتلية)

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

5‑2. دمج توزيعات (Mixture Models)

يُشكِّل مزيج Gaussians‏ مثالًا شائعًا لنمذجة الكثافات متعددة القمم:

python
from sklearn.mixture import GaussianMixture gmm = GaussianMixture(n_components=3).fit(sample.reshape(-1,1))

6. فحص جودة الملاءمة

6‑1. اختبار كولموغوروف‑سميرنوف

python
stat, p = stats.kstest(sample, 'norm', args=(mu_hat, sigma_hat))

قيمة pp-value تقيس توافق العيّنة مع التوزيع المفترض.

6‑2. مخطط Q‑Q

python
import statsmodels.api as sm sm.qqplot(sample, line='s'); plt.title('Q‑Q Plot'); plt.show()

7. التطبيقات العملية لدوال الكثافة في بايثون

7‑1. النمذجة المالية

توزيع العوائد اليومية للأسهم غالبًا ما يُظهِر ذيولًا أثقل من الطبيعي؛ يُستخدم توزيع Student‑t أو مزيج Gaussians لتمثيله.

7‑2. معالجة الإشارات الحيوية

في تحليل نبضات القلب (ECG)، يساعد تقدير PDF على رصد الانحرافات عن الإيقاع الطبيعي.

7‑3. الذكاء الاصطناعي والتعلّم العميق

تنتشر طبقات Variational Autoencoders‏ في ترميز الكثافات الاحتمالية ضمن فضاءات كامنة منخفضة الأبعاد.


8. التحسين والأداء

  • المتجهة مقابل الحلقة: استخدم عمليات NumPy‏ المتجهة لتقليل زمن التنفيذ.

  • التوازي: استعن بمكتبة joblib‏ أو multiprocessing‏ لتسريع حساب KDE في البيانات الكبيرة.

  • الذاكرة: حمّل البيانات على دفعات chunks في pandas  عند العمل مع ملفات ضخمة.


9. اعتبارات SEO لبرمجة PDF في بايثون

  • دمج كلمات مفتاحية مثل Probability Density Function، Kernel Density Estimation، SciPy stats، Gaussian PDF in Python.

  • استعمال ترويسات H2/H3 واضحة تصف التقنيات والأكواد.

  • تضمين كود قابل للنسخ يزيد من مدة بقاء القارئ في الصفحة ويعزّز ترتيب البحث.


خاتمة

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


المراجع

  1. Virtanen, P. et al. SciPy 1.0: Fundamental Algorithms for Scientific Computing in Python. Nature Methods, 2020.

  2. Harris, C. R. et al. Array programming with NumPy. Nature, 2020.