إحصائيات حول إعلامات الرسائل غير المرغوب فيها التي أبلغت عنها أتمتة الفرز المدعومة بالذكاء الاصطناعي

يوفر استعلام SQL هذا إحصائيات حول علامات البريد العشوائي التي تم الإبلاغ عنها بواسطة الأتمتة Discourse AI - AI triage. يقوم بحساب العدد الإجمالي للعلامات، وعدد الموافق عليها أو المرفوضة، والنسب المئوية المقابلة. هذا التقرير مفيد لفهم مدى فعالية اكتشاف البريد العشوائي الآلي في منتداك.

-- [params]
-- date :start_date = 2025-01-01
-- date :end_date = 2025-05-30

SELECT
    COUNT(*) AS total_flags,
    COUNT(*) FILTER (WHERE r.status = 1) AS approved_flags,
    COUNT(*) FILTER (WHERE r.status = 2) AS rejected_flags,
    ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 1) / COUNT(*), 2) AS approved_percentage,
    ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 2) / COUNT(*), 2) AS rejected_percentage
FROM
    reviewables r
JOIN
    post_actions pa ON pa.post_id = r.target_id AND r.target_type = 'Post'
WHERE
    pa.post_action_type_id = 8 -- ID for spam (Flag as spam and hide post)
    AND r.created_at BETWEEN :start_date AND :end_date
    AND r.status IN (1, 2) -- Accepted and rejected flags
    AND r.created_by_id = -1 -- System user ID

شرح استعلام SQL

  • المعلمات: معلمات :start_date و :end_date بتنسيق YYYY-MM-DD مع قيم افتراضية.
  • الربط: يربط جدول reviewables بجدول post_actions لضمان احتساب علامات البريد العشوائي التي مرت بعملية المراجعة فقط.
  • التصفية:
    • post_action_type_id = 8: يقتصر على علامات البريد العشوائي فقط.
    • التصفية حسب النطاق الزمني مع المعلمات المحددة.
    • status IN (1, 2): يشمل فقط العلامات التي تم حلها (الموافقة عليها أو رفضها).
    • created_by_id = -1: يشمل فقط العلامات التي أنشأها المستخدم النظام (AI triage).
  • التجميع:
    • total_flags: العدد الإجمالي لعلامات البريد العشوائي بواسطة النظام.
    • approved_flags: عدد العلامات التي وافق عليها المستخدمون (الحالة = 1).
    • rejected_flags: عدد العلامات التي رفضها المستخدمون (الحالة = 2).
    • approved_percentage: نسبة العلامات التي تمت الموافقة عليها.
    • rejected_percentage: نسبة العلامات التي تم رفضها.

نتائج مثال

total_flags approved_flags rejected_flags approved_percentage rejected_percentage
152 128 24 84.21 15.79
3 إعجابات

وقد حصلت على

PG::DivisionByZero: ERROR:  division by zero

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

-- [params]
-- date :start_date = 2025-01-01
-- date :end_date = 2025-05-30

SELECT 
    COUNT(*) AS total_flags,
    COUNT(*) FILTER (WHERE r.status = 1) AS approved_flags,
    COUNT(*) FILTER (WHERE r.status = 2) AS rejected_flags,
    ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 1) / NULLIF(COUNT(*), 0), 2) AS approved_percentage,
    ROUND(100.0 * COUNT(*) FILTER (WHERE r.status = 2) / NULLIF(COUNT(*), 0), 2) AS rejected_percentage
FROM 
    reviewables r
JOIN 
    post_actions pa ON pa.post_id = r.target_id AND r.target_type = 'Post'
WHERE
    pa.post_action_type_id = 8 -- معرّف للرسائل غير المرغوب فيها (الإبلاغ كرسالة غير مرغوب فيها وإخفاء المنشور)
    AND r.created_at BETWEEN :start_date AND :end_date
    AND r.status IN (1, 2) -- العلامات المقبولة والمرفوضة
    AND r.created_by_id = -1 -- معرّف مستخدم النظام
إعجابَين (2)

لديّ القليل، كلها إيجابيات كاذبة، لكنني لا أتذكر كيف تعاملت معها.

لكن شيئًا كهذا خمنت أيضًا (أنا سيئ حقًا في قراءة SQL).