Menu
CoddyTech
flag Ar iconالعربيةdown icon

القيم الاحتمالية (P-Values)

جزء من قسم الإحصاء لتعلّم الآلة في رحلة Machine Learning على Coddy. الدرس 44 من 64.

تحوّل قيمة p عمليات الخلط إلى رقم واحد: نسبة الفروق الوهمية التي تساوي الفرق الحقيقي أو تتجاوزه، في أيٍّ من الاتجاهين.

الفروق الألف الناتجة عن خلط بيانات دراسة الخطوط، معروضة في مخطط بياني تكراري. الأشرطة التي تقع عند 6.6 ثانية أو تتجاوزها على كلا الجانبين باللون الأحمر، وعددها 39 عملية خلط، وتظهر التسمية p = 39 / 1000 = 0.039

في الكود، لدراسة الخطوط:

real = sans.mean() - serif.mean()
rng = np.random.default_rng(4)
diffs = shuffled_diffs(serif, sans, 1000, rng)  # الحلقة التكرارية من الدرس السابق
p_value = (np.abs(diffs) >= np.abs(real)).mean()
print(p_value)

يطبع هذا 0.039. تحسب np.abs الفجوة -7 على أنها تساوي 7: والسؤال هو ما إذا كانت الخطوط تختلف أصلًا.

عند مستوى الدلالة الإحصائية، وغالبًا ما يكون 0.05، لا يُعدّ الصدفة تفسيرًا مقنعًا لتحسّن خط أو نموذج. هذا ليس دليلًا قاطعًا: فقد حدث ذلك أيضًا في 4 من أصل 100 عملية خلط.

challenge icon

التحدي

متوسط

تسقي مزرعة الفراولة صباحًا أو مساءً. يقسم البرنامج التمهيدي strawberries.csv إلى morning وevening، ويسرد columns، ويقرأ level، ويعرّف shuffled_diffs.

  1. لكل عمود، احسب الفارق الحقيقي (متوسط المساء ناقص متوسط الصباح)، والفوارق بعد الخلط (الصباح أولًا)، وقيمة p.
  2. اطبع سطرًا لكل عمود كما هو موضح أدناه (الفارق بمنزلتين عشريتين، وp بثلاث منازل): اطبع differs عندما تكون p أقل من level.
  3. أحصِ الأعمدة التي يختلف فيها القياس.

مزرعة أخرى، المستوى 0.05:

berries: difference -5.4, p = 0.009, differs
weight_g: difference 0.2, p = 1.0, could be chance
sweetness_brix: difference 0.46, p = 0.022, differs
leaf_spots: difference 0.6, p = 0.397, could be chance
Columns that differ: 2 of 4

جرّب بنفسك

import numpy as np
import pandas as pd


# تعيد الفروق الناتجة عن الخلط في اختبار التبديل (حلقة الدرس 43): متوسط b الافتراضي ناقص متوسط a الافتراضي
def shuffled_diffs(a, b, shuffles, rng):
    pooled = np.concatenate([a, b])
    diffs = []
    for i in range(shuffles):
        shuffled = rng.permutation(pooled)
        diffs.append(shuffled[len(a):].mean() - shuffled[:len(a)].mean())
    return np.array(diffs)


beds = pd.read_csv("strawberries.csv")
morning = beds[beds["watering"] == "morning"]
evening = beds[beds["watering"] == "evening"]
columns = ["berries", "weight_g", "sweetness_brix", "leaf_spots"]
level = float(input())
# لا تغيّر الأسطر أدناه
rng = np.random.default_rng(21)
shuffles = 1000

# اكتب شيفرتك أدناه
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس الإحصاء لتعلّم الآلة

تدرّب بنفسك: مترجم Python عبر الإنترنت