Өткөөл мезгилдеги тегеректөө каталары

Баварияда жалпы орточо баа \(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\) \(2{,}4\) расмий түрдө \(2{,}33\) \(2\) нота маанилерине айланат. Бирок, тегеректелбеген маанилер \(2{,}73\) \(3\) берет. Мисалдар натыйжаны ачык көрсөтөт. Бирок, алар анын канчалык көп кездешерин же башка тегеректөө ыкмасынын кесепеттери кандай болорун азырынча көрсөтө элек.

Ошондуктан, мен эсептөө үчүн так жыйынтык мейкиндигин колдоном. Ар бир субъекттин орточо мааниси анын ичиндеги \(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}
\]

эки ондук белгиге чейин кыскартылган жалпы орточо сан үчүн. Эми биз үч эсептөө ыкмасын салыштырабыз.:

\[
\баштоо{тигизделген}
A_0 &= A(\оператордун аты{айлана}(d),\оператордун аты{айлана}(m),\оператордун аты{айлана}(h)),\\
A_1 &= A(\оператордун аты{айлана}_1(d),\оператордун аты{айлана}_1(m),\оператордун аты{айлана}_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\) алынышы мүмкүн эмес. Ошентип, менин эсептөөм тегеректөө эффектин тастыктайт, бирок бул жеке ыктымалдуулуктарды эмес. Кандай болгон күндө да, жабыркаган балдардын чыныгы саны жөнүндөгү билдирүүлөр чыныгы баа бөлүштүрүүлөрүн жана алардын көз карандылыктарын талап кылат.

Артка