Der findes ikke et rigtigt datasæt uden huller. Uanset hvor pænt et regneark ser ud, gemmer der sig næsten altid celler, hvor værdien mangler: en måling, der ikke blev registreret, et felt, kunden sprang over, en sensor, der glippede. Det pæne, komplette datasæt er en fiktion, og en af de mest udbredte måder, en analyse går galt på, er, at de manglende værdier bliver overset i stilhed. Før du beskriver eller sammenligner noget som helst, skal du derfor finde hullerne og tage bevidst stilling til dem.
Manglende data hører til i rensefasen, den del af arbejdet, hvor data “vaskes”, inden du regner et eneste gennemsnit eller tegner et histogram. Det er en utaknemmelig del af analysen, men også en afgørende: en forkert beslutning her forplanter sig lydløst gennem alt det, du bygger ovenpå. Et enkelt overset hul kan flytte et gennemsnit, forvride en fordeling og i sidste ende føre til en forkert konklusion.
Hullerne gemmer sig
Den første fælde er at tro, at manglende data altid er en tom celle. Det er det sjældent. Meget oftere er hullet forklædt: som et 0, et -1, en kodeværdi som 999, en tekst som “N/A” eller “ukendt”, eller som en værdi, der ganske enkelt er umulig, for eksempel en alder på 0 år eller et fødselsår på 1900.

Det farlige ved de forklædte huller er, at de glider lige forbi, hvis du kun leder efter blanke felter. En kodeværdi som 999 i en alderskolonne bliver ikke fanget af øjet; den ser ud som et tal og indgår villigt i et gennemsnit, som den så trækker helt skævt. Derfor er første skridt at lede systematisk. Tæl, hvor mange værdier hver kolonne har, og hvor mange forskellige (kolonnens kardinalitet): dukker der en mistænkelig top op ved 0 eller 999, er den ofte et forklædt hul. Sortér kolonnen og se på yderpunkterne, brug betinget formatering til at fremhæve de umulige værdier, og lad dit domænekendskab afgøre, hvad der overhovedet kan passe. Bemærk, at hullerne skjuler sig forskelligt alt efter datatypen: numeriske kolonner gemmer dem bag kodetal, mens kategoriske kolonner gemmer dem bag pladsholder-ord. Et hurtigt histogram er ofte det, der først afslører en unaturlig spids ved en kodeværdi.
I Excel finder du de tomme celler med =TÆL.TOMME(område) og de forklædte med =TÆL.HVIS(område; 999) eller et filter. =ER.TOM() kan markere dem enkeltvis. Pointen er den samme uanset værktøj: du kan ikke håndtere de huller, du ikke har fundet.
Hvorfor et hul opstår, afgør hvad du må gøre
Når hullerne er fundet, er det fristende at fylde dem ud eller bare smide de berørte rækker væk. Men før du gør det, skal du forstå hvorfor værdien mangler, for mekanismen afgør, om det overhovedet er sikkert at udelade dem. Statistikken skelner mellem tre slags, og forskellen er ikke akademisk: den afgør, om din analyse kommer til at lyve.

MCAR (missing completely at random) betyder, at hullerne opstår helt tilfældigt, uden sammenhæng med noget som helst. En sensor, der glipper nu og da, er et godt eksempel. Her er det ufarligt at udelade de manglende værdier; du mister kun lidt data, men det, der er tilbage, er stadig repræsentativt.
MAR (missing at random) betyder, at hullet afhænger af en anden kolonne, som du kan se. Postnummeret mangler måske systematisk for kunder, der bor i udlandet; årsagen ligger i landekolonnen, ikke i postnummeret selv. Det er en håndterbar situation, for netop fordi årsagen står i en anden kolonne, kan du ofte estimere den manglende værdi ud fra den.
MNAR (missing not at random) er den farlige. Her afhænger hullet af selve den værdi, der mangler. De højtlønnede undlader at oplyse deres løn; de syge springer over spørgsmålet om helbred. De manglende værdier er ikke tilfældigt spredt, de peger alle samme vej, og udelader du dem, bliver resultatet systematisk skævt. Gennemsnittet af de lønninger, folk faktisk oplyste, bliver for lavt, netop fordi de høje mangler. Det er samme slags fælde som i Gennemsnit kan snyde, blot med den ekstra tvist, at forvridningen er usynlig, medmindre du kender mekanismen. MNAR kan du ikke reparere ud fra data alene; det bedste, du kan gøre, er at være opmærksom på det og ærlig om det i din konklusion.
Hvad gør du ved et hul?
Når du kender arten af hullet, er der en enkel prioritering at følge: prøv først at finde den rigtige værdi, dernæst at estimere den, og først til sidst at udelade den.

Find den. Den bedste løsning er altid at fremskaffe den værdi, der faktisk manglede. Ofte står den i en grundregistrering eller i et andet system, som du kan slå op i med =LOPSLAG() eller =XOPSLAG(). Det er en tung og manuel proces, men det er den eneste, der ikke tilføjer en antagelse. Gør altid et forsøg, før du går videre.
Estimér den. Kan værdien ikke findes, kan du give et kvalificeret gæt. Til numeriske data kan du indsætte gennemsnittet eller, bedre og mere robust, medianen. For en tidsserie kan du føre den seneste kendte værdi videre. Er der tale om MAR, estimerer du ud fra den kolonne, hullet afhænger af. For kategoriske data kan du samle de manglende i en egen kategori, “ukendt”. Uanset metoden skal du vurdere estimatets præcision op mod, hvad analysen skal bruges til: et groft gæt kan være rigeligt til et overslag, men helt utilstrækkeligt til en beslutning med store konsekvenser. Nogle gange er det endda nok at kunne anvise en metode, værdien kunne estimeres på, uden faktisk at gøre det.
Udelad den. Kan du hverken finde eller estimere værdien troværdigt, må den ud af analysen. Det kan gøres på to måder. Enten fjerner du hele rækken, hvilket er rent og enkelt, men koster dig alle de gode værdier, rækken også indeholdt. Eller også ser du kun bort fra den manglende værdi i netop den analyse, hvor den pågældende kolonne indgår, hvilket bevarer mere data, men betyder, at forskellige dele af analysen hviler på forskelligt antal rækker. Vælg efter, hvad der gør mindst skade i det konkrete tilfælde.
Estimering er ikke gratis
Hver gang du estimerer en værdi, opfinder du et tal. Gør du det for flittigt, ender du med et datasæt, der ser mere komplet og mere sikkert ud, end det er. To faldgruber er værd at kende. Fylder du alle huller ud med gennemsnittet, skrumper spredningen kunstigt: standardafvigelsen falder, og dataene kommer til at se mere homogene ud, end de i virkeligheden er. Og et forklædt hul, du ikke fik opdaget, forvrider ikke bare gennemsnittet; en kodeværdi som 999 kan dukke op som en outlier og sende dig på jagt efter et mønster, der aldrig fandtes, ligesom en ægte ekstrem værdi omvendt kan blive forvekslet med en kode. Grundreglen er enkel: lad aldrig et estimeret tal optræde, som om det var en måling. Markér det.
Bevar revisionssporet
Det bringer os til den vigtigste vane af alle, når man renser data: rør aldrig dine rådata. Overskriver du en tom celle med et gæt, er den oprindelige tilstand tabt for altid, og du kan aldrig gøre arbejdet om, hvis du senere bliver klogere. Lav i stedet en ny kolonne til de vaskede værdier, og notér for hver ændring, hvor tallet kommer fra.

Med en kildekolonne ved siden af kan enhver, også dig selv om et halvt år, se præcis hvilke tal der var ægte, hvilke der blev slået op, hvilke der blev gættet, og hvilke der blev udeladt. Det gør analysen reproducerbar og gør det trygt at estimere, netop fordi estimaterne aldrig forsvinder ind i mængden som var de fakta. Bliver du undervejs i analysen klogere på et bedre gæt, retter du bare i den vaskede kolonne, mens rådata står urørt som dit anker.
Kort sagt
Manglende data er analysens stille dræber. Find hullerne, for de er ofte forklædte; forstå hvorfor de er der, for mekanismen afgør, hvor farlige de er; og håndtér dem i rækkefølgen find, estimér, udelad, uden nogensinde at lade et gæt gå for en måling. Hold dine rådata urørte, og dokumentér hver beslutning. Gør du det, hviler alt det, du bagefter bygger, gennemsnit, spredning, histogram og sammenhænge, på solid grund i stedet for på huller, du lod som om ikke var der.