Algoritem SMOTE-NC (POPRAVI TEKST!!!!)
Kako SMOTENC ustvari sintetične vzorce
SMOTENC ustvarja sintetične vzorce tako, da kombinira (a) interpolacijo v slogu SMOTE na zveznih spremenljivkah in (b) diskretno dodeljevanje kategorij z “glasovanjem” na kategorijskih spremenljivkah, pri čemer uporablja k najbližjih sosedov znotraj manjšinskega razreda.
Algoritem
1) Izbira razreda za povečanje in števila novih vzorcev
- Najprej identificiramo manjšinski razred (tisti, ki ga želimo povečati z nadvzročnim vzorčenjem).
- Nato izračunamo, koliko sintetičnih vzorcev potrebujemo, da dosežemo cilj
sampling_strategy (v vašem primeru približno razmerje manjšinski/večinski ≈ 0,18).
2) Gradnja strukture sosedov (samo manjšinski razred)
Za vsak manjšinski vzorec \(x_i\) SMOTENC poišče njegovih k najbližjih sosedov med manjšinskimi vzorci (npr. k_neighbors=5).
Uporabljena razdalja: SMOTENC uporablja razdaljo, ki podpira mešane tipe podatkov (pogosto tako, da kategorične spr. interno predstavi z enkratnim kodiranjem one-hot in potem uporabljamo klasične metrike za numerične vrednosti), zato je iskanje sosedov smiselno tudi pri kategoričnih spr.
3) Ustvarjanje enega sintetičnega vzorca (ponavljamo, dokler jih ni dovolj)
Za vsako sintetično točko:
3.1 Izbira “semena” iz manjšinskega razreda
- Izberemo manjšinski primer \(x_i\).
3.2 Izbira enega izmed k manjšinskih sosedov
- Naključno izberemo enega soseda \(x_{nn}\) izmed 5 najbližjih manjšinskih sosedov.
3.3 Generiranje numeričnih (kontinuirnih) značilk z interpolacijo (SMOTE korak)
Naj bo kontinuirni del \(x_i^{(num)}\) in \(x_{nn}^{(num)}\).
Izžrebamo naključni \(\lambda \in [0,1)\), nato:
\[
x_{syn}^{(num)} = x_i^{(num)} + \lambda \cdot \left(x_{nn}^{(num)} - x_i^{(num)}\right)
\]
To je točka na daljici med semenom in izbranim sosedom.
3.4 Generiranje kategoričnih značilk z “glasovanjem sosedov” (SMOTENC korak)
Pri kategoričnih značilkah interpolacija ni smiselna (kategorij ne moremo povprečiti). Zato SMOTENC dodeli kategorije takole:
- Upošteva množico, ki jo sestavljata seme \(x_i\) in njegovih k sosedov (podrobnosti implementacije se lahko nekoliko razlikujejo, ideja pa ostaja enaka).
- Za vsako kategorično značilko \(j\) izbere najpogostejšo kategorijo znotraj te lokalne množice sosedov.
- Če pride do izenačenja, se uporabi pravilo razrešitve (pogosto naključno med izenačenimi “modami”, na kar vpliva
random_state).
Torej:
\[
x_{syn}^{(cat)}[j] = mode\left(\{x_i^{(cat)}[j], x_{n1}^{(cat)}[j], \ldots, x_{nk}^{(cat)}[j]\}\right)
\]
3.5 Združitev delov
Združimo (konkateniramo):
- sintetiziran numerični vektor \(x_{syn}^{(num)}\)
- sintetiziran kategorični vektor \(x_{syn}^{(cat)}\)
Nastane nov sintetični manjšinski vzorec z oznako manjšinskega razreda.
4) Ponavljanje do doseženega ciljnega razmerja razredov
Postopek ponavljamo, dokler ne dosežemo ciljnega razmerja med razredi, ki ga določa sampling_strategy.
Priprava podatkov
Vir podatkov: df-train_imputed.pkl
Porazdelitev razredov (pred):
| 0.0 |
3592 |
96.48 |
| 1.0 |
131 |
3.52 |
Porazdelitev razredov (po SMOTE-NC):
| 0.0 |
3592 |
89.29 |
| 1.0 |
431 |
10.71 |
Shranjeno: data/processed/df-train_smote_nc.pkl