أخطاء التقريب أثناء الانتقال

في بافاريا، يُعتبر معدل \(2{,}33\) مؤهلاً للالتحاق بالمدرسة \(2{,}34\) كذلك. عند هذا الحد الفاصل، يُمكن لترتيب عمليتي تقريب أن يُحدد أيًّا من المعدلين يقع عليه الطالب. يناقش غونتر فيلبينجر التداعيات المحتملة لهذا التأثير في مدونته . بدافع الفضول، قمتُ بحساب هذه التأثيرات بنفسي لجميع تركيبات الدرجات المسموح بها في النموذج.


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

وفقًا للمادة 6 من لوائح المدارس الابتدائية البافارية، يُحسب المعدل التراكمي من درجات اللغة الألمانية والرياضيات والدراسات المحلية والعامة. وتحدد اللوائح التنفيذية الحد الأقصى للمعدل التراكمي بـ \(2{,}33\) ، وبـ \(2{,}66\) . في نموذج الحساب التالي، يُقرب كل معدل تراكمي إلى منزلتين عشريتين دون تقريبه مرة أخرى. على سبيل المثال...

\[
\frac{2{,}33+2{,}34+2{,}34}{3}=2{,}3366\ldots \longrightarrow 2{,}33.
\]

هذا أمر بالغ الأهمية للتصنيف: \(2{,}3366\ldots\) لا تصبح \(2{,}34\) ، بل \(2{,}33\) وبالتالي فهي لا تزال كافية للمدرسة النحوية.

يوضح المدخل الأولي التقريب المبكر باستخدام القيم المتوسطة المفترضة الخاصة بكل مادة \(1{,}6\) \(2{,}6\) و \(2{,}6\) . ومن هذه القيم، تُستخلص الدرجات الكاملة \(2\) و \(3\) و \(3\) أولًا. متوسطها هو

\[
\frac{2+3+3}{3}=2{,}6666\ldots \longrightarrow 2{,}66,
\]

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

\[
\frac{1{,}6+2{,}6+2{,}6}{3}=2{,}2666\ldots \longrightarrow 2{,}26.
\]

في المثال الثاني، يعمل التقريب في الاتجاه المعاكس: تصبح القيم \(2{,}4\) \(3{,}4\) و \(2{,}4\) هي القيم الكاملة للنوتة الموسيقية \(2\) \(3\) \(2\) \(2{,}33\) رسميًا. أما القيم غير المقربة، فتكون \(2{,}73\) . توضح الأمثلة بوضوح هذا التأثير، لكنها لا تكشف بعد عن مدى تكراره أو عواقب استخدام طريقة تقريب مختلفة.

لذلك، أستخدم في حساباتي نطاق نتائج واضح. يمكن أن يكون متوسط كل موضوع أحد القيم \(501\) الموجودة فيه.

\[
1{,}00,\, 1{,}01,\, 1{,}02,\, \ldots, \, 5{,}99, \, 6{,}00
\]

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

\[
501^3=125\,751\,501
\]

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

بالنسبة لثلاثة وسائط موضوعية \(d,m,h\) نكتب

\[
A(d,m,h)=\frac{\left\lfloor 100\cdot\frac{d+m+h}{3}\right\rfloor}{100}
\]

لحساب المتوسط العام بتقريبه إلى منزلتين عشريتين. الآن نقارن ثلاث طرق حسابية.:

\[
\begin{aligned}
A_0 &= A(\operatorname{round}(d),\operatorname{round}(m),\operatorname{round}(h)),\\
A_1 &= A(\operatorname{round}_1(d),\operatorname{round}_1(m),\operatorname{round}_1(h)),\\
A_\mathrm{ref} &= A(d,m,h).
\end{aligned}
]

يمثل \(A_0\) الحساب باستخدام الدرجات الكاملة، \(A_1\) الاقتراح برقم عشري واحد، و \(A_\mathrm{ref}\) المرجع غير المقرب ضمن النموذج. يمكن تنفيذ الحساب مباشرةً في لغة Rust ، على سبيل المثال.:

const SCHOOL_GYMNASIUM: i32 = 0;
const SCHOOL_REALSCHULE: i32 = 1;
const SCHOOL_MITTELSCHULE: i32 = 2;
const FLOAT_TOLERANCE: f64 = 1e-9;

#[derive(Clone, Copy, Default)]
struct Statistic {
    conflict_count: u64,
    total_count: u64,
}

fn determine_school(average: f64) -> i32 {
    if average <= 2.33 {
        return SCHOOL_GYMNASIUM;
    }
    if average <= 2.66 {
        return SCHOOL_REALSCHULE;
    }
    SCHOOL_MITTELSCHULE
}

fn calculate_average(note_deutsch: f64, note_mathe: f64, note_hsu: f64) -> f64 {
    let average = (note_deutsch + note_mathe + note_hsu) / 3.0;
    ((average + FLOAT_TOLERANCE) * 100.0).floor() / 100.0
}

fn round_to_whole_grade(grade: f64) -> f64 {
    grade.round()
}

fn round_to_one_decimal(grade: f64) -> f64 {
    (grade * 10.0).round() / 10.0
}

fn normalize_grade(grade: f64) -> f64 {
    (grade * 100.0).round() / 100.0
}

fn percentage(count: u64, total: u64) -> f64 {
    count as f64 / total as f64 * 100.0
}

fn main() {
    let mut combination_count = 0;
    let mut official_reference_conflicts = 0;
    let mut official_proposal_conflicts = 0;
    let mut proposal_reference_conflicts = 0;
    let mut statistics = [Statistic::default(); 4];

    let mut note_deutsch = 1.0;
    while note_deutsch <= 6.0 {
        let mut note_mathe = 1.0;
        while note_mathe <= 6.0 {
            let mut note_hsu = 1.0;
            while note_hsu <= 6.0 {
                combination_count += 1;

                let official_average = calculate_average(
                    round_to_whole_grade(note_deutsch),
                    round_to_whole_grade(note_mathe),
                    round_to_whole_grade(note_hsu),
                );
                let proposed_average = calculate_average(
                    round_to_one_decimal(note_deutsch),
                    round_to_one_decimal(note_mathe),
                    round_to_one_decimal(note_hsu),
                );
                let reference_average =
                    calculate_average(note_deutsch, note_mathe, note_hsu);
                let official_school = determine_school(official_average);
                let proposed_school = determine_school(proposed_average);
                let reference_school = determine_school(reference_average);

                if official_average == 3.0 {
                    statistics[0].total_count += 1;
                    if reference_school != SCHOOL_MITTELSCHULE {
                        statistics[0].conflict_count += 1;
                    }
                }
                if official_average == 2.66 {
                    statistics[1].total_count += 1;
                    if reference_school == SCHOOL_GYMNASIUM {
                        statistics[1].conflict_count += 1;
                    }
                }
                if official_average == 2.33 {
                    statistics[2].total_count += 1;
                    if reference_school != SCHOOL_GYMNASIUM {
                        statistics[2].conflict_count += 1;
                    }
                }
                if official_average == 2.66 {
                    statistics[3].total_count += 1;
                    if reference_school == SCHOOL_MITTELSCHULE {
                        statistics[3].conflict_count += 1;
                    }
                }

                if official_school != reference_school {
                    official_reference_conflicts += 1;
                }
                if official_school != proposed_school {
                    official_proposal_conflicts += 1;
                }
                if proposed_school != reference_school {
                    proposal_reference_conflicts += 1;
                }

                note_hsu = normalize_grade(note_hsu + 0.01);
            }
            note_mathe = normalize_grade(note_mathe + 0.01);
        }
        note_deutsch = normalize_grade(note_deutsch + 0.01);
    }

    println!(
        "official/reference: {}%",
        percentage(official_reference_conflicts, combination_count)
    );
    println!(
        "official/proposal: {}%",
        percentage(official_proposal_conflicts, combination_count)
    );
    println!(
        "proposal/reference: {}%",
        percentage(proposal_reference_conflicts, combination_count)
    );
    for (index, statistic) in statistics.iter().enumerate() {
        println!(
            "#{}: {}% ({}/{})",
            index + 1,
            percentage(statistic.conflict_count, statistic.total_count),
            statistic.conflict_count,
            statistic.total_count
        );
    }
}

التسامح الضئيل في calculate_average يمنع قيمة مثل \(2{,}67\) بسبب تمثيله الثنائي العائم، تم اعتباره خطأً \(2{,}669999\ldots\) انقطع الاتصال. normalize_grade علاوة على ذلك، فإنه يُعيد كل قيمة من قيم الحلقة إلى شبكة من الرتبة المئة. يوجد على الأقل قيمتان متوسطتان مختلفتان محتملتان. \(1/300\) على حدة؛ تسامح \(10^{-9}\) وبالتالي فهي صغيرة بما يكفي لعدم تغيير أي حالة حدودية حقيقية.

يتم تجميع البرنامج وتشغيله باستخدام

rustc -O calc.rs && ./calc

يتكرر البرنامج عبر جميع التوليفات \(125\,751\,501\) ويعيد:

مقارنةجزء
الدرجات الكاملة مقابل متوسطات المواد غير المقربة\(10{,}4411\,\%\)
الدرجات الكاملة مقارنة بالاقتراح مع منزلة عشرية واحدة\(10{,}1521\,\%\)
اقتراح برقم عشري واحد مقارنة بمتوسطات الخبراء غير المقربة\(0{,}6615\,\%\)

القيمة الأساسية بالنسبة لي هي \(10{,}4411\,\%\): في أكثر من حالة واحدة من كل عشر حالات، يؤدي التقريب المبكر إلى درجات كاملة إلى نوع مدرسة محسوب مختلف عن النوع المرجعي غير المقرب. وتصف هذه النسبة حصريًا تأثير التقريب ضمن النموذج المختار.

سيؤدي التحول إلى متوسطات الخبراء برقم عشري واحد إلى تصنيف مختلف في \(10{,}1521\,\%\) من جميع حالات النموذج مقارنةً بالطريقة السابقة. ومع ذلك، فإن المقارنة الثالثة حاسمة: فمقارنةً بالمرجع غير المقرب، لا تترك الطريقة ذات الرقم العشري الواحد سوى \(0{,}6615\,\%\) الحالات المنحرفة. وبالتالي، ينخفض الانحراف عن المرجع بنسبة

\[
1-\frac{0{,}6615}{10{,}4411}\approx 93{,}7\,\%.
\]

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

لكن هذه الأرقام لا تُبيّن لنا عدد الأطفال المتضررين فعلياً. فدرجات التقارير المدرسية لا تُحسب بالضرورة كمتوسطات مُقرّبة آلياً، والأداء الأكاديمي ليس موزعاً بالتساوي ولا مستقلاً، كما أن اختيار نوع المدرسة لا يعتمد فقط على هذه الأرقام الثلاثة. تُجيب حساباتي على سؤال أكثر تحديداً: ما مدى تكرار تأثير التقريب على الدرجة المحسوبة عندما تكون جميع احتمالات القيم الجزئية متساوية؟

أخيرًا، بالمقارنة مع المنشور الأصلي: النسبة الإجمالية المذكورة هناك، والتي تبلغ حوالي \(10\,\%\) قريبة من النسبة التي توصلت إليها وهي \(10{,}4411\,\%\) . مع ذلك، لا تؤكد حساباتي الحالات الأربع الفردية، حيث تم الإبلاغ عن كل حالة بنسبة \(1/6 \approx 17\,\%\) بالنسبة لحالات "التغيب عن المدرسة الثانوية بنسبة \(3{,}00\) "، و"التغيب عن المدرسة الثانوية بنسبة \(2{,}33\) "، و"الالتحاق بالمدرسة الثانوية بنسبة \(2{,}66\) "، و"الالتحاق بالمدرسة الثانوية بنسبة \(2{,}66\) \(1{,}4615\,\%\) \(59{,}6096\,\%\) \(1{,}2023\,\%\) \(62{,}9395\,\%\) .

القيم الأربع هي احتمالات شرطية ذات مجموعات مرجعية مختلفة الأحجام. وبدون فضاء عينة مُعرَّف بشكل مختلف \(1/6\) منها. وبالتالي، تؤكد حساباتي تأثير التقريب، ولكنها لا تؤكد هذه الاحتمالات الفردية. على أي حال، تتطلب البيانات المتعلقة بالعدد الفعلي للأطفال المتأثرين توزيعات الصفوف الدراسية الحقيقية وعلاقاتها المتبادلة.

عودة