Registrering og håndtering af outliers
Identificér outliers med IQR-grænser og Z-scorer, beslut, om de skal begrænses, fjernes eller markeres, og dokumentér beslutningerne.
Registrering og håndtering af outliers er en gratis Pandas & NumPy Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Pandas & NumPy Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.
Hvad er en afvigende værdi?
En afvigende værdi er et datapunkt, der adskiller sig markant fra resten af datasættet. Afvigende værdier kan være ægte (én erhvervskunde med en ordre på 500.000 USD i et datasæt med gennemsnitlige ordrer på 100 USD) eller fejlbehæftede (en negativ pris eller en slåfejl, der ændrede 120 til 12.000). Det første trin i behandlingen af afvigende værdier er at beslutte, om ekstremværdien er reel og meningsfuld eller skyldes et problem med datakvaliteten — behandlingen er meget forskellig i de to tilfælde.
import pandas as pd
import numpy as np
df = pd.read_parquet('sales_clean.parquet')
print(df['revenue'].describe())Visuel registrering af afvigende værdier: boksplot
Et boksplot er det hurtigste visuelle værktøj til at finde afvigende værdier. Boksen spænder over interkvartilafstanden (IQR, Q1–Q3), knurhårene går ud til 1,5 × IQR, og punkter uden for knurhårene vises enkeltvis som mulige afvigende værdier. Brug df['revenue'].plot(kind='box') eller Seaborns sns.boxplot() til straks at se de afvigende værdier uden selv at beregne grænser.
import matplotlib.pyplot as plt
import seaborn as sns
fig, ax = plt.subplots(figsize=(6, 4))
df['revenue'].plot(kind='box', ax=ax)
ax.set_title('Revenue Distribution — Box Plot')
plt.tight_layout()
plt.show()IQR-hegnmetoden
Metoden med IQR-hegn beregner interkvartilafstanden og definerer grænser ved Q1 − 1,5 × IQR og Q3 + 1,5 × IQR. Værdier uden for disse grænser markeres som afvigende værdier. Multiplikatoren 1,5 er standard for milde afvigende værdier; brug kun 3,0 for ekstreme afvigende værdier. Denne metode er robust: I modsætning til Z-scorer antager den ikke en normalfordeling.
Q1 = df['revenue'].quantile(0.25)
Q3 = df['revenue'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
outliers = df[(df['revenue'] < lower) | (df['revenue'] > upper)]
print(f'Q1={Q1:.0f}, Q3={Q3:.0f}, IQR={IQR:.0f}')
print(f'Bounds: [{lower:.0f}, {upper:.0f}]')
print(f'Outliers: {len(outliers)}')Z-score-metoden til registrering af afvigende værdier
Z-scoren måler, hvor mange standardafvigelser en værdi ligger fra gennemsnittet. En værdi med |Z| > 3 betragtes traditionelt som en afvigende værdi, hvilket omfatter 99,7 % af normalfordelte data. Z-scorer er dog følsomme over for netop de afvigende værdier, de forsøger at finde — ekstreme værdier trækker gennemsnittet og øger standardafvigelsen, så andre afvigende værdier potentielt skjules.
mean = df['revenue'].mean()
std = df['revenue'].std()
df['revenue_z'] = (df['revenue'] - mean) / std
z_outliers = df[df['revenue_z'].abs() > 3]
print(f'Z-score outliers (|z|>3): {len(z_outliers)}')
print(z_outliers[['revenue', 'revenue_z']].head())Markering eller fjernelse af afvigende værdier
Fjern aldrig afvigende værdier uden at dokumentere og begrunde beslutningen. Start i stedet med at markere dem i en boolesk kolonne (is_outlier), og analysér derefter, om de følger et mønster (samme region, samme produkt, samme dag). Hvis de er ægte, skal du beholde dem og modellere dem eksplicit. Hvis de er fejl, skal du fjerne dem og logge antallet af fjernelser i dataprosessens revisionsspor.
df['is_revenue_outlier'] = (df['revenue'] < lower) | (df['revenue'] > upper)
print('Flagged rows:', df['is_revenue_outlier'].sum())
print(df.groupby('is_revenue_outlier')['revenue'].describe())Begrænsning (winsorisering) af afvigende værdier
Begrænsning (eller winsorisering) erstatter værdier uden for grænserne med selve grænseværdien i stedet for at fjerne rækken. Det bevarer alle rækker i datasættet, samtidig med at det mindsker den forvridning, som afvigende værdier skaber i lineære modeller og opsummerende statistikker. Brug clip(lower=, upper=) til at anvende begrænsninger i én vektoriseret operation.
df['revenue_capped'] = df['revenue'].clip(lower=lower, upper=upper)
print('Original max:', df['revenue'].max())
print('Capped max:', df['revenue_capped'].max())
print('Rows changed:', (df['revenue'] != df['revenue_capped']).sum())Logaritmisk transformation af højreskæve data
Fordelinger af omsætning og priser er ofte højreskæve med en lang hale af store værdier. En logaritmisk transformation med np.log1p() (logaritmen af værdi + 1 for at håndtere nuller) komprimerer halen og gør fordelingen mere symmetrisk. Mange statistiske modeller og visualiseringer antager normalitet, så en logtransformation af omsætningskolonnen før modellering forbedrer ofte resultaterne.
df['log_revenue'] = np.log1p(df['revenue'])
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
df['revenue'].hist(bins=50, ax=axes[0])
axes[0].set_title('Original Revenue')
df['log_revenue'].hist(bins=50, ax=axes[1])
axes[1].set_title('Log Revenue')
plt.tight_layout()
plt.show()Afvigende værdier i flere kolonner
Når du analyserer mange kolonner på én gang, skal du programmæssigt beregne IQR-grænser for afvigende værdier for alle numeriske kolonner. Gå gennem de numeriske kolonner, beregn grænserne, og gem resultaterne i en ordbog. På den måde kan du generere en komplet rapport om afvigende værdier på få linjer i stedet for manuelt at gentage IQR-beregningen for hver kolonne.
numeric_cols = df.select_dtypes(include=['number']).columns
outlier_report = {}
for col in numeric_cols:
Q1 = df[col].quantile(0.25)
Q3 = df[col].quantile(0.75)
IQR = Q3 - Q1
n_out = ((df[col] < Q1 - 1.5*IQR) | (df[col] > Q3 + 1.5*IQR)).sum()
outlier_report[col] = n_out
print(pd.Series(outlier_report).sort_values(ascending=False))Bivariate afvigende værdier med punktdiagrammer
Nogle punkter er kun afvigende i kombination med hinanden: En enhedspris på 10 USD er normal, en mængde på 500 er usædvanlig, men ikke umulig, mens en enhedspris på 10 USD sammen med en mængde på 500 for en luksusvare er mistænkelig. Bivariate afvigende værdier vises som isolerede punkter i punktdiagrammer. Brug df.plot.scatter('quantity', 'unit_price') til at finde punkter, der ligger langt fra hovedklyngen.
fig, ax = plt.subplots(figsize=(8, 5))
df.plot.scatter(x='quantity', y='unit_price', alpha=0.3, ax=ax)
ax.set_title('Quantity vs. Unit Price — Bivariate Outliers')
plt.tight_layout()
plt.show()Dokumentation af beslutninger om afvigende værdier
Alle beslutninger om afvigende værdier bør logges: kolonnen, registreringsmetoden, den anvendte grænse, antallet af markerede rækker og den anvendte behandling (behold, begræns eller fjern). Denne dokumentation beskytter analytikeren ved kodegennemgange og revisioner. Gem den i en ordbog med renseoplysninger, som gemmes sammen med outputdatasættet.
outlier_log = {
'column': 'revenue',
'method': 'IQR 1.5x',
'lower_bound': round(lower, 2),
'upper_bound': round(upper, 2),
'rows_flagged': int(df['is_revenue_outlier'].sum()),
'treatment': 'cap (winsorise)'
}
for k, v in outlier_log.items():
print(f'{k}: {v}')Lagring af det behandlede datasæt
Gem det opdaterede DataFrame-objekt efter markering og behandling af afvigende værdier. Behold kolonnen is_outlier i outputtet, så efterfølgende brugere kan vælge at udelukke markerede rækker i bestemte analyser. Gem den begrænsede version i en kolonne med en tydelig endelse (_capped) sammen med originalen, så rensningen kan omgøres.
cols_to_save = [c for c in df.columns if c not in ['revenue_z']]
df[cols_to_save].to_parquet('sales_treated.parquet', index=False)
print('Outlier-treated dataset saved:', df.shape)Hurtig kontrol
Test din forståelse af begreberne inden for dataanalyse fra denne lektion.
Opsummering af lektionen
I denne lektion har du lært: at registrere afvigende værdier med IQR-hegn og Z-scorer, at beslutte, om afvigende værdier skal markeres, begrænses eller fjernes samt at anvende logtransformationer på højreskæve fordelinger. Nu skal vi se på standardisering af uensartede kategorimærkater i tekstkolonner.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Registrering og håndtering af outliers” gratis?
Ja — hele teksten til “Registrering og håndtering af outliers” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Pandas & NumPy Academy-kurset, skal du opgradere til CoddyKit PRO. Pandas & NumPy Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Registrering og håndtering af outliers”?
Identificér outliers med IQR-grænser og Z-scorer, beslut, om de skal begrænses, fjernes eller markeres, og dokumentér beslutningerne. Du øver dig i Pandas & NumPy Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Pandas & NumPy Academy?
Der kræves ingen tidligere erfaring. Pandas & NumPy Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Registrering og håndtering af outliers”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Pandas & NumPy Academy-lektion?
Ja. Alle Pandas & NumPy Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Registrering og fjernelse af dubletter
- Registrering og håndtering af outliers
- Standardisering af inkonsistente kategorier
- Skemavalidering og assertions