- Je vergelijkt gemiddelde en mediaan bij een uitschieter.
- Je onderscheidt populatievariantie van steekproefvariantie.
Een chatbot reageert op vier oefenvragen na 1, 2, 3 en 10 seconden. De gemiddelde wachttijd is vier seconden, hoewel drie antwoorden sneller klaar zijn. Eén getal kan dus een juist maar onvolledig beeld geven van je gegevens.
We gebruiken eindige getallen zonder ontbrekende waarden. Je bouwt drie samenvattingen: een evenwichtspunt, een middelste waarde en een maat voor de verschillen. Houd de oorspronkelijke metingen erbij, want geen van deze getallen vertelt het hele verhaal.
1. De totale wachttijd eerlijk verdelen
Samen duren de vier antwoorden 1 + 2 + 3 + 10 = 16 seconden. Verdeel die totale tijd gelijk over vier antwoorden: ieder krijgt 4 seconden. Dat is het rekenkundig gemiddelde (mean).
m noemt het gemiddelde, T de som van alle waarden en n het aantal waarnemingen. Elke waarde telt even zwaar mee in de som. In Python geeft len(xs) het aantal elementen van de lijst xs:
xs = [1, 2, 3, 10]
totaal = 0
for i in range(len(xs)):
totaal = totaal + xs[i]
m = totaal / len(xs)
print(m) # 4.0
Maak gemiddelde(xs) voor een willekeurig lange lijst. Een lege lijst heeft lengte nul en geen gemiddelde; geef daarvoor None terug vóór je deelt. Die keuze gebruiken we ook bij de mediaan.
2. De positie in de rij bekijken
Zet de wachttijden van klein naar groot. De mediaan (median) ligt in het midden: bij [1, 2, 3, 10] zijn de twee middelste waarden 2 en 3. Hun gemiddelde is (2 + 3)/2 = 2.5 seconden.
Bij een oneven aantal is er één middelste waarde: [1, 2, 10] heeft mediaan 2. De mediaan kijkt naar de posities in de gesorteerde rij. Verander je in de eerste lijst alleen 10 in 100, dan blijft de mediaan 2.5 terwijl het gemiddelde stijgt naar 26.5.
sorted(xs) maakt een nieuwe, gesorteerde lijst; xs blijft intact. Bij lengte n wijst n // 2 naar het middelste element als n oneven is, of naar het rechter midden als n even is. // deelt met een geheel resultaat naar beneden: 5 // 2 en 4 // 2 zijn allebei 2.
xs = [10, 2, 1, 3]
rij = sorted(xs)
n = len(rij)
midden = n // 2
links = rij[midden - 1]
rechts = rij[midden]
print((links + rechts) / 2) # 2.5
print(xs) # [10, 2, 1, 3]
Voor je algemene functie moet je even en oneven onderscheiden. % geeft de rest na deling: n % 2 == 0 betekent even; bij oneven n neem je alleen rij[midden]. Controleer eerst of de lijst leeg is, voordat je een positie opvraagt.
3. Hoe ver liggen de waarden uit elkaar?
De lijsten [1, 3] en [2, 2] hebben allebei gemiddelde 2. In de eerste wijken de waarden −1 en +1 af; in de tweede zijn beide afwijkingen nul. De eerste lijst is dus meer verspreid, hoewel het gemiddelde gelijk is.
Gewone afwijkingen optellen helpt niet: −1 + 1 = 0. Kwadrateren voorkomt dat positieve en negatieve afwijkingen elkaar wegstrepen, en geeft grotere afwijkingen meer gewicht. De variantie (variance) is hier het gemiddelde van die kwadraten: (1 + 1)/2 = 1.
Q noemt de som van alle gekwadrateerde afwijkingen van m; n blijft het aantal waarden. Voor onze twee wachttijden:
xs = [1, 3]
m = 2
Q = 0
for i in range(len(xs)):
afwijking = xs[i] - m
Q = Q + afwijking ** 2
print(Q / len(xs)) # 1.0
print(Q / (len(xs) - 1)) # 2.0
De eerste deling beschrijft precies deze verzameling: populatievariantie. De tweede helpt als je met onafhankelijke waarnemingen uit dezelfde populatieverdeling de variantie van die grotere populatie schat. Het gemiddelde is dan uit dezelfde steekproef geschat en ligt daardoor gemiddeld te dicht bij haar eigen waarden; delen door n onderschat de populatievariantie gemiddeld.
Delen door n−1 corrigeert die onderschatting onder deze aannames. Dat garandeert geen juiste uitkomst voor één kleine steekproef en herstelt geen verkeerde selectie. Bij wachttijden in seconden heeft variantie bovendien de eenheid seconden kwadraat, geen seconden.
De functie variantie(xs, ddof=0) deelt Q door n - ddof. ddof kiest hier alleen 0 of 1; =0 in de functiedefinitie betekent dat we standaard door n delen als de aanroeper niets meegeeft. Geef None als n <= ddof, anders bereken je eerst zelf m.
De vergelijking <= betekent “kleiner dan of gelijk aan”. Zo vang je zowel een lege lijst als een te kleine steekproef af vóór de deling.
Vergelijk nu acht andere metingen in het diagram. Schuif alleen de laatste waarneming omhoog en verklaar waarom gemiddelde en variantie veranderen, terwijl de twee middelste waarden gelijk blijven.
De eerste zeven waarden blijven 1, 2, 2, 3, 3, 4, 4. Alleen de laatste schuift.
Wat neem je mee?
- Het gemiddelde verdeelt de som gelijk; een uitschieter verandert die som sterk.
- De mediaan gebruikt de middelste positie(s) na sorteren; onze code bewaart de invoer met een gesorteerde kopie.
- Variantie meet gekwadrateerde afwijkingen; delen door n en n−1 beantwoordt verschillende vragen.
Hierna vergelijk je twee kenmerken tegelijk: bewegen hun afwijkingen samen, en wat zegt dat wel en niet?