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

اختبار t

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

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

from scipy import stats

result = stats.ttest_ind(sans, serif)
print(np.round(result.pvalue, 3))
print(np.round(result.statistic, 2))

لدراسة الخطوط، يطبع هذا 0.031 و-2.61. أعطت عمليات الخلط البالغ عددها 1000 القيمة 0.039: وهي قريبة، كما هو معتاد.

الفروق المخلطة البالغ عددها 1000 في دراسة الخطوط، معروضة على شكل مدرج تكراري باهت، ومنحنى على شكل جرس لاختبار t-test فوقه، وخط أحمر متقطع عند الفجوة الحقيقية البالغة -6.6. يوضح المفتاح p = 0.039 لعمليات الخلط و0.031 للصيغة

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

كما يتحقق مما إذا كان أحد النموذجين يتفوق فعلًا على الآخر.

challenge icon

التحدي

متوسط

قاس صانع دهانات زمن جفاف ثلاثة أنواع من الطلاء. يضع القالب الأولي دقائق جفاف كل نوع في times، ويسرد ثلاثة أزواج في pairs، ويعرّف permutation_p(a, b)، ويقرأ level.

  1. اطبع قيمة p لاختبار t للمقارنة بين matte وsatin بجانب قيمة المحاكاة بالتبديل.
  2. اختبر كل زوج، مع وضع النوع الأول أولًا، واطبع الزوج ذي أصغر قيمة p.
  3. احسب عدد الأزواج التي تقل قيمة p فيها عن level.

قرّب قيم p إلى 3 منازل عشرية. صانع آخر، المستوى 0.05:

matte vs satin: t-test 0.012, simulation 0.023
Clearest difference: satin vs gloss (p = 0.0)
Pairs that differ: 3 of 3

جرّب بنفسك

import numpy as np
import pandas as pd
from scipy import stats


# اختبار التبديل من الدرسين السابقين: يعيد قيمة p الخاصة به عند مقارنة a بـ b
def permutation_p(a, b, shuffles=1000, seed=0):
    rng = np.random.default_rng(seed)
    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())
    real = b.mean() - a.mean()
    return (np.abs(np.array(diffs)) >= np.abs(real)).mean()


paint = pd.read_csv("paint.csv")
times = {
    "matte": paint[paint["finish"] == "matte"]["minutes"],
    "satin": paint[paint["finish"] == "satin"]["minutes"],
    "gloss": paint[paint["finish"] == "gloss"]["minutes"],
}
pairs = [("matte", "satin"), ("matte", "gloss"), ("satin", "gloss")]
level = float(input())

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

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

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

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