0Pricing
Coding Interview Prep · درس

التحسن والدلالة والضوابط في SQL

حساب التحسن في معدل التحويل وفحوصات البيانات التي تكشف التجربة المعطلة

التحسن والدلالة والضوابط في SQL درس مجاني في Coding Interview Prep على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Coding Interview Prep، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.

من المقاييس إلى القرار

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

لن تشغّل حزمة إحصائية كاملة في SQL، لكن يمكنك حساب المدخلات وإشارة تقريبية إلى الدلالة الإحصائية، وهو ما يريد المحاورون رؤيته.

CTE الملخص لكل متغير

تُبنى كل الخطوات اللاحقة على ملخص منظم واحد: عدد المستخدمين لكل متغير n، وعدد المستخدمين الذين أجروا تحويلاً c، ومعدل التحويل p. احسب هذه القيم مرة واحدة في CTE وأعد استخدامها.

WITH summary AS (
  SELECT
    variant,
    COUNT(DISTINCT user_id)            AS n,
    COUNT(DISTINCT converted_user)     AS c
  FROM experiment_flat
  GROUP BY variant
)
SELECT
  variant, n, c,
  1.0 * c / n AS p
FROM summary;

الرفع المطلق مقابل الرفع النسبي

هناك تعريفان للرفع، ويفترض المحاورون الرفع النسبي افتراضيًا:

  • الرفع المطلق = p_treatment - p_control، أي نقاط مئوية.
  • الرفع النسبي = (p_treatment - p_control) / p_control، أي نسبة التحسن.

قد تصف عبارتا "زيادة بمقدار نقطتين" و"رفع نسبي قدره 20%" النتيجة نفسها. كن واضحًا في التعبير عن المقصود.

حساب الرفع باستخدام التجميع الشرطي

لمقارنة متغيرين في صف واحد، استخرج الضبط والمعالجة جنبًا إلى جنب باستخدام التجميع الشرطي، ثم أجرِ العمليات الحسابية.

يتجنب هذا الأسلوب عملية ربط ذاتي هشة، ويحافظ على سهولة قراءة صيغة الرفع.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
),
rates AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p_ctrl,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p_trt
  FROM s
)
SELECT
  p_ctrl, p_trt,
  p_trt - p_ctrl                          AS abs_lift,
  ROUND(100.0 * (p_trt - p_ctrl) / p_ctrl, 2) AS rel_lift_pct
FROM rates;

لماذا قد يكون الفرق مجرد ضوضاء

قد يكون معدل المعالجة الأعلى نتيجة حظ عشوائي في أخذ العينات. تسأل الدلالة الإحصائية: ما مدى احتمال ظهور فرق بهذا الحجم إذا كان المتغيران متطابقين فعلًا؟

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

الخطأ المعياري لنسبة

بالنسبة إلى معدل تحويل p عبر n من المستخدمين، يكون الخطأ المعياري هو sqrt(p * (1 - p) / n). احسبه لكل متغير مباشرةً في SQL.

يقيس هذا مقدار التذبذب في كل معدل قبل مقارنته بالآخر.

WITH s AS (
  SELECT variant,
    COUNT(DISTINCT user_id)        AS n,
    COUNT(DISTINCT converted_user) AS c
  FROM experiment_flat GROUP BY variant
)
SELECT
  variant, n,
  1.0 * c / n                                       AS p,
  SQRT( (1.0*c/n) * (1 - 1.0*c/n) / n )             AS std_err
FROM s;

درجة Z لنسبتين

تتمثل إشارة تقريبية إلى الدلالة الإحصائية في درجة z لنسبتين: الفرق بين المعدلين مقسومًا على الخطأ المعياري لذلك الفرق. وترتبط القيمة المطلقة التي تتجاوز نحو 1.96 بعتبة 95% الشائعة.

وضّح أن هذا تقريب وليس بديلًا عن اختبار إحصائي صحيح، لكنه يجيب في SQL عن السؤال: "هل من المعقول أن يكون هذا الفرق حقيقيًا؟"

WITH r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) AS p1,
    MAX(CASE WHEN variant='control'   THEN n END)        AS n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) AS p2,
    MAX(CASE WHEN variant='treatment' THEN n END)        AS n2
  FROM (
    SELECT variant, COUNT(DISTINCT user_id) n,
           COUNT(DISTINCT converted_user) c
    FROM experiment_flat GROUP BY variant
  ) s
)
SELECT
  p2 - p1 AS abs_lift,
  (p2 - p1) / SQRT( p1*(1-p1)/n1 + p2*(1-p2)/n2 ) AS z_score
FROM r;

تفسير درجة Z

حوّل الرقم إلى استنتاج حتى يسمع المحاور فهمًا تجاريًا، لا مجرد رياضيات:

  • |z| >= 1.96: الفرق ذو دلالة إحصائية عند مستوى ثقة يقارب 95%.
  • |z| < 1.96: لا توجد أدلة كافية؛ وقد يكون الرفع مجرد ضوضاء.

استخدم CASE لإخراج تصنيف واضح، واربط الدلالة الإحصائية دائمًا بحجم الرفع العملي.

SELECT
  z_score,
  CASE WHEN ABS(z_score) >= 1.96
       THEN 'significant at 95%'
       ELSE 'not significant' END AS verdict
FROM (
  SELECT 2.3 AS z_score
) t;

عدم تطابق نسبة العينة (SRM)

أول مقياس حماية يفحصه المحاورون: هل انقسم المستخدمون فعلًا كما صُمم لهم؟ إذا انتهت تجربة مقسمة بنسبة 50/50 إلى 53/47 مع وجود ملايين المستخدمين، فهذه إشارة تحذير؛ إذ إن العشوائية أو التسجيل معطّل.

قارن الأعداد المرصودة بالتقسيم المتوقع. فالانحراف الكبير يبطل الاختبار بأكمله قبل أن تفحص المقياس.

WITH cnt AS (
  SELECT variant, COUNT(DISTINCT user_id) AS n
  FROM experiment_flat GROUP BY variant
),
tot AS (SELECT SUM(n) AS total FROM cnt)
SELECT
  c.variant, c.n,
  ROUND(100.0 * c.n / t.total, 2)        AS observed_pct,
  50.0                                   AS expected_pct
FROM cnt c CROSS JOIN tot t;

مقاييس الحماية

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

اعرضها لكل متغير إلى جانب مقياس النجاح. فالمعالجة التي ترفع التحويل لكنها تضاعف عمليات استرداد الأموال ليست نجاحًا. ويشير حساب مقاييس الحماية دون طلب مسبق إلى امتلاكك حسًا جيدًا بالمنتج.

SELECT
  variant,
  AVG(load_ms)                                  AS avg_latency_ms,
  ROUND(100.0 * SUM(refunded) / COUNT(*), 2)    AS refund_rate_pct,
  ROUND(100.0 * SUM(errored)  / COUNT(*), 2)    AS error_rate_pct
FROM experiment_flat
GROUP BY variant;

عرض النتائج الكامل

يجمع عرض النتائج الكامل للتجربة، وهو ما يقدّره المحاورون، أربعة عناصر في نتيجة واحدة: المعدلات لكل متغير، والرفع النسبي، واستنتاج الدلالة الإحصائية، وفحص SRM. استخدم عدة CTEs وقدّمها في جدول واحد جاهز لاتخاذ القرار.

اختتم بذكر ما يلي: النتيجة ذات دلالة إحصائية، وحجم الرفع مقبول، ومقاييس الحماية سليمة، والتقسيم متوازن، ولذلك ينبغي الإطلاق أو الإيقاف.

WITH s AS (
  SELECT variant, COUNT(DISTINCT user_id) n,
         COUNT(DISTINCT converted_user) c
  FROM experiment_flat GROUP BY variant
),
r AS (
  SELECT
    MAX(CASE WHEN variant='control'   THEN 1.0*c/n END) p1,
    MAX(CASE WHEN variant='control'   THEN n END) n1,
    MAX(CASE WHEN variant='treatment' THEN 1.0*c/n END) p2,
    MAX(CASE WHEN variant='treatment' THEN n END) n2
  FROM s
)
SELECT
  ROUND(100.0*(p2-p1)/p1, 2) AS rel_lift_pct,
  CASE WHEN ABS((p2-p1)/SQRT(p1*(1-p1)/n1 + p2*(1-p2)/n2)) >= 1.96
       THEN 'significant' ELSE 'not significant' END AS verdict,
  CASE WHEN ABS(1.0*n2/(n1+n2) - 0.5) > 0.02
       THEN 'SRM warning' ELSE 'split ok' END AS srm_check
FROM r;

تحقق سريع

يُظهر متغير المعالجة رفعًا نسبيًا قدره 25% في التحويل، لكن كل متغير يضم 40 مستخدمًا فقط. ما الاستنتاج الصحيح؟

مراجعة: الرفع والدلالة الإحصائية ومقاييس الحماية

يمكنك الآن تحويل المقاييس الأولية للمتغيرات إلى قرار:

  • ميّز بين الرفع المطلق، أي النقاط المئوية، والرفع النسبي، أي النسبة المئوية.
  • احسب الخطأ المعياري لكل معدل ودرجة z لنسبتين باعتبارها إشارة تقريبية إلى الدلالة الإحصائية (|z| >= 1.96 ~ 95%).
  • نفّذ فحص SRM للتأكد من توافق التقسيم مع التصميم.
  • اعرض مقاييس الحماية حتى لا يخفي النجاح تراجعًا في مقياس آخر.
  • قدّم عرض نتائج واحدًا جاهزًا لاتخاذ القرار، واربط الدلالة الإحصائية دائمًا بحجم الرفع العملي.

وبذلك يكتمل تحليل مسارات التحويل واختبارات A/B في SQL.

الأسئلة الشائعة

هل درس «التحسن والدلالة والضوابط في SQL» مجاني؟

نعم — نص درس «التحسن والدلالة والضوابط في SQL» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Coding Interview Prep، انتقل إلى CoddyKit PRO. تتضمن دورة Coding Interview Prep 4 دروس في المجموع.

ماذا ستتعلم في «التحسن والدلالة والضوابط في SQL»؟

حساب التحسن في معدل التحويل وفحوصات البيانات التي تكشف التجربة المعطلة تتمرن على Coding Interview Prep مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Coding Interview Prep؟

لا تُشترط خبرة سابقة. Coding Interview Prep على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «التحسن والدلالة والضوابط في SQL»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Coding Interview Prep هذا؟

نعم. كل درس في Coding Interview Prep يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. إنشاء مسار تحويل متعدد الخطوات
  2. الأحداث المرتبة والنوافذ الزمنية
  3. إسناد اختبارات A/B ومقاييسها
  4. التحسن والدلالة والضوابط في SQL
← العودة إلى Coding Interview Prep