الدرس 8 من 8

الاحتمالات

الموديل عمره ما بيقول «ده قطة». بيقول «٩٤٪ قطة».

الاحتمال = رقم بين صفر وواحد

صفر يعني مستحيل، و ١ يعني أكيد. احتمال إن زهر النرد يجيب ٦ هو ١ من ٦ أو حوالي ١٧٪. وأسهل طريقة تتأكد من احتمال هي إنك تجرّب كتير وتعد:

simulation.py
import random

random.seed(42)          # fixed seed -> same result every run
rolls = 100_000
sixes = sum(1 for _ in range(rolls) if random.randint(1, 6) == 6)

print(f"Simulated: {sixes / rolls:.3f}")
print(f"Theory:    {1 / 6:.3f}")

الاحتمال الشرطي

احتمال حاجة بشرط إن حاجة تانية حصلت. احتمال إن الجو يمطر النهارده حاجة، واحتمال إنه يمطر بشرط إن السما مغيّمة حاجة تانية خالص. بيتكتب P(A | B) وبيتقرا «احتمال A بمعلومية B».

نظرية بايز: أشهر فخ في التفكير

🩺 مثال: تحليل طبيمرض نادر بيصيب ١٪ من الناس. التحليل بتاعه بيكشف المرض صح في ٩٩٪ من المرضى، بس بيدي نتيجة إيجابية غلط لـ ٥٪ من الأصحاء. واحد عمل التحليل وطلع إيجابي. احتمال إنه عيان فعلاً كام؟

أغلب الناس هتقول ٩٩٪. خلينا نحسب:

bayes.py
p_disease = 0.01              # 1% of people are sick
p_pos_if_sick = 0.99          # test catches 99% of sick people
p_pos_if_healthy = 0.05       # 5% false positives

# Total chance of a positive result (sick OR healthy)
p_pos = p_disease * p_pos_if_sick + (1 - p_disease) * p_pos_if_healthy

# Bayes: P(sick | positive)
p_sick_if_pos = p_disease * p_pos_if_sick / p_pos
print(f"Chance you're actually sick: {p_sick_if_pos:.1%}")

حوالي ١٧٪ بس! ليه؟ تخيل ١٠٠٠٠ شخص: ١٠٠ عيانين (٩٩ منهم هيطلعوا إيجابي)، و ٩٩٠٠ سليمين (٤٩٥ منهم هيطلعوا إيجابي غلط). يبقى من ٥٩٤ إيجابي، ٩٩ بس عيانين فعلاً.

P(A | B) = P(B | A) × P(A) / P(B)
💡 ليه ده مهم للـ AI؟لما تقيّم موديل بيكشف احتيال في بنك (والاحتيال ١ في الألف)، دقة ٩٩٪ ممكن تبقى مالهاش أي قيمة. هترجع للفكرة دي في المرحلة ٥ مع Precision و Recall.

التوزيع الطبيعي

أطوال الناس، أوزانهم، درجات امتحان كبير... أغلبهم متجمعين حوالين المتوسط، والقليل في الأطراف. الشكل ده اسمه Normal Distribution أو منحنى الجرس. قاعدة مفيدة: حوالي ٦٨٪ من الداتا بتبقى في حدود انحراف معياري واحد من المتوسط، و ٩٥٪ في حدود اتنين.

Softmax: إزاي الموديل بيطلع احتمالات

موديل بيصنف صورة، طلّع درجات (scores) لكل احتمال. الدرجات دي ممكن تبقى أي أرقام، فبنحولها لاحتمالات مجموعها ١ بدالة اسمها softmax:

softmax.py
import math

labels = ["cat", "dog", "rabbit"]
scores = [2.0, 1.0, 0.1]        # raw model outputs (logits)

exps = [math.exp(s) for s in scores]
total = sum(exps)
probs = [e / total for e in exps]

for label, p in zip(labels, probs):
    print(f"{label:7} {p:.1%}")
print("sum =", round(sum(probs), 2))
🤖 حتى Claude بيعمل كدهموديلات اللغة بتطلع score لكل كلمة ممكنة ييجي بعد اللي اتكتب، وبعد softmax بتبقى احتمالات، والموديل بيختار الكلمة الجاية منها. كل رد بتقراه اتكتب بالطريقة دي، كلمة كلمة.
الدرس اللي فات