Adatelemzés - a szervezet adatvagyonának hasznosítása

A honlap az általam alkalmazott adatelemzési munkafolyamatot, annak matematikai, programozási és módszertani alapjait mutatja be. Az egyes fejezetekben bemutatom, hogyan és milyen eszközökkel válhatnak a szervezet adatai a döntéseket támogató, értékteremtő erőforrássá a közös munkában.

Teljes adatelemzési folyamat - a közös munka lépései
1. Szakmai kérdés

A megoldandó feladat, az elemzési cél és az elvárt eredmény pontos meghatározása közös szakmai egyeztetésen.

2. Adatbeszerzés és adatminőség

A szakmai folyamat egyik első lépése az adatok és adatforrások feltárása, összegyűjtése, ellenőrzése és az elemzésre való előkészítése.

3. EDA és vizualizáció

Az adatok rendezése, tisztítása és szükség szerinti kiegészítése, majd a bennük rejlő tulajdonságok, összefüggések és mintázatok vizualizálása. A cél az elemzéshez szükséges adatminőség biztosítása és a felismerések érthető bemutatása.

4. Statisztikai / ML elemzés

A szakmai kérdéshez és a helyes, értelmezhető válaszokhoz illeszkedő adatelemzési, modellezési és programozási módszerek alkalmazása.

5. Következtetések és kommunikáció

Az eredmények szakmai és szervezeti bemutatása, közös értelmezése, a projekt lezárása és a lehetséges következő projektek meghatározása.

6. Portfólióprojekt

A mikroprojekt során egyeztetett módon a teljes elemzésről leírás készül a saját adatelemzési honlapra.
Kizárólag a mikroprojektekre érvényes lépés.

Az adatelemzői munka szakmai folyamata és eszköztára
Matematikai és programozási alapok
Adatelemzés matematikája
LA – Lineáris algebra

A lineáris algebra az adatelemzés és a gépi tanulás egyik matematikai alapja: vektorokkal, mátrixokkal, lineáris transzformációkkal és ezek geometriai jelentésével foglalkozunk.

A lineáris algebra az adatelemzés egyik fontos matematikai alapja: segítségével az adatokat vektorokkal és mátrixokkal írhatjuk le, a közöttük lévő távolságokat, irányokat és kapcsolatokat pedig matematikailag kezelhetjük. Ebben a részben megismerjük a vektor, mátrix, skalárszorzat, vektorhossz, norma, távolság, lineáris kombináció, ortogonalitás és mátrixműveletek fogalmait, valamint azt, hogyan kapcsolódnak ezek az adatelemzés gyakorlati feladataihoz.

A vektort tekinthetjük egy adatpont matematikai reprezentációjának. Egy n tulajdonságból álló megfigyelés például felírható így:

x = (x₁, x₂, …, xₙ)

Két vektor skalárszorzata:

x · y = Σᵢ₌₁ⁿ xᵢ yᵢ

A skalárszorzat segítségével nemcsak vektorok műveleteit végezhetjük el, hanem az irányuk és hasonlóságuk is vizsgálható. A vektor hossza, vagyis euklideszi normája:

‖x‖₂ = √(Σᵢ₌₁ⁿ xᵢ²)

A két adatpont közötti euklideszi távolság:

d(x, y) = ‖x − y‖₂

Ezek az egyszerűnek tűnő matematikai fogalmak közvetlenül megjelennek a későbbi adatelemzési módszerekben. A KNN esetében például az adatpontok közötti távolság alapján keresünk hasonló megfigyeléseket, a K-means esetében pedig a klaszterközéppontokhoz viszonyított távolság határozza meg a csoportosítást. A részletes KNN- és K-means-módszertan később, a gépi tanulás, illetve a klaszterezés fejezetében jelenik meg.

Fontos fogalom a vektor normalizálása is. L2-normalizálás esetén például:

x′ = x / ‖x‖₂

Így a vektor hossza 1 lesz, miközben az iránya nem változik. Ez különösen akkor lehet hasznos, amikor az adatok nagysága helyett inkább a mintázat vagy az irány hasonlósága érdekel bennünket; a változók skálázásának és standardizálásának részletes tárgyalása azonban később, az adat-előkészítésnél és a gépi tanulásnál kap helyet.

A mátrixok segítségével egy teljes adatállományt is egységes matematikai formában írhatunk le:

X = [xᵢⱼ]ₙ×ₚ

Ez az ábrázolás már közvetlen kapcsolatot teremt a lineáris algebra és a statisztikai modellezés között. A lineáris regresszió mátrixos alakja – ha az X mátrix tartalmazza a konstans tag oszlopát – például:

ŷ = Xβ

Teljes oszloprangú X mátrix esetén a legkisebb négyzetek módszerének klasszikus zárt alakú megoldása:

β̂ = (XᵀX)⁻¹Xᵀy

Korreláció és kovariancia

Megvizsgáljuk, hogyan mérhető két változó együttmozgása, és mit jelent a kovariancia, illetve a korreláció.

A korreláció és a kovariancia két változó együttmozgását írja le, és fontos eszköz annak vizsgálatára, hogy az egyik változó növekedése vagy csökkenése milyen kapcsolatban áll a másik változóval. A kovariancia az együttmozgás irányát és nagyságát a két változó mértékegységének szorzatában fejezi ki, míg a Pearson-korreláció ezt standardizálja, így az együttható −1 és +1 közé esik.

Két változó mintabeli kovarianciája:

Cov(X,Y) = 1/(n−1) · Σᵢ₌₁ⁿ (xᵢ−x̄)(yᵢ−ȳ)

A Pearson-féle korrelációs együttható:

r = Cov(X,Y) / (sₓ · sᵧ)

Értelmezéskor az előjel az együttmozgás irányát, az abszolút érték pedig a lineáris kapcsolat erősségét jelzi. Az r = +1 vagy r = −1 érték tökéletes pozitív, illetve negatív lineáris kapcsolatot jelez; a 0-hoz közeli Pearson-korreláció gyenge lineáris kapcsolatot jelent, de ettől még fennállhat erős, nem lineáris összefüggés. A korreláció önmagában nem bizonyít ok-okozati kapcsolatot.

Pozitív lineáris kapcsolat – pontdiagram
Korreláció: X és Y változó kapcsolata 20 40 60 80 100 20 40 60 80 100 X változó Y változó Megfigyelések Lineáris trend

A korrelációs mátrix több változó páronkénti kapcsolatát egyetlen táblázatban foglalja össze. Az EDA során ezt a gondolkodást használjuk a változók kapcsolatainak feltárására, a részletes hipotézisvizsgálat és a statisztikai következtetés pedig a későbbi statisztikai elemzési részekhez kapcsolódik.

Regresszió matematikai alapjai

A regresszió segítségével egy vagy több változó alapján próbálunk megmagyarázni vagy becsülni egy célváltozót.

A lineáris regresszió egy célváltozó és egy vagy több magyarázó változó közötti kapcsolat matematikai modellje. Az egyszerű lineáris regresszió alapgondolata, hogy az adatpontokhoz olyan egyenest keresünk, amely a lehető legjobban közelíti a megfigyelt értékeket.

Az egyszerű lineáris regresszió egyenlete:

ŷ = β₀ + β₁x

Itt β₀ a tengelymetszet, β₁ pedig azt mutatja meg, hogy x egy egységnyi változása átlagosan hogyan változtatja a becsült célváltozót. A maradék vagy reziduum:

eᵢ = yᵢ − ŷᵢ

A legkisebb négyzetek módszere azt az egyenest keresi, amely minimalizálja a négyzetes hibák összegét:

SSE = Σᵢ₌₁ⁿ (yᵢ−ŷᵢ)² → min
Reziduális diagram – a modell hibáinak vizsgálata
Reziduumok a becsült érték függvényében 20 40 60 80 100 −10 −5 0 5 10 Becsült érték Reziduum Reziduum Nullvonal

A modell hibáinak vizsgálatához reziduális diagramot is használhatunk; ez segít felismerni, hogy a maradékok véletlenszerűen oszlanak-e el, vagy valamilyen mintázat marad bennük.

Többváltozós esetben a modell mátrixos formában írható fel:

ŷ = Xβ

A regresszióhoz kapcsolódó modellillesztést, maradékelemzést, determinációs együtthatót és statisztikai feltételeket később részletesebben tárgyaljuk; itt a matematikai összefüggés és a modell logikája a lényeg.

Gépi tanulás matematikai alapjai

Összekapcsoljuk a korábbi matematikai ismereteket a gépi tanulás alapfogalmaival: tanítóadat, célváltozó, tulajdonság, modell, paraméter és predikció.

A gépi tanulás matematikai alapjainál az eddig megismert vektoros, mátrixos és statisztikai gondolkodást kapcsoljuk össze a modell tanításának fogalmával. A modell a bemeneti adatok és a célváltozó közötti kapcsolatot próbálja megtanulni úgy, hogy egy választott veszteségfüggvényt csökkentsen.

Egy általános gépi tanulási modell felírható:

ŷ = f(X; θ)

ahol θ a modell tanult paramétereinek együttese. A tanítás során egy veszteségfüggvényt minimalizálunk; regressziós példában a négyzetes hiba átlagos alakja:

MSE = 1/n · Σᵢ₌₁ⁿ (yᵢ−ŷᵢ)²

A paraméterek módosításának egyik alapötlete a gradiens szerinti lépés:

θ₍új₎ = θ₍régi₎ − η · ∇L(θ)

ahol η a tanulási ráta, ∇L(θ) pedig a veszteségfüggvény gradiensvektora. Ez azt fejezi ki, hogy a modell a veszteség csökkenésének irányába változtatja a paramétereit.

Tanulási görbe – a veszteség csökkenése
Modelltanítás: veszteség az iterációk során 10 20 30 40 50 0,0 0,25 0,50 0,75 1,00 Tanítási iteráció Veszteség (MSE) konvergencia Tanítási veszteség Alsó referencia

A gépi tanulásban a matematika egyik kulcskérdése ezért az, hogyan reprezentáljuk az adatokat, hogyan mérjük a hibát, és hogyan módosítjuk a modell paramétereit. A konkrét KNN-, K-means-, osztályozási és egyéb algoritmusok részletes működését későbbi fejezetekben bontjuk ki; itt az ezek mögött álló közös matematikai logika a fontos.

Alkalmazott programozási nyelvek adatelemzésben
Python
Python alapismeretek

Változók, adattípusok, vezérlési szerkezetek, függvények és adatszerkezetek használata.

Változók

Változóban adatokat tárolunk, amelyek értéke a program futása során megváltozhat.

vendegejszakak = 1250
Adattípusok

Az adattípus meghatározza, hogy egy értéket milyen formában kezelünk, például számként, szövegként vagy logikai értékként.

telepules = "Siófok"
Vezérlési szerkezetek

Az elágazások és ciklusok szabályozzák, hogy a program mely utasításokat és milyen sorrendben hajtsa végre.

vendegszam = 1250
if vendegszam > 1000:
    print("Magas forgalom")
Függvények

A függvény egy újrafelhasználható programegység, amely bemeneteket fogadhat és eredményt adhat vissza.

def atlag(lista):
    return sum(lista) / len(lista)
Eljárások

Az eljárás olyan újra felhasználható programegység, amely elsősorban egy műveletet hajt végre, és nem feltétlenül ad vissza értéket.

def jelentest_ir():
    print("Elemzés elkészült")
Egyszerű és összetett adatszerkezetek

Az egyszerű adatszerkezetek egy-egy értéket, az összetettek pedig több kapcsolódó értéket kezelnek rendezett vagy kulcs-érték formában.

varosok = ["Siófok", "Keszthely"]
adat = {"év": 2025, "vendég": 1250}
Egy egyszerű programozási példa

Egy elemzési feladatot kisebb, programozható lépésekre bontunk.

Ebben a példában egy egyszerű adatelemzési feladatot bontunk fel logikai programozási lépésekre: modulok importálása, változók létrehozása, számítások elvégzése és az eredmények megjelenítése.

1. lépés – Modul importálása
# A math modul egyik függvényét fogjuk használni.
import math
Eredmény: A modul betöltődött, további előkészítés nem szükséges.
2. lépés – Változók létrehozása
# Egy fiktív turisztikai helyszín adatait rögzítjük.
vendegek = 1250
vendegejszakak = 2875
napok = 365
Eredmény: Három bemeneti változó áll rendelkezésre a további számításhoz.
3. lépés – Számítások
# Kiszámítjuk az egy vendégre jutó átlagos vendégéjszakát.
atlag_vendegejszaka = vendegejszakak / vendegek

# Kiszámítunk egy egyszerű éves napi átlagot.
napi_atlag = vendegek / napok
Eredmény: Az átlagos vendégéjszakák száma 2,3; a napi átlagos vendégszám körülbelül 3,42.
4. lépés – Eredmények megjelenítése
# Az eredményeket jól olvasható formában jelenítjük meg.
print("Átlagos vendégéjszaka:", round(atlag_vendegejszaka, 2))
print("Napi átlagos vendégszám:", round(napi_atlag, 2))
Kimenet:
Átlagos vendégéjszaka: 2.3
Napi átlagos vendégszám: 3.42

Ez a szerkezet jól mutatja az adatelemzési programozási gondolkodás lényegét: a feladatot először részekre bontjuk, majd minden lépéshez külön, ellenőrizhető kódot és eredményt rendelünk. Jupyter Notebookban ugyanez a logika külön cellákban jelenik meg, így a magyarázat, a kód és a futási eredmény egymás mellett követhető.

Adatok vizualizációja

Egy látványos, 3D-szerű pontdiagram segítségével több változó együttes kapcsolatát tesszük áttekinthetővé.

Pythonban ugyanazt a fiktív elemzési eredményt mutatjuk be, mint a másik programozási nyelv példájában, így a két eszköztár később közvetlenül összehasonlítható.

Python – 3D adatok vizualizációja
Turisztikai teljesítmény – háromdimenziós pontdiagram 0 1 000 2 000 3 000 4 000 5 000 500 1 000 1 500 2 000 0 25 50 75 100 Vendégéjszakák (db) Látogatók (db) Online láthatóság index A B C D E Jelmagyarázat Fiktív bemutatóhely Fő irány / trend Pontméret = relatív jelentőség Fiktív adatok – a diagram célja a 3D vizualizációs lehetőség bemutatása.
ax.scatter(x, y, z, s=meret, alpha=0.8)
R
R alapismeretek

Az R egy statisztikai és adatelemzési célokra széles körben használt programozási nyelv, amely különösen erős a statisztikai számításokban és az adatvizualizációban.

Változók

R-ben az értékadással változókat hozunk létre, amelyekben számokat, szövegeket vagy más adatokat tárolhatunk.

vendegejszakak <- 1250
Adattípusok

Az R többek között numerikus, karakteres, logikai és faktor típusú adatokat kezel.

telepules <- "Siófok"
Vezérlési szerkezetek

Az elágazások és ciklusok szabályozzák, hogy az R-program milyen feltételek mellett és hányszor hajtson végre egy utasítást.

vendegszam <- 1250
if (vendegszam > 1000) {
  print("Magas forgalom")
}
Függvények

Az R-ben függvényeket definiálhatunk, amelyek bemeneteket fogadnak és egy eredményt adnak vissza.

atlag <- function(x) {
  mean(x)
}
Eljárások

R-ben önálló műveleteket végző függvényeket is használhatunk olyan esetekben, amikor elsődlegesen egy művelet végrehajtása a cél.

jelentest_ir <- function() {
  print("Elemzés elkészült")
}
Egyszerű és összetett adatszerkezetek

Az R vektorokat, listákat, mátrixokat, adatkereteket és egyéb összetett adatszerkezeteket kínál az adatok kezelésére.

varosok <- c("Siófok", "Keszthely")
adat <- list(év = 2025, vendeg = 1250)
Egy egyszerű programozási példa

Egy rövid, logikai lépésekre bontott R-program bemutatása az adatok beolvasásától a számításokon át az eredmények megjelenítéséig.

Ebben a példában egy egyszerű adatelemzési feladatot bontunk fel logikai R-programozási lépésekre: csomag betöltése, változók létrehozása, számítások elvégzése és az eredmények megjelenítése.

1. lépés – Csomag betöltése
# A számításokhoz az alap R környezet eszközeit használjuk.
# Külső csomagra ebben az egyszerű példában nincs szükség.
library(stats)
Eredmény: A statisztikai függvényeket biztosító csomag elérhető.
2. lépés – Változók létrehozása
# Egy fiktív turisztikai helyszín adatait rögzítjük.
vendegek <- 1250
vendegejszakak <- 2875
napok <- 365
Eredmény: Három bemeneti változó áll rendelkezésre a további számításhoz.
3. lépés – Számítások
# Kiszámítjuk az egy vendégre jutó átlagos vendégéjszakát.
atlag_vendegejszaka <- vendegejszakak / vendegek

# Kiszámítjuk az éves napi átlagos vendégszámot.
napi_atlag <- vendegek / napok
Eredmény: Az átlagos vendégéjszakák száma 2,3; a napi átlagos vendégszám körülbelül 3,42.
4. lépés – Eredmények megjelenítése
# Az eredményeket formázott szövegként jelenítjük meg.
cat("Átlagos vendégéjszaka:", round(atlag_vendegejszaka, 2), "\n")
cat("Napi átlagos vendégszám:", round(napi_atlag, 2), "\n")
Kimenet:
Átlagos vendégéjszaka: 2.30
Napi átlagos vendégszám: 3.42

Az R-ben is ugyanaz az alapvető elemzői gondolkodás jelenik meg: a feladatot logikai lépésekre bontjuk, minden lépéshez külön kódot rendelünk, majd ellenőrizzük és megjelenítjük az eredményt. Jupyter Notebook környezetben ez a folyamat cellákra bontható, miközben R Markdown vagy más R-alapú notebook-megoldás is használható hasonló célra.

Adatok vizualizációja

Egy buborékdiagram segítségével több változó együttes kapcsolatát tesszük áttekinthetővé.

Az R példában egy színes buborékdiagramot mutatunk be. A szín a bemutatóhely típusát, a buborék mérete a látogatottság relatív nagyságát, a vízszintes tengely pedig a vendégéjszakák számát jelöli.

R – színes buborékdiagram, kategóriák szerinti kiemeléssel
Turisztikai teljesítmény és bemutatóhely-típusok 0 1 000 2 000 3 000 4 000 5 000 0 500 1 000 1 500 2 000 Vendégéjszakák (db) Látogatók (db) A B C D E Jelmagyarázat Természeti Kulturális Aktív turizmus Vegyes profil Nagyobb pont = nagyobb relatív látogatottság Olvasási példa A szín kategóriát, a méret relatív jelentőséget kódol. A pont helye két mérőszámot jelez. Fiktív adatok – a színeknek itt elemzési jelentése van.
# Önállóan futtatható, fiktív példa a buborékdiagramhoz:
library(plotly)
adat_abra <- data.frame(
  vendegejszaka = c(900, 1300, 2100, 2850, 3400),
  latogato = c(600, 850, 1250, 1550, 1800),
  tipus = c("Természeti", "Kulturális", "Aktív turizmus", "Vegyes profil", "Kulturális")
)
plot_ly(adat_abra, x = ~vendegejszaka, y = ~latogato,
        size = ~latogato, color = ~tipus,
        type = "scatter", mode = "markers")
Feltáró és gyakorlati adatelemzés
EDA: Exploratory Data Analysis - feltáró adatelemzés
Pandas – az adatok kezelése

A Pandas segítségével megtanuljuk az Excel-, CSV- és egyéb strukturált adatok beolvasását, tisztítását, átalakítását és elemzésre való előkészítését.

1. Fogalmi háttér

A Pandas a Python egyik legfontosabb adatelemzési könyvtára, amely táblázatos adatok kezelésére szolgál. Központi objektuma a DataFrame, amely sorokból és oszlopokból álló adatstruktúra, míg a Series egyetlen, indexelt adatsort reprezentál. A leggyakoribb műveletek közé tartozik az adatok beolvasása, kiválasztása, szűrése, rendezése, új változók képzése és a hiányzó értékek kezelése.

A Pandas különösen hasznos akkor, amikor Excel- vagy CSV-állományból szeretnénk elemzésre alkalmas adathalmazt létrehozni.

2. Rövid példaprogram
Adattábla létrehozása és szűrése
import pandas as pd

# Fiktív adatok létrehozása.
adat = pd.DataFrame({
    "telepules": ["Siófok", "Keszthely", "Balatonfüred"],
    "vendegek": [1250, 980, 1430]
})

# Csak az 1000 főnél több vendéggel rendelkező helyszíneket választjuk ki.
eredmeny = adat[adat["vendegek"] > 1000]

print(eredmeny)
Kimenet:
Siófok – 1250
Balatonfüred – 1430
Adatállomány megismerése

A változók, adatszerkezet és az alapvető statisztikai jellemzők feltárása.

1. Fogalmi háttér

Az EDA első lépése az adatállomány szerkezetének és tartalmának megismerése. Megvizsgáljuk a sorok és oszlopok számát (shape), az oszlopneveket és adattípusokat (dtypes), az első néhány rekordot (head), valamint az alapvető leíró statisztikákat (describe).

Ezzel gyorsan kiderülhet például, hogy egy számnak szánt oszlop szövegként került-e beolvasásra, illetve hogy milyen tartományban mozognak az értékek.

2. Rövid példaprogram
Az adatállomány első vizsgálata
import pandas as pd

adat = pd.DataFrame({
    "ev": [2022, 2023, 2024],
    "latogatottsag": [820, 940, 1110]
})

print(adat.shape)
print(adat.dtypes)
print(adat.describe())
Kimenet – röviden:
Méret: 3 sor × 2 oszlop
Az ev és a latogatottsag numerikus változók.
A leíró statisztika megmutatja az átlagot, minimumot, maximumot és a kvartiliseket.
Hiányzó és hibás adatok

Hiányzó, nulla, negatív vagy egyéb problémás értékek azonosítása és kezelése.

1. Fogalmi háttér

Az adatelemzés egyik leggyakoribb problémája a hiányzó érték, amelyet Pandasban többek között az isna() és notna() segítségével azonosíthatunk. A hibás értékek felismerésénél vizsgálhatjuk az érvénytelen tartományokat, a nullaértékeket és az olyan, szakmailag nem értelmezhető értékeket is, mint egy látogatószámban szereplő negatív szám.

A hiányzó vagy hibás adatok kezelése történhet például törléssel, pótlással vagy külön jelöléssel; a módszer megválasztása mindig az adat jelentésétől függ.

2. Rövid példaprogram
Hiányzó és negatív értékek keresése
import pandas as pd

adat = pd.DataFrame({
    "helyszin": ["A", "B", "C", "D"],
    "latogato": [1200, None, -50, 980]
})

hianyzo = adat["latogato"].isna().sum()
negativ = (adat["latogato"] < 0).sum()

# A negatív értékeket hiányzóként kezeljük.
adat.loc[adat["latogato"] < 0, "latogato"] = None

print("Hiányzó értékek:", hianyzo)
print("Negatív értékek:", negativ)
print(adat)
Kimenet:
Hiányzó értékek: 1
Negatív értékek: 1
A C helyszín hibás értéke hiányzó értékké alakult.
Kiugró értékek

Outlierek felismerése és értelmezése például IQR-alapú módszerrel.

1. Fogalmi háttér

A kiugró érték olyan megfigyelés, amely jelentősen eltér az adatok többségétől. Az egyik gyakori módszer az IQR (interkvartilis terjedelem) használata: az első és harmadik kvartilis különbsége adja az IQR-t, a tipikus határokat pedig a Q1 − 1,5×IQR és Q3 + 1,5×IQR képletek adják.

Fontos, hogy a kiugró érték nem automatikusan hibás adat: lehet adatbevitelből származó hiba, de lehet valós és szakmailag érdekes jelenség is.

2. Rövid példaprogram
IQR-alapú kiugróérték-keresés
import pandas as pd

adat = pd.Series([80, 95, 100, 105, 110, 115, 120, 130, 135, 400])

q1 = adat.quantile(0.25)
q3 = adat.quantile(0.75)
iqr = q3 - q1

also_hatar = q1 - 1.5 * iqr
felso_hatar = q3 + 1.5 * iqr

kiugro = adat[(adat < also_hatar) | (adat > felso_hatar)]

print("IQR:", iqr)
print("Kiugró értékek:", kiugro.tolist())
Kimenet – példa:
IQR: 28.75
Kiugró értékek: [400]
Összefüggések feltárása

Változók közötti kapcsolatok keresése statisztikai és vizuális módszerekkel.

1. Fogalmi háttér

Az EDA során nemcsak az egyes változókat, hanem azok egymáshoz való viszonyát is vizsgáljuk. Két változó kapcsolatának gyors feltárására használható például a korrelációs együttható, amely megmutatja a lineáris együttjárás irányát és erősségét; a kapcsolat vizuálisan pontdiagrammal is ellenőrizhető.

Az összefüggés feltárása segít kérdéseket megfogalmazni a további statisztikai elemzéshez, de önmagában nem bizonyít ok-okozati kapcsolatot.

2. Rövid példaprogram
Korreláció kiszámítása
import pandas as pd

adat = pd.DataFrame({
    "marketing": [10, 20, 30, 40, 50],
    "latogatottsag": [420, 510, 620, 710, 830]
})

r = adat["marketing"].corr(adat["latogatottsag"])

print("Pearson-korreláció:", round(r, 2))
Kimenet:
Pearson-korreláció: 1.00
A fiktív adatokban nagyon erős pozitív lineáris együttjárás látható.
Csoportosítás és aggregálás

Az adatok csoportosítása, összesítése és csoportszintű mutatók készítése az EDA során.

1. Fogalmi háttér

A csoportosítás során egy kategóriaváltozó alapján részhalmazokra bontjuk az adatokat, majd az egyes csoportokra összesítő műveleteket végzünk. Pandasban ennek alapvető eszköze a groupby(), amelyhez olyan aggregáló függvények kapcsolhatók, mint a sum(), mean(), count(), min() és max().

Az aggregálás segítségével például régiónként, évenként vagy kategóriánként készíthetünk összesítéseket, amelyek már közvetlenül felhasználhatók összehasonlításra és további elemzésre.

2. Rövid példaprogram
Csoportok és átlagok képzése
import pandas as pd

adat = pd.DataFrame({
    "regio": ["Észak", "Észak", "Dél", "Dél"],
    "vendegek": [800, 1000, 1200, 1400]
})

eredmeny = adat.groupby("regio")["vendegek"].agg(
    osszes_vendeg="sum",
    atlag_vendeg="mean",
    esetszam="count"
)

print(eredmeny)
Kimenet – példa:
Észak: összesen 1800 vendég, átlag 900, 2 megfigyelés.
Dél: összesen 2600 vendég, átlag 1300, 2 megfigyelés.
DV: Data Visualization - adatvizualizáció
Eloszlások

Hisztogramok és egyéb diagramok segítségével vizsgáljuk az adatok eloszlását.

1. Fogalmi háttér

Az eloszlás azt mutatja meg, hogy egy változó értékei milyen gyakorisággal fordulnak elő és milyen tartományban helyezkednek el. Az EDA-ban gyakori eszköz a hisztogram, amely intervallumokra (bins) bontja az értékeket; mellette az átlag, medián, módusz és a szóródás segít az eloszlás alakjának értelmezésében.

A hisztogramon megfigyelhető lehet például a szimmetria, ferdeség, több csúcs vagy szélsőséges értékek jelenléte. A diagram célja nem pusztán a „szép megjelenítés”, hanem annak felismerése, milyen statisztikai sajátosságokra kell később figyelni.

2. Rövid példaprogram
Hisztogram készítése Matplotlib segítségével
import matplotlib.pyplot as plt

latogatok = [120, 145, 150, 155, 160, 175, 180, 185,
             190, 195, 205, 210, 215, 220, 230, 245, 260, 410]

# Az értékeket 6 intervallumra bontjuk.
plt.hist(latogatok, bins=6)

plt.title("Látogatószám eloszlása")
plt.xlabel("Látogatók száma")
plt.ylabel("Gyakoriság")
plt.show()
Eredmény: A diagramon a legtöbb megfigyelés a 140–260 közötti tartományban koncentrálódik, miközben a 410-es érték elkülönül a fő tömegtől.
Hisztogram – látogatószám eloszlása
Látogatószám eloszlása 100 150 200 250 300 350 400+ 0 2 4 6 8 10 Látogatók száma Gyakoriság
Összehasonlítások

Oszlop- és boxplotokkal mutatjuk be a csoportok közötti különbségeket.

1. Fogalmi háttér

Az összehasonlítás során arra keressük a választ, hogy két vagy több csoport értékei miben különböznek egymástól. A csoportosított oszlopdiagram különösen alkalmas arra, hogy azonos időszakok vagy azonos kategóriák mellett több csoport értékeit egymás mellett mutassa.

Az összehasonlító diagramoknál fontos a közös skála, a jól értelmezhető kategóriafelirat és a jelmagyarázat. A cél annak gyors felismerése, hogy mely csoportok térnek el egymástól, és hol látható tartós vagy időszakos különbség.

2. Rövid példaprogram
Csoportok összehasonlítása
import matplotlib.pyplot as plt
import numpy as np

evek = np.array([2022, 2023, 2024])
bnpi = np.array([820, 940, 1110])
dinpi = np.array([760, 900, 980])

x = np.arange(len(evek))
szelesseg = 0.36

# A két csoportot egymás mellé rajzoljuk.
plt.bar(x - szelesseg/2, bnpi, width=szelesseg, label="BNPI")
plt.bar(x + szelesseg/2, dinpi, width=szelesseg, label="DINPI")

plt.xticks(x, evek)
plt.title("Látogatószám összehasonlítása")
plt.xlabel("Év")
plt.ylabel("Látogatók száma")
plt.legend()
plt.show()
Eredmény: Mindhárom évben a BNPI értéke magasabb, ugyanakkor a két csoport közötti különbség évenként eltérő nagyságú.
Csoportosított oszlopdiagram
Látogatószám összehasonlítása 2022 2023 2024 0 300 600 900 1 200 Év Látogatók száma BNPI DINPI
Összefüggések

Scatter plotokkal és más vizualizációkkal tárjuk fel a változók kapcsolatát.

1. Fogalmi háttér

Az összefüggések vizsgálatánál több változó együttes mozgását szeretnénk láthatóvá tenni. A buborékdiagram erre azért érdekes, mert egy pont vízszintes helye, függőleges helye és mérete egyszerre több információt is képes kódolni, míg a különböző jelölések további kategóriát hordozhatnak.

Ez a fajta vizualizáció jó eszköz az első feltáró lépésben, mert gyorsan megmutathatja, hogy van-e valamilyen irány, csoportosulás vagy szélsőséges megfigyelés. A vizuális kapcsolatot később statisztikai mutatókkal és megfelelő tesztekkel lehet tovább vizsgálni.

2. Rövid példaprogram
Három változó együttes megjelenítése
import matplotlib.pyplot as plt

vendeg = [600, 850, 1000, 1250, 1550, 1800]
ejszaka = [900, 1300, 1650, 2100, 2850, 3400]
online_index = [18, 25, 32, 48, 58, 74]

# A pont mérete a vendégek számát, a pozíció két másik változót jelez.
plt.scatter(ejszaka, online_index, s=vendeg, alpha=0.7)

plt.title("Vendégéjszakák és online láthatóság")
plt.xlabel("Vendégéjszakák")
plt.ylabel("Online láthatóság index")
plt.grid(alpha=0.2)
plt.show()
Eredmény: A fiktív adatokban a nagyobb vendégéjszakaszámhoz magasabb online láthatósági index társul, miközben a pontméret a vendégszámot is érzékelteti.
Buborékdiagram – több változó együttes vizsgálata
Vendégéjszakák és online láthatóság A B C D E F 500 1 500 2 500 3 500 4 500 5 500 0 20 40 60 80 100 Vendégéjszakák Online láthatóság index Bemutatóhely Nagyobb pont = több vendég
Adatvizualizáció értelmezése

A megfelelő diagram kiválasztása és az eredmények korrekt kommunikációja.

1. Fogalmi háttér

Egy diagram értelmezése során nem elég azt látni, hogy „nő” vagy „csökken” valami: ellenőrizni kell a tengelyeket, skálát, mértékegységet, jelmagyarázatot, időszakot és a vizuális kódolást is. Egy rosszul megválasztott tengely vagy színtartomány akár ugyanazokat az adatokat is félrevezető módon jelenítheti meg.

A hőtérkép (heatmap) jó példa arra, hogyan lehet egy nagyobb táblázat sok értékét egyszerre áttekinthetővé tenni. Ilyenkor a cellák intenzitása jelzi az érték nagyságát, a sor- és oszlopfeliratok pedig megadják az összehasonlítás dimenzióit.

2. Rövid példaprogram
Korrelációs mátrix hőtérképes megjelenítése
import pandas as pd
import matplotlib.pyplot as plt

adat = pd.DataFrame({
    "vendegek": [800, 950, 1100, 1300, 1500],
    "ejszakak": [1200, 1450, 1750, 2150, 2500],
    "marketing": [10, 16, 21, 29, 35],
    "online_index": [22, 29, 37, 48, 59]
})

korrelacio = adat.corr(numeric_only=True)

plt.imshow(korrelacio)
plt.xticks(range(4), korrelacio.columns, rotation=45, ha="right")
plt.yticks(range(4), korrelacio.columns)
plt.title("Korrelációs mátrix")
plt.colorbar(label="Korreláció")
plt.show()
Eredmény: A hőtérképen a változók közötti korrelációk erőssége egyetlen mátrixban áttekinthető; a főátló értékei 1-et jeleznek, mert minden változó saját magával tökéletesen együttjár.
Hőtérkép – korrelációs mátrix
Korrelációs mátrix 1.00 0.96 0.91 0.84 0.96 1.00 0.94 0.82 0.91 0.94 1.00 0.88 0.84 0.82 0.88 1.00 vendégek éjszakák marketing online vendégek éjszakák marketing online Jelmagyarázat gyengébb közepes erősebb kapcsolat A fiktív adatokban minden változó pozitív kapcsolatot mutat a többivel.
Statisztikai elemzés és hipotézisvizsgálat
Leíró statisztika

Átlag, medián, szórás, kvartilisek és egyéb összefoglaló mutatók.

1. Fogalmi háttér és fontosabb fogalmak

A leíró statisztika feladata, hogy az adatállományt néhány jól értelmezhető számmal és ábrával összefoglalja. A legfontosabb mutatók közé tartozik az átlag, medián, módusz, minimum, maximum, kvartilisek, terjedelem, variancia és szórás; ezek együtt írják le az adatok középértékét és szóródását.

Az átlag érzékenyebb a szélsőséges értékekre, a medián a rendezett adatok középső értéke, a kvartilisek pedig az eloszlás különböző részeit írják le. A szórás azt jelzi, hogy az adatok tipikusan mennyire térnek el az átlagtól.

2. Rövid példaprogram
Leíró mutatók kiszámítása
import pandas as pd

latogatok = pd.Series([820, 900, 940, 980, 1020, 1110, 1180])

print("Átlag:", round(latogatok.mean(), 1))
print("Medián:", latogatok.median())
print("Szórás:", round(latogatok.std(), 1))
print("Q1:", latogatok.quantile(0.25))
print("Q3:", latogatok.quantile(0.75))
Eredmény:
Átlag: 992,9
Medián: 980
Mintaszórás: 123,1
Q1: 920; Q3: 1 065
A Q1 és Q3 alapján a középső 50% megfigyelés jól körülhatárolható.
Boxplot – középérték és szóródás
Látogatószám – eloszlás főbb statisztikai mutatói 700 800 900 1 000 1 100 1 200 Látogatók száma 0 2 4 6 8 Q1 Medián Q3 IQR / középső 50%
Hipotézisvizsgálat

Statisztikai állítások vizsgálata formális tesztekkel.

1. Fogalmi háttér és fontosabb fogalmak

A hipotézisvizsgálat segítségével egy mintából szeretnénk eldönteni, hogy az adataink mennyire egyeztethetők össze egy előre megfogalmazott állítással. A nullhipotézis (H₀) rendszerint a nincs különbség / nincs hatás állítást képviseli, az alternatív hipotézis (H₁) pedig a vizsgált eltérést.

A döntés egyik központi eleme a p-érték, amely azt fejezi ki, mennyire meglepő lenne a megfigyelt eredmény akkor, ha a nullhipotézis igaz lenne. A p-értéket mindig az előre rögzített szignifikanciaszinttel (α) együtt kell értelmezni; önmagában nem méri a hatás nagyságát.

2. Rövid példaprogram
Két csoport átlagának vizsgálata
from scipy.stats import ttest_ind

csoport_a = [820, 850, 900, 910, 940]
csoport_b = [980, 1010, 1030, 1060, 1090]

t, p = ttest_ind(csoport_a, csoport_b)

print("t-érték:", round(t, 2))
print("p-érték:", round(p, 4))

# Példánkban α = 0,05.
print("Döntés:", "szignifikáns eltérés" if p < 0.05
      else "nincs elegendő bizonyíték eltérésre")
Eredmény – fiktív példa:
p-érték: körülbelül 0,0008 → 0,05-ös szinten a két csoport közötti különbség statisztikailag szignifikáns.
Átlagok és konfidenciaintervallumok
Két csoport becsült átlaga 800 850 900 950 1 000 Átlagos látogatószám A B átlag A átlag B Csoport A Csoport B
Nemparaméteres módszerek

Például a Kruskal–Wallis-teszt használata megfelelő helyzetekben.

1. Fogalmi háttér és fontosabb fogalmak

A nemparaméteres statisztikai módszerek olyan eljárások, amelyek kevésbé támaszkodnak egy adott eloszlás paraméteres feltételeire. Különösen hasznosak lehetnek kis minták, ordinális adatok, ferde eloszlások vagy erős kiugró értékek esetén.

A Mann–Whitney-próba két független csoport összehasonlítására, a Wilcoxon-próba páros mérésekre, a Kruskal–Wallis-próba pedig kettőnél több független csoport összevetésére használható. A rangokon alapuló eljárásoknál a medián és az eloszlások alakja fontosabb lehet, mint az átlag.

2. Rövid példaprogram
Kruskal–Wallis-próba három csoport esetén
from scipy.stats import kruskal

a = [820, 850, 870, 910, 930]
b = [980, 1000, 1010, 1040, 1060]
c = [1150, 1160, 1180, 1210, 1240]

h, p = kruskal(a, b, c)

print("H-érték:", round(h, 2))
print("p-érték:", round(p, 4))
Eredmény – fiktív példa:
p-érték: körülbelül 0,0019 → 0,05-ös szinten a három csoport között statisztikailag szignifikáns különbség mutatható ki.
Violin plot – csoportok eloszlása
Három csoport eloszlásának összehasonlítása 700 850 1 000 1 150 1 300 Látogatószám 0 A B C Medián / középérték Fiktív megfigyelés
Klaszterezés és szegmentáció
Klaszterezési logika

Hasonló megfigyelések automatikus csoportosítása előre meghatározott kategóriák nélkül.

1. Fogalmi háttér és fontosabb fogalmak

A klaszterezés nem felügyelt tanulási módszer, amelynek célja a hasonló megfigyelések csoportokba rendezése. A K-means algoritmusban előre megadjuk a klaszterek számát (k), majd az algoritmus ismételten klaszterközéppontokat választ, pontokat rendel hozzájuk, és újraszámolja a középpontokat.

A csoportosításnál kulcsfontosságú a távolság fogalma, gyakori választás az euklideszi távolság. A klaszterezés eredménye akkor értelmezhető jól, ha a változók skálája és a klaszterek szakmai jelentése is megfelelően mérlegelve van.

2. Rövid példaprogram
K-means három csoporttal
from sklearn.cluster import KMeans
import pandas as pd

adat = pd.DataFrame({
    "vendegek": [220, 250, 280, 700, 760, 800, 1450, 1520, 1600],
    "ejszakak": [320, 360, 410, 980, 1050, 1120, 2100, 2250, 2400]
})

model = KMeans(n_clusters=3, random_state=42, n_init=10)
adat["klaszter"] = model.fit_predict(adat)

print(adat)
Eredmény: A modell három csoportba rendezi a helyszíneket: alacsony, közepes és magas forgalmú pontok köré szerveződő klaszterek jönnek létre.
K-means – klaszterek 2D térben
Klaszterek és klaszterközéppontok 0 500 1 000 1 500 2 000 Vendégéjszakák 0 500 1 000 1 500 2 000 Látogatók Klaszter 1 Klaszter 2 Klaszter 3
Klaszterek értelmezése

A létrejött csoportok jellemzőinek és szakmai jelentésének feltárása.

1. Fogalmi háttér és fontosabb fogalmak

A klaszterezés eredménye önmagában még nem „kész válasz”: az egyes klasztereket profilozni és értelmezni kell. Megnézzük, hogy az egyes csoportokban milyen jellemző értékek, átlagok, mediánok és szélsőértékek jelennek meg, és ezek megfelelnek-e a szakmai várakozásoknak.

Fontos fogalom a klaszterközéppont, a klaszterek közötti eltérés, valamint a csoportokon belüli homogenitás. A jó értelmezés összekapcsolja a számított klasztert a valós folyamatokkal, ezért a klaszterezés után mindig szükséges egy szakmai validációs lépés.

2. Rövid példaprogram
Klaszterprofilok összehasonlítása
profil = adat.groupby("klaszter")[["vendegek", "ejszakak"]].mean()

print(profil.round(0))

# A klaszterek közötti különbséget átlagértékekkel írjuk le.
for idx, sor in profil.iterrows():
    print(idx, round(sor["vendegek"]), round(sor["ejszakak"]))
Eredmény: Az egyik klaszter alacsony, a másik közepes, a harmadik magas átlagos vendég- és vendégéjszaka értékeket mutat; a klaszterek így szakmai profilokká alakíthatók.
Radar diagram – klaszterprofilok összehasonlítása
Klaszterprofilok – normalizált mutatók Látogatottság Vendégéjszaka Online jelenlét Szolgáltatások Elérhetőség Profil 1 Profil 2 Profil 3
Time Series - idősorelemzés
Trend

Hosszabb távú növekedési vagy csökkenési folyamatok felismerése.

1. Fogalmi háttér és fontosabb fogalmak

Az idősor olyan megfigyelések sorozata, amelyeknél a megfigyelési időpontok sorrendje fontos információt hordoz. A trend a hosszabb távú irányt, az időszakos ingadozás a rövidebb távú eltéréseket írja le.

Trendvizsgálatkor azt keressük, hogy az értékek tartósan növekednek, csökkennek vagy nagyjából stabilak-e. A trend nem azonos minden egyes időpont változásával: egy növekvő hosszú távú folyamaton belül is lehetnek átmeneti visszaesések.

2. Rövid példaprogram
Éves trend vizsgálata
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({
    "ev": [2019, 2020, 2021, 2022, 2023, 2024, 2025],
    "vendegek": [920, 610, 760, 900, 1030, 1170, 1280]
})

# Az idősort vonaldiagramon jelenítjük meg.
plt.plot(df["ev"], df["vendegek"], marker="o")
plt.title("Éves vendégszám trendje")
plt.xlabel("Év")
plt.ylabel("Vendégek")
plt.show()
Eredmény: A fiktív idősorban 2020-ban törés látható, majd 2021-től fokozatos emelkedés figyelhető meg.
Vonaldiagram – trend
Éves vendégszám trendje 2019 2020 2021 2022 2023 2024 2025 500 700 900 1 100 1 300 Év Vendégek száma Megfigyelt idősor
Szezonalitás és ciklikusság

Időszakosan ismétlődő mintázatok azonosítása.

1. Fogalmi háttér és fontosabb fogalmak

A szezonalitás rendszeresen ismétlődő időbeli mintázat, például egy havi vagy negyedéves ciklus. A ciklikusság hasonló hullámzást jelenthet, de az ismétlődés periódusa nem feltétlenül állandó vagy naptári jellegű.

Az idősorok elemzésében érdemes elkülöníteni a trend, a szezonális komponens és a véletlenszerű / szabálytalan komponens hatását. A szezonalitás felismerését segítheti a gördülő átlag, az időszakok összehasonlítása és a megfelelő vizualizáció.

2. Rövid példaprogram
Havi szezonalitás szemléltetése
import numpy as np
import matplotlib.pyplot as plt

honap = np.arange(1, 13)
forgalom = [55, 60, 72, 88, 110, 135, 150, 145, 118, 90, 68, 58]

# A havi ismétlődést vonaldiagrammal mutatjuk be.
plt.plot(honap, forgalom, marker="o")
plt.xticks(honap)
plt.title("Havi forgalom szezonális mintázata")
plt.xlabel("Hónap")
plt.ylabel("Forgalom index")
plt.show()
Eredmény: A fiktív adatokban nyáron ismétlődően magasabb, télen alacsonyabb értékek figyelhetők meg.
Területdiagram – szezonális hullámzás
Havi forgalom szezonális mintázata JanFebMár ÁprMájJún JúlAugSzept OktNovDec Hónap Forgalom index Szezonális komponens
Anomáliák idősorokban

Szokatlan időpontok és események felismerése.

1. Fogalmi háttér és fontosabb fogalmak

Az anomália olyan időpont vagy megfigyelés, amely jelentősen eltér az idősor megszokott mintázatától. Az anomáliadetektálásnál fontos különbséget tenni az adatminőségi hiba és a valódi, rendkívüli esemény között.

Az egyszerű módszerek között szerepelhet a gördülő átlaghoz vagy szóráshoz viszonyított eltérés, az IQR-alapú határ, illetve az idősor vizuális vizsgálata. Az anomália gyakran nem a végső válasz, hanem egy további szakmai vizsgálat kiindulópontja.

2. Rövid példaprogram
Anomália kijelölése egyszerű z-score szabállyal
import pandas as pd

df = pd.DataFrame({
    "honap": range(1, 13),
    "ertek": [102, 98, 105, 110, 108, 112, 111, 109, 106, 104, 108, 190]
})

z = (df["ertek"] - df["ertek"].mean()) / df["ertek"].std()
df["anomalia"] = z.abs() > 2

print(df[df["anomalia"]])
Eredmény: A 12. hónap 190-es értéke kiugróként azonosítható, ezért szakmai szempontból külön vizsgálatot igényel.
Anomáliapontok kiemelése idősoron
Anomáliadetektálás – kiugró időpont anomália 13 57 911 12 Hónap Érték Normál idősor Detektált anomália
Gépi tanulás
Intro to Machine Learning - bevezetés a gépi tanulásba
Felügyelt tanulás

A felügyelt tanulás olyan gépi tanulási megközelítés, amelyben a modell ismert célváltozóval rendelkező tanítóadatokból tanul.

Fogalmi háttér

Felügyelt tanulásnál minden tanító megfigyeléshez tartozik egy ismert célérték. A modell feladata, hogy a bemeneti tulajdonságokból megtanulja a kapcsolatot a célváltozóval, majd ezt a kapcsolatot új, korábban nem látott megfigyelésekre is alkalmazza.

Két alapvető feladattípust különböztetünk meg. Regressziónál számszerű célváltozót becsülünk, például vendégéjszakák számát; osztályozásnál kategóriát vagy osztályt próbálunk meghatározni, például azt, hogy egy helyszín magas vagy alacsony látogatottságú-e.

A tanítás során a modell a tanítóadatok alapján paramétereket tanul. A cél nem pusztán a tanítóadatok minél pontosabb leírása, hanem az, hogy a modell új adatokon is jól működjön. Ezért különösen fontos a túlilleszkedés elkerülése.

y ≈ f(X; θ)

Itt X a bemeneti tulajdonságok, y a célváltozó, θ a tanult paraméterek, f pedig a modell.

Rövid példaprogram
Lineáris regresszió egy egyszerű példán
from sklearn.linear_model import LinearRegression

X = [[10], [20], [30], [40], [50]]
y = [120, 190, 310, 390, 510]

modell = LinearRegression()
modell.fit(X, y)

uj = [[60]]
becsles = modell.predict(uj)
print(round(becsles[0], 1))
Eredmény: A modell a korábbi megfigyelések alapján becslést ad egy új, 60-as értékű bemenetre.
Felügyelt tanulás – tanítóadat és becslés
Tanítóadatok és modellbecslés új megfigyelés Bemeneti tulajdonság Célváltozó TanítóadatÚj adat
Nem felügyelt tanulás

A nem felügyelt tanulás olyan módszerek összessége, amelyekben a modell célváltozó nélkül keres szerkezeteket, csoportokat vagy mintázatokat az adatokban.

Fogalmi háttér

Nem felügyelt tanulásnál nincs előre megadott helyes válasz vagy célváltozó. A modell az adatok belső szerkezetét próbálja feltárni. Ilyen feladat lehet a hasonló megfigyelések csoportosítása, a ritka vagy szokatlan pontok felismerése, illetve az adatok dimenziójának csökkentése.

A klaszterezés során hasonló adatpontokat közös csoportokba rendezünk. A korábban megismert K-means például távolságok és klaszterközéppontok alapján alakít ki csoportokat. Fontos, hogy a kapott klaszterek nem „készen adott” természetes kategóriák: szakmai értelmezésükhöz szükség van az adatok és a probléma ismeretére.

Rövid példaprogram
K-means klaszterezés
from sklearn.cluster import KMeans

X = [[10, 20], [12, 22], [11, 19],
     [50, 70], [52, 72], [48, 68],
     [85, 30], [88, 32], [82, 28]]

modell = KMeans(n_clusters=3, random_state=42, n_init=10)
modell.fit(X)

print(modell.labels_)
Eredmény: A modell minden megfigyeléshez hozzárendeli a három kialakított klaszter egyikét.
Nem felügyelt tanulás – klaszterek
Hasonló megfigyelések csoportosítása K1K2K3 Tulajdonság 1Tulajdonság 2
Modell és predikció

A modell a tanítóadatokból megtanult kapcsolatot alkalmazza arra, hogy új megfigyelésekhez becslést vagy osztályt rendeljen.

Fogalmi háttér

A modell egy olyan szabályrendszer vagy matematikai függvény, amely a bemeneti tulajdonságokból előállítja a kívánt kimenetet. A predikció ennek a modellnek az alkalmazása egy új megfigyelésre.

Fontos különbség van a modell tanítása és használata között. Tanításkor a modell a tanítóadatokból meghatározza a paramétereit; predikciókor ezeket a már megtanult paramétereket használjuk. A jó modell egyik legfontosabb jellemzője az általánosíthatóság: új adatokon is értelmezhető teljesítményt kell nyújtania.

Rövid példaprogram
Predikció új megfigyelésre
uj_adat = [[60]]
from sklearn.linear_model import LinearRegression

X_tanito = [[10], [20], [30], [40], [50]]
y_tanito = [120, 190, 310, 390, 510]
modell = LinearRegression()
modell.fit(X_tanito, y_tanito)

uj_adat = [[60]]
becsles = modell.predict(uj_adat)

print("Becsült érték:", round(becsles[0], 1))
Eredmény: A kimenet egy új megfigyeléshez tartozó modellbecslés; az értéket mindig a feladat és a célváltozó jelentése szerint kell értelmezni.
Értelmezés

A predikció nem azonos a biztos jövőbeli értékkel. A modell a tanult adatok alapján becslést készít, ezért a bizonytalanság, a mérési hiba és a modell korlátai az eredmény értelmezésének részei.

Intermediate Machine Learning - középhaladó gépi tanulás
Modellválasztás

A modellválasztás annak eldöntése, hogy az adott célhoz és adatszerkezethez melyik tanulási algoritmus illeszkedik.

Fogalmi háttér

Ugyanarra a problémára több különböző algoritmus is alkalmazható. A választásnál figyelembe vehetjük a célváltozó típusát, az adatok méretét, a változók jellegét, az értelmezhetőségi igényt, a számítási költséget és a várható általánosíthatóságot.

Tipikus regressziós modellek például a lineáris regresszió és a döntési fa regresszió, osztályozásnál pedig használhatunk logisztikus regressziót, döntési fát vagy más osztályozó algoritmust. Nem létezik minden problémára egyetlen univerzális modell.

Rövid példaprogram
Két modell egyszerű összehasonlítása
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.tree import DecisionTreeRegressor
from sklearn.datasets import make_regression

X, y = make_regression(n_samples=100, n_features=4, noise=15, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

modellek = {
    "lineáris": LinearRegression(),
    "döntési fa": DecisionTreeRegressor(max_depth=3, random_state=42)
}

for nev, modell in modellek.items():
    modell.fit(X_train, y_train)
    print(nev, modell.score(X_test, y_test))
Eredmény: Az összehasonlítás ugyanazon tesztadaton ad mérőszámokat a modellek teljesítményéről.
Modellválasztás – teljesítmény összehasonlítása
Tesztadatbeli teljesítmény LineárisDöntési faModellTeljesítménymutató
Értelmezés

A grafikon csak szemléltetés: valódi modellválasztásnál előre rögzített validációs eljárással és a problémához illeszkedő mérőszámmal kell összehasonlítani a modelleket.

Validáció

A validáció azt vizsgálja, hogy a modell mennyire működik megbízhatóan olyan adatokon, amelyeken a tanítás során nem tanult.

Fogalmi háttér

A modell teljesítményének korrekt méréséhez az adatokat különböző szerepekre osztjuk. A tanítóadat a modell illesztésére, a validációs adat a beállítások és modellek összehasonlítására, a tesztadat pedig a végső teljesítmény becslésére szolgál.

Ha ugyanazt az adatot használjuk a modell tanítására és értékelésére, könnyen túlbecsülhetjük a modell teljesítményét. Kisebb adathalmazoknál a keresztvalidáció segíthet abban, hogy több adatfelosztáson is megvizsgáljuk a modell működését.

Rövid példaprogram
Train–test felosztás
from sklearn.model_selection import train_test_split

from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression

X, y = make_regression(n_samples=100, n_features=4, noise=15, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

modell = LinearRegression()
modell.fit(X_train, y_train)
print(modell.score(X_test, y_test))
Eredmény: A tesztadatok teljesítménymutatója olyan megfigyeléseken alapul, amelyeket a modell a tanításkor nem kapott meg.
Adatfelosztás a modell validációjához
Egy lehetséges adatfelosztás Tanítás 70%Validáció 20%Teszt 10% A pontos arány az adatmennyiségtől és a feladattól függ.
Hiányzó és kategorikus adatok

A gépi tanulási modellek előtt a hiányzó értékeket és a szöveges kategóriákat olyan formára kell hozni, amelyet az adott algoritmus kezelni tud.

Fogalmi háttér

A hiányzó értékek kezelése nem pusztán technikai feladat: először meg kell érteni, miért hiányzik az adat, majd az elemzési célhoz illeszkedő stratégiát kell választani. Gyakori megoldás lehet az egyszerű pótlás, de bizonyos helyzetekben a hiányzás ténye önmagában is információt hordozhat.

A kategorikus változókat – például régió vagy turisztikai típus – a modellhez illeszkedő módon kell kódolni. Az egyik gyakori megoldás az one-hot encoding, amely külön bináris változót hoz létre az egyes kategóriákhoz.

Rövid példaprogram
Hiányzó érték pótlása és kategóriakódolás
from sklearn.compose import ColumnTransformer
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OneHotEncoder

num = SimpleImputer(strategy="median")
cat = OneHotEncoder(handle_unknown="ignore")

preprocess = ColumnTransformer([
    ("num", num, ["latogato"]),
    ("cat", cat, ["regio"])
])
Eredmény: Az előfeldolgozás egységes módon kezeli a numerikus hiányzó értékeket és a kategorikus változókat.
Értelmezés

A feldolgozási lépéseknek ugyanúgy a tanítóadatokból kell megtanulniuk a szükséges paramétereket, mint magának a modellnek; ezzel elkerülhető, hogy a tesztadat információi visszaszivárogjanak a tanításba.

Feature Engineering - tulajdonságképzés
Új tulajdonságok létrehozása

Az új tulajdonságok létrehozása a nyers adatokból olyan változókat képez, amelyek jobban kifejezhetik a modellezési szempontból fontos információkat.

Fogalmi háttér

A nyers adatállomány gyakran nem tartalmazza közvetlenül azt a változót, amely a modell számára a leginformatívabb. Új tulajdonság lehet például egy arány, egy összeg, egy időbeli különbség vagy egy kategóriákból képzett mutató.

Például turisztikai adatoknál a vendégéjszakák és a vendégek számából képezhető az egy vendégre jutó átlagos vendégéjszaka. Ez nem új adatforrásból származik, hanem a meglévő adatokból képzett, értelmezhető változó.

Rövid példaprogram
Új tulajdonság képzése
df["atlagos_vendegejszaka"] = (
    df["vendegejszaka"] / df["vendegek"]
)

print(df[["vendegek", "vendegejszaka",
          "atlagos_vendegejszaka"]].head())
Eredmény: A DataFrame egy új, az eredeti két változatra épülő tulajdonsággal bővül.
Tulajdonságképzés – eredeti és képzett változó
Két nyers változóból egy új mutató VendégekVendégéjszakákÁtlagosvendégéjszaka képzett változó = vendégéjszakák / vendégek
Tulajdonság-transzformáció

A tulajdonság-transzformáció a változók olyan átalakítása, amely javíthatja a modellezhetőséget vagy biztosítja az algoritmus számára szükséges adatformátumot.

Fogalmi háttér

A transzformáció célja lehet a változók skálájának összehangolása, az eloszlás alakjának módosítása vagy kategorikus értékek numerikus reprezentációja. Különösen fontos lehet olyan algoritmusoknál, amelyek érzékenyek a változók nagyságrendjére vagy a távolságokra.

Gyakori módszer a standardizálás, amely egy változót úgy alakít át, hogy átlaga 0, szórása pedig 1 legyen. Más esetekben logaritmikus transzformáció, bináris kódolás vagy kategóriák one-hot kódolása lehet indokolt.

Rövid példaprogram
Standardizálás
from sklearn.preprocessing import StandardScaler

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

print(X_scaled[:3])
Eredmény: A numerikus változók közös, összehasonlítható skálára kerülnek; a transzformáció paramétereit a tanítóadat alapján kell meghatározni.
Standardizálás – az eltérő skálák összehangolása
Változók skálájának összehangolása Eredeti skálaTranszformált skála ABAB
Tulajdonságkiválasztás

A tulajdonságkiválasztás a modell szempontjából releváns változók megtartását és a kevésbé hasznos változók elhagyását jelenti.

Fogalmi háttér

A túl sok tulajdonság növelheti a modell összetettségét, a számítási igényt és bizonyos esetekben a túlilleszkedés kockázatát is. A tulajdonságkiválasztás célja ezért nem egyszerűen az, hogy minél kevesebb változó maradjon, hanem hogy a feladathoz szükséges információt lehetőleg megőrizzük.

A kiválasztás történhet szakmai ismeretek alapján, statisztikai szempontokkal vagy algoritmikus módszerekkel. Fontos, hogy a kiválasztásnál se használjuk fel jogtalanul a tesztadat információit, mert az torzíthatja a modell teljesítményének becslését.

Rövid példaprogram
Egyszerű tulajdonságkiválasztás
valasztott = [
    "vendegek",
    "vendegejszaka",
    "atlagos_vendegejszaka"
]

X_modell = df[valasztott]
print(X_modell.columns.tolist())
Eredmény: A modell számára létrehozott bemeneti adatállomány csak a kiválasztott változókat tartalmazza.
Tulajdonságkiválasztás – a modell egyszerűsítése
Bemeneti változók → kiválasztott változók Eredeti változókKiválasztott változók ✓ vendégek✓ vendégéjszakák✓ átlagos vendégéjszaka– azonosító– technikai mező vendégekvendégéjszakákátlagos vendégéjszaka
Értelmezés

A kiválasztott változók halmaza legyen szakmailag indokolható és a modell validációjában is ellenőrizhető. A kevesebb változó önmagában nem jelent jobb modellt; a cél az informatív és megbízható bemeneti készlet kialakítása.

Adatbányászat
Adatbányászat és CRISP-DM
Business Understanding

A szakmai vagy üzleti probléma, a cél és a siker feltételeinek pontos meghatározása az adatbányászati projekt kiindulópontja.

Definíció: A Business Understanding a szakmai vagy üzleti cél olyan pontos megfogalmazása, amelyből később konkrét adatelemzési feladat és mérhető eredmény vezethető le.

Fogalmi háttér

Az adatbányászati projekt nem az algoritmussal kezdődik, hanem annak tisztázásával, hogy milyen kérdésre szeretnénk választ kapni, kinek lesz hasznos az eredmény, és milyen döntést szeretnénk támogatni. Fontos elkülöníteni a szakmai célt az alkalmazott technikától: például a „klaszterezés alkalmazása” nem üzleti cél, hanem egy lehetséges módszer.

A célhoz érdemes sikerkritériumot rendelni. Ez lehet például a hibaarány csökkentése, egy célcsoport pontosabb azonosítása, egy folyamat eltérésének korábbi felismerése vagy a döntéstámogatás javítása.

Rövid példaprogram

cel = "A visszatérő vendégek azonosítása"
celvaltozo = "visszatero"
siker = "legalább 80% pontosság"

Az eredmény értelmezése: A példában már nem általánosan „adatot elemzünk”, hanem meghatároztuk a problémát, a célváltozót és egy mérhető sikerkritériumot.

Data Understanding

Az adatok forrásainak, szerkezetének, tartalmának, minőségének és korlátainak feltárása a megfelelő modellezés alapja.

Definíció: A Data Understanding az adatforrások és az adatállományok részletes megismerésének folyamata, amely feltárja az adatok jelentését, szerkezetét, minőségét és korlátait.

Fogalmi háttér

Ebben a szakaszban azt vizsgáljuk, hogy milyen adataink vannak, honnan származnak, mit jelentenek az egyes változók, mennyire teljesek és milyen hibákat tartalmazhatnak. Fontos a változók típusának, eloszlásának, hiányzó értékeinek és szélsőségeinek áttekintése.

A Data Understanding szorosan kapcsolódik a korábbi EDA-fejezethez. Az adatbányászati projektben azonban különösen fontos annak dokumentálása is, hogy az adat mit jelent szakmailag, milyen időszakot fed le, és milyen korlátok mellett használható.

Rövid példaprogram

print(df.shape)
print(df.dtypes)
print(df.isna().sum())
print(df.describe(include="all"))

Az eredmény értelmezése: A négy vizsgálat gyors képet ad az adatállomány méretéről, változótípusairól, hiányzó értékeiről és alapvető statisztikai jellemzőiről.

Adatminőség áttekintése
Változónkénti hiányzó értékek árrégióértékeléslétszámVáltozóHiányzó értékek
Modeling és Evaluation

A kiválasztott módszerrel felépített modellek teljesítményének mérése és szakmai ellenőrzése annak megállapítása, hogy az eredmény használható-e.

Definíció: A Modeling és Evaluation során az adatból modellt vagy mintázatot építünk, majd mérőszámokkal és szakmai szempontokkal ellenőrizzük annak használhatóságát.

Fogalmi háttér

A modellezésnél a problémához illeszkedő módszert választjuk, majd a tanítóadatokon létrehozzuk a modellt. Az értékelés célja nem pusztán egyetlen szám előállítása, hanem annak megállapítása, hogy a modell új adatokon is megfelelően működik-e.

Regressziónál például használhatunk MAE vagy MSE mérőszámot, osztályozásnál pontosságot, precisiont, recallt vagy F1-mutatót. Az értékelést mindig a szakmai célhoz kell kapcsolni.

Rövid példaprogram

from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_absolute_error
from sklearn.datasets import make_regression
from sklearn.linear_model import LinearRegression

X, y = make_regression(n_samples=100, n_features=4, noise=15, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)
modell = LinearRegression()
modell.fit(X_train, y_train)
pred = modell.predict(X_test)
print("MAE:", mean_absolute_error(y_test, pred))

Az eredmény értelmezése: A tesztadaton számított MAE azt mutatja meg, átlagosan mekkora eltérés van a tényleges és a becsült értékek között. Minél kisebb az érték, annál kisebb a modell átlagos hibája az adott mérési skálán.

Tanítási és tesztelési teljesítmény
Modellhiba két adathalmazon TanítóadatTesztadatAdathalmazHiba MAE
Mintázatkeresés és asszociációs szabályok
Együttes előfordulások

Az adatokban rendszeresen együtt megjelenő események, termékek vagy tulajdonságok felismerése rejtett kapcsolatok feltárására szolgál.

Definíció: Az együttes előfordulások elemzése olyan gyakori kombinációkat keres, amelyek a megfigyelésekben a véletlenszerűnél gyakrabban jelennek meg együtt.

Fogalmi háttér

Az asszociációs elemzés klasszikus példája a kosáranalízis: azt vizsgáljuk, hogy egy vásárlásban mely termékek jelennek meg gyakran együtt. A módszer azonban nemcsak kereskedelmi adatokra használható; események, szolgáltatások, látogatási célok vagy más kategorikus jellemzők kombinációi is vizsgálhatók.

Fontos fogalom a support, amely megmutatja, hogy egy kombináció milyen gyakran fordul elő az adatállományban.

Rövid példaprogram

tranzakciok = [
    {"kave", "tej"},
    {"kave", "kenyer"},
    {"kave", "tej", "kenyer"},
    {"tea", "tej"}
]

minta = {"kave", "tej"}
support = sum(minta.issubset(t) for t in tranzakciok) / len(tranzakciok)
print("Support:", support)

Az eredmény értelmezése: A support azt fejezi ki, hogy a kiválasztott termékpár a tranzakciók mekkora részében fordul elő együtt.

Gyakori kombinációk támogatottsága
Support értékek kávé + tejkávé + kenyértea + tejKombinációSupport
Asszociációs szabályok

Az együttjárások szabályok formájában írhatók le, például úgy, hogy egy adott elem jelenléte milyen gyakran kapcsolódik egy másik elemhez.

Definíció: Az asszociációs szabály egy „ha–akkor” jellegű kapcsolat, amely két vagy több elem együttes előfordulásának gyakoriságát és megbízhatóságát írja le.

Fogalmi háttér

A szabály tipikus formája A → B, vagyis ha A megjelenik, akkor B is gyakran megjelenik. A szabály értékeléséhez több mérőszám használható.

A confidence azt mutatja meg, hogy az A-t tartalmazó esetek mekkora részében szerepel B is. A lift azt vizsgálja, hogy A és B együttjárása mennyivel gyakoribb annál, mint amit B önálló előfordulási gyakorisága alapján várnánk.

Rövid példaprogram

support_ab = 0.30
support_a = 0.50
support_b = 0.40

confidence = support_ab / support_a
lift = confidence / support_b
print("Confidence:", confidence)
print("Lift:", lift)

Az eredmény értelmezése: A példában a confidence azt mutatja, milyen arányban követi B az A-t, a lift pedig azt, hogy az együttjárás mennyivel erősebb az önálló B-előforduláshoz képest.

Anomáliadetektálás
Szokatlan megfigyelések

Az adatállomány általános mintázatába nem illeszkedő megfigyelések felismerése és elkülönítése.

Definíció: Az anomália olyan megfigyelés, amely a vizsgált adatok többségéhez képest szokatlan értéket vagy mintázatot mutat.

Fogalmi háttér

Az anomália nem feltétlenül hibás adat. Lehet mérési hiba, adatbeviteli probléma, ritka esemény vagy éppen egy olyan fontos változás, amelyet érdemes külön megvizsgálni.

Az anomáliadetektálás történhet egyszerű statisztikai szabályokkal, például IQR- vagy z-score-alapon, illetve összetettebb gépi tanulási módszerekkel, például Isolation Forest segítségével.

Rövid példaprogram

z = (ertek - sorozat.mean()) / sorozat.std()
anomalia = z.abs() > 3
print(sorozat[anomalia])

Az eredmény értelmezése: A példában azokat a megfigyeléseket jelöljük meg, amelyek abszolút z-score értéke 3-nál nagyobb, vagyis jelentősen eltérnek az átlagtól a szóráshoz képest.

Anomália egy idősorban
Normál értékek és kiugró megfigyelés anomália IdőÉrték
Adatminőségi anomáliák

A hibás, gyanús vagy szabálytalan adatértékek felismerése annak eldöntésére, hogy adatminőségi problémáról van-e szó.

Definíció: Adatminőségi anomáliáról beszélünk, amikor egy érték vagy rekord az adatmodell, a szakmai szabályok vagy a várható értéktartomány alapján hibásnak vagy gyanúsnak tekinthető.

Fogalmi háttér

Tipikus példák a negatív létszám, a 100%-nál nagyobb arány, érvénytelen dátum, azonosító nélküli rekord vagy olyan kategória, amely nem szerepel az engedélyezett értékek között. Ezeket célszerű validációs szabályokkal is ellenőrizni.

Az anomália kezelése előtt mindig meg kell vizsgálni a forrásrendszert és a szakmai jelentést. Egy matematikailag ritka érték lehet teljesen helyes, míg egy gyakori érték is lehet hibás.

Rövid példaprogram

hibas = df[
    (df["letszam"] < 0) |
    (df["arany"] > 1)
]
print(hibas)

Az eredmény értelmezése: A program olyan rekordokat gyűjt ki, amelyek megsértik a két előre meghatározott szakmai adatminőségi szabály valamelyikét.

Valós események

A kiugró vagy szokatlan értékek mögött álló tényleges események elkülönítése az adatminőségi hibáktól.

Definíció: Valós eseményről akkor beszélünk, ha egy anomális érték mögött ténylegesen bekövetkezett, szakmailag értelmezhető változás áll.

Fogalmi háttér

Ez az anomáliadetektálás egyik legfontosabb értelmezési lépése. Egy hirtelen forgalomnövekedés például jelezhet adatbeviteli hibát, de egy rendezvény, kampány vagy rendkívüli esemény miatt is bekövetkezhet.

Ezért az automatikusan megjelölt anomáliát nem célszerű automatikusan törölni. Az adatot össze kell vetni más forrásokkal, időpontokkal és szakmai információkkal.

Rövid példaprogram

anomaliak = df[df["latogato"] > kuszob]

for _, sor in anomaliak.iterrows():
    print(sor["datum"], sor["latogato"], sor["esemeny"])

Az eredmény értelmezése: A program az anomális értékekhez hozzárendelt eseményinformációt is megjeleníti, így a kiugrás szakmai háttere külön ellenőrizhető.