Minden adatelemzési projekt rémálma a torz statisztika. A kiugró értékek kezelése (outlier detection) ezért kritikus lépés a pontos eredményekhez. Egyetlen extrém adatpont, mint például egy 4 méter magas kosárlabdázó, teljesen elhúzhatja az átlagot.
Adattisztítás profi módon
Ebben a gyakorlati útmutatóban egy valós projekten keresztül mutatjuk be a megoldást. Először Python kódokkal, majd egy nyelvi modell segítségével végezzük el a munkát. Másold ki a kódokat, és kövesd az utasításokat a saját gépeden.
A három alapvető módszer
A kiugró értékek azonosítása az adatok eloszlásától függ. Három fő technikát alkalmazunk.
- Szórás (Standard Deviation): Normál eloszlású adatoknál használjuk. Az átlagtól való távolságot méri.
- Interkvartilis tartomány (IQR): Nem normál eloszlásnál hasznos. Az adatok középső 50%-át vizsgálja.
- Percentilis (Percentile): Egyszerű küszöbértékek (pl. alsó és felső 1%) levágása.
1. Szórás módszer Pythonban
Ha az adataink haranggörbét (normál eloszlást) követnek, a szórás a legjobb eszköz. Az átlag plusz/mínusz háromszoros szórása lefedi az adatok 99,7%-át. Ami ezen kívül esik, az kiugró érték.
Íme a kód a szűréshez:
import pandas as pd
import numpy as np
# Feltételezzük, hogy 'df' az adatkeretünk
col = df['column']
mean = col.mean()
std = col.std()
lower = mean - 3 * std
upper = mean + 3 * std
# Csak a határértéken belüli értékeket tartjuk meg
filtered_df = df[(col >= lower) & (col <= upper)]
2. IQR módszer Pythonban
Ez a módszer kevésbé érzékeny a szélsőséges eloszlásra. Először kiszámoljuk az IQR értékét (harmadik kvartilis mínusz első kvartilis). A határokat az IQR 1,5-szerese jelöli ki.
Q1 = df['column'].quantile(0.25)
Q3 = df['column'].quantile(0.75)
IQR = Q3 - Q1
lower = Q1 - 1.5 * IQR
upper = Q3 + 1.5 * IQR
# Szűrés a határokon belülre
filtered_df = df[(df['column'] >= lower) & (df['column'] <= upper)]
3. Percentilis módszer Pythonban
Ez a legegyszerűbb eljárás. Meghatározzuk a legalsó és legfelső 1%-ot, majd ezeket eltávolítjuk. Nem igényel feltételezéseket az eloszlásról.
lower_p = df['column'].quantile(0.01)
upper_p = df['column'].quantile(0.99)
filtered_df = df[(df['column'] >= lower_p) & (df['column'] <= upper_p)]
A Physician Partners adatprojekt
A gyakorlati példánkhoz a Physician Partners szintetikus egészségügyi adatkészletét használjuk. A feladat: találjuk meg a kiugró értékek kezelése során a gyanúsan magas költéseket generáló pácienseket.
Töltsük be és vizsgáljuk meg az adatokat:
sfrs = pd.read_csv('sfr_test.csv')
sfrs.info()
Az adatok vizsgálatakor egy technikai problémába ütközünk. A pénzügyi oszlopok (pl. plan_premium) dollárjeleket („$”) és vesszőket tartalmaznak. Ezeket szövegként kezeli a rendszer, így nem tudunk velük számolni. A tisztítás elengedhetetlen.
Automatizálás nyelvi modellel
A manuális kódolás helyett használhatunk modern nyelvi modelleket a folyamat felgyorsítására. Két promptot írunk: egyet a detektálásra, egyet a törlésre.
1. Prompt a detektáláshoz
Ez az utasítás betölti az adatokat, elvégzi a tisztítást (dollárjelek törlése), és lefuttatja mindhárom fenti módszert. A kimenet nem a teljes adatbázis lesz, hanem CSV fájlok a kiugró értékek indexeivel.
Másold be ezt a promptot a modellnek, miután csatoltad az adatfájlt:
Prompt: You are a data analysis assistant. I have attached a dataset. Your task is to detect outliers using three methods: Standard Deviation, IQR, and Percentile.
Follow these steps:
- Load the attached dataset and remove both the „$” sign and any comma separators („,”) from financial columns, then convert them to numeric.
- Handle missing values by removing rows with NA in the numeric columns we analyze.
- Apply the three methods to the financial columns:
- Standard Deviation Method: flag values outside mean +/- 3 * std
- IQR Method: flag values outside Q1 – 1.5 * IQR and Q3 + 1.5 * IQR
- Percentile Method: use the 1st and 99th percentiles as cutoffs
- Instead of listing all results for each column, compute and output only:
- the total number of outliers detected across all financial columns for each method
- the average number of outliers per column for each method
Additionally, save the row indices of the detected outliers into three separate CSV files:
- sd_outlier_indices.csv
- iqr_outlier_indices.csv
- percentile_outlier_indices.csv
Output only the summary counts and save the indices to CSV.
financial_columns = [„ipa_funding”, „ma_premium”, „ma_risk_score”, „mbr_with_rx_rebates”,”partd_premium”, „pcp_cap”, „pcp_ffs”, „plan_premium”, „prof”,”reinsurance”, „risk_score_partd”, „rx”, „rx_rebates”,”rx_with_rebates”, „rx_without_rebates”, „spec_cap”]
A modell válaszként generál három letölthető CSV fájlt. Ezek tartalmazzák a törlendő sorok azonosítóit.
2. Prompt a törléshez
A következő lépés a tisztítás végrehajtása. Válaszd ki az egyik módszert (pl. a Standard Deviation eredményét), és töltsd vissza a modellnek az sd_outlier_indices.csv fájlt.
Használd ezt a promptot:
Prompt:You are a data analysis assistant. I have attached a dataset along with a CSV which includes indices which are outliers.
Your task is to remove these outliers and return a clean version of the dataset.
- Load the dataset.
- Remove all given outliers using the given indices.
- Confirm how many values were removed.
- Return the cleaned dataset.
Eredmények ellenőrzése
A folyamat végén ellenőriznünk kell, hogy valóban megtörtént-e a tisztítás. Töltsük le a tisztított adatbázist (cleaned_dataset.csv), és futtassuk le ezt a Python ellenőrző kódot:
original = pd.read_csv('sfr_test.csv')
cleaned = pd.read_csv('cleaned_dataset.csv')
print("Eredeti méret:", original.shape)
print("Tisztított méret:", cleaned.shape)
print("Eltávolított sorok:", original.shape[0] - cleaned.shape[0])
A teszt során láthatjuk, hogy a módszer 791 kiugró értéket távolított el sikeresen.
Az adatelemzés minősége mindig az adatok tisztaságán múlik. Ezekkel a kódokkal és promptokkal percek alatt, hatékonyan végezhető el a kiugró értékek kezelése.



